[jOOQ/jOOQ#9085] SQLDialect.DEFAULT should render * EXCEPT syntax

This commit is contained in:
Lukas Eder 2025-01-16 08:58:49 +01:00
parent c34fd07c47
commit a256f6db53
2 changed files with 25 additions and 9 deletions

View File

@ -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<AsteriskImpl> INSTANCE = Lazy.of(() -> new AsteriskImpl(new QueryPartList<>()));
static final Set<SQLDialect> SUPPORT_NATIVE_EXCEPT = SQLDialect.supportedBy(H2);
static final Set<SQLDialect> NO_SUPPORT_NATIVE_EXCEPT = SQLDialect.supportedBy(CLICKHOUSE, CUBRID, DERBY, DUCKDB, FIREBIRD, HSQLDB, IGNITE, MARIADB, MYSQL, POSTGRES, SQLITE, TRINO, YUGABYTEDB);
static final Set<SQLDialect> NO_SUPPORT_UNQUALIFIED_COMBINED = SQLDialect.supportedBy(CLICKHOUSE, DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL);

View File

@ -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<R extends Record> extends AbstractResultQuery<R> 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