From c3bc0c4975afa011f8cd225ebed7429bdf11382b Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Wed, 7 Dec 2016 21:58:07 +1300 Subject: [PATCH] #913 - IllegalArgumentException: No enum constant com.avaje.ebean.config.Platform.HSQLDB --- pom.xml | 2 +- .../config/dbplatform/DatabasePlatform.java | 20 ++++++++++------ .../config/dbplatform/db2/DB2Platform.java | 3 ++- .../config/dbplatform/h2/H2Platform.java | 3 ++- .../dbplatform/hsqldb/HsqldbPlatform.java | 3 ++- .../dbplatform/mysql/MySqlPlatform.java | 3 ++- .../dbplatform/oracle/OraclePlatform.java | 3 ++- .../dbplatform/postgres/PostgresPlatform.java | 3 ++- .../sqlanywhere/SqlAnywherePlatform.java | 3 ++- .../dbplatform/sqlite/SQLitePlatform.java | 3 ++- .../sqlserver/SqlServerPlatform.java | 3 ++- .../avaje/ebean/dbmigration/DbMigration.java | 2 +- .../server/core/InternalConfiguration.java | 9 ++++---- .../server/deploy/parse/AnnotationBase.java | 2 +- .../server/type/DefaultTypeManager.java | 23 +------------------ .../avaje/tests/idkeys/TestGeneratedKeys.java | 4 ++-- .../com/avaje/tests/lib/EbeanTestCase.java | 3 ++- .../sqlquery/TestNativeILikeExpression.java | 5 ++-- 18 files changed, 47 insertions(+), 50 deletions(-) diff --git a/pom.xml b/pom.xml index bb1bd0f10..ed1bab0b6 100644 --- a/pom.xml +++ b/pom.xml @@ -41,7 +41,7 @@ org.avaje.ebean ebean-annotation - 1.4 + 1.5 diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java index 951f0fb53..8e67f5266 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/DatabasePlatform.java @@ -121,7 +121,7 @@ public class DatabasePlatform { /** * The database platform name. */ - protected String name = "generic"; + protected Platform platform = Platform.GENERIC; protected String columnAliasPrefix = "c"; @@ -207,25 +207,31 @@ public class DatabasePlatform { } private boolean platformMatch(Platform platform) { - return platform == null || platform.name().equalsIgnoreCase(name); + return platform == null || isPlatform(platform); } /** * Return true if this matches the given platform. */ public boolean isPlatform(Platform platform) { - return platform.name().equalsIgnoreCase(name); + return this.platform.equals(platform); } /** - * Return the name of the DatabasePlatform. + * Return the platform key. + */ + public Platform getPlatform() { + return platform; + } + + /** + * Return the name of the underlying Platform in lowercase. *

- * "generic" is returned when no specific database platform has been set or - * found. + * "generic" is returned when no specific database platform has been set or found. *

