diff --git a/jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java b/jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java index a5d88d22a3..feb78d6eef 100644 --- a/jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java +++ b/jOOQ/src/main/java/org/jooq/JSONArrayAggOrderByStep.java @@ -37,6 +37,7 @@ */ package org.jooq; +// ... // ... // ... import static org.jooq.SQLDialect.H2; diff --git a/jOOQ/src/main/java/org/jooq/SelectForJSONStep.java b/jOOQ/src/main/java/org/jooq/SelectForJSONStep.java index bcb09fb99b..5b59d53ede 100644 --- a/jOOQ/src/main/java/org/jooq/SelectForJSONStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectForJSONStep.java @@ -37,6 +37,7 @@ */ package org.jooq; +// ... // ... // ... import static org.jooq.SQLDialect.H2; diff --git a/jOOQ/src/main/java/org/jooq/SelectForStep.java b/jOOQ/src/main/java/org/jooq/SelectForStep.java index ded7c0c6ca..93a0082947 100644 --- a/jOOQ/src/main/java/org/jooq/SelectForStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectForStep.java @@ -37,6 +37,7 @@ */ package org.jooq; +// ... // ... // ... import static org.jooq.SQLDialect.H2; diff --git a/jOOQ/src/main/java/org/jooq/SelectQuery.java b/jOOQ/src/main/java/org/jooq/SelectQuery.java index 6e11ecf982..456b2916ab 100644 --- a/jOOQ/src/main/java/org/jooq/SelectQuery.java +++ b/jOOQ/src/main/java/org/jooq/SelectQuery.java @@ -44,6 +44,7 @@ package org.jooq; // ... import static org.jooq.SQLDialect.CUBRID; // ... +// ... import static org.jooq.SQLDialect.DERBY; import static org.jooq.SQLDialect.FIREBIRD; // ... diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 18052ed198..1f29ee0be3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DSL.java +++ b/jOOQ/src/main/java/org/jooq/impl/DSL.java @@ -67,6 +67,7 @@ import static org.jooq.SQLDialect.MYSQL; // ... // ... // ... +// ... import static org.jooq.SQLDialect.POSTGRES; // ... // ... diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java b/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java index e0fa1df935..d1d1ab7bae 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONArrayAgg.java @@ -47,6 +47,7 @@ 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 static org.jooq.impl.SQLDataType.VARCHAR; import java.util.Collection; @@ -84,11 +85,7 @@ implements JSONArrayAggOrderByStep { 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(')'); + ctx.visit(N_JSON_MERGE).sql('(').visit(inline("[]")).sql(", ").visit(groupConcatEmulation()).sql(')'); break; } @@ -97,6 +94,13 @@ implements JSONArrayAggOrderByStep { + + + + + + + case POSTGRES: ctx.visit(getDataType() == JSON ? N_JSON_AGG : N_JSONB_AGG).sql('('); ctx.visit(arguments.get(0)); @@ -115,6 +119,12 @@ implements JSONArrayAggOrderByStep { } } + private final Field groupConcatEmulation() { + return Tools.isEmpty(withinGroupOrderBy) + ? DSL.concat(inline('['), groupConcat(arguments.get(0)), inline(']')) + : DSL.concat(inline('['), groupConcat(arguments.get(0)).orderBy(withinGroupOrderBy), inline(']')); + } + private final void acceptStandard(Context ctx) { ctx.visit(N_JSON_ARRAYAGG).sql('('); ctx.visit(arguments.get(0)); diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONEntryImpl.java b/jOOQ/src/main/java/org/jooq/impl/JSONEntryImpl.java index 4b5a516cb4..1fc291761e 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONEntryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONEntryImpl.java @@ -37,11 +37,14 @@ */ package org.jooq.impl; +import static org.jooq.impl.Keywords.K_FORMAT; +import static org.jooq.impl.Keywords.K_JSON; import static org.jooq.impl.Keywords.K_KEY; import static org.jooq.impl.Keywords.K_VALUE; import org.jooq.Context; import org.jooq.Field; +import org.jooq.JSON; import org.jooq.JSONEntry; @@ -82,6 +85,15 @@ final class JSONEntryImpl extends AbstractQueryPart implements JSONEntry { + + + + + + + + + case MARIADB: case MYSQL: case POSTGRES: diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 4e6298461f..22f1f91f4b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -64,6 +64,7 @@ import static org.jooq.Operator.OR; // ... import static org.jooq.SQLDialect.CUBRID; // ... +// ... import static org.jooq.SQLDialect.DERBY; import static org.jooq.SQLDialect.FIREBIRD; import static org.jooq.SQLDialect.H2; @@ -98,6 +99,7 @@ import static org.jooq.impl.CombineOperator.UNION_ALL; import static org.jooq.impl.DSL.asterisk; import static org.jooq.impl.DSL.falseCondition; import static org.jooq.impl.DSL.inline; +import static org.jooq.impl.DSL.jsonArrayAgg; import static org.jooq.impl.DSL.name; import static org.jooq.impl.DSL.one; import static org.jooq.impl.DSL.orderBy; @@ -166,6 +168,7 @@ import org.jooq.Field; import org.jooq.ForeignKey; import org.jooq.GroupField; import org.jooq.JSON; +import org.jooq.JSONArrayAggOrderByStep; import org.jooq.JSONEntry; import org.jooq.JSONObjectNullStep; import org.jooq.JoinType; @@ -571,6 +574,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp + else