Search in sources :

Example 1 with TableDetailInfo

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;
}
Also used : HashMap(java.util.HashMap) Statement(java.sql.Statement) ArrayList(java.util.ArrayList) TableDetailInfo(com.cubrid.common.core.common.model.TableDetailInfo) Connection(java.sql.Connection) CoreException(org.eclipse.core.runtime.CoreException) PartInitException(org.eclipse.ui.PartInitException) InvocationTargetException(java.lang.reflect.InvocationTargetException) ResultSet(java.sql.ResultSet) OpenTablesDetailInfoPartProgress(com.cubrid.common.ui.spi.progress.OpenTablesDetailInfoPartProgress)

Example 2 with TableDetailInfo

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) {
        }
    }
}
Also used : TableSchemaCompareModelInputLazy(com.cubrid.common.ui.compare.schema.control.TableSchemaCompareModelInputLazy) CommonTaskExec(com.cubrid.common.ui.spi.progress.CommonTaskExec) AbstractUITask(com.cubrid.common.core.task.AbstractUITask) ITask(com.cubrid.common.core.task.ITask) DatabaseInfo(com.cubrid.cubridmanager.core.cubrid.database.model.DatabaseInfo) WrappedDatabaseInfo(com.cubrid.common.ui.cubrid.database.erwin.WrappedDatabaseInfo) HashMap(java.util.HashMap) TableSchemaComparator(com.cubrid.common.ui.compare.schema.TableSchemaComparator) ArrayList(java.util.ArrayList) TableDetailInfo(com.cubrid.common.core.common.model.TableDetailInfo) TableSchemaModel(com.cubrid.common.ui.compare.schema.model.TableSchemaModel) WrappedDatabaseInfo(com.cubrid.common.ui.cubrid.database.erwin.WrappedDatabaseInfo) TableSchemaCompareModel(com.cubrid.common.ui.compare.schema.model.TableSchemaCompareModel) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) TaskExecutor(com.cubrid.common.ui.spi.progress.TaskExecutor) AbstractUITask(com.cubrid.common.core.task.AbstractUITask) ExecTaskWithProgress(com.cubrid.common.ui.spi.progress.ExecTaskWithProgress) ERWinSchemaInfo(com.cubrid.common.ui.cubrid.database.erwin.model.ERWinSchemaInfo) CubridDatabase(com.cubrid.common.ui.spi.model.CubridDatabase) SchemaInfo(com.cubrid.common.core.common.model.SchemaInfo) ERWinSchemaInfo(com.cubrid.common.ui.cubrid.database.erwin.model.ERWinSchemaInfo)

Example 3 with TableDetailInfo

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;
}
Also used : TableSchema(com.cubrid.common.ui.compare.schema.model.TableSchema) DatabaseInfo(com.cubrid.cubridmanager.core.cubrid.database.model.DatabaseInfo) WrappedDatabaseInfo(com.cubrid.common.ui.cubrid.database.erwin.WrappedDatabaseInfo) HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) TableDetailInfo(com.cubrid.common.core.common.model.TableDetailInfo) WrappedDatabaseInfo(com.cubrid.common.ui.cubrid.database.erwin.WrappedDatabaseInfo) TableSchemaCompareModel(com.cubrid.common.ui.compare.schema.model.TableSchemaCompareModel) SchemaDDL(com.cubrid.cubridmanager.core.cubrid.table.model.SchemaDDL) GetAllSchemaTask(com.cubrid.cubridmanager.core.cubrid.table.task.GetAllSchemaTask)

Example 4 with TableDetailInfo

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;
}
Also used : HashMap(java.util.HashMap) Statement(java.sql.Statement) Connection(java.sql.Connection) TableDetailInfo(com.cubrid.common.core.common.model.TableDetailInfo) ArrayList(java.util.ArrayList) ResultSet(java.sql.ResultSet) OpenTablesDetailInfoPartProgress(com.cubrid.common.ui.spi.progress.OpenTablesDetailInfoPartProgress)

Example 5 with TableDetailInfo

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;
}
Also used : HashMap(java.util.HashMap) ArrayList(java.util.ArrayList) TableDetailInfo(com.cubrid.common.core.common.model.TableDetailInfo) Connection(java.sql.Connection) OpenTablesDetailInfoPartProgress(com.cubrid.common.ui.spi.progress.OpenTablesDetailInfoPartProgress)

Aggregations

TableDetailInfo (com.cubrid.common.core.common.model.TableDetailInfo)27 ArrayList (java.util.ArrayList)11 Connection (java.sql.Connection)6 HashMap (java.util.HashMap)6 TableSchemaCompareModel (com.cubrid.common.ui.compare.schema.model.TableSchemaCompareModel)5 InvocationTargetException (java.lang.reflect.InvocationTargetException)5 SQLException (java.sql.SQLException)5 SchemaInfo (com.cubrid.common.core.common.model.SchemaInfo)4 WrappedDatabaseInfo (com.cubrid.common.ui.cubrid.database.erwin.WrappedDatabaseInfo)4 ICubridNode (com.cubrid.common.ui.spi.model.ICubridNode)4 CommonTaskExec (com.cubrid.common.ui.spi.progress.CommonTaskExec)4 ExecTaskWithProgress (com.cubrid.common.ui.spi.progress.ExecTaskWithProgress)4 DatabaseInfo (com.cubrid.cubridmanager.core.cubrid.database.model.DatabaseInfo)4 TableItem (org.eclipse.swt.widgets.TableItem)4 PartInitException (org.eclipse.ui.PartInitException)4 AbstractUITask (com.cubrid.common.core.task.AbstractUITask)3 ITask (com.cubrid.common.core.task.ITask)3 TableSchemaModel (com.cubrid.common.ui.compare.schema.model.TableSchemaModel)3 CubridDatabase (com.cubrid.common.ui.spi.model.CubridDatabase)3 OpenTablesDetailInfoPartProgress (com.cubrid.common.ui.spi.progress.OpenTablesDetailInfoPartProgress)3