*/ public String getName() { - return name; + return platform.name().toLowerCase(); } /** diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/db2/DB2Platform.java b/src/main/java/com/avaje/ebean/config/dbplatform/db2/DB2Platform.java index e0a575259..0503bfb8b 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/db2/DB2Platform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/db2/DB2Platform.java @@ -1,6 +1,7 @@ package com.avaje.ebean.config.dbplatform.db2; import com.avaje.ebean.BackgroundExecutor; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; import com.avaje.ebean.config.dbplatform.DbType; @@ -17,7 +18,7 @@ public class DB2Platform extends DatabasePlatform { public DB2Platform() { super(); - this.name = "db2"; + this.platform = Platform.DB2; this.maxTableNameLength = 18; this.maxConstraintNameLength = 18; this.sqlLimiter = new Db2SqlLimiter(); diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/h2/H2Platform.java b/src/main/java/com/avaje/ebean/config/dbplatform/h2/H2Platform.java index 09739e7f6..d2647b57e 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/h2/H2Platform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/h2/H2Platform.java @@ -1,6 +1,7 @@ package com.avaje.ebean.config.dbplatform.h2; import com.avaje.ebean.BackgroundExecutor; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; import com.avaje.ebean.config.dbplatform.DbType; @@ -17,7 +18,7 @@ public class H2Platform extends DatabasePlatform { public H2Platform() { super(); - this.name = "h2"; + this.platform = Platform.H2; this.dbEncrypt = new H2DbEncrypt(); this.platformDdl = new H2Ddl(this); this.historySupport = new H2HistorySupport(); diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/hsqldb/HsqldbPlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/hsqldb/HsqldbPlatform.java index 454fc6b35..cc8eda7e6 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/hsqldb/HsqldbPlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/hsqldb/HsqldbPlatform.java @@ -1,6 +1,7 @@ package com.avaje.ebean.config.dbplatform.hsqldb; import com.avaje.ebean.BackgroundExecutor; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; import com.avaje.ebean.config.dbplatform.DbType; @@ -19,7 +20,7 @@ public class HsqldbPlatform extends DatabasePlatform { public HsqldbPlatform() { super(); - this.name = "hsqldb"; + this.platform = Platform.HSQLDB; this.dbEncrypt = new H2DbEncrypt(); this.platformDdl = new HsqldbDdl(this); diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/mysql/MySqlPlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/mysql/MySqlPlatform.java index c08ea9b52..ee5e9ac6a 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/mysql/MySqlPlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/mysql/MySqlPlatform.java @@ -1,6 +1,7 @@ package com.avaje.ebean.config.dbplatform.mysql; import com.avaje.ebean.BackgroundExecutor; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; import com.avaje.ebean.config.dbplatform.DbType; @@ -25,7 +26,7 @@ public class MySqlPlatform extends DatabasePlatform { public MySqlPlatform() { super(); - this.name = "mysql"; + this.platform = Platform.MYSQL; this.useExtraTransactionOnIterateSecondaryQueries = true; this.likeClause = "like ? escape''"; this.selectCountWithAlias = true; diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/oracle/OraclePlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/oracle/OraclePlatform.java index f2439ba6f..4c321bd4a 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/oracle/OraclePlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/oracle/OraclePlatform.java @@ -1,6 +1,7 @@ package com.avaje.ebean.config.dbplatform.oracle; import com.avaje.ebean.BackgroundExecutor; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.BasicSqlAnsiLimiter; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; @@ -20,7 +21,7 @@ public class OraclePlatform extends DatabasePlatform { public OraclePlatform() { super(); - this.name = "oracle"; + this.platform = Platform.ORACLE; this.maxTableNameLength = 30; this.maxConstraintNameLength = 30; this.dbEncrypt = new OracleDbEncrypt(); diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/postgres/PostgresPlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/postgres/PostgresPlatform.java index c96cb9b82..9f7d9c3b8 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/postgres/PostgresPlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/postgres/PostgresPlatform.java @@ -1,6 +1,7 @@ package com.avaje.ebean.config.dbplatform.postgres; import com.avaje.ebean.BackgroundExecutor; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.ServerConfig; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; @@ -23,7 +24,7 @@ public class PostgresPlatform extends DatabasePlatform { public PostgresPlatform() { super(); - this.name = "postgres"; + this.platform = Platform.POSTGRES; this.supportsNativeIlike = true; this.likeClause = "like ? escape''"; this.selectCountWithAlias = true; diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java index b925c7a99..d55120531 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java @@ -1,5 +1,6 @@ package com.avaje.ebean.config.dbplatform.sqlanywhere; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; import com.avaje.ebean.config.dbplatform.DbType; @@ -18,7 +19,7 @@ public class SqlAnywherePlatform extends DatabasePlatform { public SqlAnywherePlatform() { super(); - this.name = "sqlanywhere"; + this.platform = Platform.SQLANYWHERE; this.dbIdentity.setIdType(IdType.IDENTITY); this.sqlLimiter = new SqlAnywhereLimiter(); diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/sqlite/SQLitePlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/sqlite/SQLitePlatform.java index 735d8c48a..75ce97590 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/sqlite/SQLitePlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/sqlite/SQLitePlatform.java @@ -1,5 +1,6 @@ package com.avaje.ebean.config.dbplatform.sqlite; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; import com.avaje.ebean.config.dbplatform.DbType; @@ -12,7 +13,7 @@ public class SQLitePlatform extends DatabasePlatform { public SQLitePlatform() { super(); - this.name = "sqlite"; + this.platform = Platform.SQLITE; this.platformDdl = new SQLiteDdl(this); this.dbIdentity.setIdType(IdType.IDENTITY); diff --git a/src/main/java/com/avaje/ebean/config/dbplatform/sqlserver/SqlServerPlatform.java b/src/main/java/com/avaje/ebean/config/dbplatform/sqlserver/SqlServerPlatform.java index 91ecb0b6a..890b0b4bd 100644 --- a/src/main/java/com/avaje/ebean/config/dbplatform/sqlserver/SqlServerPlatform.java +++ b/src/main/java/com/avaje/ebean/config/dbplatform/sqlserver/SqlServerPlatform.java @@ -1,6 +1,7 @@ package com.avaje.ebean.config.dbplatform.sqlserver; import com.avaje.ebean.config.PersistBatch; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbPlatformType; import com.avaje.ebean.config.dbplatform.DbType; @@ -14,7 +15,7 @@ public class SqlServerPlatform extends DatabasePlatform { public SqlServerPlatform() { super(); - this.name = "sqlserver"; + this.platform = Platform.SQLSERVER; // effectively disable persistBatchOnCascade mode for SQL Server // due to lack of support for getGeneratedKeys in batch mode this.persistBatchOnCascade = PersistBatch.NONE; diff --git a/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java b/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java index 64aed50e0..dd3a7d70a 100644 --- a/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java +++ b/src/main/java/com/avaje/ebean/dbmigration/DbMigration.java @@ -152,7 +152,7 @@ public class DbMigration { public void setPlatform(DatabasePlatform databasePlatform) { this.databasePlatform = databasePlatform; if (!online) { - DbOffline.setPlatform(databasePlatform.getName()); + DbOffline.setPlatform(databasePlatform.getPlatform()); } } diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/InternalConfiguration.java b/src/main/java/com/avaje/ebeaninternal/server/core/InternalConfiguration.java index 4592d88f8..9936f9609 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/InternalConfiguration.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/InternalConfiguration.java @@ -3,6 +3,7 @@ package com.avaje.ebeaninternal.server.core; import com.avaje.ebean.ExpressionFactory; import com.avaje.ebean.cache.ServerCacheManager; import com.avaje.ebean.config.ExternalTransactionManager; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.ServerConfig; import com.avaje.ebean.config.dbplatform.DatabasePlatform; import com.avaje.ebean.config.dbplatform.DbHistorySupport; @@ -248,11 +249,11 @@ public class InternalConfiguration { */ private DbExpressionHandler getDbExpressionHandler(DatabasePlatform databasePlatform) { - String name = databasePlatform.getName(); - if ("postgres".equalsIgnoreCase(name)) { + Platform platform = databasePlatform.getPlatform(); + if (platform == Platform.POSTGRES) { return new PostgresJsonExpression(); } - if ("oracle".equalsIgnoreCase(name)) { + if (platform == Platform.ORACLE) { return new OracleDbExpression(); } return new NotSupportedDbExpression(); @@ -414,7 +415,7 @@ public class InternalConfiguration { if (tz == null) { return new NoDataTimeZone(); } - if (getDatabasePlatform().getName().toLowerCase().startsWith("oracle")) { + if (getDatabasePlatform().getPlatform() == Platform.ORACLE) { return new CloneDataTimeZone(tz); } else { return new SimpleDataTimeZone(tz); diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationBase.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationBase.java index eef771d30..ebb6a43c4 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationBase.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/parse/AnnotationBase.java @@ -32,7 +32,7 @@ public abstract class AnnotationBase { protected AnnotationBase(DeployUtil util) { this.util = util; this.databasePlatform = util.getDbPlatform(); - this.platform = Platform.valueOf(databasePlatform.getName().toUpperCase()); + this.platform = databasePlatform.getPlatform(); this.namingConvention = util.getNamingConvention(); } diff --git a/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java b/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java index b7b5577e4..a4692dd98 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java +++ b/src/main/java/com/avaje/ebeaninternal/server/type/DefaultTypeManager.java @@ -223,28 +223,7 @@ public final class DefaultTypeManager implements TypeManager { } private boolean isPostgres(DatabasePlatform databasePlatform) { - return databasePlatform.getName().toLowerCase().startsWith("postgre"); - } - - public boolean isKnownImmutable(Class cls) { - - if (cls == null) { - // superclass from an interface - return true; - } - - if (cls.isPrimitive() || Object.class.equals(cls)) { - return true; - } - - ScalarDataReader scalarDataReader = getScalarDataReader(cls); - return scalarDataReader != null; - } - - private ScalarType register(ScalarType st) { - add(st); - logger.debug("Registering ScalarType for " + st.getType() + " implemented using reflection"); - return st; + return databasePlatform.getPlatform() == Platform.POSTGRES; } /** diff --git a/src/test/java/com/avaje/tests/idkeys/TestGeneratedKeys.java b/src/test/java/com/avaje/tests/idkeys/TestGeneratedKeys.java index e929552b9..b191c43f6 100644 --- a/src/test/java/com/avaje/tests/idkeys/TestGeneratedKeys.java +++ b/src/test/java/com/avaje/tests/idkeys/TestGeneratedKeys.java @@ -1,6 +1,7 @@ package com.avaje.tests.idkeys; import com.avaje.ebean.Transaction; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.config.dbplatform.IdType; import com.avaje.ebeaninternal.api.SpiEbeanServer; import com.avaje.tests.idkeys.db.GenKeyIdentity; @@ -28,12 +29,11 @@ public class TestGeneratedKeys extends EbeanTestCase { public void testSequence() throws SQLException { SpiEbeanServer server = (SpiEbeanServer) getServer(); IdType idType = server.getDatabasePlatform().getDbIdentity().getIdType(); - String platformName = server.getDatabasePlatform().getName(); if (!IdType.SEQUENCE.equals(idType)) { // only run this test when SEQUENCE is being used return; } - if (!"h2".equals(platformName)) { + if (server.getDatabasePlatform().getPlatform() == Platform.H2) { // readSequenceValue is H2 specific return; } diff --git a/src/test/java/com/avaje/tests/lib/EbeanTestCase.java b/src/test/java/com/avaje/tests/lib/EbeanTestCase.java index 71b3c4abc..f76175114 100644 --- a/src/test/java/com/avaje/tests/lib/EbeanTestCase.java +++ b/src/test/java/com/avaje/tests/lib/EbeanTestCase.java @@ -3,6 +3,7 @@ package com.avaje.tests.lib; import com.avaje.ebean.Ebean; import com.avaje.ebean.EbeanServer; import com.avaje.ebean.Transaction; +import com.avaje.ebean.config.Platform; import com.avaje.ebeaninternal.api.SpiEbeanServer; import junit.framework.TestCase; import junit.framework.TestResult; @@ -37,7 +38,7 @@ public abstract class EbeanTestCase extends TestCase { */ public boolean isMsSqlServer() { SpiEbeanServer spi = (SpiEbeanServer) Ebean.getDefaultServer(); - return spi.getDatabasePlatform().getName().startsWith("mssqlserver"); + return spi.getDatabasePlatform().getPlatform() == Platform.SQLSERVER; } } diff --git a/src/test/java/com/avaje/tests/query/sqlquery/TestNativeILikeExpression.java b/src/test/java/com/avaje/tests/query/sqlquery/TestNativeILikeExpression.java index e9a35e621..a759fde72 100644 --- a/src/test/java/com/avaje/tests/query/sqlquery/TestNativeILikeExpression.java +++ b/src/test/java/com/avaje/tests/query/sqlquery/TestNativeILikeExpression.java @@ -3,6 +3,7 @@ package com.avaje.tests.query.sqlquery; import com.avaje.ebean.BaseTestCase; import com.avaje.ebean.Ebean; import com.avaje.ebean.Query; +import com.avaje.ebean.config.Platform; import com.avaje.ebean.plugin.SpiServer; import com.avaje.tests.model.basic.Customer; import com.avaje.tests.model.basic.ResetBasicData; @@ -37,8 +38,8 @@ public class TestNativeILikeExpression extends BaseTestCase { SpiServer pluginApi = server().getPluginApi(); boolean expressionNativeIlike = pluginApi.getServerConfig().isExpressionNativeIlike(); - String platformName = pluginApi.getDatabasePlatform().getName(); + Platform platform = pluginApi.getDatabasePlatform().getPlatform(); - return expressionNativeIlike && platformName.equalsIgnoreCase("postgres"); + return expressionNativeIlike && platform == Platform.POSTGRES; } }