From feaddd71d4c9ec9fad9178f49238858ef2e469d5 Mon Sep 17 00:00:00 2001 From: lukaseder Date: Wed, 19 Jul 2017 12:12:06 +0200 Subject: [PATCH] [#5552] Add a MySQL 8 SQLDialect version --- .../main/java/org/jooq/util/Databases.java | 2 + jOOQ/src/main/java/org/jooq/SQLDialect.java | 10 ++++ .../java/org/jooq/impl/DefaultDSLContext.java | 2 +- .../java/org/jooq/impl/DeleteQueryImpl.java | 2 +- .../java/org/jooq/impl/InsertQueryImpl.java | 2 + jOOQ/src/main/java/org/jooq/impl/Limit.java | 2 + jOOQ/src/main/java/org/jooq/impl/MD5.java | 2 +- .../java/org/jooq/impl/SelectQueryImpl.java | 2 +- .../java/org/jooq/impl/SortFieldImpl.java | 2 +- jOOQ/src/main/java/org/jooq/impl/Tools.java | 2 +- pom.xml | 51 +++++++++++++++++++ 11 files changed, 73 insertions(+), 6 deletions(-) diff --git a/jOOQ-meta/src/main/java/org/jooq/util/Databases.java b/jOOQ-meta/src/main/java/org/jooq/util/Databases.java index 93c8e5e5c0..976543c4f7 100644 --- a/jOOQ-meta/src/main/java/org/jooq/util/Databases.java +++ b/jOOQ-meta/src/main/java/org/jooq/util/Databases.java @@ -104,6 +104,8 @@ public class Databases { case H2: result = H2Database.class; break; case HSQLDB: result = HSQLDBDatabase.class; break; case MARIADB: result = MariaDBDatabase.class; break; + case MYSQL_5_7: + case MYSQL_8_0: case MYSQL: result = MySQLDatabase.class; break; case POSTGRES_9_3: case POSTGRES_9_4: diff --git a/jOOQ/src/main/java/org/jooq/SQLDialect.java b/jOOQ/src/main/java/org/jooq/SQLDialect.java index fab89bb3a7..d5f8d6cd4a 100644 --- a/jOOQ/src/main/java/org/jooq/SQLDialect.java +++ b/jOOQ/src/main/java/org/jooq/SQLDialect.java @@ -120,6 +120,16 @@ public enum SQLDialect { */ MYSQL("MySQL", false), + /** + * The MySQL 5.7 dialect. + */ + MYSQL_5_7("MySQL", false, MYSQL, null), + + /** + * The MySQL 8.0 dialect. + */ + MYSQL_8_0("MySQL", false, MYSQL, MYSQL_5_7), + /** * The PostgreSQL dialect family. *

diff --git a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java index 231d436ac6..dd4d0ae0d5 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java +++ b/jOOQ/src/main/java/org/jooq/impl/DefaultDSLContext.java @@ -3372,7 +3372,7 @@ public class DefaultDSLContext extends AbstractScope implements DSLContext, Seri @Override public BigInteger lastID() { - switch (configuration().dialect().family()) { + switch (configuration().family()) { case DERBY: { Field field = field("identity_val_local()", BigInteger.class); return select(field).fetchOne(field); diff --git a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java index e4e14d130b..e13a583fce 100644 --- a/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/DeleteQueryImpl.java @@ -106,7 +106,7 @@ final class DeleteQueryImpl extends AbstractDMLQuery implem // [#2464] MySQL supports a peculiar multi-table DELETE syntax for aliased tables: // DELETE t1 FROM my_table AS t1 - if (asList(MARIADB, MYSQL).contains(ctx.configuration().dialect())) { + if (asList(MARIADB, MYSQL).contains(ctx.family())) { // [#2579] [#6304] TableAlias discovery if (Tools.alias(table) != null) diff --git a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java index a619e8b7ac..29c369e33b 100644 --- a/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/InsertQueryImpl.java @@ -306,6 +306,8 @@ final class InsertQueryImpl extends AbstractStoreQuery impl // MySQL has a nice, native syntax for this case MARIADB: + case MYSQL_5_7: + case MYSQL_8_0: case MYSQL: case SQLITE: { toSQLInsert(ctx); diff --git a/jOOQ/src/main/java/org/jooq/impl/Limit.java b/jOOQ/src/main/java/org/jooq/impl/Limit.java index 772cb54063..b38d476449 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Limit.java +++ b/jOOQ/src/main/java/org/jooq/impl/Limit.java @@ -270,6 +270,8 @@ final class Limit extends AbstractQueryPart { // [#4785] OFFSET cannot be without LIMIT case H2: case MARIADB: + case MYSQL_5_7: + case MYSQL_8_0: case MYSQL: case SQLITE: { context.castMode(NEVER) diff --git a/jOOQ/src/main/java/org/jooq/impl/MD5.java b/jOOQ/src/main/java/org/jooq/impl/MD5.java index b359a869d5..95de842964 100644 --- a/jOOQ/src/main/java/org/jooq/impl/MD5.java +++ b/jOOQ/src/main/java/org/jooq/impl/MD5.java @@ -57,7 +57,7 @@ final class MD5 extends AbstractFunction { @Override final Field getFunction0(Configuration configuration) { - switch (configuration.dialect().family()) { + switch (configuration.family()) { diff --git a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java index a5705e392e..94d31e5979 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SelectQueryImpl.java @@ -674,7 +674,7 @@ final class SelectQueryImpl extends AbstractResultQuery imp } } else if (forShare) { - switch (dialect) { + switch (family) { // MySQL has a non-standard implementation for the "FOR SHARE" clause case MARIADB: diff --git a/jOOQ/src/main/java/org/jooq/impl/SortFieldImpl.java b/jOOQ/src/main/java/org/jooq/impl/SortFieldImpl.java index d1cd47cbe5..31db654355 100644 --- a/jOOQ/src/main/java/org/jooq/impl/SortFieldImpl.java +++ b/jOOQ/src/main/java/org/jooq/impl/SortFieldImpl.java @@ -102,7 +102,7 @@ final class SortFieldImpl extends AbstractQueryPart implements SortField { @Override public final void accept(Context ctx) { if (nullsFirst || nullsLast) { - switch (ctx.configuration().dialect().family()) { + switch (ctx.family()) { diff --git a/jOOQ/src/main/java/org/jooq/impl/Tools.java b/jOOQ/src/main/java/org/jooq/impl/Tools.java index 6bdb115a3e..0478e88ecc 100644 --- a/jOOQ/src/main/java/org/jooq/impl/Tools.java +++ b/jOOQ/src/main/java/org/jooq/impl/Tools.java @@ -1944,7 +1944,7 @@ final class Tools { */ static final boolean needsBackslashEscaping(Configuration configuration) { BackslashEscaping escaping = getBackslashEscaping(configuration.settings()); - return escaping == ON || (escaping == DEFAULT && EnumSet.of(MARIADB, MYSQL).contains(configuration.dialect().family())); + return escaping == ON || (escaping == DEFAULT && EnumSet.of(MARIADB, MYSQL).contains(configuration.family())); } /** diff --git a/pom.xml b/pom.xml index 45d7b17278..9e012e3f32 100644 --- a/pom.xml +++ b/pom.xml @@ -413,6 +413,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +