protected void readForeignKey(DatabaseMetaDataWrapper metaData, Map<String, Object> values, Map<String, ForeignKey> knownFks) throws SQLException { String fkName = (String) values.get("FK_NAME"); ForeignKey fk = (ForeignKey) knownFks.get(fkName); if (fk == null) { fk = new ForeignKey(fkName); fk.setForeignTableName((String) values.get("PKTABLE_NAME")); knownFks.put(fkName, fk); } Reference ref = new Reference(); ref.setForeignColumnName((String) values.get("PKCOLUMN_NAME")); ref.setLocalColumnName((String) values.get("FKCOLUMN_NAME")); if (values.containsKey("KEY_SEQ")) { ref.setSequenceValue(((Short) values.get("KEY_SEQ")).intValue()); } fk.addReference(ref); }
@Override protected boolean isInternalForeignKeyIndex(Connection connection, DatabaseMetaDataWrapper metaData, Table table, ForeignKey fk, IIndex index1) throws SQLException { return fk.getName().startsWith(" "); } }
protected List<String> getLocalFkRefColumns(Table table) { List<String> columns = new ArrayList<String>(); for (ForeignKey fk : table.getForeignKeys()) { for (Reference ref : fk.getReferences()) { columns.add(ref.getLocalColumnName()); } } return columns; }
protected void removeInternalForeignKeyIndex(Connection connection, DatabaseMetaDataWrapper metaData, Table table, ForeignKey fk) throws SQLException { List<String> columnNames = new ArrayList<String>(); boolean mustBeUnique = !getPlatformInfo().isSystemForeignKeyIndicesAlwaysNonUnique(); for (int columnIdx = 0; columnIdx < fk.getReferenceCount(); columnIdx++) { String name = fk.getReference(columnIdx).getLocalColumnName(); Column localColumn = table.findColumn(name, getPlatform().getDdlBuilder() .isDelimitedIdentifierModeOn()); if (mustBeUnique && !localColumn.isPrimaryKey()) { mustBeUnique = false; } columnNames.add(name); } for (int indexIdx = 0; indexIdx < table.getIndexCount();) { IIndex index = table.getIndex(indexIdx); if ((mustBeUnique == index.isUnique()) && matches(index, columnNames) && isInternalForeignKeyIndex(connection, metaData, table, fk, index)) { fk.setAutoIndexPresent(true); table.removeIndex(indexIdx); } else { indexIdx++; } } }
Object objectValue = null; for (ForeignKey fk : table.getForeignKeys()) { for (Reference ref : fk.getReferences()) { if (ref.getLocalColumnName().equalsIgnoreCase(column.getName())) { objectValue = columnValues.get(fk.getForeignTableName() + "." + ref.getForeignColumnName()); if (objectValue != null) { throw new RuntimeException("The foreign key column, " + column.getName() + ", found in " + table.getName() + " references " + "table " + fk.getForeignTableName() + " which was not included. Dependent tables will automatically be added if cascading is turned on.");
if (tableNames.add(fk.getForeignTableName())) { Table tableObj = getDbTable(fk.getForeignTableName()); fkDepList.add(tableObj);
if (fk.getForeignTableName().equals(table.getName())) { Map<Column, Object> selectValues = new HashMap<Column, Object>(); for (Reference ref : fk.getReferences()) {
for (Table table : allTables) { for (ForeignKey fk : table.getForeignKeys()) { if (deleteTableNames.contains(fk.getForeignTableName())) { if (deleteTableNames.add(table.getName())) { fkDepList.add(table);
ForeignKey fk = new ForeignKey(fkRs.getString(1)); int localTableId = fkRs.getInt(2); int remoteTableId = fkRs.getInt(4); fk.setForeignTableName(fkRs.getString(3)); for (int idx = 0; idx < 16; idx++) { short fkColIdx = fkRs.getShort(5 + idx + idx); fk.addReference(ref);
@Override protected boolean isInternalForeignKeyIndex(Connection connection, DatabaseMetaDataWrapper metaData, Table table, ForeignKey fk, IIndex index) { String name = index.getName(); return name != null && (name.startsWith(fk.getName()) || name.startsWith("CONSTRAINT_INDEX_")); }
fk = new ForeignKey(fkName); fk.setForeignTableName((String) values.get("REFERENCED_TABLE_NAME")); fks.put(fkName, fk); .intValue()); fk.addReference(ref);