[jOOQ/jOOQ#12073] Emulate combination of JSON_ARRAYAGG() FILTER clause and NULL ON NULL

This commit is contained in:
Lukas Eder 2024-06-03 10:57:40 +02:00
parent 3d171612d8
commit dc343ce47e
2 changed files with 31 additions and 4 deletions

View File

@ -49,13 +49,16 @@ import static org.jooq.impl.DSL.function;
import static org.jooq.impl.DSL.groupConcat;
import static org.jooq.impl.DSL.groupConcatDistinct;
import static org.jooq.impl.DSL.inline;
import static org.jooq.impl.DSL.orderBy;
import static org.jooq.impl.DSL.jsonArray;
import static org.jooq.impl.JSONEntryImpl.jsonCast;
import static org.jooq.impl.JSONEntryImpl.jsonCastMapper;
import static org.jooq.impl.JSONEntryImpl.jsonMerge;
import static org.jooq.impl.Keywords.K_AS;
import static org.jooq.impl.Keywords.K_DISTINCT;
import static org.jooq.impl.Keywords.K_IS_NOT_NULL;
import static org.jooq.impl.Keywords.K_NESTED;
import static org.jooq.impl.Keywords.K_PATH;
import static org.jooq.impl.Keywords.K_REPLACE;
import static org.jooq.impl.Names.N_ARRAY_AGG;
import static org.jooq.impl.Names.N_CAST;
import static org.jooq.impl.Names.N_FILTER;
@ -65,19 +68,21 @@ import static org.jooq.impl.Names.N_JSON_AGG;
import static org.jooq.impl.Names.N_JSON_ARRAYAGG;
import static org.jooq.impl.Names.N_JSON_GROUP_ARRAY;
import static org.jooq.impl.Names.N_JSON_QUOTE;
import static org.jooq.impl.Names.N_JSON_TRANSFORM;
import static org.jooq.impl.Names.N_toJSONString;
import static org.jooq.impl.QOM.JSONOnNull.ABSENT_ON_NULL;
import static org.jooq.impl.QOM.JSONOnNull.NULL_ON_NULL;
import static org.jooq.impl.QueryPartListView.wrap;
import static org.jooq.impl.SQLDataType.BLOB;
import static org.jooq.impl.SQLDataType.INTEGER;
import static org.jooq.impl.SQLDataType.JSON;
import static org.jooq.impl.SQLDataType.JSONB;
import static org.jooq.impl.SQLDataType.VARCHAR;
import static org.jooq.impl.Tools.apply;
import static org.jooq.impl.Tools.BooleanDataKey.DATA_FORCE_CASE_ELSE_NULL;
import java.util.Collection;
import java.util.Set;
import java.util.function.Function;
import org.jooq.AggregateFilterStep;
import org.jooq.Context;
@ -153,6 +158,21 @@ implements
@ -321,18 +341,24 @@ implements
private final void acceptStandard(Context<?> ctx) {
acceptStandard(ctx, null, onNull);
}
private final void acceptStandard(Context<?> ctx, Function<? super Field<?>, ? extends Field<?>> mapper, JSONOnNull onNull0) {
ctx.visit(N_JSON_ARRAYAGG).sql('(');
acceptDistinct(ctx);
QueryPartListView<Field<?>> arguments0 = mapper == null ? arguments : wrap(arguments).map(mapper);
acceptArguments3(ctx, arguments, jsonCastMapper(ctx));
acceptArguments3(ctx, arguments0, jsonCastMapper(ctx));
acceptOrderBy(ctx);
JSONNull jsonNull = new JSONNull(onNull);
JSONNull jsonNull = new JSONNull(onNull0);
if (jsonNull.rendersContent(ctx))
ctx.sql(' ').visit(jsonNull);

View File

@ -275,6 +275,7 @@ final class Keywords {
static final Keyword K_MONTH = keyword("month");
static final Keyword K_MULTISET = keyword("multiset");
static final Keyword K_NAME = keyword("name");
static final Keyword K_NESTED = keyword("nested");
static final Keyword K_NEW = keyword("new");
static final Keyword K_NEXT = keyword("next");
static final Keyword K_NEXTVAL = keyword("nextval");