[jOOQ/jOOQ#10060] Avoid escaping of nested JSON content in MySQL

This commit is contained in:
Lukas Eder 2020-04-15 13:59:26 +02:00
parent 3ce7931a61
commit 2afcfe084f
2 changed files with 10 additions and 9 deletions

View File

@ -45,6 +45,7 @@ import static org.jooq.impl.JSONObject.acceptJSONNullClause;
import static org.jooq.impl.Names.N_JSONB_AGG;
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_MERGE;
import static org.jooq.impl.SQLDataType.JSON;
import java.util.Collection;
@ -80,17 +81,16 @@ implements JSONArrayAggOrderByStep<J> {
public void accept(Context<?> ctx) {
switch (ctx.family()) {
case MARIADB:
case MYSQL:
// Workaround for https://jira.mariadb.org/browse/MDEV-21914
if (!Tools.isEmpty(withinGroupOrderBy))
ctx.visit(DSL.concat(inline('['), groupConcat(arguments.get(0)).orderBy(withinGroupOrderBy), inline(']')));
// Workaround for https://jira.mariadb.org/browse/MDEV-21912
else
ctx.visit(DSL.concat(inline('['), groupConcat(arguments.get(0)), inline(']')));
case MYSQL: {
// Workaround for https://jira.mariadb.org/browse/MDEV-21912,
// https://jira.mariadb.org/browse/MDEV-21914, and other issues
Field<?> concat = Tools.isEmpty(withinGroupOrderBy)
? DSL.concat(inline('['), groupConcat(arguments.get(0)), inline(']'))
: DSL.concat(inline('['), groupConcat(arguments.get(0)).orderBy(withinGroupOrderBy), inline(']'));
ctx.visit(N_JSON_MERGE).sql('(').visit(inline("[]")).sql(", ").visit(concat).sql(')');
break;
}

View File

@ -119,6 +119,7 @@ final class Names {
static final Name N_JSON_ARRAYAGG = unquotedName("json_arrayagg");
static final Name N_JSON_CONTAINS_PATH = unquotedName("json_contains_path");
static final Name N_JSON_EXTRACT = unquotedName("json_extract");
static final Name N_JSON_MERGE = unquotedName("json_merge");
static final Name N_JSON_OBJECT = unquotedName("json_object");
static final Name N_JSON_OBJECT_AGG = unquotedName("json_object_agg");
static final Name N_JSON_OBJECTAGG = unquotedName("json_objectagg");