[jOOQ/jOOQ#13429] DSL.noCondition() isn't applied correctly to aggregate FILTER WHERE clause

This commit is contained in:
Lukas Eder 2022-04-07 11:41:46 +02:00
parent f59c3b8d8c
commit 59be6f5f23
3 changed files with 25 additions and 25 deletions

View File

@ -118,7 +118,7 @@ implements
// Other attributes
final QueryPartList<Field<?>> 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<Field<?>> args, Function<? super Field<?>, ? 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<T> 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 <U> Field<U> fo(AggregateFunction<U> 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();
}

View File

@ -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);

View File

@ -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);