for (final ForeignKeyColumnReference columnReference: mutableForeignKey) if (columnReference.getPrimaryKeyColumn().getParent().equals(this))
for (final ForeignKeyColumnReference columnReference: mutableForeignKey) if (columnReference.getPrimaryKeyColumn().getParent().equals(this))
final Table parentTable = columnReference.getPrimaryKeyColumn() .getParent(); final Table childTable = columnReference.getForeignKeyColumn()
final Table parentTable = columnReference.getPrimaryKeyColumn() .getParent(); final Table childTable = columnReference.getForeignKeyColumn()
TablesGraph(final NamedObjectList<MutableTable> tables) { super("catalog"); if (tables == null) { return; } for (final Table table: tables) { addVertex(table); for (final ForeignKey foreignKey: table.getForeignKeys()) { for (final ForeignKeyColumnReference columnRef: foreignKey) { addEdge(columnRef.getPrimaryKeyColumn().getParent(), columnRef.getForeignKeyColumn().getParent()); } } } }
TablesGraph(final NamedObjectList<MutableTable> tables) { super("catalog"); if (tables == null) { return; } for (final Table table: tables) { addVertex(table); for (final ForeignKey foreignKey: table.getForeignKeys()) { for (final ForeignKeyColumnReference columnRef: foreignKey) { addEdge(columnRef.getPrimaryKeyColumn().getParent(), columnRef.getForeignKeyColumn().getParent()); } } } }
@Test public void fkReferences(final Connection connection) throws Exception { final SchemaCrawlerOptions schemaCrawlerOptions = DatabaseTestUtility.schemaCrawlerOptionsWithMaximumSchemaInfoLevel; int fkReferenceCount = 0; final Catalog catalog = getCatalog(connection, schemaCrawlerOptions); final Collection<Table> tables = catalog.getTables(); for (final Table table: tables) { final Collection<ForeignKey> foreignKeys = table.getForeignKeys(); for (final ForeignKey foreignKey: foreignKeys) { for (final ForeignKeyColumnReference fkColumnRef: foreignKey) { assertReferencedColumnExists(catalog, fkColumnRef.getPrimaryKeyColumn()); assertReferencedColumnExists(catalog, fkColumnRef.getForeignKeyColumn()); fkReferenceCount++; } } } assertThat(fkReferenceCount, is(26)); }
@Test public void fkReferencesForGreppedTables2(final Connection connection) throws Exception { final SchemaCrawlerOptions schemaCrawlerOptions = SchemaCrawlerOptionsBuilder .builder() .includeGreppedColumns(new RegularExpressionInclusionRule(".*\\.AUTHORS\\..*")) .toOptions(); int fkReferenceCount = 0; final Catalog catalog = getCatalog(connection, schemaCrawlerOptions); final Collection<Table> tables = catalog.getTables(); for (final Table table: tables) { final Collection<ForeignKey> foreignKeys = table.getForeignKeys(); for (final ForeignKey foreignKey: foreignKeys) { for (final ForeignKeyColumnReference fkColumnRef: foreignKey) { assertReferencedColumnExists(catalog, fkColumnRef.getPrimaryKeyColumn()); assertReferencedColumnDoesNotExist(catalog, fkColumnRef.getForeignKeyColumn(), false); fkReferenceCount++; } } } assertThat(fkReferenceCount, is(1)); }
@Test public void fkReferencesForGreppedTables1(final Connection connection) throws Exception { final SchemaCrawlerOptions schemaCrawlerOptions = SchemaCrawlerOptionsBuilder .builder() .includeGreppedColumns(new RegularExpressionInclusionRule(".*\\.BOOKAUTHORS\\..*")) .toOptions(); int fkReferenceCount = 0; final Catalog catalog = getCatalog(connection, schemaCrawlerOptions); final Collection<Table> tables = catalog.getTables(); for (final Table table: tables) { final Collection<ForeignKey> foreignKeys = table.getForeignKeys(); for (final ForeignKey foreignKey: foreignKeys) { for (final ForeignKeyColumnReference fkColumnRef: foreignKey) { assertReferencedColumnDoesNotExist(catalog, fkColumnRef.getPrimaryKeyColumn(), false); assertReferencedColumnExists(catalog, fkColumnRef.getForeignKeyColumn()); fkReferenceCount++; } } } assertThat(fkReferenceCount, is(2)); }
@Override public DaColumn getPrimaryKeyColumn() { return new DaColumnImpl(fkColumnReference.getPrimaryKeyColumn(), schemaStrategy); }
fkColumnRef.getPrimaryKeyColumn()); assertReferencedColumnDoesNotExist(catalog, fkColumnRef.getForeignKeyColumn(),
fkColumnRef.getPrimaryKeyColumn(), true); assertReferencedColumnExists(catalog,
for (final ForeignKeyColumnReference columnReference: mutableForeignKey) if (columnReference.getPrimaryKeyColumn().getParent().equals(this))
.getColumnReferences()) if (columnReference.getPrimaryKeyColumn().getParent().equals(this))
private static Map<List<String>, String> extractForeignKeys(Table table) { Collection<ForeignKey> foreignKeys = table.getForeignKeys(); Map<List<String>, String> fks = fks = new LinkedHashMap<>(10); if (foreignKeys != null) { for (ForeignKey foreignKey : foreignKeys) { // todo handle composite keys List<ForeignKeyColumnReference> columnReferences = foreignKey.getColumnReferences(); if (columnReferences.isEmpty()) continue; ForeignKeyColumnReference firstReference = columnReferences.get(0); String otherTableName = firstReference.getPrimaryKeyColumn().getParent().getName(); List<String> keys = new ArrayList<>(3); for (ForeignKeyColumnReference reference : columnReferences) { // todo assert that all have the same parent Table otherTable = reference.getPrimaryKeyColumn().getParent(); Table thisTable = reference.getForeignKeyColumn().getParent(); if (otherTable.equals(table) && !thisTable.equals(table)) continue; if (!otherTable.getName().equals(otherTableName)) { throw new IllegalStateException("Foreign Key to different tables " + reference + " inconsistent with " + firstReference); } keys.add(reference.getForeignKeyColumn().getName()); } if (!keys.isEmpty()) fks.put(keys, otherTableName); } } return fks; }
.get(fkColumn.getFullName()); if (fkColumnReference == null || !fkColumnReference.getPrimaryKeyColumn().getParent() .equals(matchedTable))
.getPrimaryKeyColumn().getFullName());
TablesGraph(final NamedObjectList<MutableTable> tables) { super("catalog"); if (tables == null) { return; } for (final Table table: tables) { addVertex(table); for (final ForeignKey foreignKey: table.getForeignKeys()) { for (final ForeignKeyColumnReference columnRef: foreignKey) { addEdge(columnRef.getPrimaryKeyColumn().getParent(), columnRef.getForeignKeyColumn().getParent()); } } } }
TablesGraph(final NamedObjectList<MutableTable> tables) { super("catalog"); if (tables == null) { return; } for (final Table table: tables) { addVertex(table); for (final ForeignKey foreignKey: table.getForeignKeys()) { for (final ForeignKeyColumnReference columnRef: foreignKey) { addEdge(columnRef.getPrimaryKeyColumn().getParent(), columnRef.getForeignKeyColumn().getParent()); } } } }
TablesGraph(final NamedObjectList<MutableTable> tables) { if (tables == null) { return; } for (final Table table: tables) { addVertex(table); for (final ForeignKey foreignKey: table.getForeignKeys()) { for (final ForeignKeyColumnReference columnReference: foreignKey .getColumnReferences()) { addDirectedEdge(columnReference.getPrimaryKeyColumn().getParent(), columnReference.getForeignKeyColumn().getParent()); } } } }