private static boolean equalTable( Table table1, Table table2, String defaultSchema, String defaultCatalog) { return table1.getName().equals(table2.getName()) && ( equal( getSchemaForModel(table1.getSchema(), defaultSchema), getSchemaForModel(table2.getSchema(), defaultSchema)) && ( equal( getCatalogForModel(table1.getCatalog(), defaultCatalog), getCatalogForModel(table2.getCatalog(), defaultCatalog)))); }
try { Map<String, Object> exportedKeyRs = null; exportedKeyIterator = metaDataDialect.getExportedKeys(getCatalogForDBLookup(referencedTable.getCatalog(), defaultCatalog), getSchemaForDBLookup(referencedTable.getSchema(), defaultSchema), referencedTable.getName() ); try { while (exportedKeyIterator.hasNext() ) { exportedKeyRs = exportedKeyIterator.next(); String fkCatalog = getCatalogForModel((String) exportedKeyRs.get("FKTABLE_CAT"), defaultCatalog); String fkSchema = getSchemaForModel((String) exportedKeyRs.get("FKTABLE_SCHEM"), defaultSchema); String fkTableName = (String) exportedKeyRs.get("FKTABLE_NAME"); String fkColumnName = (String) exportedKeyRs.get("FKCOLUMN_NAME"); getSchemaForModel(fkSchema, defaultSchema), getCatalogForModel(fkCatalog, defaultCatalog), fkTableName); ForeignKey element = iterator.next(); if(!equalTable(referencedTable, element.getReferencedTable(), defaultSchema, defaultCatalog)) { log.debug("Referenced table " + element.getReferencedTable().getName() + " is not " + referencedTable + ". Ignoring userdefined foreign key " + element ); continue; // skip non related foreign keys getSchemaForDBLookup(userfkTable.getSchema(), defaultSchema), getCatalogForDBLookup(userfkTable.getCatalog(), defaultCatalog), userfkTable.getName()); if(deptable==null) {
/** * Iterates the tables and find all the foreignkeys that refers to something that is available inside the DatabaseCollector. * @param dbs * @param progress * @param tables * @return */ private Map<String, List<ForeignKey>> resolveForeignKeys(DatabaseCollector dbs, Iterator<Table> tables, ProgressListener progress) { List<ForeignKeysInfo> fks = new ArrayList<ForeignKeysInfo>(); while ( tables.hasNext() ) { Table table = (Table) tables.next(); // Done here after the basic process of collections as we might not have touched // all referenced tables (this ensure the columns are the same instances througout the basic JDBC derived model. // after this stage it should be "ok" to divert from keeping columns in sync as it can be required if the same //column is used with different aliases in the ORM mapping. ForeignKeysInfo foreignKeys = ForeignKeyProcessor.processForeignKeys(getMetaDataDialect(), revengStrategy, defaultSchema, defaultCatalog, dbs, table, progress); fks.add( foreignKeys ); } Map<String, List<ForeignKey>> oneToManyCandidates = new HashMap<String, List<ForeignKey>>(); for (Iterator<ForeignKeysInfo> iter = fks.iterator(); iter.hasNext();) { ForeignKeysInfo element = iter.next(); Map<String, List<ForeignKey>> map = element.process( revengStrategy ); // the actual foreignkey is created here. mergeMultiMap( oneToManyCandidates, map ); } return oneToManyCandidates; }