From 8e77eece102fe8e52e8d5af9cfe3dc0b13897143 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Tue, 24 Aug 2021 12:37:53 +0200 Subject: [PATCH] [jOOQ/jOOQ#12102] Add support for MariaDB 10.6 --- .../org/jooq/JSONTableColumnForOrdinalityStep.java | 3 ++- .../main/java/org/jooq/JSONTableColumnPathStep.java | 3 ++- .../java/org/jooq/JSONTableColumnsFirstStep.java | 13 +++++++------ jOOQ/src/main/java/org/jooq/SQLDialect.java | 8 ++++++++ .../main/java/org/jooq/SelectForUpdateWaitStep.java | 3 ++- jOOQ/src/main/java/org/jooq/SelectQuery.java | 3 ++- jOOQ/src/main/java/org/jooq/impl/DSL.java | 9 +++++---- .../main/java/org/jooq/impl/InsertQueryImpl.java | 1 + jOOQ/src/main/java/org/jooq/impl/JSONTable.java | 5 ++--- jOOQ/src/main/java/org/jooq/impl/Limit.java | 2 +- jOOQ/src/main/java/org/jooq/impl/MetaSQL.java | 7 +++++++ .../main/java/org/jooq/impl/SelectQueryImpl.java | 5 ++--- .../main/java/org/jooq/tools/jdbc/JDBCUtils.java | 2 ++ 13 files changed, 43 insertions(+), 21 deletions(-) diff --git a/jOOQ/src/main/java/org/jooq/JSONTableColumnForOrdinalityStep.java b/jOOQ/src/main/java/org/jooq/JSONTableColumnForOrdinalityStep.java index 1ed800ed7e..22de5d422f 100644 --- a/jOOQ/src/main/java/org/jooq/JSONTableColumnForOrdinalityStep.java +++ b/jOOQ/src/main/java/org/jooq/JSONTableColumnForOrdinalityStep.java @@ -42,6 +42,7 @@ import org.jetbrains.annotations.*; // ... // ... +import static org.jooq.SQLDialect.MARIADB; import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; @@ -59,7 +60,7 @@ public interface JSONTableColumnForOrdinalityStep { * COLUMNS clause of the JSON_TABLE predicate. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) JSONTableColumnsStep forOrdinality(); } diff --git a/jOOQ/src/main/java/org/jooq/JSONTableColumnPathStep.java b/jOOQ/src/main/java/org/jooq/JSONTableColumnPathStep.java index fead41ce2d..f8bbaf6315 100644 --- a/jOOQ/src/main/java/org/jooq/JSONTableColumnPathStep.java +++ b/jOOQ/src/main/java/org/jooq/JSONTableColumnPathStep.java @@ -42,6 +42,7 @@ import org.jetbrains.annotations.*; // ... // ... +import static org.jooq.SQLDialect.MARIADB; import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; @@ -59,7 +60,7 @@ public interface JSONTableColumnPathStep extends JSONTableColumnForOrdinalitySte * clause of the JSON_TABLE predicate. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) JSONTableColumnsStep path(String path); } diff --git a/jOOQ/src/main/java/org/jooq/JSONTableColumnsFirstStep.java b/jOOQ/src/main/java/org/jooq/JSONTableColumnsFirstStep.java index 0e93d728f5..ceb804a81d 100644 --- a/jOOQ/src/main/java/org/jooq/JSONTableColumnsFirstStep.java +++ b/jOOQ/src/main/java/org/jooq/JSONTableColumnsFirstStep.java @@ -42,6 +42,7 @@ import org.jetbrains.annotations.*; // ... // ... +import static org.jooq.SQLDialect.MARIADB; import static org.jooq.SQLDialect.MYSQL; // ... import static org.jooq.SQLDialect.POSTGRES; @@ -59,7 +60,7 @@ public interface JSONTableColumnsFirstStep { * JSON_TABLE expression. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) JSONTableColumnForOrdinalityStep column(String name); /** @@ -67,7 +68,7 @@ public interface JSONTableColumnsFirstStep { * JSON_TABLE expression. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) JSONTableColumnForOrdinalityStep column(Name name); /** @@ -75,7 +76,7 @@ public interface JSONTableColumnsFirstStep { * JSON_TABLE expression. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) JSONTableColumnPathStep column(Field name); /** @@ -83,7 +84,7 @@ public interface JSONTableColumnsFirstStep { * JSON_TABLE expression. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) JSONTableColumnPathStep column(String name, DataType type); /** @@ -91,7 +92,7 @@ public interface JSONTableColumnsFirstStep { * JSON_TABLE expression. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) JSONTableColumnPathStep column(Name name, DataType type); /** @@ -99,7 +100,7 @@ public interface JSONTableColumnsFirstStep { * JSON_TABLE expression. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) JSONTableColumnPathStep column(Field name, DataType type); } diff --git a/jOOQ/src/main/java/org/jooq/SQLDialect.java b/jOOQ/src/main/java/org/jooq/SQLDialect.java index ae3291c4b0..e7eba2b684 100644 --- a/jOOQ/src/main/java/org/jooq/SQLDialect.java +++ b/jOOQ/src/main/java/org/jooq/SQLDialect.java @@ -213,6 +213,14 @@ public enum SQLDialect { + + + + + + + + diff --git a/jOOQ/src/main/java/org/jooq/SelectForUpdateWaitStep.java b/jOOQ/src/main/java/org/jooq/SelectForUpdateWaitStep.java index ebd26feb2a..0c9c99f60e 100644 --- a/jOOQ/src/main/java/org/jooq/SelectForUpdateWaitStep.java +++ b/jOOQ/src/main/java/org/jooq/SelectForUpdateWaitStep.java @@ -43,6 +43,7 @@ import org.jetbrains.annotations.*; // ... import static org.jooq.SQLDialect.MARIADB; // ... +// ... import static org.jooq.SQLDialect.MYSQL; // ... // ... @@ -141,6 +142,6 @@ public interface SelectForUpdateWaitStep extends SelectForStep * @see SelectQuery#setForLockModeSkipLocked() */ @NotNull @CheckReturnValue - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) SelectForStep skipLocked(); } diff --git a/jOOQ/src/main/java/org/jooq/SelectQuery.java b/jOOQ/src/main/java/org/jooq/SelectQuery.java index d4e9901c0e..75b253c3f8 100644 --- a/jOOQ/src/main/java/org/jooq/SelectQuery.java +++ b/jOOQ/src/main/java/org/jooq/SelectQuery.java @@ -60,6 +60,7 @@ import static org.jooq.SQLDialect.MARIADB; // ... // ... // ... +// ... import static org.jooq.SQLDialect.MYSQL; // ... // ... @@ -1200,7 +1201,7 @@ public interface SelectQuery extends Select, ConditionProvi * Depending on the dialect and lock mode this flag may or may not be * supported. */ - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) void setForLockModeSkipLocked(); diff --git a/jOOQ/src/main/java/org/jooq/impl/DSL.java b/jOOQ/src/main/java/org/jooq/impl/DSL.java index 1db6871138..75da8f1d4b 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.MARIADB; // ... // ... // ... +// ... import static org.jooq.SQLDialect.MYSQL; // ... // ... @@ -23246,7 +23247,7 @@ public class DSL { * The JSON table function. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) public static JSONTableColumnsFirstStep jsonTable(JSON json, String path) { return jsonTable(Tools.field(json), Tools.field(path)); } @@ -23255,7 +23256,7 @@ public class DSL { * The JSON table function. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) public static JSONTableColumnsFirstStep jsonTable(Field json, Field path) { return new JSONTable(Tools.nullSafe(json), Tools.nullSafe(path)); } @@ -23264,7 +23265,7 @@ public class DSL { * The JSON table function. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) public static JSONTableColumnsFirstStep jsonbTable(JSONB json, String path) { return jsonbTable(Tools.field(json), Tools.field(path)); } @@ -23273,7 +23274,7 @@ public class DSL { * The JSON table function. */ @NotNull - @Support({ MYSQL, POSTGRES }) + @Support({ MARIADB, MYSQL, POSTGRES }) public static JSONTableColumnsFirstStep jsonbTable(Field json, Field path) { return new JSONTable(Tools.nullSafe(json), Tools.nullSafe(path)); } diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index f2d7619b42..911fabadd3 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -451,6 +451,7 @@ final class InsertQueryImpl extends AbstractStoreQuery impl + case MYSQL: case MARIADB: { toSQLInsert(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/JSONTable.java b/jOOQ/src/main/java/org/jooq/impl/JSONTable.java index 992a726a87..2b67017005 100644 --- a/jOOQ/src/main/java/org/jooq/impl/JSONTable.java +++ b/jOOQ/src/main/java/org/jooq/impl/JSONTable.java @@ -39,6 +39,7 @@ package org.jooq.impl; // ... // ... +import static org.jooq.SQLDialect.MARIADB; import static org.jooq.SQLDialect.MYSQL; // ... // ... @@ -75,9 +76,7 @@ import org.jooq.Name; // ... import org.jooq.Record; import org.jooq.SQLDialect; -import org.jooq.SelectField; import org.jooq.TableOptions; -import org.jooq.conf.ParamType; /** * @author Lukas Eder @@ -86,7 +85,7 @@ final class JSONTable extends AbstractTable implements JSONTableColumnPathStep { - private static final Set REQUIRES_COLUMN_PATH = SQLDialect.supportedBy(MYSQL); + private static final Set REQUIRES_COLUMN_PATH = SQLDialect.supportedBy(MARIADB, MYSQL); diff --git a/jOOQ/src/main/java/org/jooq/impl/Limit.java b/jOOQ/src/main/java/org/jooq/impl/Limit.java index d8c3f6b1da..4ecfc3a05a 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Limit.java +++ b/jOOQ/src/main/java/org/jooq/impl/Limit.java @@ -168,6 +168,7 @@ final class Limit extends AbstractQueryPart { case DERBY: case FIREBIRD: case H2: + case MARIADB: case POSTGRES: { // [#8415] For backwards compatibility reasons, we generate standard @@ -276,7 +277,6 @@ final class Limit extends AbstractQueryPart { // [#4785] OFFSET cannot be without LIMIT - case MARIADB: diff --git a/jOOQ/src/main/java/org/jooq/impl/MetaSQL.java b/jOOQ/src/main/java/org/jooq/impl/MetaSQL.java index fba75d5286..1d1da4861b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MetaSQL.java +++ b/jOOQ/src/main/java/org/jooq/impl/MetaSQL.java @@ -77,6 +77,9 @@ final class MetaSQL { + + + @@ -117,6 +120,8 @@ final class MetaSQL { + + @@ -155,6 +160,8 @@ final class MetaSQL { + + diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index c91c510ffb..08be22dfbf 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -329,7 +329,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp - private static final Set SUPPORT_FULL_WITH_TIES = SQLDialect.supportedBy(H2, POSTGRES); + private static final Set SUPPORT_FULL_WITH_TIES = SQLDialect.supportedBy(H2, MARIADB, POSTGRES); private static final Set EMULATE_DISTINCT_ON = SQLDialect.supportedBy(DERBY, FIREBIRD, HSQLDB, MARIADB, MYSQL, SQLITE); static final Set NO_SUPPORT_FOR_UPDATE_OF_FIELDS = SQLDialect.supportedBy(MYSQL, POSTGRES); @@ -1767,7 +1767,6 @@ final class SelectQueryImpl extends AbstractResultQuery imp case CUBRID: case FIREBIRD: - case MARIADB: case MYSQL: { if (getLimit().isApplicable() && getLimit().withTies()) toSQLReferenceLimitWithWindowFunctions(context); @@ -3824,7 +3823,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp // [#12328] Don't recurse into the RHS if the join does not affect the projection j -> j.type != JoinType.LEFT_ANTI_JOIN && j.type != JoinType.LEFT_SEMI_JOIN, null, - + // TODO: PostgreSQL supports tables without columns, see e.g. // https://blog.jooq.org/creating-tables-dum-and-dee-in-postgresql/ (r, t) -> r && t.fieldsRow().size() > 0 diff --git a/jOOQ/src/main/java/org/jooq/tools/jdbc/JDBCUtils.java b/jOOQ/src/main/java/org/jooq/tools/jdbc/JDBCUtils.java index d107295b73..df06f8319c 100644 --- a/jOOQ/src/main/java/org/jooq/tools/jdbc/JDBCUtils.java +++ b/jOOQ/src/main/java/org/jooq/tools/jdbc/JDBCUtils.java @@ -392,6 +392,8 @@ public class JDBCUtils { + + return MARIADB; }