From 59be6f5f238ee2b622cfb6f43f6cbce637a70e6f Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Thu, 7 Apr 2022 11:41:46 +0200 Subject: [PATCH] [jOOQ/jOOQ#13429] DSL.noCondition() isn't applied correctly to aggregate FILTER WHERE clause --- .../jooq/impl/AbstractAggregateFunction.java | 40 +++++++++---------- .../main/java/org/jooq/impl/JSONArrayAgg.java | 4 +- .../java/org/jooq/impl/JSONObjectAgg.java | 6 +-- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java index 1fa29f8ac6..e69bcb65ba 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractAggregateFunction.java @@ -118,7 +118,7 @@ implements // Other attributes final QueryPartList> arguments; final boolean distinct; - Condition filter; + final ConditionProviderImpl filter; // Other attributes SortFieldList withinGroupOrderBy; @@ -143,6 +143,7 @@ implements this.distinct = distinct; this.arguments = new QueryPartList<>(arguments); + this.filter = new ConditionProviderImpl(); } // ------------------------------------------------------------------------- @@ -277,7 +278,7 @@ implements } final void acceptArguments3(Context ctx, QueryPartCollectionView> args, Function, ? extends Field> fun) { - if (filter == null || SUPPORT_FILTER.contains(ctx.dialect())) + if (!filter.hasWhere() || SUPPORT_FILTER.contains(ctx.dialect())) ctx.visit(wrap(args).map(fun)); @@ -305,29 +306,28 @@ implements final void acceptFilterClause(Context ctx) { - acceptFilterClause(ctx, filter); + if (filter.hasWhere()) + acceptFilterClause(ctx, filter); } static final void acceptFilterClause(Context ctx, Condition filter) { - if (filter != null) { - switch (ctx.family()) { + switch (ctx.family()) { - default: - if (SUPPORT_FILTER.contains(ctx.dialect())) - ctx.sql(' ') - .visit(K_FILTER) - .sql(" (") - .visit(K_WHERE) - .sql(' ') - .visit(filter) - .sql(')'); - break; - } + default: + if (SUPPORT_FILTER.contains(ctx.dialect())) + ctx.sql(' ') + .visit(K_FILTER) + .sql(" (") + .visit(K_WHERE) + .sql(' ') + .visit(filter) + .sql(')'); + break; } } @@ -357,7 +357,7 @@ implements @Override public final WindowBeforeOverStep filterWhere(Condition c) { - filter = c; + filter.addConditions(c); return this; } @@ -468,7 +468,7 @@ implements } final Condition f(Condition c) { - return filter != null ? filter.and(c) : c; + return filter.hasWhere() ? filter.and(c) : c; } @SuppressWarnings("unchecked") @@ -490,7 +490,7 @@ implements * clauses to an argument aggregate function. */ final Field fo(AggregateFunction function) { - return o(filter != null ? function.filterWhere(filter) : function); + return o(filter.hasWhere() ? function.filterWhere(filter) : function); } /** @@ -553,7 +553,7 @@ implements @Override public final Condition $filterWhere() { - return filter; + return filter.getWhereOrNull(); } diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java b/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java index 3503ba3337..31ea6923e7 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java @@ -139,7 +139,7 @@ implements ctx.sql(')'); if (onNull == ABSENT_ON_NULL) - acceptFilterClause(ctx, (filter == null ? noCondition() : filter).and(arguments.get(0).isNotNull())); + acceptFilterClause(ctx, f(arguments.get(0).isNotNull())); else acceptFilterClause(ctx); @@ -153,7 +153,7 @@ implements ctx.sql(')'); if (onNull == ABSENT_ON_NULL) - acceptFilterClause(ctx, (filter == null ? noCondition() : filter).and(arguments.get(0).isNotNull())); + acceptFilterClause(ctx, f(arguments.get(0).isNotNull())); else acceptFilterClause(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONObjectAgg.java b/jOOQ/src/main/java/org/jooq/impl/JSONObjectAgg.java index 8aeb2934fd..e36ab9675a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONObjectAgg.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONObjectAgg.java @@ -112,7 +112,7 @@ implements case MYSQL: // [#11238] FILTER cannot be emulated with the standard syntax - if (onNull == ABSENT_ON_NULL || filter != null) + if (onNull == ABSENT_ON_NULL || filter.hasWhere()) acceptGroupConcat(ctx); @@ -139,7 +139,7 @@ implements ctx.sql(')'); if (onNull == ABSENT_ON_NULL) - acceptFilterClause(ctx, (filter == null ? noCondition() : filter).and(entry.value().isNotNull())); + acceptFilterClause(ctx, f(entry.value().isNotNull())); else acceptFilterClause(ctx); @@ -152,7 +152,7 @@ implements ctx.sql(')'); if (onNull == ABSENT_ON_NULL) - acceptFilterClause(ctx, (filter == null ? noCondition() : filter).and(entry.value().isNotNull())); + acceptFilterClause(ctx, f(entry.value().isNotNull())); else acceptFilterClause(ctx);