From 8b267a321c8f25fc3b887f8c5697aa3ee6a47f9e Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Mon, 30 Sep 2019 11:09:31 +0200 Subject: [PATCH] [jOOQ/jOOQ#8524] Add support for CREATE TEMPORARY TABLE IF NOT EXISTS --- jOOQ/src/main/java/org/jooq/DSLContext.java | 24 +++++++++++++ jOOQ/src/main/java/org/jooq/impl/DSL.java | 36 +++++++++++++++++-- .../java/org/jooq/impl/DefaultDSLContext.java | 15 ++++++++ .../main/java/org/jooq/impl/ParserImpl.java | 6 ++-- 4 files changed, 76 insertions(+), 5 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/DSLContext.java b/jOOQ/src/main/java/org/jooq/DSLContext.java index e4b36e7334..ede59cf2b5 100644 --- a/jOOQ/src/main/java/org/jooq/DSLContext.java +++ b/jOOQ/src/main/java/org/jooq/DSLContext.java @@ -8694,6 +8694,30 @@ public interface DSLContext extends Scope , AutoCloseable { @Support({ MARIADB, MYSQL, POSTGRES }) CreateTableColumnStep createTemporaryTable(Table table); + /** + * Create a new DSL CREATE TEMPORARY TABLE IF NOT EXISTS statement. + * + * @see DSL#createTemporaryTableIfNotExists(String) + */ + @Support({ MARIADB, MYSQL, POSTGRES }) + CreateTableColumnStep createTemporaryTableIfNotExists(String table); + + /** + * Create a new DSL CREATE TEMPORARY TABLE IF NOT EXISTS statement. + * + * @see DSL#createTemporaryTableIfNotExists(Name) + */ + @Support({ MARIADB, MYSQL, POSTGRES }) + CreateTableColumnStep createTemporaryTableIfNotExists(Name table); + + /** + * Create a new DSL CREATE TEMPORARY TABLE IF NOT EXISTS statement. + * + * @see DSL#createTemporaryTableIfNotExists(Table) + */ + @Support({ MARIADB, MYSQL, POSTGRES }) + CreateTableColumnStep createTemporaryTableIfNotExists(Table table); + /** * Create a new DSL CREATE GLOBAL TEMPORARY TABLE statement. * diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 4bbed50aa6..773c2f0a65 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -6693,7 +6693,7 @@ public class DSL { } /** - * Create a new DSL CREATE GLOBAL TEMPORARY TABLE statement. + * Create a new DSL CREATE TEMPORARY TABLE statement. * * @see DSLContext#createTemporaryTable(String) */ @@ -6703,7 +6703,7 @@ public class DSL { } /** - * Create a new DSL CREATE GLOBAL TEMPORARY TABLE statement. + * Create a new DSL CREATE TEMPORARY TABLE statement. * * @see DSLContext#createTemporaryTable(Name) */ @@ -6713,7 +6713,7 @@ public class DSL { } /** - * Create a new DSL CREATE GLOBAL TEMPORARY TABLE statement. + * Create a new DSL CREATE TEMPORARY TABLE statement. * * @see DSLContext#createTemporaryTable(Table) */ @@ -6722,6 +6722,36 @@ public class DSL { return dsl().createTemporaryTable(table); } + /** + * Create a new DSL CREATE TEMPORARY TABLE statement. + * + * @see DSLContext#createTemporaryTableIfNotExists(String) + */ + @Support({ MARIADB, MYSQL, POSTGRES }) + public static CreateTableColumnStep createTemporaryTableIfNotExists(String table) { + return dsl().createTemporaryTableIfNotExists(table); + } + + /** + * Create a new DSL CREATE TEMPORARY TABLE statement. + * + * @see DSLContext#createTemporaryTableIfNotExists(Name) + */ + @Support({ MARIADB, MYSQL, POSTGRES }) + public static CreateTableColumnStep createTemporaryTableIfNotExists(Name table) { + return dsl().createTemporaryTableIfNotExists(table); + } + + /** + * Create a new DSL CREATE TEMPORARY TABLE statement. + * + * @see DSLContext#createTemporaryTableIfNotExists(Table) + */ + @Support({ MARIADB, MYSQL, POSTGRES }) + public static CreateTableColumnStep createTemporaryTableIfNotExists(Table table) { + return dsl().createTemporaryTableIfNotExists(table); + } + /** * Create a new DSL CREATE GLOBAL TEMPORARY TABLE statement. * diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index 8a33507223..be89f2c2fe 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -3127,6 +3127,21 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri return new CreateTableImpl(configuration(), table, true, false); } + @Override + public CreateTableColumnStep createTemporaryTableIfNotExists(String table) { + return createTemporaryTableIfNotExists(name(table)); + } + + @Override + public CreateTableColumnStep createTemporaryTableIfNotExists(Name table) { + return createTemporaryTableIfNotExists(table(table)); + } + + @Override + public CreateTableColumnStep createTemporaryTableIfNotExists(Table table) { + return new CreateTableImpl(configuration(), table, true, true); + } + @Override public CreateTableColumnStep createGlobalTemporaryTable(String table) { return createGlobalTemporaryTable(name(table)); diff --git a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java index c2549d00d6..22a3045d9a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/ParserImpl.java @@ -3103,7 +3103,7 @@ final class ParserImpl implements Parser { } private static final DDLQuery parseCreateTable(ParserContext ctx, boolean temporary) { - boolean ifNotExists = !temporary && parseKeywordIf(ctx, "IF NOT EXISTS"); + boolean ifNotExists = parseKeywordIf(ctx, "IF NOT EXISTS"); Table tableName = DSL.table(parseTableName(ctx).getQualifiedName()); CreateTableCommentStep commentStep; CreateTableStorageStep storageStep; @@ -3383,7 +3383,9 @@ final class ParserImpl implements Parser { ctas = true; CreateTableColumnStep columnStep = ifNotExists - ? ctx.dsl.createTableIfNotExists(tableName) + ? temporary + ? ctx.dsl.createTemporaryTableIfNotExists(tableName) + : ctx.dsl.createTableIfNotExists(tableName) : temporary ? ctx.dsl.createTemporaryTable(tableName) : ctx.dsl.createTable(tableName);