diff --git a/jOOQ/src/main/java/org/jooq/AlterTableDropStep.java b/jOOQ/src/main/java/org/jooq/AlterTableDropStep.java index 570e951951..5ba6827770 100644 --- a/jOOQ/src/main/java/org/jooq/AlterTableDropStep.java +++ b/jOOQ/src/main/java/org/jooq/AlterTableDropStep.java @@ -40,7 +40,7 @@ package org.jooq; /** * The step in the ALTER TABLE DSL used to DROP - * columns. + * columns or constraints. *

*

Referencing XYZ*Step types directly from client code

*

@@ -66,14 +66,14 @@ public interface AlterTableDropStep extends AlterTableFinalStep { /** * Add a CASCADE clause to the - * ALTER TABLE .. DROP COLUMN statement. + * ALTER TABLE .. DROP statement. */ @Support AlterTableFinalStep cascade(); /** * Add a RESTRICT clause to the - * ALTER TABLE .. DROP COLUMN statement. + * ALTER TABLE .. DROP statement. */ @Support AlterTableFinalStep restrict(); diff --git a/jOOQ/src/main/java/org/jooq/AlterTableStep.java b/jOOQ/src/main/java/org/jooq/AlterTableStep.java index f824f90338..7acc01f664 100644 --- a/jOOQ/src/main/java/org/jooq/AlterTableStep.java +++ b/jOOQ/src/main/java/org/jooq/AlterTableStep.java @@ -558,7 +558,7 @@ public interface AlterTableStep { * statement. */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES }) - AlterTableFinalStep drop(Constraint constraint); + AlterTableDropStep drop(Constraint constraint); /** * Add a DROP CONSTRAINT clause to the ALTER TABLE @@ -567,7 +567,7 @@ public interface AlterTableStep { * @see DSL#constraint(String) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES }) - AlterTableFinalStep dropConstraint(Constraint constraint); + AlterTableDropStep dropConstraint(Constraint constraint); /** * Add a DROP CONSTRAINT clause to the ALTER TABLE @@ -576,7 +576,7 @@ public interface AlterTableStep { * @see DSL#constraint(String) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES }) - AlterTableFinalStep dropConstraint(Name constraint); + AlterTableDropStep dropConstraint(Name constraint); /** * Add a DROP CONSTRAINT clause to the ALTER TABLE @@ -585,14 +585,14 @@ public interface AlterTableStep { * @see DSL#constraint(String) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES }) - AlterTableFinalStep dropConstraint(String constraint); + AlterTableDropStep dropConstraint(String constraint); /** * Add a DROP PRIMARY KEY clause to the ALTER TABLE * statement. */ @Support({ DERBY, H2, HSQLDB, MARIADB, MYSQL }) - AlterTableFinalStep dropPrimaryKey(); + AlterTableDropStep dropPrimaryKey(); /** * Add a DROP PRIMARY KEY clause to the @@ -605,7 +605,7 @@ public interface AlterTableStep { * {@link #dropConstraint(Constraint)}. */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) - AlterTableFinalStep dropPrimaryKey(Constraint constraint); + AlterTableDropStep dropPrimaryKey(Constraint constraint); /** * Add a DROP PRIMARY KEY clause to the ALTER TABLE @@ -620,7 +620,7 @@ public interface AlterTableStep { * @see DSL#constraint(Name) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) - AlterTableFinalStep dropPrimaryKey(Name constraint); + AlterTableDropStep dropPrimaryKey(Name constraint); /** * Add a DROP PRIMARY KEY clause to the ALTER TABLE @@ -635,14 +635,14 @@ public interface AlterTableStep { * @see DSL#constraint(String) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) - AlterTableFinalStep dropPrimaryKey(String constraint); + AlterTableDropStep dropPrimaryKey(String constraint); /** * Add a DROP FOREIGN KEY clause to the ALTER TABLE * statement. */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) - AlterTableFinalStep dropForeignKey(Constraint constraint); + AlterTableDropStep dropForeignKey(Constraint constraint); /** * Add a DROP FOREIGN KEY clause to the ALTER TABLE @@ -651,7 +651,7 @@ public interface AlterTableStep { * @see DSL#constraint(Name) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) - AlterTableFinalStep dropForeignKey(Name constraint); + AlterTableDropStep dropForeignKey(Name constraint); /** * Add a DROP FOREIGN KEY clause to the ALTER TABLE @@ -660,5 +660,5 @@ public interface AlterTableStep { * @see DSL#constraint(String) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) - AlterTableFinalStep dropForeignKey(String constraint); + AlterTableDropStep dropForeignKey(String constraint); } diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java index 62f5cb164c..33d76e8bf7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java @@ -257,9 +257,9 @@ final class AlterTableImpl extends AbstractRowCountQuery implements private Field alterColumnDefault; private boolean alterColumnDropDefault; private QueryPartList> dropColumns; - private boolean dropColumnCascade; private Constraint dropConstraint; private ConstraintType dropConstraintType; + private boolean dropCascade; AlterTableImpl(Configuration configuration, Table table) { this(configuration, table, false); @@ -293,7 +293,7 @@ final class AlterTableImpl extends AbstractRowCountQuery implements final Constraint $renameConstraint() { return renameConstraint; } final Constraint $renameConstraintTo() { return renameConstraintTo; } final List> $dropColumns() { return dropColumns; } - final boolean $dropColumnsCascade() { return dropColumnCascade; } + final boolean $dropCascade() { return dropCascade; } final Constraint $dropConstraint() { return dropConstraint; } final ConstraintType $dropConstraintType() { return dropConstraintType; } @@ -839,13 +839,13 @@ final class AlterTableImpl extends AbstractRowCountQuery implements @Override public final AlterTableFinalStep cascade() { - dropColumnCascade = true; + dropCascade = true; return this; } @Override public final AlterTableFinalStep restrict() { - dropColumnCascade = false; + dropCascade = false; return this; } @@ -1450,7 +1450,7 @@ final class AlterTableImpl extends AbstractRowCountQuery implements - if (dropColumnCascade) + if (dropCascade) ctx.sql(' ').visit(K_CASCADE); } diff --git a/jOOQ/src/main/java/org/jooq/impl/DDLInterpreter.java b/jOOQ/src/main/java/org/jooq/impl/DDLInterpreter.java index 63f2b55c81..593e66450a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DDLInterpreter.java +++ b/jOOQ/src/main/java/org/jooq/impl/DDLInterpreter.java @@ -433,7 +433,7 @@ final class DDLInterpreter { if (fields.size() < query.$dropColumns().size() && !query.$ifExistsColumn()) existing.fields(query.$dropColumns().toArray(EMPTY_FIELD), true); - dropColumns(existing, fields, query.$dropColumnsCascade()); + dropColumns(existing, fields, query.$dropCascade()); } else if (query.$dropConstraint() != null) { ConstraintImpl impl = (ConstraintImpl) query.$dropConstraint(); @@ -454,7 +454,7 @@ final class DDLInterpreter { MutableUniqueKey key = uks.next(); if (key.name.equals(impl.getUnqualifiedName())) { - cascade(key, null, false); + cascade(key, null, query.$dropCascade()); uks.remove(); break removal; } @@ -462,7 +462,7 @@ final class DDLInterpreter { if (existing.primaryKey != null) { if (existing.primaryKey.name.equals(impl.getUnqualifiedName())) { - cascade(existing.primaryKey, null, false); + cascade(existing.primaryKey, null, query.$dropCascade()); existing.primaryKey = null; break removal; } diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 0e373cb4bb..eac37c3c52 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -3774,11 +3774,11 @@ final class ParserImpl implements Parser { case 'D': if (parseKeywordIf(ctx, "DROP")) { if (parseKeywordIf(ctx, "CONSTRAINT")) { - return s1.dropConstraint(parseIdentifier(ctx)); + return parseCascadeRestrictIf(ctx, s1.dropConstraint(parseIdentifier(ctx))); } else if (parseKeywordIf(ctx, "PRIMARY KEY")) { Name identifier = parseIdentifierIf(ctx); - return identifier == null ? s1.dropPrimaryKey() : s1.dropPrimaryKey(identifier); + return parseCascadeRestrictIf(ctx, identifier == null ? s1.dropPrimaryKey() : s1.dropPrimaryKey(identifier)); } else if (parseKeywordIf(ctx, "FOREIGN KEY")) { return s1.dropForeignKey(parseIdentifier(ctx)); @@ -3809,24 +3809,12 @@ final class ParserImpl implements Parser { if (parens) parse(ctx, ')'); - boolean cascade = parseKeywordIf(ctx, "CASCADE"); - boolean restrict = !cascade && parseKeywordIf(ctx, "RESTRICT"); - - AlterTableDropStep s2 = - fields == null + return parseCascadeRestrictIf(ctx, fields == null ? ifColumnExists ? s1.dropColumnIfExists(field) : s1.dropColumn(field) - : s1.dropColumns(fields); - - AlterTableFinalStep s3 = - cascade - ? s2.cascade() - : restrict - ? s2.restrict() - : s2; - - return s3; + : s1.dropColumns(fields) + ); } } @@ -3879,6 +3867,17 @@ final class ParserImpl implements Parser { throw ctx.expected("ADD", "ALTER", "COMMENT", "DROP", "MODIFY", "RENAME"); } + private static final AlterTableFinalStep parseCascadeRestrictIf(ParserContext ctx, AlterTableDropStep step) { + boolean cascade = parseKeywordIf(ctx, "CASCADE"); + boolean restrict = !cascade && parseKeywordIf(ctx, "RESTRICT"); + + return cascade + ? step.cascade() + : restrict + ? step.restrict() + : step; + } + private static final DDLQuery parseAlterTableAdd(ParserContext ctx, AlterTableStep s1, Table tableName) { List list = new ArrayList<>();