[jOOQ/jOOQ#13429] DSL.noCondition() isn't applied correctly to aggregate FILTER WHERE clause
This commit is contained in:
parent
f59c3b8d8c
commit
59be6f5f23
@ -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();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
@ -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);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user