diff --git a/jOOQ/src/main/java/org/jooq/AlterTableStep.java b/jOOQ/src/main/java/org/jooq/AlterTableStep.java
index 007583107c..c07c80f91a 100644
--- a/jOOQ/src/main/java/org/jooq/AlterTableStep.java
+++ b/jOOQ/src/main/java/org/jooq/AlterTableStep.java
@@ -555,7 +555,7 @@ public interface AlterTableStep {
* Add a DROP CONSTRAINT clause to the ALTER TABLE
* statement.
*/
- @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES })
+ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES })
AlterTableFinalStep drop(Constraint constraint);
/**
@@ -564,8 +564,27 @@ public interface AlterTableStep {
*
* @see DSL#constraint(String)
*/
- @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES })
+ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES })
+ AlterTableFinalStep dropConstraint(Constraint constraint);
+
+ /**
+ * Add a DROP CONSTRAINT clause to the ALTER TABLE
+ * statement.
+ *
+ * @see DSL#constraint(String)
+ */
+ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES })
AlterTableFinalStep dropConstraint(Name constraint);
+
+ /**
+ * Add a DROP CONSTRAINT clause to the ALTER TABLE
+ * statement.
+ *
+ * @see DSL#constraint(String)
+ */
+ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES })
+ AlterTableFinalStep dropConstraint(String constraint);
+
/**
* Add a DROP CONSTRAINT clause to the ALTER TABLE
* statement.
@@ -573,5 +592,23 @@ public interface AlterTableStep {
* @see DSL#constraint(String)
*/
@Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES })
- AlterTableFinalStep dropConstraint(String constraint);
+ AlterTableFinalStep dropForeignKey(Constraint constraint);
+
+ /**
+ * Add a DROP CONSTRAINT clause to the ALTER TABLE
+ * statement.
+ *
+ * @see DSL#constraint(String)
+ */
+ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES })
+ AlterTableFinalStep dropForeignKey(Name constraint);
+
+ /**
+ * Add a DROP CONSTRAINT clause to the ALTER TABLE
+ * statement.
+ *
+ * @see DSL#constraint(String)
+ */
+ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES })
+ AlterTableFinalStep 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 92d90f5ccb..08b1c63b53 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java
@@ -70,6 +70,7 @@ import static org.jooq.SQLDialect.POSTGRES;
// ...
// ...
// ...
+import static org.jooq.impl.ConstraintType.FOREIGN_KEY;
import static org.jooq.impl.DSL.commentOnTable;
import static org.jooq.impl.DSL.constraint;
import static org.jooq.impl.DSL.field;
@@ -95,6 +96,7 @@ import static org.jooq.impl.Keywords.K_ELSE;
import static org.jooq.impl.Keywords.K_END_IF;
import static org.jooq.impl.Keywords.K_EXCEPTION;
import static org.jooq.impl.Keywords.K_EXEC;
+import static org.jooq.impl.Keywords.K_FOREIGN_KEY;
import static org.jooq.impl.Keywords.K_IF;
import static org.jooq.impl.Keywords.K_IF_EXISTS;
import static org.jooq.impl.Keywords.K_IF_NOT_EXISTS;
@@ -188,6 +190,7 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
private static final EnumSet SUPPORT_RENAME_TABLE = EnumSet.of(DERBY);
private static final EnumSet NO_SUPPORT_RENAME_QUALIFIED_TABLE = EnumSet.of(POSTGRES);
private static final EnumSet NO_SUPPORT_ALTER_TYPE_AND_NULL = EnumSet.of(POSTGRES);
+ private static final EnumSet NO_SUPPORT_DROP_CONSTRAINT = EnumSet.of(MYSQL);
private static final EnumSet REQUIRE_REPEAT_ADD_ON_MULTI_ALTER = EnumSet.of(FIREBIRD, MARIADB, MYSQL, POSTGRES);
private static final EnumSet REQUIRE_REPEAT_DROP_ON_MULTI_ALTER = EnumSet.of(FIREBIRD, MARIADB, MYSQL, POSTGRES);
@@ -228,6 +231,7 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
private QueryPartList> dropColumns;
private boolean dropColumnCascade;
private Constraint dropConstraint;
+ private ConstraintType dropConstraintType;
AlterTableImpl(Configuration configuration, Table> table) {
this(configuration, table, false);
@@ -663,17 +667,40 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
@Override
public final AlterTableImpl drop(Constraint constraint) {
dropConstraint = constraint;
+ dropConstraintType = null;
return this;
}
+ @Override
+ public final AlterTableImpl dropConstraint(Constraint constraint) {
+ return drop(constraint);
+ }
+
@Override
public final AlterTableImpl dropConstraint(Name constraint) {
- return drop(DSL.constraint(constraint));
+ return dropConstraint(DSL.constraint(constraint));
}
@Override
public final AlterTableImpl dropConstraint(String constraint) {
- return drop(DSL.constraint(constraint));
+ return dropConstraint(DSL.constraint(constraint));
+ }
+
+ @Override
+ public final AlterTableImpl dropForeignKey(Constraint constraint) {
+ dropConstraint = constraint;
+ dropConstraintType = FOREIGN_KEY;
+ return this;
+ }
+
+ @Override
+ public final AlterTableImpl dropForeignKey(Name constraint) {
+ return dropForeignKey(DSL.constraint(constraint));
+ }
+
+ @Override
+ public final AlterTableImpl dropForeignKey(String constraint) {
+ return dropForeignKey(DSL.constraint(constraint));
}
@Override
@@ -1232,9 +1259,14 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
ctx.start(ALTER_TABLE_DROP);
ctx.data(DATA_CONSTRAINT_REFERENCE, true);
- ctx.visit(K_DROP_CONSTRAINT)
- .sql(' ')
- .visit(dropConstraint);
+ if (dropConstraintType == FOREIGN_KEY && NO_SUPPORT_DROP_CONSTRAINT.contains(family))
+ ctx.visit(K_DROP).sql(' ').visit(K_FOREIGN_KEY)
+ .sql(' ')
+ .visit(dropConstraint);
+ else
+ ctx.visit(K_DROP_CONSTRAINT)
+ .sql(' ')
+ .visit(dropConstraint);
ctx.data().remove(DATA_CONSTRAINT_REFERENCE);
ctx.end(ALTER_TABLE_DROP);
diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java
index b3a87974c3..6de3993aa2 100644
--- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java
@@ -176,6 +176,24 @@ final class InsertQueryImpl extends AbstractStoreQuery impl
@Override
public final void onConflictOnConstraint(Constraint constraint) {
+ onConflictOnConstraint0(constraint);
+ }
+
+ @Override
+ public void onConflictOnConstraint(UniqueKey constraint) {
+ if (StringUtils.isEmpty(constraint.getName()))
+ throw new IllegalArgumentException("UniqueKey's name is not specified");
+
+ this.onConstraintUniqueKey = constraint;
+ onConflictOnConstraint0(constraint(name(constraint.getName())));
+ }
+
+ @Override
+ public final void onConflictOnConstraint(Name constraint) {
+ onConflictOnConstraint0(constraint(constraint));
+ }
+
+ private void onConflictOnConstraint0(Constraint constraint) {
this.onConstraint = constraint;
if (onConstraintUniqueKey == null) {
@@ -188,20 +206,6 @@ final class InsertQueryImpl extends AbstractStoreQuery impl
}
}
- @Override
- public void onConflictOnConstraint(UniqueKey constraint) {
- if (StringUtils.isEmpty(constraint.getName()))
- throw new IllegalArgumentException("UniqueKey's name is not specified");
-
- this.onConstraintUniqueKey = constraint;
- onConflictOnConstraint(name(constraint.getName()));
- }
-
- @Override
- public final void onConflictOnConstraint(Name constraint) {
- onConflictOnConstraint(constraint(constraint));
- }
-
@Override
public final void onDuplicateKeyUpdate(boolean flag) {
this.onDuplicateKeyIgnore = false;
diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
index 6f02d09196..d297dfcc88 100644
--- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java
@@ -3609,9 +3609,10 @@ final class ParserImpl implements Parser {
case 'D':
if (parseKeywordIf(ctx, "DROP")) {
if (parseKeywordIf(ctx, "CONSTRAINT")) {
- Name constraint = parseIdentifier(ctx);
-
- return s1.dropConstraint(constraint);
+ return s1.dropConstraint(parseIdentifier(ctx));
+ }
+ else if (parseKeywordIf(ctx, "FOREIGN KEY")) {
+ return s1.dropForeignKey(parseIdentifier(ctx));
}
else if (parseKeywordIf(ctx, "INDEX")
|| parseKeywordIf(ctx, "KEY")) {