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 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+