From e2e7db2f814317ef4541012c65f63515b6018a39 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 2 May 2024 17:48:28 +0200 Subject: [PATCH] [jOOQ/jOOQ#16629] Support CTE column lists with plain SQL templates --- .../jooq/impl/CommonTableExpressionImpl.java | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/CommonTableExpressionImpl.java b/jOOQ/src/main/java/org/jooq/impl/CommonTableExpressionImpl.java index aa4550ad70..dc6bd96b8f 100644 --- a/jOOQ/src/main/java/org/jooq/impl/CommonTableExpressionImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/CommonTableExpressionImpl.java @@ -43,11 +43,15 @@ import static org.jooq.SQLDialect.CLICKHOUSE; // ... import static org.jooq.SQLDialect.POSTGRES; import static org.jooq.SQLDialect.SQLITE; +import static org.jooq.impl.DSL.falseCondition; +import static org.jooq.impl.DSL.inline; +import static org.jooq.impl.DSL.select; import static org.jooq.impl.DSL.selectFrom; import static org.jooq.impl.Keywords.K_AS; import static org.jooq.impl.Keywords.K_MATERIALIZED; import static org.jooq.impl.Keywords.K_NOT; import static org.jooq.impl.SubqueryCharacteristics.DERIVED_TABLE; +import static org.jooq.impl.Tools.map; import static org.jooq.impl.Tools.visitSubquery; import java.util.Set; @@ -121,10 +125,17 @@ final class CommonTableExpressionImpl extends AbstractTable if (ctx.declareCTE()) { QueryPart s = query; - // [#4474] TODO: Is there a case where we could handle ResultQuery as well? - if (NO_SUPPORT_COLUMN_LIST.contains(ctx.dialect()) && query instanceof Select) { + // [#4474] [#16629] Support this for ResultQuery as well + if (NO_SUPPORT_COLUMN_LIST.contains(ctx.dialect())) { ctx.visit(name.name); - s = new AliasedSelect<>((Select) query, false, true, false, name.fieldNames); + + if (query instanceof Select q) + s = new AliasedSelect<>(q, false, true, false, name.fieldNames); + else + s = DSL.resultQuery("{0} union all {1}", + select(map(name.fieldNames, n -> inline((Object) null).as(n))).where(falseCondition()), + query + ); } else ctx.visit(name);