use of com.cubrid.common.core.common.model.TableDetailInfo in project cubrid-manager by CUBRID.
the class TableSchemaCompareInfoPart method getTableInfoList.
/**
* Returns all tables detail of a database
*
* @param db
* @return
*/
public List<TableDetailInfo> getTableInfoList(CubridDatabase db) {
// FIXME logic code move to core module
OpenTablesDetailInfoPartProgress progress = new OpenTablesDetailInfoPartProgress(db);
List<TableDetailInfo> tableList = new ArrayList<TableDetailInfo>();
Map<String, TableDetailInfo> map = new HashMap<String, TableDetailInfo>();
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = JDBCConnectionManager.getConnection(db.getDatabaseInfo(), true);
if (!progress.loadUserSchemaList(conn, map)) {
return tableList;
}
Set<String> tableNameSet = map.keySet();
if (tableNameSet == null) {
return tableList;
}
List<String> tableNames = new ArrayList<String>();
for (String tableName : tableNameSet) {
tableNames.add(tableName);
}
Collections.sort(tableNames);
List<String> partitionClasses = new ArrayList<String>();
for (String tableName : tableNames) {
TableDetailInfo info = map.get(tableName);
if ("YES".equals(info.getPartitioned())) {
String sql = "SELECT b.* FROM db_partition a, db_class b " + "WHERE a.class_name='" + tableName.toLowerCase(Locale.getDefault()) + "' AND LOWER(b.class_name)=LOWER(a.partition_class_name)";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
String className = rs.getString("class_name");
partitionClasses.add(className);
}
QueryUtil.freeQuery(stmt, rs);
}
if (info.getClassType().equals("CLASS") && !partitionClasses.contains(tableName)) {
info.setRecordsCount(-1);
tableList.add(info);
}
}
} catch (Exception e) {
LOGGER.error("", e);
} finally {
QueryUtil.freeQuery(conn, stmt, rs);
}
return tableList;
}
use of com.cubrid.common.core.common.model.TableDetailInfo in project cubrid-manager by CUBRID.
the class ImportERwinAction method createCompareModel.
/**
*
* @param tableSchema
* @param schemaInfos
*/
private void createCompareModel(final String modelName, final Map<String, TableSchema> tableSchema, final Map<String, ERWinSchemaInfo> schemaInfos) {
final List<TableSchemaCompareModelInputLazy> input = new ArrayList<TableSchemaCompareModelInputLazy>();
ITask reportBugTask = new AbstractUITask() {
private boolean success = false;
public void cancel() {
}
public void finish() {
}
public boolean isCancel() {
return false;
}
public boolean isSuccess() {
return success;
}
public void execute(IProgressMonitor monitor) {
List<TableDetailInfo> leftDbTableInfoList = TableSchemaCompareUtil.getTableInfoList(database);
final CubridDatabase virtualDb = new CubridDatabase(modelName, modelName);
virtualDb.setVirtual(true);
DatabaseInfo info = database.getDatabaseInfo();
virtualDb.setDatabaseInfo(info);
WrappedDatabaseInfo wrappedDatabaseInfo = new WrappedDatabaseInfo(info);
Map<String, SchemaInfo> dbSchemaInfos = new HashMap<String, SchemaInfo>();
Collection<ERWinSchemaInfo> erwinSchemas = schemaInfos.values();
for (ERWinSchemaInfo erwinSchema : erwinSchemas) {
SchemaInfo schemaInfo = (SchemaInfo) erwinSchema;
dbSchemaInfos.put(schemaInfo.getClassname(), schemaInfo);
}
wrappedDatabaseInfo.addSchemaInfos(dbSchemaInfos);
wrappedDatabaseInfo.addTableSchemas(tableSchema);
ERXmlDatabaseInfoMapper.addWrappedDatabaseInfo(info, wrappedDatabaseInfo);
TableSchemaModel leftModel = TableSchemaCompareUtil.createTableSchemaModel(leftDbTableInfoList);
TableSchemaModel rightModel = new TableSchemaModel();
rightModel.getTableSchemaMap().putAll(tableSchema);
TableSchemaComparator comparator = new TableSchemaComparator(database, virtualDb);
TableSchemaCompareModel model = comparator.compare(leftModel, rightModel);
model.setSourceDB(database);
model.setTargetDB(virtualDb);
// TODO rename class to ErwinCompareModelInput
input.add(new TableSchemaCompareModelInputLazy(model));
success = true;
}
};
TaskExecutor taskExecutor = new CommonTaskExec(Messages.titleSchemaComparison);
taskExecutor.addTask(reportBugTask);
new ExecTaskWithProgress(taskExecutor).exec();
if (taskExecutor.isSuccess()) {
try {
PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().openEditor(input.get(0), TableSchemaCompareInfoPart.ID);
} catch (Exception e) {
}
}
}
use of com.cubrid.common.core.common.model.TableDetailInfo in project cubrid-manager by CUBRID.
the class TableSchemaComparator method compareTableSchema.
/**
* Compare table schemas between source and target databases
*/
private List<TableSchemaCompareModel> compareTableSchema(Map<String, TableSchema> leftTableSchema, Map<String, TableSchema> rightTableSchema, Map<String, TableDetailInfo> leftTableDetail, Map<String, TableDetailInfo> rightTableDetail) {
// FIXME logic code move to core module
List<TableSchemaCompareModel> models = new ArrayList<TableSchemaCompareModel>();
/**
* Setup databases connections
*/
DatabaseInfo sourceDBInfo = sourceDB.getDatabaseInfo();
DatabaseInfo targetDBInfo = null;
if (targetDB.isVirtual()) {
targetDBInfo = ERXmlDatabaseInfoMapper.getWrappedDatabaseInfo(targetDB.getDatabaseInfo());
} else {
targetDBInfo = targetDB.getDatabaseInfo();
}
SchemaDDL sourceSchemaDDL = new SchemaDDL(null, sourceDB.getDatabaseInfo());
SchemaDDL targetSchemaDDL = new SchemaDDL(null, targetDB.getDatabaseInfo());
// collect schemas info left db
// collect sources
GetAllSchemaTask task = new GetAllSchemaTask(sourceDB.getDatabaseInfo());
task.execute();
sourceClasses.clear();
sourceClasses.putAll(task.getSchemas());
// collect target
if (!targetDB.isVirtual()) {
task = new GetAllSchemaTask(targetDB.getDatabaseInfo());
task.execute();
targetClasses.clear();
targetClasses.putAll(task.getSchemas());
} else {
WrappedDatabaseInfo info = (WrappedDatabaseInfo) targetDBInfo;
targetClasses.putAll(info.getSchemaInfos());
}
int compareStatus = TableSchemaCompareModel.SCHEMA_EQUAL;
/**
* Compare table schemas from left to right
*/
Iterator<String> leftkeys = leftTableSchema.keySet().iterator();
while (leftkeys.hasNext()) {
compareStatus = TableSchemaCompareModel.SCHEMA_EQUAL;
String key = (String) leftkeys.next().toLowerCase();
TableSchema lTableSchema = leftTableSchema.get(key);
TableDetailInfo lTableDetail = leftTableDetail.get(key);
List<String> names = findDuplication(rightTableSchema, key);
TableSchema rTableSchema = null;
TableDetailInfo rTableDetail = null;
if (names != null) {
if (names.size() == 1) {
rTableSchema = rightTableSchema.get(names.get(0));
rTableDetail = rightTableDetail.get(names.get(0));
} else {
duplicateNameMap.put(key, names);
for (String tableName : names) {
rightTableSchema.remove(tableName);
}
leftkeys.remove();
continue;
}
}
if (rTableSchema == null) {
rTableSchema = new TableSchema(null, null);
compareStatus = TableSchemaCompareModel.SCHEMA_TMISS;
} else {
String left = lTableSchema.getName().toLowerCase();
String right = rTableSchema.getName().toLowerCase();
if (valueEqual(left, right)) {
// TODO refactoring
boolean compScheInfo = compareSchemaInfo(sourceDBInfo, targetDBInfo, sourceSchemaDDL, targetSchemaDDL, lTableSchema, rTableSchema);
if (compScheInfo == false) {
compareStatus = TableSchemaCompareModel.SCHEMA_DIFF;
}
}
}
leftkeys.remove();
rightTableSchema.remove(rTableSchema.getName());
TableSchemaCompareModel cm = new TableSchemaCompareModel(lTableSchema, rTableSchema, sourceClasses, targetClasses);
cm.setCompareStatus(compareStatus);
cm.setSourceTableDetailInfo(lTableDetail);
cm.setTargetTableDetailInfo(rTableDetail);
models.add(cm);
}
/**
* Compare schemas from right to left
*/
Iterator<String> rightkeys = rightTableSchema.keySet().iterator();
Map<String, TableSchemaCompareModel> tempCompareMap = new HashMap<String, TableSchemaCompareModel>();
String RIGHT_PATTERN = "__RIGHT_PATTERN";
while (rightkeys.hasNext()) {
compareStatus = TableSchemaCompareModel.SCHEMA_EQUAL;
String key = (String) rightkeys.next();
TableSchema lTableSchema = leftTableSchema.get(key);
TableDetailInfo lTableDetail = leftTableDetail.get(key);
if (!duplicateNameMap.containsKey(key.toLowerCase() + RIGHT_PATTERN)) {
duplicateNameMap.put(key.toLowerCase() + RIGHT_PATTERN, new ArrayList<String>());
}
duplicateNameMap.get(key.toLowerCase() + RIGHT_PATTERN).add(key);
TableSchema rTableSchema = rightTableSchema.get(key);
TableDetailInfo rTableDetail = rightTableDetail.get(key);
if (lTableSchema == null) {
lTableSchema = new TableSchema();
compareStatus = TableSchemaCompareModel.SCHEMA_SMISS;
}
rightkeys.remove();
leftTableSchema.remove(key);
TableSchemaCompareModel cm = new TableSchemaCompareModel(lTableSchema, rTableSchema, sourceClasses, targetClasses);
cm.setCompareStatus(compareStatus);
cm.setSourceTableDetailInfo(lTableDetail);
cm.setTargetTableDetailInfo(rTableDetail);
tempCompareMap.put(key, cm);
}
for (List<String> listKey : duplicateNameMap.values()) {
if (listKey.size() > 1) {
for (String string : listKey) {
tempCompareMap.remove(string);
}
}
}
models.addAll(tempCompareMap.values());
if (models.size() <= 0) {
return new ArrayList<TableSchemaCompareModel>();
}
return models;
}
use of com.cubrid.common.core.common.model.TableDetailInfo in project cubrid-manager by CUBRID.
the class TableSchemaCompareRunner method getTableInfoList.
/**
* Returns all tables detail of a database
*
* @param db
* @return
*/
private List<TableDetailInfo> getTableInfoList(CubridDatabase db) {
// FIXME logic code move to core module
OpenTablesDetailInfoPartProgress progress = new OpenTablesDetailInfoPartProgress(db);
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
conn = JDBCConnectionManager.getConnection(db.getDatabaseInfo(), true);
Map<String, TableDetailInfo> map = new HashMap<String, TableDetailInfo>();
if (!progress.loadUserSchemaList(conn, map)) {
return null;
}
Set<String> tableNameSet = map.keySet();
List<TableDetailInfo> tableList = new ArrayList<TableDetailInfo>();
if (tableNameSet != null) {
List<String> tableNames = new ArrayList<String>();
for (String tableName : tableNameSet) {
tableNames.add(tableName);
}
Collections.sort(tableNames);
List<String> partitionClasses = new ArrayList<String>();
for (String tableName : tableNames) {
TableDetailInfo info = map.get(tableName);
if (dialog.isCanceled()) {
return null;
}
if ("YES".equals(info.getPartitioned())) {
String sql = "SELECT b.* FROM db_partition a, db_class b " + "WHERE a.class_name='" + tableName.toLowerCase(Locale.getDefault()) + "' AND LOWER(b.class_name)=LOWER(a.partition_class_name)";
stmt = conn.createStatement();
rs = stmt.executeQuery(sql);
while (rs.next()) {
if (dialog.isCanceled()) {
return null;
}
String className = rs.getString("class_name");
partitionClasses.add(className);
}
QueryUtil.freeQuery(stmt, rs);
}
if ("CLASS".equals(info.getClassType()) && !partitionClasses.contains(tableName)) {
info.setRecordsCount(-1);
tableList.add(info);
}
}
}
return tableList;
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
} finally {
QueryUtil.freeQuery(conn, stmt, rs);
}
return null;
}
use of com.cubrid.common.core.common.model.TableDetailInfo in project cubrid-manager by CUBRID.
the class TableSchemaCompareUtil method getTableInfoList.
/**
* Returns all tables detail of a database
*
* @param db
* @return
*/
public static List<TableDetailInfo> getTableInfoList(CubridDatabase db) {
// FIXME logic code move to core module
if (db.isVirtual()) {
return new ArrayList<TableDetailInfo>();
}
OpenTablesDetailInfoPartProgress progress = new OpenTablesDetailInfoPartProgress(db);
List<TableDetailInfo> tableList = null;
Connection conn = null;
try {
conn = JDBCConnectionManager.getConnection(db.getDatabaseInfo(), true);
Map<String, TableDetailInfo> map = new HashMap<String, TableDetailInfo>();
if (!progress.loadUserSchemaList(conn, map)) {
return null;
}
tableList = new ArrayList<TableDetailInfo>();
Set<String> tableNameSet = map.keySet();
if (tableNameSet != null) {
List<String> tableNames = new ArrayList<String>();
for (String tableName : tableNameSet) {
tableNames.add(tableName);
}
Collections.sort(tableNames);
for (String tableName : tableNames) {
TableDetailInfo info = map.get(tableName);
String classType = info.getClassType();
if (classType.equals("CLASS") || classType.equals("VCLASS")) {
info.setRecordsCount(-1);
tableList.add(info);
}
}
}
} catch (Exception e) {
tableList = null;
LOGGER.error(e.getMessage(), e);
}
return tableList;
}
Aggregations