public static boolean tableHasForeignKey(String destCatalog, String destSchema, String destTableName, ForeignKeyInfo fkInfo, SessionInfoProvider prov) {
boolean result = false;
try {
SQLDatabaseMetaData md = prov. [[#variable13ccc6a0]]().getSQLConnection().getSQLMetaData();
ITableInfo[] tables = md.getTables(destCatalog, destSchema, destTableName, new String[] {
"TABLE"
}, null);
if (tables != null && tables.length == 1) {
ForeignKeyInfo[] fks = SQLUtilities.getImportedKeys(tables[0], md);
for (ForeignKeyInfo existingKey: fks) {
if (areEqual(existingKey, fkInfo)) {
result = true;
break;
}
}
}
else {
log.error("Couldn\'t find an exact match for destination table " + destTableName + " in schema " + destSchema + " and catalog " + destCatalog + ". Skipping FK constraint");
}
}
catch (SQLException
e) {
log.error("Unexpected exception while attempting to determine if " + "a table (" + destTableName + ") has a particular foreign " + "key");
}
return result;
}
private static boolean areEqual(ForeignKeyInfo fk1, ForeignKeyInfo fk2) {
String fk1FKColumn = fk1.getForeignKeyColumnName();
String fk2FKColumn = fk2.getForeignKeyColumnName();
String fk1PKColumn = fk1.getPrimaryKeyColumnName();
String fk2PKColumn = fk2.getPrimaryKeyColumnName();
String fk1FKTable = fk1.getForeignKeyTableName();
String fk2FKTable = fk2.getForeignKeyTableName();
String fk1PKTable = fk1.getPrimaryKeyTableName();
String fk2PKTable = fk2.getPrimaryKeyTableName();
if ( !fk1PKColumn.equals(fk2PKColumn)) {
return false;
}
if ( !fk1FKColumn.equals(fk2FKColumn)) {
return false;
}
if ( !fk1PKTable.equals(fk2PKTable)) {
return false;
}
if ( !fk1FKTable.equals(fk2FKTable)) {
return false;
}
return true;
}
[[#variable13ccc4e0]]static boolean containsTable(List<ITableInfo> tableInfos, String table) {
boolean result = false;
for (ITableInfo ti: tableInfos) {
if (table.equalsIgnoreCase(ti.getSimpleName())) {
result = true;
break;
}
}
return result;
}
|