diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java
index 0878e7d41..305f38efe 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java
+++ b/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2Platform.java
@@ -20,8 +20,10 @@ public class DB2Platform extends DatabasePlatform {
public DB2Platform() {
super();
this.platform = Platform.DB2;
- this.maxTableNameLength = 18;
- this.maxConstraintNameLength = 18;
+ // Note: DB2 (at least LUW supports length up to 128)
+ // TOOD: Check if we need to introduce a new platform (DB2_LUW_11 ?)
+ this.maxTableNameLength = 128;
+ this.maxConstraintNameLength = 128;
this.truncateTable = "truncate table %s reuse storage ignore delete triggers immediate";
this.sqlLimiter = new Db2SqlLimiter();
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/SQLitePlatform.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/SQLitePlatform.java
index 09db19312..e936194d5 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/SQLitePlatform.java
+++ b/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/SQLitePlatform.java
@@ -24,6 +24,7 @@ public class SQLitePlatform extends DatabasePlatform {
this.dbDefaultValue.setFalse("0");
this.dbDefaultValue.setTrue("1");
this.dbDefaultValue.setNow("CURRENT_TIMESTAMP");
+ this.supportsResultSetConcurrencyModeUpdatable = false;
dbTypeMap.put(DbType.BIT, new DbPlatformType("int"));
dbTypeMap.put(DbType.BOOLEAN, new DbPlatformType("int"));
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/ClickHouseDbArray.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/ClickHouseDbArray.java
index ec141d7f0..0bb2f7895 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/ClickHouseDbArray.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/ClickHouseDbArray.java
@@ -14,6 +14,7 @@ class ClickHouseDbArray {
mapping.put("varchar[]", "Array(String)");
mapping.put("integer[]", "Array(UInt32)");
mapping.put("bigint[]", "Array(UInt64)");
+ mapping.put("float[]", "Array(Float32)");
}
/**
@@ -21,6 +22,10 @@ class ClickHouseDbArray {
*/
static String logicalToNative(String logicalArrayType) {
int colonPos = logicalArrayType.indexOf(':');
+ int bracketPos = logicalArrayType.indexOf('(');
+ if (bracketPos > -1 && (bracketPos < colonPos || colonPos == -1)) {
+ colonPos = bracketPos;
+ }
if (colonPos > -1) {
logicalArrayType = logicalArrayType.substring(0, colonPos);
}
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index 8b5723151..b015a4544 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -56,7 +56,7 @@
io.ebean
ebean-test-docker
- 4.2
+ 4.3
@@ -187,11 +187,42 @@
com.oracle.database.jdbc
- ojdbc10
+
+ ojdbc8
19.12.0.0
test
+
+ com.ibm.db2
+ jcc
+ 11.5.6.0
+ test
+
+
+
+ org.xerial
+ sqlite-jdbc
+ 3.36.0.3
+ test
+
+
+
+ com.nuodb.jdbc
+ nuodb-jdbc
+ 22.0.0
+ test
+
+
+
+ ru.yandex.clickhouse
+ clickhouse-jdbc
+ 0.3.1-patch
+ test
+
+
ch.qos.logback
logback-classic
@@ -208,21 +239,6 @@
-
-
- db2
-
-
-
- com.ibm.db2
- jcc
- 11.5.5.0
- test
-
-
-
-
-
diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/Db2Setup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/Db2Setup.java
new file mode 100644
index 000000000..fd65472ef
--- /dev/null
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/Db2Setup.java
@@ -0,0 +1,41 @@
+package io.ebean.test.config.platform;
+
+import java.util.Properties;
+
+class Db2Setup implements PlatformSetup {
+
+ @Override
+ public Properties setup(Config config) {
+
+ config.ddlMode("dropCreate");
+ config.setDefaultPort(50000);
+ config.setUsernameDefault();
+ config.setPasswordDefault();
+ config.setUrl("jdbc:db2://localhost:${port}/${databaseName}");
+ config.setDriver("com.ibm.db2.jcc.DB2Driver");
+ config.datasourceDefaults();
+
+ return dockerProperties(config);
+ }
+
+ private Properties dockerProperties(Config dbConfig) {
+
+ if (!dbConfig.isUseDocker()) {
+ return new Properties();
+ }
+
+ dbConfig.setDockerVersion("11.5.6.0a");
+ return dbConfig.getDockerProperties();
+ }
+
+ @Override
+ public void setupExtraDbDataSource(Config config) {
+ // not supported yet
+ }
+
+ @Override
+ public boolean isLocal() {
+ return false;
+ }
+
+}
diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/PlatformAutoConfig.java b/ebean-test/src/main/java/io/ebean/test/config/platform/PlatformAutoConfig.java
index a7da076d5..deefcd0fb 100644
--- a/ebean-test/src/main/java/io/ebean/test/config/platform/PlatformAutoConfig.java
+++ b/ebean-test/src/main/java/io/ebean/test/config/platform/PlatformAutoConfig.java
@@ -34,6 +34,7 @@ public class PlatformAutoConfig {
KNOWN_PLATFORMS.put("clickhouse", new ClickHouseSetup());
KNOWN_PLATFORMS.put("cockroach", new CockroachSetup());
KNOWN_PLATFORMS.put("hana", new HanaSetup());
+ KNOWN_PLATFORMS.put("db2", new Db2Setup());
}
private final DatabaseConfig config;
diff --git a/ebean-test/src/test/java/main/StartDb2.java b/ebean-test/src/test/java/main/StartDb2.java
new file mode 100644
index 000000000..dbfd6b38d
--- /dev/null
+++ b/ebean-test/src/test/java/main/StartDb2.java
@@ -0,0 +1,22 @@
+package main;
+
+import io.ebean.docker.commands.Db2Config;
+import io.ebean.docker.commands.Db2Container;
+
+public class StartDb2 {
+
+ public static void main(String[] args) {
+
+ Db2Config config = new Db2Config("11.5.6.0a");
+ config.setDbName("unit");
+ config.setUser("unit");
+ config.setPassword("unit");
+
+ // to change collation, charset and other parameters like pagesize:
+ config.setCreateOptions("USING CODESET UTF-8 TERRITORY DE COLLATE USING IDENTITY PAGESIZE 32768");
+ config.setConfigOptions("USING STRING_UNITS CODEUNITS32");
+
+ Db2Container container = new Db2Container(config);
+ container.startWithDropCreate();
+ }
+}
diff --git a/ebean-test/src/test/resources/ebean.properties b/ebean-test/src/test/resources/ebean.properties
index 6701fdf38..402facaab 100644
--- a/ebean-test/src/test/resources/ebean.properties
+++ b/ebean-test/src/test/resources/ebean.properties
@@ -181,9 +181,9 @@ datasource.nuodb.password=test
datasource.nuodb.url=jdbc:com.nuodb://localhost/testdb
#datasource.nuodb.driver=com.nuodb.jdbc.Driver
-datasource.db2.username=db2admin
-datasource.db2.password=veryverysecret#1234
-datasource.db2.url=jdbc:db2://127.0.0.1:50000/SAMPLE
+datasource.db2.username=unit
+datasource.db2.password=test
+datasource.db2.url=jdbc:db2://127.0.0.1:50000/unit
#datasource.db2.driver=com.ibm.db2.jcc.DB2Driver
datasource.hana.username=EBEAN_TEST
diff --git a/ebean-test/testconfig/ebean-clickhouse.properties b/ebean-test/testconfig/ebean-clickhouse.properties
new file mode 100644
index 000000000..46ba2256e
--- /dev/null
+++ b/ebean-test/testconfig/ebean-clickhouse.properties
@@ -0,0 +1,5 @@
+ebean.test.platform=clickhouse
+ebean.test.dbName=clickhouse
+datasource.default=clickhouse
+datasource.clickhouse.autocommit=true
+
diff --git a/ebean-test/testconfig/ebean-cockroach.properties b/ebean-test/testconfig/ebean-cockroach.properties
new file mode 100644
index 000000000..2604e7dcf
--- /dev/null
+++ b/ebean-test/testconfig/ebean-cockroach.properties
@@ -0,0 +1,4 @@
+ebean.test.platform=cockroach
+ebean.test.dbName=unit
+datasource.default=cockroach
+
diff --git a/ebean-test/testconfig/ebean-db2.properties b/ebean-test/testconfig/ebean-db2.properties
new file mode 100644
index 000000000..2aa2944dd
--- /dev/null
+++ b/ebean-test/testconfig/ebean-db2.properties
@@ -0,0 +1,4 @@
+ebean.test.platform=db2
+ebean.test.dbName=unit
+ebean.test.dbPassword=unit
+datasource.default=db2-11
diff --git a/ebean-test/testconfig/ebean-h2.properties b/ebean-test/testconfig/ebean-h2.properties
new file mode 100644
index 000000000..9d0f47268
--- /dev/null
+++ b/ebean-test/testconfig/ebean-h2.properties
@@ -0,0 +1,3 @@
+ebean.test.platform=h2
+datasource.default=h2-local
+ebean.test.dbName=test
\ No newline at end of file
diff --git a/ebean-test/testconfig/ebean-mariadb-10.3.properties b/ebean-test/testconfig/ebean-mariadb-10.3.properties
new file mode 100644
index 000000000..c7ef279e4
--- /dev/null
+++ b/ebean-test/testconfig/ebean-mariadb-10.3.properties
@@ -0,0 +1,8 @@
+# This starts an alternative mariadb version on port 7306
+ebean.test.platform=mariadb
+ebean.test.dbName=test_ebean
+ebean.test.dbPassword=unit
+ebean.test.mariadb.version=10.3
+ebean.test.mariadb.containerName=ut_mariadb-10-3
+ebean.test.sqlserver.port = 7306
+datasource.default=mariadb-103
diff --git a/ebean-test/testconfig/ebean-mariadb.properties b/ebean-test/testconfig/ebean-mariadb.properties
new file mode 100644
index 000000000..165032895
--- /dev/null
+++ b/ebean-test/testconfig/ebean-mariadb.properties
@@ -0,0 +1,5 @@
+ebean.test.platform=mariadb
+ebean.test.dbName=test_ebean
+ebean.test.mariadb.version=10.6
+ebean.test.mariadb.containerName=ut_mariadb-10-6
+datasource.default=mariadb-106
diff --git a/ebean-test/testconfig/ebean-mysql.properties b/ebean-test/testconfig/ebean-mysql.properties
new file mode 100644
index 000000000..dfd960fd2
--- /dev/null
+++ b/ebean-test/testconfig/ebean-mysql.properties
@@ -0,0 +1,6 @@
+# this starts a mysql instance on port 13306
+ebean.test.platform=mysql
+ebean.test.dbName=test_ebean
+# note: do not conflict with mariadb port
+ebean.test.sqlserver.port = 13306
+datasource.default=mysql-docker
diff --git a/ebean-test/testconfig/ebean-nuodb.properties b/ebean-test/testconfig/ebean-nuodb.properties
new file mode 100644
index 000000000..9bc26267b
--- /dev/null
+++ b/ebean-test/testconfig/ebean-nuodb.properties
@@ -0,0 +1,3 @@
+ebean.test.platform=nuodb
+ebean.test.dbName=testdb
+ebean.test.nuodb.version=latest
\ No newline at end of file
diff --git a/ebean-test/testconfig/ebean-oracle.properties b/ebean-test/testconfig/ebean-oracle.properties
new file mode 100644
index 000000000..e9d4bf55b
--- /dev/null
+++ b/ebean-test/testconfig/ebean-oracle.properties
@@ -0,0 +1,3 @@
+ebean.test.platform=oracle
+ebean.test.dbName=oracle
+datasource.default=oracle-docker
\ No newline at end of file
diff --git a/ebean-test/testconfig/ebean-postgres.properties b/ebean-test/testconfig/ebean-postgres.properties
new file mode 100644
index 000000000..09f2dc676
--- /dev/null
+++ b/ebean-test/testconfig/ebean-postgres.properties
@@ -0,0 +1,3 @@
+ebean.test.platform=postgres
+datasource.default=postgres
+ebean.test.dbName=unit
diff --git a/ebean-test/testconfig/ebean-sqlite.properties b/ebean-test/testconfig/ebean-sqlite.properties
new file mode 100644
index 000000000..a59835972
--- /dev/null
+++ b/ebean-test/testconfig/ebean-sqlite.properties
@@ -0,0 +1,4 @@
+ebean.test.platform=sqlite
+datasource.default=sqlite-local
+ebean.test.dbName=test.sqlite
+ebean.autoReadOnlyDataSource=false
\ No newline at end of file
diff --git a/ebean-test/testconfig/ebean-sqlserver.properties b/ebean-test/testconfig/ebean-sqlserver.properties
new file mode 100644
index 000000000..f754250af
--- /dev/null
+++ b/ebean-test/testconfig/ebean-sqlserver.properties
@@ -0,0 +1,6 @@
+ebean.test.platform=sqlserver
+ebean.test.dbName=test_ebean
+ebean.test.sqlserver.version=2019-latest
+ebean.test.sqlserver.containerName=ut_sqlserver2019
+datasource.default=sqlserver2019
+ebean.sqlserver2019.databasePlatformName=sqlserver17
\ No newline at end of file
diff --git a/ebean-test/testconfig/ebean-sqlserver17.properties b/ebean-test/testconfig/ebean-sqlserver17.properties
new file mode 100644
index 000000000..6da4dacc3
--- /dev/null
+++ b/ebean-test/testconfig/ebean-sqlserver17.properties
@@ -0,0 +1,7 @@
+ebean.test.platform=sqlserver
+ebean.test.dbName=test_ebean
+ebean.test.sqlserver.version=2017-latest
+ebean.test.sqlserver.containerName=ut_sqlserver2017
+ebean.test.sqlserver.port=1434
+datasource.default=sqlserver2017
+ebean.sqlserver2017.databasePlatformName=sqlserver17
\ No newline at end of file
diff --git a/howto-test.md b/howto-test.md
index ed159cac2..2913b24a9 100644
--- a/howto-test.md
+++ b/howto-test.md
@@ -24,145 +24,22 @@ your run configuration:
Platform Tests
==============
-By default, the `h2` platform is used. To test a different platform, add
-`-Ddatasource.default=xxx` to your maven command or JVM arguments.
-
-'h2' platform
--------------
-
-Reqires no setup
-
-run: `mvn clean test`
-
-Current status: PASS
-Tests run: 1986, Failures: 0, Errors: 0, Skipped: 16
-
-'pg' platform
--------------
-
-Reqirements
-- a locally installed PostgreSQL server with PostGis.
-- Create a user "unit" with password "unit" and a database "unit"
-- Give the user all permissions to that db
-
-run: `mvn clean test -Ddatasource.default=pg`
-
-Current status: PASS
-Tests run: 2166, Failures: 0, Errors: 0, Skipped: 25
+By default, the `h2` platform is used. To test a different platform, you can change the
+`datasource.default` in the `ebean.properties` file.
+Docker
+------
+Ebean 12 provides preconfigured docker containers now. To start a docker container,
+you can use the starters in `src/test/java/main` or specify one of the starter
+properties in the `testconfig` directory with `-Dprops.file=testconfig/ebean-XXX.properties`
-'mysql' platform
--------------
+Note: You will have to install docker on your system.
+- For debian, you can use `apt install docker.io`
+- For windows, install docker for windows https://docs.docker.com/desktop/windows/install/
-Reqirements
-- a locally installed MySQL server.
-- Create a user "unit" with password "unit" and a database "unit"
-- Give the user all permissions to that db
-
-run: `mvn clean test -Ddatasource.default=mysql`
-
-Current status: PASS
-Tests run: 2166, Failures: 0, Errors: 0, Skipped: 33
-
-
-
-'sqlserver' platform
---------------------
-
-Reqires an installed sqlserver - e.g. https://hub.docker.com/r/microsoft/mssql-server-linux/
-
-- Create a user "ebean" with password "ebean" and a database "ebean_unittest"
-- Adjust the connection string and/or username in ebean.properties
-
-run: `mvn clean test -Ddatasource.default=mssql`
-
-Current status: PASS
-Tests run: 2166, Failures: 0, Errors: 0, Skipped: 39
-
-
-
-'oracle' platform
------------------
-
-Reqires a locally installed Oracle server.
-- Create a user "unit" with password "unit" with all permissions
-- The test wirtes directly to the "xe" SID - so do not use a productive server!
-- As the Oracle JDBC driver is only available on an oracle repository,
- you need a special maven setup as described [here](http://docs.oracle.com/middleware/1213/core/MAVEN/config_maven_repo.htm#MAVEN9010)
-
-run: `mvn clean test -Ddatasource.default=ora -Poracle`
-
-Current status: FAIL
-Tests run: 1986, Failures: 17, Errors: 34, Skipped: 16
-
-
-
-'db2' platform
---------------
-
-Reqires a locally installed DB2 Express-C server.
-- Create a user "unit" with password "unit" with all permissions
-- Install the db2jcc4 driver (see pom.xml)
-
-run: `mvn clean test -Ddatasource.default=db2 -Pdb2`
-
-Current status: FAIL
-Tests run: 2166, Failures: 29, Errors: 58, Skipped: 30
-
-
-'sqlite' platform
------------------
-
-Reqires no setup
-
-run: `mvn clean test -Ddatasource.default=sqlite`
-
-Current status: FAIL
-Tests run: 1986, Failures: 24, Errors: 86, Skipped: 16
-
-After some time, the db locks up, every test takes 3 seconds and fails with
-"the database file is locked"
-
-
-
-'hsqldb' platform
------------------
-
-Reqires no setup
-
-run: `mvn clean test -Ddatasource.default=hsqldb`
-
-Current status: FAIL
-Tests run: 1980, Failures: 3, Errors: 657, Skipped: 16
-
-
-@Rob FYI
-The problem is https://sourceforge.net/p/hsqldb/bugs/1364/
-In `InsertHandler.getPstmt` the `meta.getIdentityDbColumns()` contains
-'id' in lowercase. Changing that to uppercase gives me this result:
-`Tests run: 1986, Failures: 2, Errors: 18, Skipped: 16`
-(as quick hack I added temporary a toUpperCase to BindableIdScalar.getIdentityColumn)
-
-
-'sqlanywhere' platform
-----------------------
-
-TODO: not yet tested
-
-
-
-'hana' platform
---------------------
-
-Requires an installed SAP HANA server - e.g. https://store.docker.com/images/sap-hana-express-edition
-
-- Create a user `EBEAN_TEST` with password `Eb3an_test` in the tenant database `HXE`
-- Adjust the connection string and/or username in `ebean.properties`
-
-run: `mvn clean test -Ddatasource.default=hana`
-
-Current status: PASS
-Tests run: 2486, Failures: 0, Errors: 0, Skipped: 84
+Maven
+-----
+Use the `-Dprops.file` parameter to start the test cases for a certain platform.