From 4a20c9eb99db34b8c04aca747a2d6a955280a222 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Thu, 27 Jan 2022 13:56:21 +0100 Subject: [PATCH 1/2] Test against H2 1.4.199 --- .../ddlgeneration/platform/H2Ddl.java | 5 +++++ .../ddlgeneration/BaseDdlHandlerTest.java | 14 ++++++++++++-- .../platform/PlatformDdl_AlterColumnTest.java | 17 +++++++++++++---- .../test/resources/application-test.properties | 4 ++-- .../config/PlatformNoGeneratedKeysTest.java | 2 +- .../org/tests/update/TestSqlUpdateUpsert.java | 8 +++++++- ebean-test/src/test/resources/ebean.properties | 2 +- .../src/test/resources/test-ebean.properties | 2 +- pom.xml | 2 +- 9 files changed, 43 insertions(+), 13 deletions(-) diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2Ddl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2Ddl.java index 542bc695a..952fa9858 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2Ddl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2Ddl.java @@ -7,6 +7,8 @@ import io.ebean.config.dbplatform.DatabasePlatform; */ public class H2Ddl extends PlatformDdl { + private static boolean useV1Syntax = Boolean.getBoolean("ebean.h2.useV1Syntax"); + public H2Ddl(DatabasePlatform platform) { super(platform); this.historyDdl = new H2HistoryDdl(); @@ -22,6 +24,9 @@ public class H2Ddl extends PlatformDdl { @Override protected String convertArrayType(String logicalArrayType) { + if (useV1Syntax) { + return "array"; + } int pos = logicalArrayType.indexOf('['); if (pos == -1) { return logicalArrayType; diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/BaseDdlHandlerTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/BaseDdlHandlerTest.java index 87c48bb85..550d508ad 100644 --- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/BaseDdlHandlerTest.java +++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/BaseDdlHandlerTest.java @@ -18,6 +18,8 @@ import static org.assertj.core.api.Assertions.assertThat; public class BaseDdlHandlerTest extends BaseTestCase { + private static boolean useV1Syntax = Boolean.getBoolean("ebean.h2.useV1Syntax"); + private final DatabaseConfig serverConfig = new DatabaseConfig(); private DdlHandler handler(DatabasePlatform platform) { @@ -107,7 +109,11 @@ public class BaseDdlHandlerTest extends BaseTestCase { write = new DdlWrite(); h2Handler().generate(write, Helper.getAlterTableAddDbArrayColumnWithLength()); - assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_ninety varchar array;\n\n"); + if (useV1Syntax) { + assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_ninety array;\n\n"); + } else { + assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_ninety varchar array;\n\n"); + } write = new DdlWrite(); sqlserverHandler().generate(write, Helper.getAlterTableAddDbArrayColumnWithLength()); @@ -127,7 +133,11 @@ public class BaseDdlHandlerTest extends BaseTestCase { write = new DdlWrite(); h2Handler().generate(write, Helper.getAlterTableAddDbArrayColumnIntegerWithLength()); - assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_integer integer array;\n\n"); + if (useV1Syntax) { + assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_integer array;\n\n"); + } else { + assertThat(write.apply().getBuffer()).isEqualTo("alter table foo add column dbarray_integer integer array;\n\n"); + } write = new DdlWrite(); sqlserverHandler().generate(write, Helper.getAlterTableAddDbArrayColumnIntegerWithLength()); diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_AlterColumnTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_AlterColumnTest.java index 3141eef74..2ae1118f1 100644 --- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_AlterColumnTest.java +++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_AlterColumnTest.java @@ -25,6 +25,8 @@ import static org.junit.jupiter.api.Assertions.assertTrue; public class PlatformDdl_AlterColumnTest { + private static boolean useV1Syntax = Boolean.getBoolean("ebean.h2.useV1Syntax"); + private final PlatformDdl h2Ddl = PlatformDdlBuilder.create(new H2Platform()); private final PlatformDdl pgDdl = PlatformDdlBuilder.create(new PostgresPlatform()); private final PlatformDdl mysqlDdl = PlatformDdlBuilder.create(new MySqlPlatform()); @@ -57,10 +59,17 @@ public class PlatformDdl_AlterColumnTest { @Test public void convertArrayType_h2() { - assertThat(h2Ddl.convertArrayType("varchar[](90)")).isEqualTo("varchar array"); - assertThat(h2Ddl.convertArrayType("integer[](60)")).isEqualTo("integer array"); - assertThat(h2Ddl.convertArrayType("varchar[]")).isEqualTo("varchar array"); - assertThat(h2Ddl.convertArrayType("integer[]")).isEqualTo("integer array"); + if (useV1Syntax) { + assertThat(h2Ddl.convertArrayType("varchar[](90)")).isEqualTo("array"); + assertThat(h2Ddl.convertArrayType("integer[](60)")).isEqualTo("array"); + assertThat(h2Ddl.convertArrayType("varchar[]")).isEqualTo("array"); + assertThat(h2Ddl.convertArrayType("integer[]")).isEqualTo("array"); + } else { + assertThat(h2Ddl.convertArrayType("varchar[](90)")).isEqualTo("varchar array"); + assertThat(h2Ddl.convertArrayType("integer[](60)")).isEqualTo("integer array"); + assertThat(h2Ddl.convertArrayType("varchar[]")).isEqualTo("varchar array"); + assertThat(h2Ddl.convertArrayType("integer[]")).isEqualTo("integer array"); + } } @Test diff --git a/ebean-querybean/src/test/resources/application-test.properties b/ebean-querybean/src/test/resources/application-test.properties index fef41029d..2cb5bb2c7 100644 --- a/ebean-querybean/src/test/resources/application-test.properties +++ b/ebean-querybean/src/test/resources/application-test.properties @@ -6,8 +6,8 @@ datasource.default=h2 datasource.h2.username=sa datasource.h2.password= -datasource.h2.url=jdbc:h2:mem:tests;NON_KEYWORDS=KEY +datasource.h2.url=jdbc:h2:mem:tests datasource.pg.username=sa datasource.pg.password= -datasource.pg.url=jdbc:h2:mem:tests;NON_KEYWORDS=KEY +datasource.pg.url=jdbc:h2:mem:tests diff --git a/ebean-test/src/test/java/io/ebean/config/PlatformNoGeneratedKeysTest.java b/ebean-test/src/test/java/io/ebean/config/PlatformNoGeneratedKeysTest.java index 6c57e56bb..63b672137 100644 --- a/ebean-test/src/test/java/io/ebean/config/PlatformNoGeneratedKeysTest.java +++ b/ebean-test/src/test/java/io/ebean/config/PlatformNoGeneratedKeysTest.java @@ -101,7 +101,7 @@ public class PlatformNoGeneratedKeysTest { config.setDatabasePlatform(platform); config.getDataSourceConfig().setUsername("sa"); config.getDataSourceConfig().setPassword(""); - config.getDataSourceConfig().setUrl("jdbc:h2:mem:withPCQuery;MODE=LEGACY"); + config.getDataSourceConfig().setUrl("jdbc:h2:mem:withPCQuery"); config.getDataSourceConfig().setDriver("org.h2.Driver"); config.setDisableLazyLoading(true); diff --git a/ebean-test/src/test/java/org/tests/update/TestSqlUpdateUpsert.java b/ebean-test/src/test/java/org/tests/update/TestSqlUpdateUpsert.java index 515540ea3..ffa1bd26b 100644 --- a/ebean-test/src/test/java/org/tests/update/TestSqlUpdateUpsert.java +++ b/ebean-test/src/test/java/org/tests/update/TestSqlUpdateUpsert.java @@ -11,6 +11,8 @@ import static org.assertj.core.api.Assertions.assertThat; public class TestSqlUpdateUpsert extends BaseTestCase { + private static boolean useV1Syntax = Boolean.getBoolean("ebean.h2.useV1Syntax"); + @ForPlatform(Platform.H2) @Test public void h2Merge() throws InterruptedException { @@ -39,7 +41,11 @@ public class TestSqlUpdateUpsert extends BaseTestCase { .setParameter("online", false); Object key2 = sqlUpdate2.executeGetKey(); - assertThat(key2).isEqualTo(key); + if (useV1Syntax) { + assertThat(key2).isNull(); + } else { + assertThat(key2).isEqualTo(key); + } EPersonOnline found2 = DB.find(EPersonOnline.class).where().eq("email", email).findOne(); diff --git a/ebean-test/src/test/resources/ebean.properties b/ebean-test/src/test/resources/ebean.properties index d7e1debae..402facaab 100644 --- a/ebean-test/src/test/resources/ebean.properties +++ b/ebean-test/src/test/resources/ebean.properties @@ -72,7 +72,7 @@ datasource.db.databaseDriver=org.h2.Driver datasource.h2.username=sa datasource.h2.password= -datasource.h2.url=jdbc:h2:mem:testsMem;DB_CLOSE_ON_EXIT=FALSE;NON_KEYWORDS=KEY,VALUE +datasource.h2.url=jdbc:h2:mem:testsMem;DB_CLOSE_ON_EXIT=FALSE datasource.h2.poolListener=org.tests.basic.MyTestDataSourcePoolListener #datasource.h2.minConnections=1 #datasource.h2.maxConnections=25 diff --git a/ebean-test/src/test/resources/test-ebean.properties b/ebean-test/src/test/resources/test-ebean.properties index 436499c1b..2405e5104 100644 --- a/ebean-test/src/test/resources/test-ebean.properties +++ b/ebean-test/src/test/resources/test-ebean.properties @@ -8,5 +8,5 @@ ebean.jodaLocalTimeMode=normal datasource.someotherdb.username=sa datasource.someotherdb.password= -datasource.someotherdb.databaseUrl=jdbc:h2:mem:someotherdb;NON_KEYWORDS=KEY,VALUE +datasource.someotherdb.databaseUrl=jdbc:h2:mem:someotherdb datasource.someotherdb.databaseDriver=org.h2.Driver diff --git a/pom.xml b/pom.xml index 20aa39271..5e85ad050 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ false 2.12.1 - 2.1.210 + 1.4.199 1.2 1.1 12.13.1 From b4fe4ec8b9c8e58c138e72d778eb338552a336d3 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Fri, 28 Jan 2022 16:04:35 +0100 Subject: [PATCH 2/2] ADD.profile and autodetect code --- .../resources/application-test.properties | 4 +-- .../test/config/AutoConfigureForTesting.java | 25 +++++++++++++++++++ .../config/PlatformNoGeneratedKeysTest.java | 4 +-- .../src/test/resources/ebean.properties | 2 +- .../src/test/resources/test-ebean.properties | 2 +- pom.xml | 8 +++++- 6 files changed, 38 insertions(+), 7 deletions(-) diff --git a/ebean-querybean/src/test/resources/application-test.properties b/ebean-querybean/src/test/resources/application-test.properties index 2cb5bb2c7..fef41029d 100644 --- a/ebean-querybean/src/test/resources/application-test.properties +++ b/ebean-querybean/src/test/resources/application-test.properties @@ -6,8 +6,8 @@ datasource.default=h2 datasource.h2.username=sa datasource.h2.password= -datasource.h2.url=jdbc:h2:mem:tests +datasource.h2.url=jdbc:h2:mem:tests;NON_KEYWORDS=KEY datasource.pg.username=sa datasource.pg.password= -datasource.pg.url=jdbc:h2:mem:tests +datasource.pg.url=jdbc:h2:mem:tests;NON_KEYWORDS=KEY diff --git a/ebean-test/src/main/java/io/ebean/test/config/AutoConfigureForTesting.java b/ebean-test/src/main/java/io/ebean/test/config/AutoConfigureForTesting.java index 8cd4f6395..5366597a1 100644 --- a/ebean-test/src/main/java/io/ebean/test/config/AutoConfigureForTesting.java +++ b/ebean-test/src/main/java/io/ebean/test/config/AutoConfigureForTesting.java @@ -10,6 +10,8 @@ import org.slf4j.LoggerFactory; import java.util.Properties; +import javax.sql.DataSource; + /** * Automatically configure ServerConfig for testing purposes. *

@@ -47,6 +49,29 @@ public class AutoConfigureForTesting implements AutoConfigure { @Override public void postConfigure(DatabaseConfig config) { setupProviders(config); + + if (org.h2.engine.Constants.VERSION_MAJOR == 1) { + // This code may be removed later, when droppinv H2 1.xxx compatibility + System.err.println("Running tests in H2 1.xxx compatibility mode"); + System.setProperty("ebean.h2.useV1Syntax", "true"); + makeV1Compatible(config.getDataSourceConfig()); + makeV1Compatible(config.getReadOnlyDataSourceConfig()); + } + } + + private void makeV1Compatible(DataSourceConfig ds) { + if (ds == null) { + return; + } + String url = ds.getUrl(); + if (url == null || !url.startsWith("jdbc:h2:")) { + return; + } + // remove illegal URL options + url = url.replace(";MODE=LEGACY", ""); + url = url.replace(";NON_KEYWORDS=KEY,VALUE", ""); + url = url.replace(";NON_KEYWORDS=KEY", ""); + ds.setUrl(url); } /** diff --git a/ebean-test/src/test/java/io/ebean/config/PlatformNoGeneratedKeysTest.java b/ebean-test/src/test/java/io/ebean/config/PlatformNoGeneratedKeysTest.java index 63b672137..37d02bbb8 100644 --- a/ebean-test/src/test/java/io/ebean/config/PlatformNoGeneratedKeysTest.java +++ b/ebean-test/src/test/java/io/ebean/config/PlatformNoGeneratedKeysTest.java @@ -101,7 +101,7 @@ public class PlatformNoGeneratedKeysTest { config.setDatabasePlatform(platform); config.getDataSourceConfig().setUsername("sa"); config.getDataSourceConfig().setPassword(""); - config.getDataSourceConfig().setUrl("jdbc:h2:mem:withPCQuery"); + config.getDataSourceConfig().setUrl("jdbc:h2:mem:withPCQuery;MODE=LEGACY"); config.getDataSourceConfig().setDriver("org.h2.Driver"); config.setDisableLazyLoading(true); @@ -112,7 +112,7 @@ public class PlatformNoGeneratedKeysTest { config.setDdlRun(true); config.getClasses().add(EBasicVer.class); config.getClasses().add(BasicDraftableBean.class); - + config.loadFromProperties(); // trigger auto config for H2 1.x return DatabaseFactory.create(config); } diff --git a/ebean-test/src/test/resources/ebean.properties b/ebean-test/src/test/resources/ebean.properties index 402facaab..d7e1debae 100644 --- a/ebean-test/src/test/resources/ebean.properties +++ b/ebean-test/src/test/resources/ebean.properties @@ -72,7 +72,7 @@ datasource.db.databaseDriver=org.h2.Driver datasource.h2.username=sa datasource.h2.password= -datasource.h2.url=jdbc:h2:mem:testsMem;DB_CLOSE_ON_EXIT=FALSE +datasource.h2.url=jdbc:h2:mem:testsMem;DB_CLOSE_ON_EXIT=FALSE;NON_KEYWORDS=KEY,VALUE datasource.h2.poolListener=org.tests.basic.MyTestDataSourcePoolListener #datasource.h2.minConnections=1 #datasource.h2.maxConnections=25 diff --git a/ebean-test/src/test/resources/test-ebean.properties b/ebean-test/src/test/resources/test-ebean.properties index 2405e5104..436499c1b 100644 --- a/ebean-test/src/test/resources/test-ebean.properties +++ b/ebean-test/src/test/resources/test-ebean.properties @@ -8,5 +8,5 @@ ebean.jodaLocalTimeMode=normal datasource.someotherdb.username=sa datasource.someotherdb.password= -datasource.someotherdb.databaseUrl=jdbc:h2:mem:someotherdb +datasource.someotherdb.databaseUrl=jdbc:h2:mem:someotherdb;NON_KEYWORDS=KEY,VALUE datasource.someotherdb.databaseDriver=org.h2.Driver diff --git a/pom.xml b/pom.xml index 5e85ad050..2ddf524ee 100644 --- a/pom.xml +++ b/pom.xml @@ -40,7 +40,7 @@ false 2.12.1 - 1.4.199 + 2.1.210 1.2 1.1 12.13.1 @@ -99,6 +99,12 @@ release + + h2v1 + + 1.4.199 + + default