diff --git a/jOOQ/src/main/java/org/jooq/impl/AsteriskImpl.java b/jOOQ/src/main/java/org/jooq/impl/AsteriskImpl.java index e0ef96a543..753fcd98cb 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AsteriskImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/AsteriskImpl.java @@ -39,6 +39,7 @@ package org.jooq.impl; // ... import static org.jooq.SQLDialect.H2; +// ... import static org.jooq.impl.Keywords.K_EXCEPT; import java.util.Arrays; @@ -58,9 +59,10 @@ final class AsteriskImpl extends AbstractQueryPart implements Asterisk { /** * Generated UI */ - private static final long serialVersionUID = 6298415939984684260L; - static final AsteriskImpl INSTANCE = new AsteriskImpl(new QueryPartList<>()); - static final Set SUPPORT_NATIVE_EXCEPT = SQLDialect.supportedBy(H2); + private static final long serialVersionUID = 6298415939984684260L; + static final AsteriskImpl INSTANCE = new AsteriskImpl(new QueryPartList<>()); + static final Set SUPPORT_NATIVE_EXCEPT = SQLDialect.supportedBy(H2); + static final Set NO_SUPPORT_UNQUALIFIED_COMBINED = SQLDialect.supportedBy(); final QueryPartList> fields; private AsteriskImpl(QueryPartList> fields) { diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 3ea93f5650..b6a0beaf2b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -105,6 +105,7 @@ import static org.jooq.SQLDialect.SQLITE; // ... import static org.jooq.SortOrder.DESC; import static org.jooq.conf.ParamType.INLINED; +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; @@ -3560,9 +3561,12 @@ final class SelectQueryImpl extends AbstractResultQuery imp // [#7921] Only H2 supports the * EXCEPT (..) syntax boolean resolveExcept = resolveSupported || !SUPPORT_NATIVE_EXCEPT.contains(c.dialect()); + boolean resolveUnqualifiedCombined = resolveSupported || NO_SUPPORT_UNQUALIFIED_COMBINED.contains(c.dialect()); // [#7921] TODO Find a better, more efficient way to resolve asterisks - for (SelectFieldOrAsterisk f : getSelectResolveImplicitAsterisks()) + SelectFieldList list = getSelectResolveImplicitAsterisks(); + + for (SelectFieldOrAsterisk f : list) if (f instanceof Field) result.add(getResolveProjection(c, (Field) f)); else if (f instanceof QualifiedAsterisk) @@ -3577,7 +3581,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp result.add(f); else if (f instanceof Asterisk) if (((AsteriskImpl) f).fields.isEmpty()) - if (resolveSupported) + if (resolveSupported || resolveUnqualifiedCombined && list.size() > 1) result.addAll(resolveAsterisk(new QueryPartList<>())); else result.add(f);