diff --git a/pom.xml b/pom.xml
index 2b1fc0bc7..b9ae3f3e7 100644
--- a/pom.xml
+++ b/pom.xml
@@ -118,7 +118,7 @@
io.ebean
ebean-annotation
- 4.12
+ 4.13
@@ -330,7 +330,7 @@
io.ebean
ebean-maven-plugin
- 11.44.1
+ 11.45.1
test
diff --git a/src/main/java/io/ebean/config/dbplatform/mysql/MySql55Platform.java b/src/main/java/io/ebean/config/dbplatform/mysql/MySql55Platform.java
new file mode 100644
index 000000000..f1d24b768
--- /dev/null
+++ b/src/main/java/io/ebean/config/dbplatform/mysql/MySql55Platform.java
@@ -0,0 +1,14 @@
+package io.ebean.config.dbplatform.mysql;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DbPlatformType;
+import io.ebean.config.dbplatform.DbType;
+
+public class MySql55Platform extends MySqlPlatform {
+
+ public MySql55Platform() {
+ super();
+ this.platform = Platform.MYSQL55;
+ dbTypeMap.put(DbType.TIMESTAMP, new DbPlatformType("datetime"));
+ }
+}
diff --git a/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
index d886c7433..671e9f844 100644
--- a/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
+++ b/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
@@ -14,6 +14,7 @@ import io.ebean.config.dbplatform.db2.DB2Platform;
import io.ebean.config.dbplatform.h2.H2Platform;
import io.ebean.config.dbplatform.hana.HanaPlatform;
import io.ebean.config.dbplatform.hsqldb.HsqldbPlatform;
+import io.ebean.config.dbplatform.mysql.MySql55Platform;
import io.ebean.config.dbplatform.mysql.MySqlPlatform;
import io.ebean.config.dbplatform.nuodb.NuoDbPlatform;
import io.ebean.config.dbplatform.oracle.OraclePlatform;
@@ -787,6 +788,8 @@ public class DefaultDbMigration implements DbMigration {
return new HsqldbPlatform();
case POSTGRES:
return new PostgresPlatform();
+ case MYSQL55:
+ return new MySql55Platform();
case MYSQL:
return new MySqlPlatform();
case ORACLE:
diff --git a/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java b/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
index 0854ae4f3..88c172875 100644
--- a/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
+++ b/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
@@ -8,6 +8,7 @@ import io.ebean.config.dbplatform.db2.DB2Platform;
import io.ebean.config.dbplatform.h2.H2Platform;
import io.ebean.config.dbplatform.hana.HanaPlatform;
import io.ebean.config.dbplatform.hsqldb.HsqldbPlatform;
+import io.ebean.config.dbplatform.mysql.MySql55Platform;
import io.ebean.config.dbplatform.mysql.MySqlPlatform;
import io.ebean.config.dbplatform.nuodb.NuoDbPlatform;
import io.ebean.config.dbplatform.oracle.OraclePlatform;
@@ -82,6 +83,9 @@ public class DatabasePlatformFactory {
if (dbName.equals("mysql")) {
return new MySqlPlatform();
}
+ if (dbName.equals("mysql55")) {
+ return new MySql55Platform();
+ }
if (dbName.equals("postgres") || dbName.equals("postgres9")) {
return new PostgresPlatform();
}
@@ -147,15 +151,16 @@ public class DatabasePlatformFactory {
*/
private DatabasePlatform byDatabaseMeta(DatabaseMetaData metaData, Connection connection) throws SQLException {
- String dbProductName = metaData.getDatabaseProductName();
- dbProductName = dbProductName.toLowerCase();
+ String dbProductName = metaData.getDatabaseProductName().toLowerCase();
+ final int majorVersion = metaData.getDatabaseMajorVersion();
+ final int minorVersion = metaData.getDatabaseMinorVersion();
if (dbProductName.contains("oracle")) {
return new OraclePlatform();
} else if (dbProductName.contains("microsoft")) {
throw new IllegalArgumentException("For SqlServer please explicitly choose either sqlserver16 or sqlserver17 as the platform via ServerConfig.setDatabasePlatformName. Refer to issue #1340 for more details");
} else if (dbProductName.contains("mysql")) {
- return new MySqlPlatform();
+ return mysqlVersion(majorVersion, minorVersion);
} else if (dbProductName.contains("h2")) {
return new H2Platform();
} else if (dbProductName.contains("hsql database engine")) {
@@ -180,6 +185,13 @@ public class DatabasePlatformFactory {
return new DatabasePlatform();
}
+ private DatabasePlatform mysqlVersion(int majorVersion, int minorVersion) {
+ if (majorVersion <= 5 && minorVersion <= 5) {
+ return new MySql55Platform();
+ }
+ return new MySqlPlatform();
+ }
+
/**
* Use a select version() query as it could be Postgres or CockroachDB.
*/
diff --git a/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java b/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
index b755e8c3d..b6b034f57 100644
--- a/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
+++ b/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java
@@ -514,7 +514,7 @@ public class InternalConfiguration {
String tz = serverConfig.getDataTimeZone();
if (tz == null) {
- if (getPlatform() == Platform.MYSQL) {
+ if (isMySql(getPlatform())) {
return new LocalDataTimeZone();
}
return new NoDataTimeZone();
@@ -526,6 +526,10 @@ public class InternalConfiguration {
}
}
+ private boolean isMySql(Platform platform) {
+ return platform == Platform.MYSQL || platform == Platform.MYSQL55;
+ }
+
public DataTimeZone getDataTimeZone() {
return dataTimeZone;
}
diff --git a/src/main/java/io/ebeaninternal/server/core/PlatformDdlBuilder.java b/src/main/java/io/ebeaninternal/server/core/PlatformDdlBuilder.java
index bacee903e..f6aadfa83 100644
--- a/src/main/java/io/ebeaninternal/server/core/PlatformDdlBuilder.java
+++ b/src/main/java/io/ebeaninternal/server/core/PlatformDdlBuilder.java
@@ -30,6 +30,7 @@ public class PlatformDdlBuilder {
return new H2Ddl(platform);
case DB2:
return new DB2Ddl(platform);
+ case MYSQL55:
case MYSQL:
return new MySqlDdl(platform);
case HSQLDB:
diff --git a/src/main/java/io/ebeaninternal/server/expression/platform/DbExpressionHandlerFactory.java b/src/main/java/io/ebeaninternal/server/expression/platform/DbExpressionHandlerFactory.java
index 1bebb5e96..14bcb1e95 100644
--- a/src/main/java/io/ebeaninternal/server/expression/platform/DbExpressionHandlerFactory.java
+++ b/src/main/java/io/ebeaninternal/server/expression/platform/DbExpressionHandlerFactory.java
@@ -17,6 +17,7 @@ public class DbExpressionHandlerFactory {
return new H2DbExpression();
case POSTGRES:
return new PostgresDbExpression();
+ case MYSQL55:
case MYSQL:
return new MySqlDbExpression();
case ORACLE:
diff --git a/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java b/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java
index f6e3620a9..b83140706 100644
--- a/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java
+++ b/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java
@@ -141,7 +141,7 @@ class CQueryBuilder {
if (dbPlatform.isSupportsDeleteTableAlias()) {
// delete from table ...
return aliasReplace(buildSql("delete", request, predicates, sqlTree).getSql(), alias);
- } else if (dbPlatform.getPlatform() == Platform.MYSQL) {
+ } else if (isMySql(dbPlatform.getPlatform())) {
return aliasReplace(buildSql("delete " + alias, request, predicates, sqlTree).getSql(), alias);
} else {
// simple - delete from table ...
@@ -155,6 +155,10 @@ class CQueryBuilder {
return sql;
}
+ private boolean isMySql(Platform platform) {
+ return platform == Platform.MYSQL || platform == Platform.MYSQL55;
+ }
+
private String alias(String rootTableAlias) {
return (rootTableAlias == null) ? "t0" : rootTableAlias;
}
diff --git a/src/test/java/io/ebean/BaseTestCase.java b/src/test/java/io/ebean/BaseTestCase.java
index c9fe57ba1..581dfa0aa 100644
--- a/src/test/java/io/ebean/BaseTestCase.java
+++ b/src/test/java/io/ebean/BaseTestCase.java
@@ -183,7 +183,7 @@ public abstract class BaseTestCase {
}
public boolean isMySql() {
- return Platform.MYSQL == platform();
+ return Platform.MYSQL == platform() || Platform.MYSQL55 == platform();
}
public boolean isHana() {
diff --git a/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java b/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
index 27fda6d25..8b655b2dc 100644
--- a/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
+++ b/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
@@ -49,6 +49,7 @@ public class DbMigrationGenerateTest {
migration.addPlatform(Platform.H2, "h2");
migration.addPlatform(Platform.HSQLDB, "hsqldb");
migration.addPlatform(Platform.MYSQL, "mysql");
+ migration.addPlatform(Platform.MYSQL55, "mysql55");
migration.addPlatform(Platform.POSTGRES, "postgres");
migration.addPlatform(Platform.ORACLE, "oracle");
migration.addPlatform(Platform.SQLITE, "sqlite");