From cdf8ea738112c1064524ef14adb45296025a7eec Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 21 May 2019 11:20:05 +0200 Subject: [PATCH] [jOOQ/jOOQ#8660] Add support for synthetic ALTER TABLE .. DROP PRIMARY KEY syntax --- .../main/java/org/jooq/AlterTableStep.java | 45 ++++++++++++++++++- .../java/org/jooq/impl/AlterTableImpl.java | 19 ++++++++ .../main/java/org/jooq/impl/ParserImpl.java | 3 +- 3 files changed, 64 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/AlterTableStep.java b/jOOQ/src/main/java/org/jooq/AlterTableStep.java index a2bf763881..0df7394c9f 100644 --- a/jOOQ/src/main/java/org/jooq/AlterTableStep.java +++ b/jOOQ/src/main/java/org/jooq/AlterTableStep.java @@ -593,19 +593,60 @@ public interface AlterTableStep { AlterTableFinalStep dropPrimaryKey(); /** - * Add a DROP FOREIGN KEY clause to the ALTER TABLE + * Add a DROP PRIMARY KEY clause to the + * ALTER TABLE statement. + *

+ * Dialect families derived from MySQL do not know named constraints, in + * case of which this clause simply generates DROP PRIMARY KEY + * as in {@link #dropPrimaryKey()}. In other dialect families, this produces + * a DROP CONSTRAINT [name] clause, as in + * {@link #dropConstraint(Constraint)}. + */ + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + AlterTableFinalStep dropPrimaryKey(Constraint constraint); + + /** + * Add a DROP PRIMARY KEY clause to the ALTER TABLE * statement. + *

+ * Dialect families derived from MySQL do not know named constraints, in + * case of which this clause simply generates DROP PRIMARY KEY + * as in {@link #dropPrimaryKey()}. In other dialect families, this produces + * a DROP CONSTRAINT [name] clause, as in + * {@link #dropConstraint(Name)}. + * + * @see DSL#constraint(Name) + */ + @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + AlterTableFinalStep dropPrimaryKey(Name constraint); + + /** + * Add a DROP PRIMARY KEY clause to the ALTER TABLE + * statement. + *

+ * Dialect families derived from MySQL do not know named constraints, in + * case of which this clause simply generates DROP PRIMARY KEY + * as in {@link #dropPrimaryKey()}. In other dialect families, this produces + * a DROP CONSTRAINT [name] clause, as in + * {@link #dropConstraint(String)}. * * @see DSL#constraint(String) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) + AlterTableFinalStep 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); /** * Add a DROP FOREIGN KEY clause to the ALTER TABLE * statement. * - * @see DSL#constraint(String) + * @see DSL#constraint(Name) */ @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES }) AlterTableFinalStep dropForeignKey(Name constraint); diff --git a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java index c0806a4610..5f353811b8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AlterTableImpl.java @@ -704,6 +704,23 @@ final class AlterTableImpl extends AbstractRowCountQuery implements return this; } + @Override + public final AlterTableImpl dropPrimaryKey(Constraint constraint) { + dropConstraint = constraint; + dropConstraintType = PRIMARY_KEY; + return this; + } + + @Override + public final AlterTableImpl dropPrimaryKey(Name constraint) { + return dropPrimaryKey(constraint(constraint)); + } + + @Override + public final AlterTableImpl dropPrimaryKey(String constraint) { + return dropPrimaryKey(constraint(constraint)); + } + @Override public final AlterTableImpl dropForeignKey(Constraint constraint) { dropConstraint = constraint; @@ -1311,6 +1328,8 @@ final class AlterTableImpl extends AbstractRowCountQuery implements ctx.visit(K_DROP).sql(' ').visit(K_FOREIGN_KEY) .sql(' ') .visit(dropConstraint); + 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(' ') diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 3f9184ff8b..e66bd6a7ba 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -3612,7 +3612,8 @@ final class ParserImpl implements Parser { return s1.dropConstraint(parseIdentifier(ctx)); } else if (parseKeywordIf(ctx, "PRIMARY KEY")) { - return s1.dropPrimaryKey(); + Name identifier = parseIdentifierIf(ctx); + return identifier == null ? s1.dropPrimaryKey() : s1.dropPrimaryKey(identifier); } else if (parseKeywordIf(ctx, "FOREIGN KEY")) { return s1.dropForeignKey(parseIdentifier(ctx));