diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterDomainImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterDomainImpl.java index a6a9249e9e..9062ab6ed7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AlterDomainImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AlterDomainImpl.java @@ -341,7 +341,7 @@ implements if (addConstraint != null) { if (ctx.family() == FIREBIRD) - ctx.visit(K_ADD).sql(' ').visit(DSL.check(((ConstraintImpl) addConstraint).$check())); + ctx.visit(K_ADD).sql(' ').visit(DSL.check(((QOM.Check) addConstraint).$condition())); else ctx.visit(K_ADD).sql(' ').visit(addConstraint); } diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java index 1520d05a52..b58985c073 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java @@ -1422,7 +1422,7 @@ implements } ctx.sql(' ').visit(K_CONSTRAINT).sql(' ').visit(alterConstraint); - ConstraintImpl.acceptEnforced(ctx, alterConstraintEnforced); + AbstractConstraint.acceptEnforced(ctx, alterConstraintEnforced); }); ctx.end(ALTER_TABLE_ALTER); @@ -1682,7 +1682,7 @@ implements .sql(' ') .visit(dropConstraint); } - else if (dropConstraintType == PRIMARY_KEY && NO_SUPPORT_DROP_CONSTRAINT.contains(c.dialect()) || ConstraintImpl.NO_SUPPORT_NAMED_PK.contains(c.dialect())) { + else if (dropConstraintType == PRIMARY_KEY && NO_SUPPORT_DROP_CONSTRAINT.contains(c.dialect()) || AbstractConstraint.NO_SUPPORT_NAMED_PK.contains(c.dialect())) { c.visit(K_DROP).sql(' ').visit(K_PRIMARY_KEY); } else { diff --git a/jOOQ/src/main/java/org/jooq/impl/ConstraintImpl.java b/jOOQ/src/main/java/org/jooq/impl/ConstraintImpl.java index f52fedd7fd..4928feff46 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ConstraintImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ConstraintImpl.java @@ -37,151 +37,29 @@ */ package org.jooq.impl; -import static java.lang.Boolean.TRUE; -import static org.jooq.Clause.CONSTRAINT; -// ... -import static org.jooq.SQLDialect.CLICKHOUSE; -// ... -import static org.jooq.SQLDialect.IGNITE; -// ... -// ... -// ... -import static org.jooq.SQLDialect.TRINO; -import static org.jooq.impl.QOM.ForeignKeyRule.CASCADE; -import static org.jooq.impl.QOM.ForeignKeyRule.NO_ACTION; -import static org.jooq.impl.QOM.ForeignKeyRule.RESTRICT; -import static org.jooq.impl.QOM.ForeignKeyRule.SET_DEFAULT; -import static org.jooq.impl.QOM.ForeignKeyRule.SET_NULL; -import static org.jooq.impl.DSL.name; -import static org.jooq.impl.DSL.table; -import static org.jooq.impl.Keywords.K_CHECK; -import static org.jooq.impl.Keywords.K_CONSTRAINT; -import static org.jooq.impl.Keywords.K_DISABLE; -import static org.jooq.impl.Keywords.K_ENABLE; -import static org.jooq.impl.Keywords.K_ENFORCED; -import static org.jooq.impl.Keywords.K_FOREIGN_KEY; -import static org.jooq.impl.Keywords.K_NONCLUSTERED; -import static org.jooq.impl.Keywords.K_NOT; -import static org.jooq.impl.Keywords.K_NOT_ENFORCED; -import static org.jooq.impl.Keywords.K_ON_DELETE; -import static org.jooq.impl.Keywords.K_ON_UPDATE; -import static org.jooq.impl.Keywords.K_PRIMARY_KEY; -import static org.jooq.impl.Keywords.K_REFERENCES; -import static org.jooq.impl.Keywords.K_UNIQUE; -import static org.jooq.impl.QueryPartListView.wrap; import static org.jooq.impl.Tools.EMPTY_FIELD; -import static org.jooq.impl.Tools.EMPTY_NAME; -import static org.jooq.impl.Tools.EMPTY_STRING; import static org.jooq.impl.Tools.fieldsByName; -import static org.jooq.impl.Tools.BooleanDataKey.DATA_CONSTRAINT_REFERENCE; import java.util.Collection; -import java.util.Set; -import org.jooq.Clause; import org.jooq.Condition; -import org.jooq.ConstraintForeignKeyOnStep; -import org.jooq.ConstraintForeignKeyReferencesStep1; -import org.jooq.ConstraintForeignKeyReferencesStep10; -import org.jooq.ConstraintForeignKeyReferencesStep11; -import org.jooq.ConstraintForeignKeyReferencesStep12; -import org.jooq.ConstraintForeignKeyReferencesStep13; -import org.jooq.ConstraintForeignKeyReferencesStep14; -import org.jooq.ConstraintForeignKeyReferencesStep15; -import org.jooq.ConstraintForeignKeyReferencesStep16; -import org.jooq.ConstraintForeignKeyReferencesStep17; -import org.jooq.ConstraintForeignKeyReferencesStep18; -import org.jooq.ConstraintForeignKeyReferencesStep19; -import org.jooq.ConstraintForeignKeyReferencesStep2; -import org.jooq.ConstraintForeignKeyReferencesStep20; -import org.jooq.ConstraintForeignKeyReferencesStep21; -import org.jooq.ConstraintForeignKeyReferencesStep22; -import org.jooq.ConstraintForeignKeyReferencesStep3; -import org.jooq.ConstraintForeignKeyReferencesStep4; -import org.jooq.ConstraintForeignKeyReferencesStep5; -import org.jooq.ConstraintForeignKeyReferencesStep6; -import org.jooq.ConstraintForeignKeyReferencesStep7; -import org.jooq.ConstraintForeignKeyReferencesStep8; -import org.jooq.ConstraintForeignKeyReferencesStep9; -import org.jooq.ConstraintForeignKeyReferencesStepN; import org.jooq.ConstraintTypeStep; import org.jooq.Context; import org.jooq.Field; -import org.jooq.Keyword; import org.jooq.Name; -// ... -import org.jooq.SQLDialect; -import org.jooq.Table; -import org.jooq.impl.QOM.ForeignKeyRule; -import org.jooq.impl.QOM.UNotYetImplemented; - -import org.jetbrains.annotations.NotNull; +import org.jooq.impl.QOM.UEmpty; +import org.jooq.impl.QOM.UTransient; /** * @author Lukas Eder */ -@SuppressWarnings("rawtypes") -final class ConstraintImpl extends AbstractNamed +final class ConstraintImpl +extends + AbstractNamed implements - UNotYetImplemented - , ConstraintTypeStep - , ConstraintForeignKeyOnStep - , ConstraintForeignKeyReferencesStepN - - - , ConstraintForeignKeyReferencesStep1 - , ConstraintForeignKeyReferencesStep2 - , ConstraintForeignKeyReferencesStep3 - , ConstraintForeignKeyReferencesStep4 - , ConstraintForeignKeyReferencesStep5 - , ConstraintForeignKeyReferencesStep6 - , ConstraintForeignKeyReferencesStep7 - , ConstraintForeignKeyReferencesStep8 - , ConstraintForeignKeyReferencesStep9 - , ConstraintForeignKeyReferencesStep10 - , ConstraintForeignKeyReferencesStep11 - , ConstraintForeignKeyReferencesStep12 - , ConstraintForeignKeyReferencesStep13 - , ConstraintForeignKeyReferencesStep14 - , ConstraintForeignKeyReferencesStep15 - , ConstraintForeignKeyReferencesStep16 - , ConstraintForeignKeyReferencesStep17 - , ConstraintForeignKeyReferencesStep18 - , ConstraintForeignKeyReferencesStep19 - , ConstraintForeignKeyReferencesStep20 - , ConstraintForeignKeyReferencesStep21 - , ConstraintForeignKeyReferencesStep22 - - - + UEmpty, + ConstraintTypeStep { - private static final Clause[] CLAUSES = { CONSTRAINT }; - static final Set NO_SUPPORT_NAMED = SQLDialect.supportedBy(); - static final Set NO_SUPPORT_NAMED_PK = SQLDialect.supportedBy(CLICKHOUSE); - static final Set NO_SUPPORT_PK = SQLDialect.supportedBy(TRINO); - static final Set NO_SUPPORT_UK = SQLDialect.supportedBy(CLICKHOUSE, IGNITE, TRINO); - static final Set NO_SUPPORT_FK = SQLDialect.supportedBy(CLICKHOUSE, IGNITE, TRINO); - static final Set NO_SUPPORT_CHECK = SQLDialect.supportedBy(IGNITE, TRINO); - - - - - - - - - - - - private Field[] unique; - private Field[] primaryKey; - private Field[] foreignKey; - private Table referencesTable; - private Field[] references; - private ForeignKeyRule onDelete; - private ForeignKeyRule onUpdate; - private Condition check; - private boolean enforced = true; ConstraintImpl() { this(null); @@ -191,1006 +69,412 @@ implements super(name, null); } - final Field[] $unique() { return unique; } - final Field[] $primaryKey() { return primaryKey; } - final Field[] $foreignKey() { return foreignKey; } - final Table $referencesTable() { return referencesTable; } - final Field[] $references() { return references; } - final ForeignKeyRule $onDelete() { return onDelete; } - final ForeignKeyRule $onUpdate() { return onUpdate; } - final Condition $check() { return check; } - final boolean $enforced() { return enforced; } - - // ------------------------------------------------------------------------ - // XXX: QueryPart API - // ------------------------------------------------------------------------ - - @Override - public final Clause[] clauses(Context ctx) { - return CLAUSES; - } - - @Override - public final void accept(Context ctx) { - boolean named = !getQualifiedName().equals(AbstractName.NO_NAME); - - if (named && TRUE.equals(ctx.data(DATA_CONSTRAINT_REFERENCE))) { - ctx.visit(getQualifiedName()); - } - else { - if (named - && !NO_SUPPORT_NAMED.contains(ctx.dialect()) - && (primaryKey == null || !NO_SUPPORT_NAMED_PK.contains(ctx.dialect()))) - ctx.visit(K_CONSTRAINT).sql(' ') - .visit(getUnqualifiedName()).sql(' '); - - if (unique != null) { - ctx.visit(K_UNIQUE) - .sql(" (").visit(wrap(unique).qualify(false)).sql(')'); - - - - - - } - else if (primaryKey != null) { - ctx.visit(K_PRIMARY_KEY); - - - - - - - ctx.sql(" (").visit(wrap(primaryKey).qualify(false)).sql(')'); - - - - - - } - else if (foreignKey != null) { - ctx.visit(K_FOREIGN_KEY) - .sql(" (").visit(wrap(foreignKey).qualify(false)).sql(") ") - .visit(K_REFERENCES).sql(' ').visit(referencesTable); - - if (references.length > 0) - ctx.sql(" (").visit(wrap(references).qualify(false)).sql(')'); - - if (onDelete != null) - - - - ctx.sql(' ').visit(K_ON_DELETE) - .sql(' ').visit(onDelete.keyword); - - if (onUpdate != null) - - - - ctx.sql(' ').visit(K_ON_UPDATE) - .sql(' ').visit(onUpdate.keyword); - } - else if (check != null) { - ctx.visit(K_CHECK) - .sql(" (").qualify(false, c -> c.visit(check)).sql(')'); - } - - if (!enforced) - acceptEnforced(ctx, enforced); - - - - - - - - - - - - - } - } - - static void acceptEnforced(Context ctx, boolean enforced) { - switch (ctx.family()) { - - - - - - - - - - - - default: - if (enforced) - ctx.sql(' ').visit(K_ENFORCED); - else - ctx.sql(' ').visit(K_NOT).sql(' ').visit(K_ENFORCED); - - break; - } - } - // ------------------------------------------------------------------------ // XXX: Constraint API // ------------------------------------------------------------------------ @Override - public final ConstraintImpl unique(String... fields) { + public final void accept(Context ctx) { + ctx.visit(getQualifiedName()); + } + + @Override + public final UniqueConstraintImpl unique(String... fields) { return unique(fieldsByName(fields)); } @Override - public final ConstraintImpl unique(Name... fields) { + public final UniqueConstraintImpl unique(Name... fields) { return unique(fieldsByName(fields)); } @Override - public final ConstraintImpl unique(Field... fields) { - unique = fields; - return this; + public final UniqueConstraintImpl unique(Field... fields) { + return new UniqueConstraintImpl($name(), fields); } @Override - public final ConstraintImpl unique(Collection> fields) { + public final UniqueConstraintImpl unique(Collection> fields) { return unique(fields.toArray(EMPTY_FIELD)); } @Override - public final ConstraintImpl check(Condition condition) { - check = condition; - return this; + public final CheckConstraintImpl check(Condition condition) { + return new CheckConstraintImpl($name(), condition); } @Override - public final ConstraintImpl primaryKey(String... fields) { + public final PrimaryKeyConstraintImpl primaryKey(String... fields) { return primaryKey(fieldsByName(fields)); } @Override - public final ConstraintImpl primaryKey(Name... fields) { + public final PrimaryKeyConstraintImpl primaryKey(Name... fields) { return primaryKey(fieldsByName(fields)); } @Override - public final ConstraintImpl primaryKey(Field... fields) { - primaryKey = fields; - return this; + public final PrimaryKeyConstraintImpl primaryKey(Field... fields) { + return new PrimaryKeyConstraintImpl($name(), fields); } @Override - public final ConstraintImpl primaryKey(Collection> fields) { + public final PrimaryKeyConstraintImpl primaryKey(Collection> fields) { return primaryKey(fields.toArray(EMPTY_FIELD)); } @Override - public final ConstraintImpl foreignKey(String... fields) { + public final ForeignKeyConstraintImpl foreignKey(String... fields) { return foreignKey(fieldsByName(fields)); } @Override - public final ConstraintImpl foreignKey(Name... fields) { + public final ForeignKeyConstraintImpl foreignKey(Name... fields) { return foreignKey(fieldsByName(fields)); } @Override - public final ConstraintImpl foreignKey(Field... fields) { - foreignKey = fields; - return this; + public final ForeignKeyConstraintImpl foreignKey(Field... fields) { + return new ForeignKeyConstraintImpl($name(), fields); } @Override - public final ConstraintImpl foreignKey(Collection> fields) { + public final ForeignKeyConstraintImpl foreignKey(Collection> fields) { return foreignKey(fields.toArray(EMPTY_FIELD)); } - @Override - public final ConstraintImpl references(String table) { - return references(table(name(table)), EMPTY_FIELD); - } - - @Override - public final ConstraintImpl references(String table, String... fields) { - return references(table(name(table)), fieldsByName(fields)); - } - - @Override - public final ConstraintImpl references(String table, Collection fields) { - return references(table, fields.toArray(EMPTY_STRING)); - } - - @Override - public final ConstraintImpl references(Name table) { - return references(table(table), EMPTY_FIELD); - } - - @Override - public final ConstraintImpl references(Name table, Name... fields) { - return references(table(table), fieldsByName(fields)); - } - - @Override - public final ConstraintImpl references(Name table, Collection fields) { - return references(table, fields.toArray(EMPTY_NAME)); - } - - @Override - public final ConstraintImpl references(Table table) { - return references(table, EMPTY_FIELD); - } - - @Override - public final ConstraintImpl references(Table table, Field... fields) { - referencesTable = table; - references = fields; - return this; - } - - @Override - public final ConstraintImpl references(Table table, Collection> fields) { - return references(table, fields.toArray(EMPTY_FIELD)); - } - - @Override - public final ConstraintImpl onDelete(ForeignKeyRule rule) { - onDelete = rule; - return this; - } - - @Override - public final ConstraintImpl onDeleteNoAction() { - return onDelete(NO_ACTION); - } - - @Override - public final ConstraintImpl onDeleteRestrict() { - return onDelete(RESTRICT); - } - - @Override - public final ConstraintImpl onDeleteCascade() { - return onDelete(CASCADE); - } - - @Override - public final ConstraintImpl onDeleteSetNull() { - return onDelete(SET_NULL); - } - - @Override - public final ConstraintImpl onDeleteSetDefault() { - return onDelete(SET_DEFAULT); - } - - @Override - public final ConstraintImpl onUpdate(ForeignKeyRule rule) { - onUpdate = rule; - return this; - } - - @Override - public final ConstraintImpl onUpdateNoAction() { - return onUpdate(NO_ACTION); - } - - @Override - public final ConstraintImpl onUpdateRestrict() { - return onUpdate(RESTRICT); - } - - @Override - public final ConstraintImpl onUpdateCascade() { - return onUpdate(CASCADE); - } - - @Override - public final ConstraintImpl onUpdateSetNull() { - return onUpdate(SET_NULL); - } - - @Override - public final ConstraintImpl onUpdateSetDefault() { - onUpdate = SET_DEFAULT; - return this; - } - @Override - public final ConstraintImpl foreignKey(Field field1) { + public final ForeignKeyConstraintImpl foreignKey(Field field1) { return foreignKey(new Field[] { field1 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2) { return foreignKey(new Field[] { field1, field2 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3) { return foreignKey(new Field[] { field1, field2, field3 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4) { return foreignKey(new Field[] { field1, field2, field3, field4 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5) { return foreignKey(new Field[] { field1, field2, field3, field4, field5 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18, Field field19) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18, Field field19) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18, Field field19, Field field20) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18, Field field19, Field field20) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18, Field field19, Field field20, Field field21) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18, Field field19, Field field20, Field field21) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21 }); } @Override - public final ConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18, Field field19, Field field20, Field field21, Field field22) { + public final ForeignKeyConstraintImpl foreignKey(Field field1, Field field2, Field field3, Field field4, Field field5, Field field6, Field field7, Field field8, Field field9, Field field10, Field field11, Field field12, Field field13, Field field14, Field field15, Field field16, Field field17, Field field18, Field field19, Field field20, Field field21, Field field22) { return foreignKey(new Field[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21, field22 }); } @Override - public final ConstraintImpl foreignKey(Name field1) { + public final ForeignKeyConstraintImpl foreignKey(Name field1) { return foreignKey(new Name[] { field1 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2) { return foreignKey(new Name[] { field1, field2 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3) { return foreignKey(new Name[] { field1, field2, field3 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4) { return foreignKey(new Name[] { field1, field2, field3, field4 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5) { return foreignKey(new Name[] { field1, field2, field3, field4, field5 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20, Name field21) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20, Name field21) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21 }); } @Override - public final ConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20, Name field21, Name field22) { + public final ForeignKeyConstraintImpl foreignKey(Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20, Name field21, Name field22) { return foreignKey(new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21, field22 }); } @Override - public final ConstraintImpl foreignKey(String field1) { + public final ForeignKeyConstraintImpl foreignKey(String field1) { return foreignKey(new String[] { field1 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2) { return foreignKey(new String[] { field1, field2 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3) { return foreignKey(new String[] { field1, field2, field3 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4) { return foreignKey(new String[] { field1, field2, field3, field4 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5) { return foreignKey(new String[] { field1, field2, field3, field4, field5 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20, String field21) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20, String field21) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21 }); } @Override - public final ConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20, String field21, String field22) { + public final ForeignKeyConstraintImpl foreignKey(String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20, String field21, String field22) { return foreignKey(new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21, field22 }); } - @Override - public final ConstraintImpl references(Table table, Field t1) { - return references(table, new Field[] { t1 }); - } - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2) { - return references(table, new Field[] { t1, t2 }); - } - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3) { - return references(table, new Field[] { t1, t2, t3 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4) { - return references(table, new Field[] { t1, t2, t3, t4 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5) { - return references(table, new Field[] { t1, t2, t3, t4, t5 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14, Field t15) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14, Field t15, Field t16) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14, Field t15, Field t16, Field t17) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14, Field t15, Field t16, Field t17, Field t18) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14, Field t15, Field t16, Field t17, Field t18, Field t19) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14, Field t15, Field t16, Field t17, Field t18, Field t19, Field t20) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14, Field t15, Field t16, Field t17, Field t18, Field t19, Field t20, Field t21) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, t21 }); - } - - @Override - public final ConstraintImpl references(Table table, Field t1, Field t2, Field t3, Field t4, Field t5, Field t6, Field t7, Field t8, Field t9, Field t10, Field t11, Field t12, Field t13, Field t14, Field t15, Field t16, Field t17, Field t18, Field t19, Field t20, Field t21, Field t22) { - return references(table, new Field[] { t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12, t13, t14, t15, t16, t17, t18, t19, t20, t21, t22 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1) { - return references(table, new Name[] { field1 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2) { - return references(table, new Name[] { field1, field2 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3) { - return references(table, new Name[] { field1, field2, field3 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4) { - return references(table, new Name[] { field1, field2, field3, field4 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5) { - return references(table, new Name[] { field1, field2, field3, field4, field5 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20, Name field21) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21 }); - } - - @Override - public final ConstraintImpl references(Name table, Name field1, Name field2, Name field3, Name field4, Name field5, Name field6, Name field7, Name field8, Name field9, Name field10, Name field11, Name field12, Name field13, Name field14, Name field15, Name field16, Name field17, Name field18, Name field19, Name field20, Name field21, Name field22) { - return references(table, new Name[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21, field22 }); - } - - @Override - public final ConstraintImpl references(String table, String field1) { - return references(table, new String[] { field1 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2) { - return references(table, new String[] { field1, field2 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3) { - return references(table, new String[] { field1, field2, field3 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4) { - return references(table, new String[] { field1, field2, field3, field4 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5) { - return references(table, new String[] { field1, field2, field3, field4, field5 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20, String field21) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21 }); - } - - @Override - public final ConstraintImpl references(String table, String field1, String field2, String field3, String field4, String field5, String field6, String field7, String field8, String field9, String field10, String field11, String field12, String field13, String field14, String field15, String field16, String field17, String field18, String field19, String field20, String field21, String field22) { - return references(table, new String[] { field1, field2, field3, field4, field5, field6, field7, field8, field9, field10, field11, field12, field13, field14, field15, field16, field17, field18, field19, field20, field21, field22 }); - } - - - - @Override - public final ConstraintImpl enforced() { - this.enforced = true; - return this; - } - - @Override - public final ConstraintImpl notEnforced() { - this.enforced = false; - return this; - } - - final boolean matchingPrimaryKey(Field identity) { - return identity != null && primaryKey != null && primaryKey.length == 1 && primaryKey[0].getName().equals(identity.getName()); - } - - final boolean supported(Context ctx, Table onTable) { - return primaryKey != null && !NO_SUPPORT_PK.contains(ctx.dialect()) - || unique != null && !NO_SUPPORT_UK.contains(ctx.dialect()) - || references != null && !NO_SUPPORT_FK.contains(ctx.dialect()) && supportedSelfReference(ctx, onTable) - || check != null && !NO_SUPPORT_CHECK.contains(ctx.dialect()); - } - - final boolean supportedSelfReference(Context ctx, Table onTable) { - - - - - - return true; - } } diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateDomainImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateDomainImpl.java index 0a270a9a5d..bd7bb4b8e1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CreateDomainImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CreateDomainImpl.java @@ -197,7 +197,7 @@ implements if (!Tools.isEmpty(constraints)) { if (ctx.family() == FIREBIRD) { - ctx.formatSeparator().visit(DSL.check(DSL.and(Tools.map(constraints, c -> ((ConstraintImpl) c).$check())))); + ctx.formatSeparator().visit(DSL.check(DSL.and(Tools.map(constraints, c -> ((QOM.Check) c).$condition())))); } else { boolean indent = constraints.size() > 1; diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java index 3306707985..b2e1e36e9d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java @@ -53,6 +53,8 @@ import org.jooq.Function1; import org.jooq.Record; import org.jooq.conf.ParamType; import org.jooq.impl.QOM.WithOrWithoutData; +import org.jooq.impl.QOM; +import org.jooq.impl.QOM.PrimaryKey; import org.jooq.impl.QOM.TableCommitAction; import org.jooq.tools.StringUtils; @@ -466,7 +468,7 @@ implements if (ctx.family() == CLICKHOUSE) { ctx.formatSeparator().visit(K_ENGINE).sql(' '); - if (anyMatch(tableElements, e -> e instanceof ConstraintImpl && isNotEmpty(((ConstraintImpl) e).$primaryKey()))) + if (anyMatch(tableElements, e -> e instanceof PrimaryKey)) ctx.visit(unquotedName("MergeTree")).sql("()"); else ctx.visit(unquotedName("Log")).sql("()"); @@ -544,7 +546,7 @@ implements // [#6841] SQLite has a weird requirement of the PRIMARY KEY keyword being on the column directly, // when there is an identity. Thus, we must not repeat the primary key specification here. - if (((ConstraintImpl) constraint).supported(ctx, table) && (ctx.family() != SQLITE || !matchingPrimaryKey(constraint, identity))) + if (((AbstractConstraint) constraint).supported(ctx, table) && (ctx.family() != SQLITE || !matchingPrimaryKey(constraint, identity))) ctx.sql(',') .formatSeparator() .visit(constraint); @@ -607,9 +609,9 @@ implements // [#10551] [#11268] TODO: Make this behaviour configurable if (REQUIRE_NON_PK_COLUMNS.contains(ctx.dialect())) { - Field[] primaryKeyColumns = primaryKeyColumns(); + List> primaryKeyColumns = primaryKeyColumns(); - if (primaryKeyColumns != null && primaryKeyColumns.length == $columns().size()) { + if (primaryKeyColumns != null && primaryKeyColumns.size() == $columns().size()) { ctx.sql(',').formatSeparator(); ctx.visit(DSL.field(name("dummy"))); @@ -632,11 +634,11 @@ implements return type; } - private final Field[] primaryKeyColumns() { + private final List> primaryKeyColumns() { return Tools.findAny( $constraints(), - c -> c instanceof ConstraintImpl && ((ConstraintImpl) c).$primaryKey() != null, - c -> ((ConstraintImpl) c).$primaryKey() + c -> c instanceof QOM.PrimaryKey, + c -> ((QOM.PrimaryKey) c).$fields() ); } @@ -645,7 +647,7 @@ implements } private final boolean matchingPrimaryKey(Constraint constraint, Field identity) { - if (constraint instanceof ConstraintImpl c) + if (constraint instanceof PrimaryKeyConstraintImpl c) return c.matchingPrimaryKey(identity); return false; diff --git a/jOOQ/src/main/java/org/jooq/impl/Interpreter.java b/jOOQ/src/main/java/org/jooq/impl/Interpreter.java index baf05406bb..63cbb1110b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Interpreter.java +++ b/jOOQ/src/main/java/org/jooq/impl/Interpreter.java @@ -124,6 +124,7 @@ import org.jooq.impl.DefaultParseContext.IgnoreQuery; import org.jooq.impl.QOM.Cascade; import org.jooq.impl.QOM.CycleOption; import org.jooq.impl.QOM.ForeignKeyRule; +import org.jooq.impl.QOM.PrimaryKey; import org.jooq.tools.JooqLogger; @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -378,7 +379,7 @@ final class Interpreter { MutableTable mt = newTable(table, schema, query.$columns(), query.$select(), query.$comment(), query.$temporary() ? TableOptions.temporaryTable(query.$onCommit()) : TableOptions.table()); for (Constraint constraint : query.$constraints()) - addConstraint(query, (ConstraintImpl) constraint, mt); + addConstraint(query, constraint, mt); for (Index index : query.$indexes()) { IndexImpl impl = (IndexImpl) index; @@ -386,25 +387,25 @@ final class Interpreter { } } - private final void addForeignKey(MutableTable mt, ConstraintImpl impl) { + private final void addForeignKey(MutableTable mt, QOM.ForeignKey foreignKey) { if (delayForeignKeyDeclarations) - delayForeignKey(mt, impl); + delayForeignKey(mt, foreignKey); else - addForeignKey0(mt, impl); + addForeignKey0(mt, foreignKey); } private static class DelayedForeignKey { final MutableTable table; - final ConstraintImpl constraint; + final QOM.ForeignKey constraint; - DelayedForeignKey(MutableTable mt, ConstraintImpl constraint) { + DelayedForeignKey(MutableTable mt, QOM.ForeignKey constraint) { this.table = mt; this.constraint = constraint; } } - private final void delayForeignKey(MutableTable mt, ConstraintImpl impl) { - delayedForeignKeyDeclarations.add(new DelayedForeignKey(mt, impl)); + private final void delayForeignKey(MutableTable mt, QOM.ForeignKey foreignKey) { + delayedForeignKeyDeclarations.add(new DelayedForeignKey(mt, foreignKey)); } private final void applyDelayedForeignKeys() { @@ -417,20 +418,20 @@ final class Interpreter { } } - private final void addForeignKey0(MutableTable mt, ConstraintImpl impl) { - MutableSchema ms = getSchema(impl.$referencesTable().getSchema()); + private final void addForeignKey0(MutableTable mt, QOM.ForeignKey key) { + MutableSchema ms = getSchema(key.$referencesTable().getSchema()); if (ms == null) - throw notExists(impl.$referencesTable().getSchema()); + throw notExists(key.$referencesTable().getSchema()); - MutableTable mrf = ms.table(impl.$referencesTable(), true); + MutableTable mrf = ms.table(key.$referencesTable(), true); MutableUniqueKey mu = null; if (mrf == null) - throw notExists(impl.$referencesTable()); + throw notExists(key.$referencesTable()); - List mfs = mt.fields(impl.$foreignKey(), true); - List mrfs = mrf.fields(impl.$references(), true); + List mfs = mt.fields(key.$fields(), true); + List mrfs = mrf.fields(key.$referencesFields(), true); if (!mrfs.isEmpty()) mu = mrf.uniqueKey(mrfs); @@ -438,10 +439,10 @@ final class Interpreter { mrfs = (mu = mrf.primaryKey).fields; if (mu == null) - throw primaryKeyNotExists(impl.$referencesTable()); + throw primaryKeyNotExists(key.$referencesTable()); mt.foreignKeys.add(new MutableForeignKey( - (UnqualifiedName) impl.getUnqualifiedName(), mt, mfs, mu, mrfs, impl.$onDelete(), impl.$onUpdate(), impl.$enforced() + (UnqualifiedName) key.getUnqualifiedName(), mt, mfs, mu, mrfs, key.$deleteRule(), key.$updateRule(), key.$enforced() )); } @@ -589,7 +590,7 @@ final class Interpreter { for (TableElement fc : query.$add()) if (fc instanceof Field f) addField(existing, Integer.MAX_VALUE, (UnqualifiedName) fc.getUnqualifiedName(), f.getDataType()); - else if (fc instanceof ConstraintImpl c) + else if (fc instanceof Constraint c) addConstraint(query, c, existing); else throw unsupportedQuery(query); @@ -615,7 +616,7 @@ final class Interpreter { addField(existing, Integer.MAX_VALUE, name, dataType); } else if (query.$addConstraint() != null) { - addConstraint(query, (ConstraintImpl) query.$addConstraint(), existing); + addConstraint(query, query.$addConstraint(), existing); } else if (query.$alterColumn() != null) { MutableField existingField = find(existing.fields, query.$alterColumn()); @@ -666,30 +667,30 @@ final class Interpreter { existing.constraint(query.$alterConstraint(), true).enforced = query.$alterConstraintEnforced(); } else if (query.$dropColumns() != null) { - List fields = existing.fields(query.$dropColumns().toArray(EMPTY_FIELD), false); + List fields = existing.fields(query.$dropColumns(), false); if (fields.size() < query.$dropColumns().size() && !query.$ifExistsColumn()) - existing.fields(query.$dropColumns().toArray(EMPTY_FIELD), true); + existing.fields(query.$dropColumns(), true); dropColumns(existing, fields, query.$dropCascade()); } else if (query.$dropConstraint() != null) dropConstraint: { - ConstraintImpl impl = (ConstraintImpl) query.$dropConstraint(); + Constraint constraint = query.$dropConstraint(); - if (impl.getUnqualifiedName().empty()) { - if (impl.$foreignKey() != null) { + if (constraint.getUnqualifiedName().empty()) { + if (constraint instanceof QOM.ForeignKey) { throw new DataDefinitionException("Cannot drop unnamed foreign key"); } - else if (impl.$check() != null) { + else if (constraint instanceof QOM.Check) { throw new DataDefinitionException("Cannot drop unnamed check constraint"); } - else if (impl.$unique() != null) { + else if (constraint instanceof QOM.UniqueKey u) { Iterator uks = existing.uniqueKeys.iterator(); while (uks.hasNext()) { MutableUniqueKey key = uks.next(); - if (key.fieldsEquals(impl.$unique())) { + if (key.fieldsEquals(u.$fields())) { cascade(key, null, query.$dropCascade()); uks.remove(); break dropConstraint; @@ -701,7 +702,7 @@ final class Interpreter { else { Iterator fks = existing.foreignKeys.iterator(); while (fks.hasNext()) { - if (fks.next().nameEquals((UnqualifiedName) impl.getUnqualifiedName())) { + if (fks.next().nameEquals((UnqualifiedName) constraint.getUnqualifiedName())) { fks.remove(); break dropConstraint; } @@ -713,7 +714,7 @@ final class Interpreter { while (uks.hasNext()) { MutableUniqueKey key = uks.next(); - if (key.nameEquals((UnqualifiedName) impl.getUnqualifiedName())) { + if (key.nameEquals((UnqualifiedName) constraint.getUnqualifiedName())) { cascade(key, null, query.$dropCascade()); uks.remove(); break dropConstraint; @@ -725,14 +726,14 @@ final class Interpreter { while (chks.hasNext()) { MutableCheck check = chks.next(); - if (check.nameEquals((UnqualifiedName) impl.getUnqualifiedName())) { + if (check.nameEquals((UnqualifiedName) constraint.getUnqualifiedName())) { chks.remove(); break dropConstraint; } } if (existing.primaryKey != null) { - if (existing.primaryKey.nameEquals((UnqualifiedName) impl.getUnqualifiedName())) { + if (existing.primaryKey.nameEquals((UnqualifiedName) constraint.getUnqualifiedName())) { cascade(existing.primaryKey, null, query.$dropCascade()); existing.primaryKey = null; break dropConstraint; @@ -745,7 +746,7 @@ final class Interpreter { while (it.hasNext()) { DelayedForeignKey key = it.next(); - if (existing.equals(key.table) && key.constraint.getUnqualifiedName().equals(impl.getUnqualifiedName())) { + if (existing.equals(key.table) && key.constraint.getUnqualifiedName().equals(constraint.getUnqualifiedName())) { it.remove(); break dropConstraint; } @@ -805,21 +806,22 @@ final class Interpreter { existing.fields.add(index, field); } - private final void addConstraint(Query query, ConstraintImpl impl, MutableTable existing) { - if (!impl.getUnqualifiedName().empty() && existing.constraint(impl) != null) - throw alreadyExists(impl); + private final void addConstraint(Query query, Constraint constraint, MutableTable existing) { + if (!constraint.getUnqualifiedName().empty() && existing.constraint(constraint) != null) + throw alreadyExists(constraint); - if (impl.$primaryKey() != null) + if (constraint instanceof QOM.PrimaryKey p) { if (existing.primaryKey != null) - throw alreadyExists(impl); + throw alreadyExists(constraint); else - existing.primaryKey = new MutableUniqueKey((UnqualifiedName) impl.getUnqualifiedName(), existing, existing.fields(impl.$primaryKey(), true), impl.$enforced()); - else if (impl.$unique() != null) - existing.uniqueKeys.add(new MutableUniqueKey((UnqualifiedName) impl.getUnqualifiedName(), existing, existing.fields(impl.$unique(), true), impl.$enforced())); - else if (impl.$foreignKey() != null) - addForeignKey(existing, impl); - else if (impl.$check() != null) - existing.checks.add(new MutableCheck((UnqualifiedName) impl.getUnqualifiedName(), existing, impl.$check(), impl.$enforced())); + existing.primaryKey = new MutableUniqueKey((UnqualifiedName) constraint.getUnqualifiedName(), existing, existing.fields(p.$fields(), true), p.$enforced()); + } + else if (constraint instanceof QOM.UniqueKey u) + existing.uniqueKeys.add(new MutableUniqueKey((UnqualifiedName) constraint.getUnqualifiedName(), existing, existing.fields(u.$fields(), true), u.$enforced())); + else if (constraint instanceof QOM.ForeignKey f) + addForeignKey(existing, f); + else if (constraint instanceof QOM.Check c) + existing.checks.add(new MutableCheck((UnqualifiedName) constraint.getUnqualifiedName(), existing, c.$condition(), c.$enforced())); else throw unsupportedQuery(query); } @@ -1212,8 +1214,8 @@ final class Interpreter { // TODO: Support NOT NULL constraints if (query.$constraints() != null) for (Constraint constraint : query.$constraints()) - if (((ConstraintImpl) constraint).$check() != null) - md.checks.add(new MutableCheck(constraint)); + if (constraint instanceof QOM.Check c) + md.checks.add(new MutableCheck(c)); } private final void accept0(AlterDomainImpl query) { @@ -1234,7 +1236,7 @@ final class Interpreter { if (find(existing.checks, addConstraint) != null) throw alreadyExists(addConstraint); - existing.checks.add(new MutableCheck(addConstraint)); + existing.checks.add(new MutableCheck((QOM.Check) addConstraint)); } else if (query.$dropConstraint() != null) { Constraint dropConstraint = query.$dropConstraint(); @@ -1996,7 +1998,7 @@ final class Interpreter { return constraint(constraint, false); } - final List fields(Field[] fs, boolean failIfNotFound) { + final List fields(Collection> fs, boolean failIfNotFound) { List result = new ArrayList<>(); for (Field f : fs) { @@ -2299,23 +2301,23 @@ final class Interpreter { this.fields = fields; } - final boolean fieldsEquals(Field[] f) { - if (fields.size() != f.length) + final boolean fieldsEquals(List> f) { + if (fields.size() != f.size()) return false; else - return allMatch(fields, (x, i) -> x.nameEquals((UnqualifiedName) f[i].getUnqualifiedName())); + return allMatch(fields, (x, i) -> x.nameEquals((UnqualifiedName) f.get(i).getUnqualifiedName())); } } private final class MutableCheck extends MutableConstraint { Condition condition; - MutableCheck(Constraint constraint) { + MutableCheck(QOM.Check check) { this( - (UnqualifiedName) constraint.getUnqualifiedName(), + (UnqualifiedName) check.getUnqualifiedName(), null, - ((ConstraintImpl) constraint).$check(), - ((ConstraintImpl) constraint).$enforced() + check.$condition(), + check.$enforced() ); } diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 7a3a2ef443..9c1b522eba 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -767,6 +767,7 @@ import org.jooq.conf.RenderQuotedNames; import org.jooq.impl.QOM.DocumentOrContent; import org.jooq.impl.QOM.JSONOnNull; import org.jooq.impl.QOM.JoinHint; +import org.jooq.impl.QOM.PrimaryKey; // ... import org.jooq.impl.QOM.UEmpty; import org.jooq.impl.QOM.XMLPassingMechanism; @@ -4720,20 +4721,20 @@ final class DefaultParseContext extends AbstractScope implements ParseContext { PrimaryKeySpecification pk = parsePrimaryKeySpecification(constraint, true); constraints.add(pk.constraint()); if (pk.identity()) { - ConstraintImpl c = (ConstraintImpl) pk.constraint(); + PrimaryKey c = (PrimaryKey) pk.constraint(); replacement: - if (c.$primaryKey().length == 1) { + if (c.$fields().size() == 1) { for (int i = 0; i < fields.size(); i++) { Field f = fields.get(i); - if (f.getName().equalsIgnoreCase(c.$primaryKey()[0].getName())) { + if (f.getName().equalsIgnoreCase(c.$fields().get(0).getName())) { fields.set(i, field(f.getQualifiedName(), f.getDataType().identity(true))); break replacement; } } - throw expected("Column not found: " + c.$primaryKey()[0].getName()); + throw expected("Column not found: " + c.$fields().get(0).getName()); } else throw expected("Single column primary key with inline identity"); diff --git a/jOOQ/src/main/java/org/jooq/impl/QOM.java b/jOOQ/src/main/java/org/jooq/impl/QOM.java index 405cb8ee78..8e9f73f14d 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QOM.java +++ b/jOOQ/src/main/java/org/jooq/impl/QOM.java @@ -681,18 +681,92 @@ public final class QOM { @NotNull WithOrdinalityTable $table(Table newTable); } - public interface PrimaryKey extends Constraint { + /** + * A PRIMARY KEY constraint. + */ + public interface PrimaryKey + extends + org.jooq.Constraint + { + @Override + @NotNull Name $name(); + @CheckReturnValue + @NotNull Constraint $name(Name newName); + boolean $enforced(); + @CheckReturnValue + @NotNull Constraint $enforced(boolean newEnforced); @NotNull UnmodifiableList> $fields(); + @CheckReturnValue + @NotNull PrimaryKey $fields(UnmodifiableList> newFields); } - public interface UniqueKey extends Constraint { + + /** + * A UNIQUE constraint. + */ + public interface UniqueKey + extends + org.jooq.Constraint + { + @Override + @NotNull Name $name(); + @CheckReturnValue + @NotNull Constraint $name(Name newName); + boolean $enforced(); + @CheckReturnValue + @NotNull Constraint $enforced(boolean newEnforced); @NotNull UnmodifiableList> $fields(); + @CheckReturnValue + @NotNull UniqueKey $fields(UnmodifiableList> newFields); } - public interface ForeignKey extends Constraint { + + /** + * A FOREIGN KEY constraint. + */ + public interface ForeignKey + extends + org.jooq.Constraint + { + @Override + @NotNull Name $name(); + @CheckReturnValue + @NotNull Constraint $name(Name newName); + boolean $enforced(); + @CheckReturnValue + @NotNull Constraint $enforced(boolean newEnforced); @NotNull UnmodifiableList> $fields(); - @NotNull Constraint $references(); + @CheckReturnValue + @NotNull ForeignKey $fields(UnmodifiableList> newFields); + @NotNull Table $referencesTable(); + @CheckReturnValue + @NotNull ForeignKey $referencesTable(Table newReferencesTable); + @NotNull UnmodifiableList> $referencesFields(); + @CheckReturnValue + @NotNull ForeignKey $referencesFields(UnmodifiableList> newReferencesFields); + @Nullable ForeignKeyRule $deleteRule(); + @CheckReturnValue + @NotNull ForeignKey $deleteRule(ForeignKeyRule newDeleteRule); + @Nullable ForeignKeyRule $updateRule(); + @CheckReturnValue + @NotNull ForeignKey $updateRule(ForeignKeyRule newDeleteRule); } - public interface Check extends Constraint { + + /** + * A CHECK constraint. + */ + public interface Check + extends + org.jooq.Constraint + { + @Override + @NotNull Name $name(); + @CheckReturnValue + @NotNull Constraint $name(Name newName); + boolean $enforced(); + @CheckReturnValue + @NotNull Constraint $enforced(boolean newEnforced); @NotNull Condition $condition(); + @CheckReturnValue + @NotNull Check $condition(Condition newCondition); } // -------------------------------------------------------------------------