diff --git a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt index 6b165b96f7..933d817117 100644 --- a/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt +++ b/jOOQ-manual/src/main/resources/org/jooq/web/grammar-3.11.txt @@ -124,7 +124,7 @@ createViewStatement = 'CREATE VIEW' [ 'IF NOT EXISTS' ] tableName [ '(' fieldNames ')' ] 'AS' select ; -dropTableStatement = 'DROP TABLE' [ 'IF EXISTS' ] tableName [ 'CASCADE' | 'RESTRICT' ] +dropTableStatement = 'DROP' [ 'TEMPORARY' ] 'TABLE' [ 'IF EXISTS' ] tableName [ 'CASCADE' | 'RESTRICT' ] ; dropIndexStatement = 'DROP INDEX' [ 'IF EXISTS' ] indexName [ 'ON' tableName ] diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java index 2afb8e55c8..afc7017545 100644 --- a/jOOQ/src/main/java/org/jooq/DSLContext.java +++ b/jOOQ/src/main/java/org/jooq/DSLContext.java @@ -9321,6 +9321,30 @@ public interface DSLContext extends Scope , AutoCloseable { @Support({ CUBRID, DERBY, FIREBIRD, H2, HSQLDB, MARIADB, MYSQL, POSTGRES, SQLITE }) DropTableStep dropTableIfExists(Table table); + /** + * Create a new DSL DROP TEMPORARY TABLE statement. + * + * @see DSL#dropTemporaryTable(String) + */ + @Support + DropTableStep dropTemporaryTable(String table); + + /** + * Create a new DSL DROP TEMPORARY TABLE statement. + * + * @see DSL#dropTemporaryTable(Name) + */ + @Support + DropTableStep dropTemporaryTable(Name table); + + /** + * Create a new DSL DROP TEMPORARY TABLE statement. + * + * @see DSL#dropTemporaryTable(Table) + */ + @Support + DropTableStep dropTemporaryTable(Table table); + /** * Create a new DSL DROP INDEX statement. * diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 0f6a5f4eae..fcbf0f5486 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -7479,6 +7479,36 @@ public class DSL { return using(new DefaultConfiguration()).dropTable(table); } + /** + * Create a new DSL DROP TEMPORARY TABLE statement. + * + * @see DSLContext#dropTemporaryTable(String) + */ + @Support + public static DropTableStep dropTemporaryTable(String table) { + return using(new DefaultConfiguration()).dropTemporaryTable(table); + } + + /** + * Create a new DSL DROP TEMPORARY TABLE statement. + * + * @see DSLContext#dropTemporaryTable(Name) + */ + @Support + public static DropTableStep dropTemporaryTable(Name table) { + return using(new DefaultConfiguration()).dropTemporaryTable(table); + } + + /** + * Create a new DSL DROP TEMPORARY TABLE statement. + * + * @see DSLContext#dropTemporaryTable(Table) + */ + @Support + public static DropTableStep dropTemporaryTable(Table table) { + return using(new DefaultConfiguration()).dropTemporaryTable(table); + } + /** * Create a new DSL DROP TABLE IF EXISTS statement. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index 82ee56d48a..adf1e97ca0 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -3352,6 +3352,21 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri return new DropTableImpl(configuration(), table); } + @Override + public DropTableStep dropTemporaryTable(String table) { + return dropTable(name(table)); + } + + @Override + public DropTableStep dropTemporaryTable(Name table) { + return dropTable(table(table)); + } + + @Override + public DropTableStep dropTemporaryTable(Table table) { + return new DropTableImpl(configuration(), table); + } + @Override public DropTableStep dropTableIfExists(String table) { return dropTableIfExists(name(table)); diff --git a/jOOQ/src/main/java/org/jooq/impl/DropTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/DropTableImpl.java index 664c31dcce..508e421246 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DropTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DropTableImpl.java @@ -76,18 +76,24 @@ final class DropTableImpl extends AbstractQuery implements private static final EnumSet NO_SUPPORT_IF_EXISTS = EnumSet.of(DERBY, FIREBIRD); private final Table table; + private final boolean temporary; private final boolean ifExists; private boolean cascade; DropTableImpl(Configuration configuration, Table table) { - this(configuration, table, false); + this(configuration, table, false, false); } DropTableImpl(Configuration configuration, Table table, boolean ifExists) { + this(configuration, table, ifExists, false); + } + + DropTableImpl(Configuration configuration, Table table, boolean ifExists, boolean temporary) { super(configuration); this.table = table; this.ifExists = ifExists; + this.temporary = temporary; } // ------------------------------------------------------------------------ @@ -130,14 +136,17 @@ final class DropTableImpl extends AbstractQuery implements ctx.start(DROP_TABLE_TABLE) .visit(K_DROP_TABLE).sql(' '); + // [#6371] The keyword isn't strictly required in any dialect we've seen so far. + if (temporary) + ; + if (ifExists && supportsIfExists(ctx)) ctx.visit(K_IF_EXISTS).sql(' '); ctx.visit(table); - if (cascade) { + if (cascade) ctx.sql(' ').visit(K_CASCADE); - } ctx.end(DROP_TABLE_TABLE); } diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index 22b2e38622..8d0d2badc1 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -1271,7 +1271,9 @@ final class ParserImpl implements Parser { parseKeyword(ctx, "DROP"); if (parseKeywordIf(ctx, "TABLE")) - return parseDropTable(ctx); + return parseDropTable(ctx, false); + else if (parseKeywordIf(ctx, "TEMPORARY TABLE")) + return parseDropTable(ctx, true); else if (parseKeywordIf(ctx, "INDEX")) return parseDropIndex(ctx); else if (parseKeywordIf(ctx, "VIEW")) @@ -2234,7 +2236,7 @@ final class ParserImpl implements Parser { return ctx.dsl.alterTable(oldName).renameTo(newName); } - private static final DDLQuery parseDropTable(ParserContext ctx) { + private static final DDLQuery parseDropTable(ParserContext ctx, boolean temporary) { boolean ifExists = parseKeywordIf(ctx, "IF EXISTS"); Table tableName = parseTableName(ctx); boolean cascade = parseKeywordIf(ctx, "CASCADE"); @@ -2244,14 +2246,16 @@ final class ParserImpl implements Parser { DropTableFinalStep s2; s1 = ifExists - ? ctx.dsl.dropTableIfExists(tableName) - : ctx.dsl.dropTable(tableName); + ? ctx.dsl.dropTableIfExists(tableName) + : temporary + ? ctx.dsl.dropTemporaryTable(tableName) + : ctx.dsl.dropTable(tableName); s2 = cascade - ? s1.cascade() - : restrict - ? s1.restrict() - : s1; + ? s1.cascade() + : restrict + ? s1.restrict() + : s1; return s2; }