[jOOQ/jOOQ#11258] Reuse some FK copying logic
This commit is contained in:
parent
a5f0733f06
commit
9347069bec
@ -65,6 +65,7 @@ import org.jooq.Record;
|
||||
import org.jooq.Schema;
|
||||
import org.jooq.Sequence;
|
||||
import org.jooq.Table;
|
||||
import org.jooq.TableField;
|
||||
import org.jooq.UniqueKey;
|
||||
import org.jooq.util.xml.jaxb.InformationSchema;
|
||||
|
||||
@ -658,6 +659,22 @@ abstract class AbstractMeta extends AbstractScope implements Meta, Serializable
|
||||
return lookupKey(table, fk.getKey());
|
||||
}
|
||||
|
||||
@SuppressWarnings("unchecked")
|
||||
final <R extends Record> ForeignKey<R, ?> copyFK(Table<R> fkTable, UniqueKey<?> uk, ForeignKey<R, ?> oldFk) {
|
||||
Table<?> ukTable = uk.getTable();
|
||||
|
||||
TableField<R, ?>[] oldFkFields = oldFk.getFieldsArray();
|
||||
TableField<R, ?>[] fkFields = new TableField[oldFkFields.length];
|
||||
TableField<?, ?>[] ukfields = new TableField[oldFkFields.length];
|
||||
|
||||
for (int i = 0; i < oldFkFields.length; i++) {
|
||||
fkFields[i] = (TableField<R, ?>) fkTable.field(oldFkFields[i]);
|
||||
ukfields[i] = (TableField<?, ?>) ukTable.field(oldFkFields[i]);
|
||||
}
|
||||
|
||||
return Internal.createForeignKey(fkTable, oldFk.getQualifiedName(), fkFields, uk, (TableField[]) ukfields, oldFk.enforced());
|
||||
}
|
||||
|
||||
@Override
|
||||
public int hashCode() {
|
||||
return ddl().hashCode();
|
||||
|
||||
@ -455,13 +455,7 @@ final class FilteredMeta extends AbstractMeta {
|
||||
else if (!uk.isPrimary() && uniqueKeyFilter != null && !uniqueKeyFilter.test(uk))
|
||||
continue fkLoop;
|
||||
|
||||
TableField<R, ?>[] fields1 = fk.getFieldsArray();
|
||||
TableField<?, ?>[] fields2 = new TableField[fields1.length];
|
||||
|
||||
for (int i = 0; i < fields2.length; i++)
|
||||
fields2[i] = (TableField<?, ?>) uk.getTable().field(fields1[i]);
|
||||
|
||||
references.add(Internal.createForeignKey(this, fk.getQualifiedName(), fields1, uk, (TableField[]) fields2, fk.enforced()));
|
||||
references.add(copyFK(this, uk, fk));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -226,6 +226,6 @@ final class ReferenceImpl<R extends Record, O extends Record> extends AbstractKe
|
||||
final ConstraintEnforcementStep constraint0() {
|
||||
return DSL.constraint(getName())
|
||||
.foreignKey(getFieldsArray())
|
||||
.references(uk.getTable(), uk.getFieldsArray());
|
||||
.references(uk.getTable(), getKeyFieldsArray());
|
||||
}
|
||||
}
|
||||
|
||||
@ -244,23 +244,13 @@ final class Snapshot extends AbstractMeta {
|
||||
return result;
|
||||
}
|
||||
|
||||
@SuppressWarnings({ "rawtypes", "unchecked" })
|
||||
final void resolveReferences() {
|
||||
|
||||
// TODO: Is there a better way than temporarily keeping the wrong
|
||||
// ReferenceImpl in this list until we "know better"?
|
||||
for (int i = 0; i < foreignKeys.size(); i++) {
|
||||
ForeignKey<R, ?> fk = foreignKeys.get(i);
|
||||
|
||||
UniqueKey uk = lookupUniqueKey(fk);
|
||||
foreignKeys.set(i, org.jooq.impl.Internal.createForeignKey(
|
||||
this,
|
||||
fk.getQualifiedName(),
|
||||
fields(fk.getFieldsArray()),
|
||||
uk,
|
||||
fields(uk.getFieldsArray()),
|
||||
fk.enforced()
|
||||
));
|
||||
foreignKeys.set(i, copyFK(this, lookupUniqueKey(fk), fk));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user