[jOOQ/jOOQ#19314] Use ARRAY_AGG emulation for BigQuery MIN_BY() or MAX_BY() window function

This commit is contained in:
Lukas Eder 2025-10-31 15:27:51 +01:00
parent 4e46e252ca
commit 9840750a0e
2 changed files with 64 additions and 30 deletions

View File

@ -127,6 +127,15 @@ implements
@ -141,6 +150,17 @@ implements
case HSQLDB:
case POSTGRES:
case YUGABYTEDB: {
acceptArrayAggEmulation(ctx);
break;
}
default:
acceptDefault(ctx);
break;
}
}
private final void acceptArrayAggEmulation(Context<?> ctx) {
List<SortField<?>> o = new ArrayList<>();
o.add(arguments.get(1).desc());
@ -148,10 +168,9 @@ implements
o.addAll(withinGroupOrderBy);
ctx.visit(arrayGet(fo(DSL.arrayAgg(arguments.get(0)).orderBy(o)), inline(1)));
break;
}
default:
private final void acceptDefault(Context<?> ctx) {
acceptFunctionName(ctx);
ctx.sql('(');
acceptArguments0(ctx);
@ -160,8 +179,6 @@ implements
acceptFilterClause(ctx);
acceptOverClause(ctx);
break;
}
}
@Override

View File

@ -127,6 +127,15 @@ implements
@ -141,6 +150,17 @@ implements
case HSQLDB:
case POSTGRES:
case YUGABYTEDB: {
acceptArrayAggEmulation(ctx);
break;
}
default:
acceptDefault(ctx);
break;
}
}
private final void acceptArrayAggEmulation(Context<?> ctx) {
List<SortField<?>> o = new ArrayList<>();
o.add(arguments.get(1).sortDefault());
@ -148,10 +168,9 @@ implements
o.addAll(withinGroupOrderBy);
ctx.visit(arrayGet(fo(DSL.arrayAgg(arguments.get(0)).orderBy(o)), inline(1)));
break;
}
default:
private final void acceptDefault(Context<?> ctx) {
acceptFunctionName(ctx);
ctx.sql('(');
acceptArguments0(ctx);
@ -160,8 +179,6 @@ implements
acceptFilterClause(ctx);
acceptOverClause(ctx);
break;
}
}
@Override