diff --git a/jOOQ/src/main/java/org/jooq/JSONObjectNullStep.java b/jOOQ/src/main/java/org/jooq/JSONObjectNullStep.java index bf3fa3b32e..6ffd174648 100644 --- a/jOOQ/src/main/java/org/jooq/JSONObjectNullStep.java +++ b/jOOQ/src/main/java/org/jooq/JSONObjectNullStep.java @@ -40,6 +40,8 @@ package org.jooq; // ... // ... import static org.jooq.SQLDialect.H2; +import static org.jooq.SQLDialect.MARIADB; +import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; // ... @@ -58,7 +60,7 @@ public interface JSONObjectNullStep extends Field { /** * Include NULL values in output JSON. */ - @Support({ H2, POSTGRES }) + @Support({ AURORA_POSTGRES, COCKROACHDB, MARIADB, MYSQL, H2, ORACLE12C, POSTGRES, SQLSERVER }) Field nullOnNull(); /** diff --git a/jOOQ/src/main/java/org/jooq/SelectForJSONCommonDirectivesStep.java b/jOOQ/src/main/java/org/jooq/SelectForJSONCommonDirectivesStep.java index 9183e4630a..154e85f2d8 100644 --- a/jOOQ/src/main/java/org/jooq/SelectForJSONCommonDirectivesStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectForJSONCommonDirectivesStep.java @@ -136,6 +136,8 @@ package org.jooq; + + diff --git a/jOOQ/src/main/java/org/jooq/SelectForJSONStep.java b/jOOQ/src/main/java/org/jooq/SelectForJSONStep.java index bd95005eb9..bcb09fb99b 100644 --- a/jOOQ/src/main/java/org/jooq/SelectForJSONStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectForJSONStep.java @@ -40,6 +40,8 @@ package org.jooq; // ... // ... import static org.jooq.SQLDialect.H2; +import static org.jooq.SQLDialect.MARIADB; +import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; diff --git a/jOOQ/src/main/java/org/jooq/SelectForStep.java b/jOOQ/src/main/java/org/jooq/SelectForStep.java index d367e52f8f..ded7c0c6ca 100644 --- a/jOOQ/src/main/java/org/jooq/SelectForStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectForStep.java @@ -40,6 +40,8 @@ package org.jooq; // ... // ... import static org.jooq.SQLDialect.H2; +import static org.jooq.SQLDialect.MARIADB; +import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; // ... diff --git a/jOOQ/src/main/java/org/jooq/SelectQuery.java b/jOOQ/src/main/java/org/jooq/SelectQuery.java index e93ad76403..88f24a9141 100644 --- a/jOOQ/src/main/java/org/jooq/SelectQuery.java +++ b/jOOQ/src/main/java/org/jooq/SelectQuery.java @@ -59,6 +59,7 @@ import static org.jooq.SQLDialect.MYSQL; // ... // ... // ... +// ... import static org.jooq.SQLDialect.POSTGRES; // ... // ... diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONObject.java b/jOOQ/src/main/java/org/jooq/impl/JSONObject.java index 15b5588d21..a01bdc4884 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONObject.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONObject.java @@ -38,6 +38,8 @@ package org.jooq.impl; import static org.jooq.SQLDialect.H2; +import static org.jooq.SQLDialect.MARIADB; +import static org.jooq.SQLDialect.MYSQL; import static org.jooq.impl.DSL.asterisk; import static org.jooq.impl.DSL.inline; import static org.jooq.impl.DSL.row; @@ -54,6 +56,7 @@ import static org.jooq.impl.Names.N_JSON_OBJECT; import static org.jooq.impl.Names.N_T; import java.util.Collection; +import java.util.Set; import org.jooq.Context; import org.jooq.DataType; @@ -61,6 +64,7 @@ import org.jooq.Field; import org.jooq.JSONEntry; import org.jooq.JSONObjectNullStep; import org.jooq.Name; +import org.jooq.SQLDialect; // ... @@ -74,7 +78,9 @@ final class JSONObject extends AbstractField implements JSONObjectNullStep /** * Generated UID */ - private static final long serialVersionUID = 1772007627336725780L; + private static final long serialVersionUID = 1772007627336725780L; + static final Set NO_SUPPORT_ABSENT_ON_NULL = SQLDialect.supportedBy(MARIADB, MYSQL); + private final QueryPartList> args; private final NullClause nullClause; @@ -173,14 +179,15 @@ final class JSONObject extends AbstractField implements JSONObjectNullStep default: ctx.visit(K_JSON_OBJECT).sql('(').visit(args); - if (nullClause == NULL_ON_NULL) - ctx.sql(' ').visit(K_NULL).sql(' ').visit(K_ON).sql(' ').visit(K_NULL); - else if (nullClause == ABSENT_ON_NULL) - ctx.sql(' ').visit(K_ABSENT).sql(' ').visit(K_ON).sql(' ').visit(K_NULL); + if (!NO_SUPPORT_ABSENT_ON_NULL.contains(ctx.dialect())) + if (nullClause == NULL_ON_NULL) + ctx.sql(' ').visit(K_NULL).sql(' ').visit(K_ON).sql(' ').visit(K_NULL); + else if (nullClause == ABSENT_ON_NULL) + ctx.sql(' ').visit(K_ABSENT).sql(' ').visit(K_ON).sql(' ').visit(K_NULL); - // Workaround for https://github.com/h2database/h2database/issues/2496 - else if (ctx.family() == H2 && args.isEmpty()) - ctx.visit(K_NULL).sql(' ').visit(K_ON).sql(' ').visit(K_NULL); + // Workaround for https://github.com/h2database/h2database/issues/2496 + else if (ctx.family() == H2 && args.isEmpty()) + ctx.visit(K_NULL).sql(' ').visit(K_ON).sql(' ').visit(K_NULL); ctx.sql(')'); break; diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index 2fa445135d..d967e4b8a5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -101,6 +101,7 @@ import static org.jooq.impl.DSL.name; import static org.jooq.impl.DSL.one; import static org.jooq.impl.DSL.orderBy; import static org.jooq.impl.DSL.row; +import static org.jooq.impl.JSONObject.NO_SUPPORT_ABSENT_ON_NULL; import static org.jooq.impl.Keywords.K_AND; import static org.jooq.impl.Keywords.K_BY; import static org.jooq.impl.Keywords.K_CONNECT_BY; @@ -576,6 +577,8 @@ final class SelectQueryImpl extends AbstractResultQuery imp + +