diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java index 802f76ca35..bb94e0717d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaImpl.java @@ -1204,38 +1204,44 @@ final class MetaImpl extends AbstractMeta { : name(defaultString(k.get(1, String.class))) ); - String fkName = k.get(3, String.class); - String pkName = k.get(4, String.class); Table pkTable = (Table) lookupTable(schema, k.get(2, String.class)); - TableField[] pkFields = new TableField[v.size()]; - TableField[] fkFields = new TableField[v.size()]; - for (int i = 0; i < v.size(); i++) { - Record record = v.get(i); - String pkFieldName = record.get(3, String.class); - String fkFieldName = record.get(7, String.class); + // [#16782] Dangling FK references are possible in some RDBMS that allow for + // temporarily deactivating FK checks, e.g. MySQL via SET FOREIGN_KEY_CHECKS=0 + if (pkTable != null) { + String fkName = k.get(3, String.class); + String pkName = k.get(4, String.class); - pkFields[i] = (TableField) pkTable.field(pkFieldName); - fkFields[i] = (TableField) field(fkFieldName); + TableField[] pkFields = new TableField[v.size()]; + TableField[] fkFields = new TableField[v.size()]; - // [#2656] TODO: Find a more generally reusable way to perform case insensitive lookups - if (pkFields[i] == null) - if ((pkFields[i] = lookup(pkTable, pkFieldName)) == null) - return; + for (int i = 0; i < v.size(); i++) { + Record record = v.get(i); + String pkFieldName = record.get(3, String.class); + String fkFieldName = record.get(7, String.class); - if (fkFields[i] == null) - if ((fkFields[i] = lookup(this, fkFieldName)) == null) - return; + pkFields[i] = (TableField) pkTable.field(pkFieldName); + fkFields[i] = (TableField) field(fkFieldName); + + // [#2656] TODO: Find a more generally reusable way to perform case insensitive lookups + if (pkFields[i] == null) + if ((pkFields[i] = lookup(pkTable, pkFieldName)) == null) + return; + + if (fkFields[i] == null) + if ((fkFields[i] = lookup(this, fkFieldName)) == null) + return; + } + + references.add(new ReferenceImpl<>( + this, + name(fkName), + fkFields, + new MetaUniqueKey(pkTable, pkName, pkFields, true), // TODO: Can we know whether it is a PK or UK? + pkFields, + true + )); } - - references.add(new ReferenceImpl<>( - this, - name(fkName), - fkFields, - new MetaUniqueKey(pkTable, pkName, pkFields, true), // TODO: Can we know whether it is a PK or UK? - pkFields, - true - )); }); return references;