diff --git a/jOOQ/src/main/java/org/jooq/impl/Function.java b/jOOQ/src/main/java/org/jooq/impl/Function.java index b6e1ad7c3e..e0d5046752 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Function.java +++ b/jOOQ/src/main/java/org/jooq/impl/Function.java @@ -137,8 +137,8 @@ class Function extends AbstractField implements // Other attributes private final QueryPartList arguments; private final boolean distinct; - private final SortFieldList withinGroupOrderBy; - private final SortFieldList keepDenseRankOrderBy; + private SortFieldList withinGroupOrderBy; + private SortFieldList keepDenseRankOrderBy; private Condition filter; private WindowSpecificationImpl windowSpecification; private WindowDefinitionImpl windowDefinition; @@ -171,8 +171,6 @@ class Function extends AbstractField implements this.name = null; this.distinct = distinct; this.arguments = new QueryPartList(arguments); - this.keepDenseRankOrderBy = new SortFieldList(); - this.withinGroupOrderBy = new SortFieldList(); } Function(Term term, boolean distinct, DataType type, QueryPart... arguments) { @@ -182,8 +180,6 @@ class Function extends AbstractField implements this.name = null; this.distinct = distinct; this.arguments = new QueryPartList(arguments); - this.keepDenseRankOrderBy = new SortFieldList(); - this.withinGroupOrderBy = new SortFieldList(); } Function(Name name, boolean distinct, DataType type, QueryPart... arguments) { @@ -193,8 +189,6 @@ class Function extends AbstractField implements this.name = name; this.distinct = distinct; this.arguments = new QueryPartList(arguments); - this.keepDenseRankOrderBy = new SortFieldList(); - this.withinGroupOrderBy = new SortFieldList(); } // ------------------------------------------------------------------------- @@ -300,7 +294,7 @@ class Function extends AbstractField implements else ctx.sql(", ''"); - if (!withinGroupOrderBy.isEmpty()) + if (!Tools.isEmpty(withinGroupOrderBy)) ctx.sql(' ').visit(K_ORDER_BY).sql(' ') .visit(withinGroupOrderBy); @@ -315,7 +309,7 @@ class Function extends AbstractField implements ctx.sql('('); toSQLArguments1(ctx, new QueryPartList(Arrays.asList(arguments.get(0)))); - if (!withinGroupOrderBy.isEmpty()) + if (!Tools.isEmpty(withinGroupOrderBy)) ctx.sql(' ').visit(K_ORDER_BY).sql(' ') .visit(withinGroupOrderBy); @@ -395,7 +389,7 @@ class Function extends AbstractField implements * Render KEEP (DENSE_RANK [FIRST | LAST] ORDER BY {...}) clause */ final void toSQLKeepDenseRankOrderByClause(Context ctx) { - if (!keepDenseRankOrderBy.isEmpty()) { + if (!Tools.isEmpty(keepDenseRankOrderBy)) { ctx.sql(' ').visit(K_KEEP) .sql(" (").visit(K_DENSE_RANK) .sql(' ').visit(first ? K_FIRST : K_LAST) @@ -409,15 +403,17 @@ class Function extends AbstractField implements * Render WITHIN GROUP (ORDER BY ..) clause */ final void toSQLWithinGroupClause(Context ctx) { - ctx.sql(' ').visit(K_WITHIN_GROUP) - .sql(" (").visit(K_ORDER_BY).sql(' '); + if (withinGroupOrderBy != null) { + ctx.sql(' ').visit(K_WITHIN_GROUP) + .sql(" (").visit(K_ORDER_BY).sql(' '); - if (withinGroupOrderBy.isEmpty()) - ctx.visit(K_NULL); - else - ctx.visit(withinGroupOrderBy); + if (withinGroupOrderBy.isEmpty()) + ctx.visit(K_NULL); + else + ctx.visit(withinGroupOrderBy); - ctx.sql(')'); + ctx.sql(')'); + } } /** @@ -507,6 +503,9 @@ class Function extends AbstractField implements @Override public final AggregateFunction withinGroupOrderBy(Collection> fields) { + if (withinGroupOrderBy == null) + withinGroupOrderBy = new SortFieldList(); + withinGroupOrderBy.addAll(Tools.sortFields(fields)); return this; } @@ -543,6 +542,12 @@ class Function extends AbstractField implements + + + + + +