diff --git a/jOOQ/src/main/java/org/jooq/ArrayAggOrderByStep.java b/jOOQ/src/main/java/org/jooq/ArrayAggOrderByStep.java index c5ee609257..4f8a1fd55b 100644 --- a/jOOQ/src/main/java/org/jooq/ArrayAggOrderByStep.java +++ b/jOOQ/src/main/java/org/jooq/ArrayAggOrderByStep.java @@ -41,6 +41,7 @@ package org.jooq; import static org.jooq.SQLDialect.HSQLDB; +// ... import static org.jooq.SQLDialect.POSTGRES; import java.util.Collection; diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 015eafed90..ac0e21d75a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -12620,6 +12620,62 @@ public class DSL { return new Function(Term.ARRAY_AGG, field.getDataType().getArrayDataType(), nullSafe(field)); } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + /** * Create an array literal. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/Function.java b/jOOQ/src/main/java/org/jooq/impl/Function.java index 8a5c577482..7c1972afe8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Function.java +++ b/jOOQ/src/main/java/org/jooq/impl/Function.java @@ -270,10 +270,6 @@ class Function extends AbstractField implements - - - - @@ -286,25 +282,20 @@ class Function extends AbstractField implements toSQLFunctionName(ctx); ctx.sql('('); - if (distinct) { + if (distinct) ctx.keyword("distinct").sql(' '); - } // The explicit cast is needed in Postgres ctx.visit(((Field) arguments.get(0)).cast(String.class)); - if (arguments.size() > 1) { - ctx.sql(", "); - ctx.visit(arguments.get(1)); - } - else { + if (arguments.size() > 1) + ctx.sql(", ").visit(arguments.get(1)); + else ctx.sql(", ''"); - } - if (!withinGroupOrderBy.isEmpty()) { + if (!withinGroupOrderBy.isEmpty()) ctx.sql(' ').keyword("order by").sql(' ') .visit(withinGroupOrderBy); - } ctx.sql(')'); } @@ -315,22 +306,15 @@ class Function extends AbstractField implements final void toSQLGroupConcat(Context ctx) { toSQLFunctionName(ctx); ctx.sql('('); + toSQLArguments0(ctx); - if (distinct) { - ctx.keyword("distinct").sql(' '); - } - - ctx.visit(arguments.get(0)); - - if (!withinGroupOrderBy.isEmpty()) { + if (!withinGroupOrderBy.isEmpty()) ctx.sql(' ').keyword("order by").sql(' ') - .visit(withinGroupOrderBy); - } + .visit(withinGroupOrderBy); - if (arguments.size() > 1) { + if (arguments.size() > 1) ctx.sql(' ').keyword("separator").sql(' ') - .visit(arguments.get(1)); - } + .visit(arguments.get(1)); ctx.sql(')'); } @@ -358,7 +342,6 @@ class Function extends AbstractField implements if (term == ROW_NUMBER && ctx.configuration().dialect() == HSQLDB) return; - ctx.sql(' ') .keyword("over") .sql(' ') @@ -380,9 +363,8 @@ class Function extends AbstractField implements // [#531] Inline window specifications if the WINDOW clause is not supported if (windowName != null) { - if (asList(POSTGRES).contains(ctx.family())) { + if (asList(POSTGRES).contains(ctx.family())) return windowName; - } Map map = (Map) ctx.data(DATA_LOCALLY_SCOPED_DATA_MAP); QueryPartList windows = (QueryPartList) map.get(DATA_WINDOW_DEFINITIONS); @@ -437,7 +419,11 @@ class Function extends AbstractField implements final void toSQLArguments(Context ctx) { toSQLFunctionName(ctx); ctx.sql('('); + toSQLArguments0(ctx); + ctx.sql(')'); + } + final void toSQLArguments0(Context ctx) { if (distinct) { ctx.keyword("distinct"); @@ -457,19 +443,16 @@ class Function extends AbstractField implements else { QueryPartList> expressions = new QueryPartList>(); - for (QueryPart argument : arguments) { + for (QueryPart argument : arguments) expressions.add(DSL.when(filter, argument == ASTERISK ? one() : argument)); - } ctx.visit(expressions); } } - if (distinct) { - if (ctx.family() == POSTGRES && arguments.size() > 1) { + if (distinct) + if (ctx.family() == POSTGRES && arguments.size() > 1) ctx.sql(')'); - } - } if (ignoreNulls) { @@ -477,10 +460,7 @@ class Function extends AbstractField implements - - { ctx.sql(' ').keyword("ignore nulls"); - } } else if (respectNulls) { @@ -488,25 +468,17 @@ class Function extends AbstractField implements - - { ctx.sql(' ').keyword("respect nulls"); - } } - - ctx.sql(')'); } final void toSQLFunctionName(Context ctx) { - if (name != null) { + if (name != null) ctx.visit(name); - } - else if (term != null) { + else if (term != null) ctx.sql(term.translate(ctx.configuration().dialect())); - } - else { + else ctx.sql(getName()); - } } // ------------------------------------------------------------------------- diff --git a/jOOQ/src/main/java/org/jooq/impl/Term.java b/jOOQ/src/main/java/org/jooq/impl/Term.java index 974a0040d3..1d71f25467 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Term.java +++ b/jOOQ/src/main/java/org/jooq/impl/Term.java @@ -121,6 +121,14 @@ enum Term { return "char_length"; } }, + + + + + + + + LIST_AGG { @Override public String translate(SQLDialect dialect) { @@ -278,6 +286,11 @@ enum Term { ; + @Override + public String toString() { + return super.toString(); + } + /** * Translate the term to its dialect-specific variant */ diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 1ff49bb782..87c404780a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -2075,6 +2075,25 @@ final class Tools { + + + + + + + + + + + + + + + + + + +