From 6b941eda98db612bf9c8a515fae58a650518b8d9 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Tue, 13 Mar 2018 09:48:58 +0100 Subject: [PATCH] [#3045] DSL.groupConcat() without orderBy() is incorrectly emulated for Oracle --- jOOQ/src/main/java/org/jooq/impl/Function.java | 16 ++++++++++------ .../src/main/java/org/jooq/impl/GroupConcat.java | 11 ++++------- 2 files changed, 14 insertions(+), 13 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/Function.java b/jOOQ/src/main/java/org/jooq/impl/Function.java index 31587ac0e3..b6e1ad7c3e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Function.java +++ b/jOOQ/src/main/java/org/jooq/impl/Function.java @@ -59,6 +59,7 @@ import static org.jooq.impl.Keywords.K_FIRST; import static org.jooq.impl.Keywords.K_IGNORE_NULLS; import static org.jooq.impl.Keywords.K_KEEP; import static org.jooq.impl.Keywords.K_LAST; +import static org.jooq.impl.Keywords.K_NULL; import static org.jooq.impl.Keywords.K_ORDER_BY; import static org.jooq.impl.Keywords.K_OVER; import static org.jooq.impl.Keywords.K_RESPECT_NULLS; @@ -408,12 +409,15 @@ class Function extends AbstractField implements * Render WITHIN GROUP (ORDER BY ..) clause */ final void toSQLWithinGroupClause(Context ctx) { - if (!withinGroupOrderBy.isEmpty()) { - ctx.sql(' ').visit(K_WITHIN_GROUP) - .sql(" (").visit(K_ORDER_BY) - .sql(' ').visit(withinGroupOrderBy) - .sql(')'); - } + ctx.sql(' ').visit(K_WITHIN_GROUP) + .sql(" (").visit(K_ORDER_BY).sql(' '); + + if (withinGroupOrderBy.isEmpty()) + ctx.visit(K_NULL); + else + ctx.visit(withinGroupOrderBy); + + ctx.sql(')'); } /** diff --git a/jOOQ/src/main/java/org/jooq/impl/GroupConcat.java b/jOOQ/src/main/java/org/jooq/impl/GroupConcat.java index b97b32c06e..7db5312707 100644 --- a/jOOQ/src/main/java/org/jooq/impl/GroupConcat.java +++ b/jOOQ/src/main/java/org/jooq/impl/GroupConcat.java @@ -89,13 +89,10 @@ final class GroupConcat extends AbstractFunction implements GroupConcatO final Field getFunction0(Configuration configuration) { Function result; - if (separator == null) { - result = new Function(Term.LIST_AGG, distinct, SQLDataType.VARCHAR, field); - } - else { - Field literal = inline(separator); - result = new Function(Term.LIST_AGG, distinct, SQLDataType.VARCHAR, field, literal); - } + if (separator == null) + result = new Function(Term.LIST_AGG, distinct, SQLDataType.VARCHAR, field, inline(",")); + else + result = new Function(Term.LIST_AGG, distinct, SQLDataType.VARCHAR, field, inline(separator)); return result.withinGroupOrderBy(orderBy); }