From 2afcfe084fdfc31c368a96c4f92618c2283dfde8 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Wed, 15 Apr 2020 13:59:26 +0200 Subject: [PATCH] [jOOQ/jOOQ#10060] Avoid escaping of nested JSON content in MySQL --- .../main/java/org/jooq/impl/JSONArrayAgg.java | 18 +++++++++--------- jOOQ/src/main/java/org/jooq/impl/Names.java | 1 + 2 files changed, 10 insertions(+), 9 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java b/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java index d3392dc925..e0fa1df935 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java @@ -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 { 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; + } diff --git a/jOOQ/src/main/java/org/jooq/impl/Names.java b/jOOQ/src/main/java/org/jooq/impl/Names.java index 3f1aa6ebfc..a7bef1e9e8 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Names.java +++ b/jOOQ/src/main/java/org/jooq/impl/Names.java @@ -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");