diff --git a/jOOQ/src/main/java/org/jooq/AlterTableStep.java b/jOOQ/src/main/java/org/jooq/AlterTableStep.java
index 433edb21ee..dbb9028356 100644
--- a/jOOQ/src/main/java/org/jooq/AlterTableStep.java
+++ b/jOOQ/src/main/java/org/jooq/AlterTableStep.java
@@ -588,6 +588,40 @@ public interface AlterTableStep {
@Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, POSTGRES })
AlterTableDropStep dropConstraint(String constraint);
+ /**
+ * Add a DROP CONSTRAINT IF EXISTS clause to the ALTER TABLE
+ * statement.
+ */
+ @Support({ H2, POSTGRES })
+ AlterTableDropStep dropIfExists(Constraint constraint);
+
+ /**
+ * Add a DROP CONSTRAINT IF EXISTS clause to the ALTER TABLE
+ * statement.
+ *
+ * @see DSL#constraint(String)
+ */
+ @Support({ H2, POSTGRES })
+ AlterTableDropStep dropConstraintIfExists(Constraint constraint);
+
+ /**
+ * Add a DROP CONSTRAINT IF EXISTS clause to the ALTER TABLE
+ * statement.
+ *
+ * @see DSL#constraint(String)
+ */
+ @Support({ H2, POSTGRES })
+ AlterTableDropStep dropConstraintIfExists(Name constraint);
+
+ /**
+ * Add a DROP CONSTRAINT IF EXISTS clause to the ALTER TABLE
+ * statement.
+ *
+ * @see DSL#constraint(String)
+ */
+ @Support({ H2, POSTGRES })
+ AlterTableDropStep dropConstraintIfExists(String constraint);
+
/**
* Add a DROP PRIMARY KEY clause to the ALTER TABLE
* statement.
diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java
index a541056cab..c5ff4c2fc0 100644
--- a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java
+++ b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java
@@ -238,6 +238,7 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
private final Table> table;
private final boolean ifExists;
private boolean ifExistsColumn;
+ private boolean ifExistsConstraint;
private boolean ifNotExistsColumn;
private Comment comment;
private Table> renameTo;
@@ -282,6 +283,7 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
final Table> $table() { return table; }
final boolean $ifExists() { return ifExists; }
final boolean $ifExistsColumn() { return ifExistsColumn; }
+ final boolean $ifExistsConstraint() { return ifExistsConstraint; }
final boolean $ifNotExistsColumn() { return ifNotExistsColumn; }
final Field> $addColumn() { return addColumn; }
final DataType> $addColumnType() { return addColumnType; }
@@ -804,6 +806,27 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
return dropConstraint(DSL.constraint(constraint));
}
+ @Override
+ public final AlterTableImpl dropIfExists(Constraint constraint) {
+ ifExistsConstraint = true;
+ return drop(constraint);
+ }
+
+ @Override
+ public final AlterTableImpl dropConstraintIfExists(Constraint constraint) {
+ return dropIfExists(constraint);
+ }
+
+ @Override
+ public final AlterTableImpl dropConstraintIfExists(Name constraint) {
+ return dropIfExists(constraint(constraint));
+ }
+
+ @Override
+ public final AlterTableImpl dropConstraintIfExists(String constraint) {
+ return dropIfExists(constraint(constraint));
+ }
+
@Override
public final AlterTableImpl dropPrimaryKey() {
dropConstraintType = PRIMARY_KEY;
@@ -1542,16 +1565,22 @@ final class AlterTableImpl extends AbstractRowCountQuery implements
ctx.start(ALTER_TABLE_DROP);
ctx.data(DATA_CONSTRAINT_REFERENCE, true);
- if (dropConstraintType == FOREIGN_KEY && NO_SUPPORT_DROP_CONSTRAINT.contains(family))
+ if (dropConstraintType == FOREIGN_KEY && NO_SUPPORT_DROP_CONSTRAINT.contains(family)) {
ctx.visit(K_DROP).sql(' ').visit(K_FOREIGN_KEY)
.sql(' ')
.visit(dropConstraint);
- else if (dropConstraintType == PRIMARY_KEY && NO_SUPPORT_DROP_CONSTRAINT.contains(family))
+ }
+ else if (dropConstraintType == PRIMARY_KEY && NO_SUPPORT_DROP_CONSTRAINT.contains(family)) {
ctx.visit(K_DROP).sql(' ').visit(K_PRIMARY_KEY);
- else
- ctx.visit(K_DROP_CONSTRAINT)
- .sql(' ')
- .visit(dropConstraint);
+ }
+ else {
+ ctx.visit(K_DROP_CONSTRAINT).sql(' ');
+
+ if (ifExistsConstraint)
+ ctx.visit(K_IF_EXISTS).sql(' ');
+
+ ctx.visit(dropConstraint);
+ }
acceptCascade(ctx);