From a256f6db53c6f8ecd7d105b42cb71a20e3381542 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 16 Jan 2025 08:58:49 +0100 Subject: [PATCH] [jOOQ/jOOQ#9085] SQLDialect.DEFAULT should render * EXCEPT syntax --- .../main/java/org/jooq/impl/AsteriskImpl.java | 25 +++++++++++++++++-- .../java/org/jooq/impl/SelectQueryImpl.java | 9 ++----- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AsteriskImpl.java b/jOOQ/src/main/java/org/jooq/impl/AsteriskImpl.java index be91591539..fa10642df7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AsteriskImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AsteriskImpl.java @@ -37,19 +37,40 @@ */ package org.jooq.impl; +// ... +// ... +// ... // ... // ... import static org.jooq.SQLDialect.CLICKHOUSE; +// ... +import static org.jooq.SQLDialect.CUBRID; +// ... import static org.jooq.SQLDialect.DERBY; import static org.jooq.SQLDialect.DUCKDB; +// ... import static org.jooq.SQLDialect.FIREBIRD; -import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.SQLDialect.HSQLDB; +import static org.jooq.SQLDialect.IGNITE; +// ... +// ... // ... import static org.jooq.SQLDialect.MARIADB; +// ... import static org.jooq.SQLDialect.MYSQL; // ... +import static org.jooq.SQLDialect.POSTGRES; // ... +// ... +// ... +import static org.jooq.SQLDialect.SQLITE; +// ... +// ... +// ... +import static org.jooq.SQLDialect.TRINO; +// ... +import static org.jooq.SQLDialect.YUGABYTEDB; import static org.jooq.impl.Keywords.K_EXCEPT; import static org.jooq.impl.Keywords.K_EXCLUDE; @@ -74,7 +95,7 @@ import org.jooq.impl.QOM.UnmodifiableList; */ final class AsteriskImpl extends AbstractQueryPart implements Asterisk { static final Lazy INSTANCE = Lazy.of(() -> new AsteriskImpl(new QueryPartList<>())); - static final Set SUPPORT_NATIVE_EXCEPT = SQLDialect.supportedBy(H2); + static final Set NO_SUPPORT_NATIVE_EXCEPT = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB); static final Set NO_SUPPORT_UNQUALIFIED_COMBINED = SQLDialect.supportedBy(CLICKHOUSE, DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL); diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 00efbd4f7b..8e02dbf072 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -124,8 +124,8 @@ import static org.jooq.SortOrder.DESC; // ... import static org.jooq.conf.ParamType.INLINED; import static org.jooq.conf.SettingsTools.getRenderTable; +import static org.jooq.impl.AsteriskImpl.NO_SUPPORT_NATIVE_EXCEPT; import static org.jooq.impl.AsteriskImpl.NO_SUPPORT_UNQUALIFIED_COMBINED; -import static org.jooq.impl.AsteriskImpl.SUPPORT_NATIVE_EXCEPT; import static org.jooq.impl.CombineOperator.EXCEPT; import static org.jooq.impl.CombineOperator.EXCEPT_ALL; import static org.jooq.impl.CombineOperator.INTERSECT; @@ -202,7 +202,6 @@ import static org.jooq.impl.Tools.aliased; import static org.jooq.impl.Tools.aliasedFields; import static org.jooq.impl.Tools.allMatch; import static org.jooq.impl.Tools.anyMatch; -import static org.jooq.impl.Tools.apply; import static org.jooq.impl.Tools.autoAlias; import static org.jooq.impl.Tools.camelCase; import static org.jooq.impl.Tools.concat; @@ -308,11 +307,7 @@ import org.jooq.Select; import org.jooq.SelectField; import org.jooq.SelectFieldOrAsterisk; import org.jooq.SelectGroupByStep; -import org.jooq.SelectLimitPercentStep; -import org.jooq.SelectLimitStep; -import org.jooq.SelectOffsetStep; import org.jooq.SelectQuery; -import org.jooq.SelectWithTiesStep; import org.jooq.SortField; import org.jooq.Table; import org.jooq.TableField; @@ -4278,7 +4273,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp boolean knownTableSource = knownTableSource(); // [#7921] Only H2 supports the * EXCEPT (..) syntax - boolean resolveExcept = resolveSupported || knownTableSource && !SUPPORT_NATIVE_EXCEPT.contains(ctx.dialect()); + boolean resolveExcept = resolveSupported || knownTableSource && NO_SUPPORT_NATIVE_EXCEPT.contains(ctx.dialect()); boolean resolveUnqualifiedCombined = resolveSupported || knownTableSource && NO_SUPPORT_UNQUALIFIED_COMBINED.contains(ctx.dialect()); // [#7921] TODO Find a better, more efficient way to resolve asterisks