From 3f727f759f8e48023f52f07c8990f344ae26bb86 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 15 Feb 2024 15:12:42 +0100 Subject: [PATCH] [jOOQ/jOOQ#16290] Wrong SQL generated for CREATE TABLE in non-default schemas for DuckDB --- .../main/java/org/jooq/impl/CreateTableImpl.java | 2 +- .../org/jooq/impl/QualifiedAsteriskImpl.java | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java b/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java index d9f6d32de0..9b5881b5fb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CreateTableImpl.java @@ -344,7 +344,7 @@ implements static final Set NO_SUPPORT_IF_NOT_EXISTS = SQLDialect.supportedUntil(DERBY, FIREBIRD); static final Set NO_SUPPORT_WITH_DATA = SQLDialect.supportedBy(DUCKDB, H2, MARIADB, MYSQL, SQLITE); - static final Set NO_SUPPORT_CTAS_COLUMN_NAMES = SQLDialect.supportedBy(H2); + static final Set NO_SUPPORT_CTAS_COLUMN_NAMES = SQLDialect.supportedBy(DUCKDB, H2); static final Set EMULATE_INDEXES_IN_BLOCK = SQLDialect.supportedBy(FIREBIRD, POSTGRES, YUGABYTEDB); static final Set EMULATE_SOME_ENUM_TYPES_AS_CHECK = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, POSTGRES, SQLITE, YUGABYTEDB); static final Set EMULATE_STORED_ENUM_TYPES_AS_CHECK = SQLDialect.supportedBy(CUBRID, DERBY, FIREBIRD, HSQLDB, SQLITE); diff --git a/jOOQ/src/main/java/org/jooq/impl/QualifiedAsteriskImpl.java b/jOOQ/src/main/java/org/jooq/impl/QualifiedAsteriskImpl.java index 36c9abb0fd..a1fe2a2a7f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/QualifiedAsteriskImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/QualifiedAsteriskImpl.java @@ -37,10 +37,12 @@ */ package org.jooq.impl; +import static org.jooq.SQLDialect.DUCKDB; import static org.jooq.impl.Keywords.K_EXCEPT; import java.util.Arrays; import java.util.Collection; +import java.util.Set; import org.jooq.Context; import org.jooq.Field; @@ -48,6 +50,7 @@ import org.jooq.Name; import org.jooq.QualifiedAsterisk; import org.jooq.QueryPart; // ... +import org.jooq.SQLDialect; import org.jooq.Table; // ... import org.jooq.impl.QOM.UnmodifiableList; @@ -57,8 +60,10 @@ import org.jooq.impl.QOM.UnmodifiableList; */ final class QualifiedAsteriskImpl extends AbstractQueryPart implements QualifiedAsterisk { - private final Table table; - final QueryPartList> fields; + private static final Set NO_SUPPORT_FULLY_QUALIFIED_ASTERISKS = SQLDialect.supportedBy(DUCKDB); + + private final Table table; + final QueryPartList> fields; QualifiedAsteriskImpl(Table table) { this(table, null); @@ -83,7 +88,12 @@ final class QualifiedAsteriskImpl extends AbstractQueryPart implements Qualified default: - ctx.visit(table).sql('.').visit(AsteriskImpl.INSTANCE.get()); + if (NO_SUPPORT_FULLY_QUALIFIED_ASTERISKS.contains(ctx.dialect())) + ctx.qualify(false, c -> c.visit(table)); + else + ctx.visit(table); + + ctx.sql('.').visit(AsteriskImpl.INSTANCE.get()); // [#7921] H2 has native support for EXCEPT. Emulations are implemented // in SelectQueryImpl