From e977654051edc530518c449fed5a36428c9af754 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 11 Mar 2020 10:51:23 +0100 Subject: [PATCH] [jOOQ/jOOQ#9927] Fix PostgreSQL ABSENT ON NULL emulation --- jOOQ/src/main/java/org/jooq/JSONArrayAggNullStep.java | 6 ++---- jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java | 6 ++---- .../main/java/org/jooq/impl/AbstractAggregateFunction.java | 4 ++++ jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java | 7 ++----- 4 files changed, 10 insertions(+), 13 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/JSONArrayAggNullStep.java b/jOOQ/src/main/java/org/jooq/JSONArrayAggNullStep.java index 7b5518d478..15fa6944cc 100644 --- a/jOOQ/src/main/java/org/jooq/JSONArrayAggNullStep.java +++ b/jOOQ/src/main/java/org/jooq/JSONArrayAggNullStep.java @@ -40,8 +40,6 @@ package org.jooq; // ... // ... import static org.jooq.SQLDialect.H2; -import static org.jooq.SQLDialect.MARIADB; -import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; @@ -59,12 +57,12 @@ public interface JSONArrayAggNullStep extends AggregateFilterStep { /** * Include NULL values in output JSON. */ - @Support({ H2, MARIADB, MYSQL, POSTGRES }) + @Support({ H2, POSTGRES }) AggregateFilterStep nullOnNull(); /** * Exclude NULL values in output JSON. */ - @Support({ H2, MARIADB, MYSQL, POSTGRES }) + @Support({ H2, POSTGRES }) AggregateFilterStep absentOnNull(); } diff --git a/jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java b/jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java index 3c27ec2265..05c1dd2320 100644 --- a/jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java +++ b/jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java @@ -40,8 +40,6 @@ package org.jooq; // ... // ... import static org.jooq.SQLDialect.H2; -import static org.jooq.SQLDialect.MARIADB; -import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; @@ -60,12 +58,12 @@ public interface JSONArrayAggOrderByStep extends JSONArrayAggNullStep { /** * Add an ORDER BY clause to the function. */ - @Support({ H2, MARIADB, MYSQL, POSTGRES }) + @Support({ H2, POSTGRES }) JSONArrayAggNullStep orderBy(OrderField... fields); /** * Add an ORDER BY clause to the function. */ - @Support({ H2, MARIADB, MYSQL, POSTGRES }) + @Support({ H2, POSTGRES }) JSONArrayAggNullStep orderBy(Collection> fields); } diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java index 5718ff6c65..44a32e1d26 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java @@ -151,6 +151,10 @@ implements } final void acceptFilterClause(Context ctx) { + acceptFilterClause(ctx, filter); + } + + static final void acceptFilterClause(Context ctx, Condition filter) { if (filter != null && SUPPORT_FILTER.contains(ctx.dialect())) ctx.sql(' ') .visit(K_FILTER) diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java b/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java index be6aad838b..5dd57a2fdf 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java @@ -37,7 +37,6 @@ */ package org.jooq.impl; -import static org.jooq.impl.DSL.unquotedName; import static org.jooq.impl.JSONNullClause.ABSENT_ON_NULL; import static org.jooq.impl.JSONNullClause.NULL_ON_NULL; import static org.jooq.impl.JSONObject.acceptJSONNullClause; @@ -84,16 +83,14 @@ implements JSONArrayAggOrderByStep { case POSTGRES: - if (nullClause == ABSENT_ON_NULL) - ctx.visit(unquotedName("json_strip_nulls")).sql('('); - ctx.visit(getDataType() == JSON ? N_JSON_AGG : N_JSONB_AGG).sql('('); ctx.visit(arguments.get(0)); acceptOrderBy(ctx); ctx.sql(')'); + // TODO: What about a user-defined filter clause? if (nullClause == ABSENT_ON_NULL) - ctx.sql(')'); + acceptFilterClause(ctx, arguments.get(0).isNotNull()); break;