diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 5e3fafdd4..57008ce92 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,7 +13,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- java_version: [8]
+ java_version: [11]
os: [ubuntu-latest]
steps:
diff --git a/.github/workflows/jdk-ea.yml b/.github/workflows/jdk-ea.yml
index 1784106b6..f34c50d76 100644
--- a/.github/workflows/jdk-ea.yml
+++ b/.github/workflows/jdk-ea.yml
@@ -16,7 +16,9 @@ jobs:
strategy:
fail-fast: false
matrix:
- java_version: [17,18,19,loom,valhalla,metropolis,panama]
+ ## valhalla - failing on javadoc with:
+ ## javadoc: error - The code being documented uses packages in the unnamed module, but the packages defined in https://ebean.io/platforms/ebean-platform-h2/apidocs/ are in named modules.
+ java_version: [17,18,19,loom,metropolis,panama]
os: [ubuntu-latest]
steps:
diff --git a/.github/workflows/multi-jdk-build.yml b/.github/workflows/multi-jdk-build.yml
index f44cfac89..a01d78a7a 100644
--- a/.github/workflows/multi-jdk-build.yml
+++ b/.github/workflows/multi-jdk-build.yml
@@ -16,7 +16,7 @@ jobs:
strategy:
fail-fast: false
matrix:
- java_version: [8.0.192, 8, 11.0.3, 11, 17]
+ java_version: [11, 17]
os: [ubuntu-latest]
steps:
diff --git a/README.md b/README.md
index c00cb73e5..694c73f96 100644
--- a/README.md
+++ b/README.md
@@ -18,6 +18,7 @@
[](https://github.com/ebean-orm/ebean-datasource/actions/workflows/jdk-ea.yml)
[](https://github.com/ebean-orm/ebean-migration/actions/workflows/jdk-ea.yml)
[](https://github.com/ebean-orm/ebean-test-docker/actions/workflows/jdk-ea.yml)
+[](https://github.com/ebean-orm/ebean-agent/actions/workflows/jdk-ea.yml)
# Sponsors
diff --git a/composites/ebean-clickhouse/pom.xml b/composites/ebean-clickhouse/pom.xml
new file mode 100644
index 000000000..8ecb26efa
--- /dev/null
+++ b/composites/ebean-clickhouse/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-clickhouse
+ ebean-clickhouse composite
+ ebean-clickhouse
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-clickhouse
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-clickhouse/src/main/java/io/ebean/clickhouse/assembly/Assembly.java b/composites/ebean-clickhouse/src/main/java/io/ebean/clickhouse/assembly/Assembly.java
new file mode 100644
index 000000000..c77ac7351
--- /dev/null
+++ b/composites/ebean-clickhouse/src/main/java/io/ebean/clickhouse/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.clickhouse.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-clickhouse/src/main/java/module-info.java b/composites/ebean-clickhouse/src/main/java/module-info.java
new file mode 100644
index 000000000..2b2ba1999
--- /dev/null
+++ b/composites/ebean-clickhouse/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.clickhouse {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.clickhouse;
+
+}
diff --git a/composites/ebean-cockroach/pom.xml b/composites/ebean-cockroach/pom.xml
new file mode 100644
index 000000000..244b01a02
--- /dev/null
+++ b/composites/ebean-cockroach/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-cockroach
+ ebean-cockroach composite
+ ebean-cockroach
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-postgres
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-cockroach/src/main/java/io/ebean/cockroach/assembly/Assembly.java b/composites/ebean-cockroach/src/main/java/io/ebean/cockroach/assembly/Assembly.java
new file mode 100644
index 000000000..704a0a982
--- /dev/null
+++ b/composites/ebean-cockroach/src/main/java/io/ebean/cockroach/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.cockroach.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-cockroach/src/main/java/module-info.java b/composites/ebean-cockroach/src/main/java/module-info.java
new file mode 100644
index 000000000..704c79606
--- /dev/null
+++ b/composites/ebean-cockroach/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.cockroach {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.postgres;
+
+}
diff --git a/composites/ebean-db2/pom.xml b/composites/ebean-db2/pom.xml
new file mode 100644
index 000000000..0c99fa624
--- /dev/null
+++ b/composites/ebean-db2/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-db2
+ ebean-db2 composite
+ ebean-db2
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-db2
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-db2/src/main/java/io/ebean/db2/assembly/Assembly.java b/composites/ebean-db2/src/main/java/io/ebean/db2/assembly/Assembly.java
new file mode 100644
index 000000000..bd58483a3
--- /dev/null
+++ b/composites/ebean-db2/src/main/java/io/ebean/db2/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.db2.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-db2/src/main/java/module-info.java b/composites/ebean-db2/src/main/java/module-info.java
new file mode 100644
index 000000000..47838c397
--- /dev/null
+++ b/composites/ebean-db2/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.db2 {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.db2;
+
+}
diff --git a/composites/ebean-h2/pom.xml b/composites/ebean-h2/pom.xml
new file mode 100644
index 000000000..82a1746c8
--- /dev/null
+++ b/composites/ebean-h2/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-h2
+ ebean-h2 composite
+ ebean-h2
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-h2
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-h2/src/main/java/io/ebean/h2/assembly/Assembly.java b/composites/ebean-h2/src/main/java/io/ebean/h2/assembly/Assembly.java
new file mode 100644
index 000000000..f524615e1
--- /dev/null
+++ b/composites/ebean-h2/src/main/java/io/ebean/h2/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.h2.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-h2/src/main/java/module-info.java b/composites/ebean-h2/src/main/java/module-info.java
new file mode 100644
index 000000000..d66080d78
--- /dev/null
+++ b/composites/ebean-h2/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.h2 {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.h2;
+
+}
diff --git a/composites/ebean-hana/pom.xml b/composites/ebean-hana/pom.xml
new file mode 100644
index 000000000..de3f8fa55
--- /dev/null
+++ b/composites/ebean-hana/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-hana
+ ebean-hana composite
+ ebean-hana
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-hana
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-hana/src/main/java/io/ebean/hana/assembly/Assembly.java b/composites/ebean-hana/src/main/java/io/ebean/hana/assembly/Assembly.java
new file mode 100644
index 000000000..c05149a6d
--- /dev/null
+++ b/composites/ebean-hana/src/main/java/io/ebean/hana/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.hana.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-hana/src/main/java/module-info.java b/composites/ebean-hana/src/main/java/module-info.java
new file mode 100644
index 000000000..9a5654ae2
--- /dev/null
+++ b/composites/ebean-hana/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.hana {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.hana;
+
+}
diff --git a/composites/ebean-mariadb/pom.xml b/composites/ebean-mariadb/pom.xml
new file mode 100644
index 000000000..0dc1b248c
--- /dev/null
+++ b/composites/ebean-mariadb/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-mariadb
+ ebean-mariadb composite
+ ebean-mariadb
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-mariadb
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-mariadb/src/main/java/io/ebean/mariadb/assembly/Assembly.java b/composites/ebean-mariadb/src/main/java/io/ebean/mariadb/assembly/Assembly.java
new file mode 100644
index 000000000..80f94810d
--- /dev/null
+++ b/composites/ebean-mariadb/src/main/java/io/ebean/mariadb/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.mariadb.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-mariadb/src/main/java/module-info.java b/composites/ebean-mariadb/src/main/java/module-info.java
new file mode 100644
index 000000000..f4368ce4c
--- /dev/null
+++ b/composites/ebean-mariadb/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.mariadb {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.mariadb;
+
+}
diff --git a/composites/ebean-mysql/pom.xml b/composites/ebean-mysql/pom.xml
new file mode 100644
index 000000000..cf02d8aaa
--- /dev/null
+++ b/composites/ebean-mysql/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-mysql
+ ebean-mysql composite
+ ebean-mysql
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-mysql
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-mysql/src/main/java/io/ebean/mysql/assembly/Assembly.java b/composites/ebean-mysql/src/main/java/io/ebean/mysql/assembly/Assembly.java
new file mode 100644
index 000000000..d6f4911a2
--- /dev/null
+++ b/composites/ebean-mysql/src/main/java/io/ebean/mysql/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.mysql.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-mysql/src/main/java/module-info.java b/composites/ebean-mysql/src/main/java/module-info.java
new file mode 100644
index 000000000..f5e18a46b
--- /dev/null
+++ b/composites/ebean-mysql/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.mysql {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.mysql;
+
+}
diff --git a/composites/ebean-nuodb/pom.xml b/composites/ebean-nuodb/pom.xml
new file mode 100644
index 000000000..f9d58d6d9
--- /dev/null
+++ b/composites/ebean-nuodb/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-nuodb
+ ebean-nuodb composite
+ ebean-nuodb
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-nuodb
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-nuodb/src/main/java/io/ebean/nuodb/assembly/Assembly.java b/composites/ebean-nuodb/src/main/java/io/ebean/nuodb/assembly/Assembly.java
new file mode 100644
index 000000000..d1494e23b
--- /dev/null
+++ b/composites/ebean-nuodb/src/main/java/io/ebean/nuodb/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.nuodb.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-nuodb/src/main/java/module-info.java b/composites/ebean-nuodb/src/main/java/module-info.java
new file mode 100644
index 000000000..10ec557b6
--- /dev/null
+++ b/composites/ebean-nuodb/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.nuodb {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.nuodb;
+
+}
diff --git a/composites/ebean-oracle/pom.xml b/composites/ebean-oracle/pom.xml
new file mode 100644
index 000000000..193e29d76
--- /dev/null
+++ b/composites/ebean-oracle/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-oracle
+ ebean-oracle composite
+ ebean-oracle
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-oracle
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-oracle/src/main/java/io/ebean/oracle/assembly/Assembly.java b/composites/ebean-oracle/src/main/java/io/ebean/oracle/assembly/Assembly.java
new file mode 100644
index 000000000..bdb9bb20f
--- /dev/null
+++ b/composites/ebean-oracle/src/main/java/io/ebean/oracle/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.oracle.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-oracle/src/main/java/module-info.java b/composites/ebean-oracle/src/main/java/module-info.java
new file mode 100644
index 000000000..8830ef160
--- /dev/null
+++ b/composites/ebean-oracle/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.oracle {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.oracle;
+
+}
diff --git a/composites/ebean-postgres/pom.xml b/composites/ebean-postgres/pom.xml
new file mode 100644
index 000000000..4cfbe85de
--- /dev/null
+++ b/composites/ebean-postgres/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-postgres
+ ebean-postgres composite
+ ebean-postgres
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-postgres
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-postgres/src/main/java/io/ebean/postgres/assembly/Assembly.java b/composites/ebean-postgres/src/main/java/io/ebean/postgres/assembly/Assembly.java
new file mode 100644
index 000000000..b4c803484
--- /dev/null
+++ b/composites/ebean-postgres/src/main/java/io/ebean/postgres/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.postgres.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-postgres/src/main/java/module-info.java b/composites/ebean-postgres/src/main/java/module-info.java
new file mode 100644
index 000000000..d4bf9f4c4
--- /dev/null
+++ b/composites/ebean-postgres/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.postgres {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.postgres;
+
+}
diff --git a/composites/ebean-sqlite/pom.xml b/composites/ebean-sqlite/pom.xml
new file mode 100644
index 000000000..70b103b47
--- /dev/null
+++ b/composites/ebean-sqlite/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-sqlite
+ ebean-sqlite composite
+ ebean-sqlite
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-sqlite
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-sqlite/src/main/java/io/ebean/sqlite/assembly/Assembly.java b/composites/ebean-sqlite/src/main/java/io/ebean/sqlite/assembly/Assembly.java
new file mode 100644
index 000000000..871876ac5
--- /dev/null
+++ b/composites/ebean-sqlite/src/main/java/io/ebean/sqlite/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.sqlite.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-sqlite/src/main/java/module-info.java b/composites/ebean-sqlite/src/main/java/module-info.java
new file mode 100644
index 000000000..99de76ec8
--- /dev/null
+++ b/composites/ebean-sqlite/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.sqlite {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.sqlite;
+
+}
diff --git a/composites/ebean-sqlserver/pom.xml b/composites/ebean-sqlserver/pom.xml
new file mode 100644
index 000000000..10b99d548
--- /dev/null
+++ b/composites/ebean-sqlserver/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-sqlserver
+ ebean-sqlserver composite
+ ebean-sqlserver
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-sqlserver
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-sqlserver/src/main/java/io/ebean/sqlserver/assembly/Assembly.java b/composites/ebean-sqlserver/src/main/java/io/ebean/sqlserver/assembly/Assembly.java
new file mode 100644
index 000000000..b6768968d
--- /dev/null
+++ b/composites/ebean-sqlserver/src/main/java/io/ebean/sqlserver/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.sqlserver.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-sqlserver/src/main/java/module-info.java b/composites/ebean-sqlserver/src/main/java/module-info.java
new file mode 100644
index 000000000..ff3472524
--- /dev/null
+++ b/composites/ebean-sqlserver/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.sqlserver {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.sqlserver;
+
+}
diff --git a/composites/ebean-yugabyte/pom.xml b/composites/ebean-yugabyte/pom.xml
new file mode 100644
index 000000000..b5af0c370
--- /dev/null
+++ b/composites/ebean-yugabyte/pom.xml
@@ -0,0 +1,48 @@
+
+
+ 4.0.0
+
+ composites
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-yugabyte
+ ebean-yugabyte composite
+ ebean-yugabyte
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-core
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
+
+
+ io.ebean
+ ebean-querybean
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-postgres
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/composites/ebean-yugabyte/src/main/java/io/ebean/yugabyte/assembly/Assembly.java b/composites/ebean-yugabyte/src/main/java/io/ebean/yugabyte/assembly/Assembly.java
new file mode 100644
index 000000000..6e737ee93
--- /dev/null
+++ b/composites/ebean-yugabyte/src/main/java/io/ebean/yugabyte/assembly/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.yugabyte.assembly;
+
+/**
+ * Nothing interesting here - required placeholder for javadoc.
+ */
+public class Assembly {
+}
diff --git a/composites/ebean-yugabyte/src/main/java/module-info.java b/composites/ebean-yugabyte/src/main/java/module-info.java
new file mode 100644
index 000000000..6f2521ce2
--- /dev/null
+++ b/composites/ebean-yugabyte/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.yugabyte {
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
+ requires transitive io.ebean.querybean;
+ requires transitive io.ebean.platform.postgres;
+
+}
diff --git a/ebean/pom.xml b/composites/ebean/pom.xml
similarity index 68%
rename from ebean/pom.xml
rename to composites/ebean/pom.xml
index dd27ebe30..bdc1eb785 100644
--- a/ebean/pom.xml
+++ b/composites/ebean/pom.xml
@@ -2,23 +2,17 @@
4.0.0
- ebean-parent
+ composites
io.ebean
13.2.1-SNAPSHOT
- ebean composite
- Composite of common runtime dependencies
+ ebean (all platforms)
+ composite of common runtime dependencies for all platforms
ebean
-
- io.ebean
- ebean-datasource
- ${ebean-datasource.version}
-
-
io.ebean
ebean-api
@@ -31,6 +25,12 @@
13.2.1-SNAPSHOT
+
+ io.ebean
+ ebean-datasource
+ ${ebean-datasource.version}
+
+
io.ebean
@@ -38,21 +38,11 @@
13.2.1-SNAPSHOT
-
+
+ io.ebean
+ ebean-platform-all
+ 13.2.1-SNAPSHOT
+
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
+
diff --git a/ebean/src/main/java/io/ebean/assembly/Assembly.java b/composites/ebean/src/main/java/io/ebean/assembly/Assembly.java
similarity index 100%
rename from ebean/src/main/java/io/ebean/assembly/Assembly.java
rename to composites/ebean/src/main/java/io/ebean/assembly/Assembly.java
diff --git a/ebean/src/main/java9/module-info.java b/composites/ebean/src/main/java/module-info.java
similarity index 60%
rename from ebean/src/main/java9/module-info.java
rename to composites/ebean/src/main/java/module-info.java
index ac3f52c61..9b57983a1 100644
--- a/ebean/src/main/java9/module-info.java
+++ b/composites/ebean/src/main/java/module-info.java
@@ -2,6 +2,7 @@ module io.ebean {
requires transitive io.ebean.api;
requires transitive io.ebean.core;
+ requires transitive io.ebean.datasource;
requires transitive io.ebean.querybean;
-
+ requires transitive io.ebean.platform.all;
}
diff --git a/composites/pom.xml b/composites/pom.xml
new file mode 100644
index 000000000..0db0e9108
--- /dev/null
+++ b/composites/pom.xml
@@ -0,0 +1,32 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ composites
+ pom
+
+
+ ebean
+ ebean-clickhouse
+ ebean-cockroach
+ ebean-db2
+ ebean-h2
+ ebean-hana
+
+ ebean-mariadb
+ ebean-mysql
+ ebean-nuodb
+ ebean-oracle
+ ebean-postgres
+
+ ebean-sqlite
+ ebean-sqlserver
+ ebean-yugabyte
+
+
+
diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index 9209eb6aa..4d91ac7b3 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -49,7 +49,7 @@
io.ebean
ebean-annotation
- 7.7
+ 8.0
@@ -80,15 +80,6 @@
true
-
-
- com.h2database
- h2
- ${h2database.version}
- true
-
-
javax.transaction
jta
@@ -112,19 +103,4 @@
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
diff --git a/ebean-api/src/main/java/io/ebean/BeanState.java b/ebean-api/src/main/java/io/ebean/BeanState.java
index 912d737fa..64c726a5b 100644
--- a/ebean-api/src/main/java/io/ebean/BeanState.java
+++ b/ebean-api/src/main/java/io/ebean/BeanState.java
@@ -74,40 +74,16 @@ public interface BeanState {
*/
Set loadedProps();
- /**
- * Deprecated migrate to loadedProps().
- */
- @Deprecated
- default Set getLoadedProps() {
- return loadedProps();
- }
-
/**
* Return the set of changed properties.
*/
Set changedProps();
- /**
- * Deprecated migrate to changedProps().
- */
- @Deprecated
- default Set getChangedProps() {
- return changedProps();
- }
-
/**
* Return a map of the updated properties and their new and old values.
*/
Map dirtyValues();
- /**
- * Deprecated migrate to dirtyValues().
- */
- @Deprecated
- default Map getDirtyValues() {
- return dirtyValues();
- }
-
/**
* Return true if the bean is readOnly.
*
@@ -139,24 +115,9 @@ public interface BeanState {
*/
Map loadErrors();
- /**
- * Deprecated migrate to loadErrors().
- */
- @Deprecated
- default Map getLoadErrors() {
- return loadErrors();
- }
-
/**
* Return the sort order value for an order column.
*/
int sortOrder();
- /**
- * Deprecated migrate to sortOrder().
- */
- @Deprecated
- default int getSortOrder() {
- return sortOrder();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/DB.java b/ebean-api/src/main/java/io/ebean/DB.java
index f834c0354..b89ccd4f2 100644
--- a/ebean-api/src/main/java/io/ebean/DB.java
+++ b/ebean-api/src/main/java/io/ebean/DB.java
@@ -22,10 +22,9 @@ import java.util.concurrent.Callable;
* DB additionally provides a convenient way to use the 'default' Database.
*
*
Default database
- *
* One of the Database instances can be registered as the "default database"
* and can be obtained using DB.getDefault()
- *
+ *
* {@code
*
* Database database = DB.getDefault();
@@ -36,7 +35,7 @@ import java.util.concurrent.Callable;
*
* Multiple database instances can be registered with DB and we can obtain them
* using DB.byName()
- *
+ *
* {@code
*
* Database hrDatabase = DB.byName("hr");
@@ -47,7 +46,6 @@ import java.util.concurrent.Callable;
*
* DB has methods like {@link #find(Class)} and {@link #save(Object)} which are
* just convenience for using the default database.
- *
*
* {@code
*
@@ -117,39 +115,26 @@ public final class DB {
* build the WHERE and HAVING clauses. Alternatively you can use the
* ExpressionFactory directly to create expressions to add to the query where
* clause.
- *
*
* Alternatively you can use the {@link Expr} as a shortcut to the
* ExpressionFactory of the 'Default' database.
- *
*
* You generally need to the an ExpressionFactory (or {@link Expr}) to build
* an expression that uses OR like Expression e = Expr.or(..., ...);
- *
*/
public static ExpressionFactory expressionFactory() {
return getDefault().expressionFactory();
}
- /**
- * Deprecated migrate to expressionFactory().
- */
- @Deprecated
- public static ExpressionFactory getExpressionFactory() {
- return expressionFactory();
- }
-
/**
* Return the next identity value for a given bean type.
*
* This will only work when a IdGenerator is on this bean type such as a DB
* sequence or UUID.
- *
*
* For DB's supporting getGeneratedKeys and sequences such as Oracle10 you do
* not need to use this method generally. It is made available for more
* complex cases where it is useful to get an ID prior to some processing.
- *
*/
public static Object nextId(Class> beanType) {
return getDefault().nextId(beanType);
@@ -159,17 +144,14 @@ public final class DB {
* Start a transaction with 'REQUIRED' semantics.
*
* With REQUIRED semantics if an active transaction already exists that transaction will be used.
- *
*
* The transaction is stored in a ThreadLocal variable and typically you only
* need to use the returned Transaction IF you wish to do things like
* use batch mode, change the transaction isolation level, use savepoints or
* log comments to the transaction log.
- *
*
- * Example of using a transaction to span multiple calls to find(), save()
- * etc.
- *
+ * Example of using a transaction to span multiple calls to find(), save() etc.
+ *
* {@code
*
* try (Transaction transaction = DB.beginTransaction()) {
@@ -187,7 +169,6 @@ public final class DB {
* With Database we can pass the transaction to the various find(), save() and execute()
* methods. This gives us the ability to create the transactions externally from Ebean
* and use the transaction explicitly via the various methods available on Database.
- *
*/
public static Transaction beginTransaction() {
return getDefault().beginTransaction();
@@ -199,7 +180,6 @@ public final class DB {
* You will want to do this if you want multiple Transactions in a single
* thread or generally use transactions outside of the TransactionThreadLocal
* management.
- *
*/
public static Transaction createTransaction() {
return getDefault().createTransaction();
@@ -219,7 +199,6 @@ public final class DB {
*
* Note that this provides an try finally alternative to using {@link #executeCall(TxScope, Callable)} or
* {@link #execute(TxScope, Runnable)}.
- *
*
*
REQUIRES_NEW example:
* {@code
@@ -278,7 +257,7 @@ public final class DB {
/**
* Register a TransactionCallback on the currently active transaction.
- *
+ *
* If there is no currently active transaction then a PersistenceException is thrown.
*
* @param transactionCallback the transaction callback to be registered with the current transaction
@@ -307,14 +286,12 @@ public final class DB {
* rollback the transaction.
*
* It is preferable to use try with resources rather than this.
- *
*
* Useful to put in a finally block to ensure the transaction is ended, rather
* than a rollbackTransaction() in each catch block.
- *
*
* Code example:
- *
+ *
* {@code
* DB.beginTransaction();
* try {
@@ -345,7 +322,6 @@ public final class DB {
*
* When null is passed in for b, then the 'OldValues' of a is used for the
* difference comparison.
- *
*/
public static Map diff(Object a, Object b) {
return getDefault().diff(a, b);
@@ -356,18 +332,15 @@ public final class DB {
*
* If there is no current transaction one will be created and committed for
* you automatically.
- *
*
* Save can cascade along relationships. For this to happen you need to
* specify a cascade of CascadeType.ALL or CascadeType.PERSIST on the
* OneToMany, OneToOne or ManyToMany annotation.
- *
*
* When a save cascades via a OneToMany or ManyToMany Ebean will automatically
* set the 'parent' object to the 'detail' object. In the example below in
* saving the order and cascade saving the order details the 'parent' order
* will be set against each order detail when it is saved.
- *
*/
public static void save(Object bean) throws OptimisticLockException {
getDefault().save(bean);
@@ -418,11 +391,9 @@ public final class DB {
* Stateless updates: Note that the bean does not have to be previously fetched to call
* update().You can create a new instance and set some of its properties programmatically for via
* JSON/XML marshalling etc. This is described as a 'stateless update'.
- *
*
* Optimistic Locking: Note that if the version property is not set when update() is
* called then no optimistic locking is performed (internally ConcurrencyMode.NONE is used).
- *
*
*
{@code
*
@@ -552,20 +523,16 @@ public final class DB {
* Delete the bean.
*
* This will return true if the bean was deleted successfully or JDBC batch is being used.
- *
*
* If there is no current transaction one will be created and committed for
* you automatically.
- *
*
* If the bean is configured with @SoftDelete then this will perform a soft
* delete rather than a hard/permanent delete.
- *
*
* If the Bean does not have a version property (or loaded version property) and
* the bean does not exist then this returns false indicating that nothing was
* deleted. Note that, if JDBC batch mode is used then this always returns true.
- *
*/
public static boolean delete(Object bean) throws OptimisticLockException {
return getDefault().delete(bean);
@@ -625,7 +592,6 @@ public final class DB {
*
* Note that this resets OneToMany and ManyToMany properties so that if they
* are accessed a lazy load will refresh the many property.
- *
*/
public static void refresh(Object bean) {
getDefault().refresh(bean);
@@ -633,6 +599,7 @@ public final class DB {
/**
* Refresh a 'many' property of a bean.
+ *
* {@code
*
* Order order = ...;
@@ -653,7 +620,7 @@ public final class DB {
* Get a reference object.
*
* This is sometimes described as a proxy (with lazy loading).
- *
+ *
* {@code
*
* Product product = DB.getReference(Product.class, 1);
@@ -674,14 +641,6 @@ public final class DB {
return getDefault().reference(beanType, id);
}
- /**
- * Deprecated migrate to beanId().
- */
- @Deprecated
- public static T getReference(Class beanType, Object id) {
- return reference(beanType, id);
- }
-
/**
* Sort the list using the sortByClause which can contain a comma delimited
* list of property names and keywords asc, desc, nullsHigh and nullsLow.
@@ -697,7 +656,7 @@ public final class DB {
*
* Note that the sorting uses a Comparator and Collections.sort(); and does
* not invoke a DB query.
- *
+ *
* {@code
*
* // find orders and their customers
@@ -732,9 +691,8 @@ public final class DB {
*
* }
*
- * If you want more control over the query then you can use createQuery() and
- * Query.findOne();
- *
+ * If you want more control over the query then you can use createQuery() and Query.findOne();
+ *
* {@code
*
* // ... additionally fetching customer, customer shipping address,
@@ -774,40 +732,25 @@ public final class DB {
}
/**
- * Look to execute a native sql query that does not returns beans but instead
- * returns SqlRow or direct access to ResultSet (see {@link SqlQuery#findList(RowMapper)}.
- *
+ * Look to execute a native sql query that does not return beans but instead
+ * returns SqlRow or uses {@link RowMapper}.
*
* Refer to {@link DtoQuery} for native sql queries returning DTO beans.
- *
*
* Refer to {@link #findNative(Class, String)} for native sql queries returning entity beans.
- *
*/
public static SqlQuery sqlQuery(String sql) {
return getDefault().sqlQuery(sql);
}
- /**
- * Deprecated - migrate to sqlQuery().
- *
- * This is an alias for {@link #sqlQuery(String)}.
- */
- @Deprecated
- public static SqlQuery createSqlQuery(String sql) {
- return sqlQuery(sql);
- }
-
/**
* Look to execute a native sql insert update or delete statement.
*
* Use this to execute a Insert Update or Delete statement. The statement will
* be native to the database and contain database table and column names.
- *
*
*
* See {@link SqlUpdate} for example usage.
- *
*
* @return The SqlUpdate instance to set parameters and execute
*/
@@ -815,16 +758,6 @@ public final class DB {
return getDefault().sqlUpdate(sql);
}
- /**
- * Deprecated - migrate to sqlUpdate().
- *
- * This is an alias for {@link #sqlUpdate(String)}.
- */
- @Deprecated
- public static SqlUpdate createSqlUpdate(String sql) {
- return sqlUpdate(sql);
- }
-
/**
* Create a CallableSql to execute a given stored procedure.
*
@@ -841,10 +774,9 @@ public final class DB {
*
* The orm update differs from the sql update in that it you can use the bean
* name and bean property names rather than table and column names.
- *
*
* An example:
- *
+ *
* {@code
*
* // The bean name and properties - "topic","postCount" and "id"
@@ -877,7 +809,6 @@ public final class DB {
* Create a named query.
*
* For RawSql the named query is expected to be in ebean.xml.
- *
*
* @param beanType The type of entity bean
* @param namedQuery The name of the query
@@ -893,15 +824,12 @@ public final class DB {
*
* You can use the methods on the Query object to specify fetch paths,
* predicates, order by, limits etc.
- *
*
* You then use findList(), findSet(), findMap() and findOne() to execute
* the query and return the collection or bean.
- *
*
* Note that a query executed by {@link Query#findList()} etc will execute against
* the same database from which is was created.
- *
*
* @param beanType the class of entity to be fetched
* @return A ORM Query for this beanType
@@ -953,7 +881,6 @@ public final class DB {
* This is actually the same as {@link #createQuery(Class)}. The reason it
* exists is that people used to JPA will probably be looking for a
* createQuery method (the same as entityManager).
- *
*
* @param beanType the type of entity bean to find
* @return A ORM Query object for this beanType
@@ -966,7 +893,7 @@ public final class DB {
* Create a query using native SQL.
*
* The native SQL can contain named parameters or positioned parameters.
- *
+ *
* {@code
*
* String sql = "select c.id, c.name from customer c where c.name like ? order by c.name";
@@ -991,7 +918,6 @@ public final class DB {
*
* DTO beans are just normal bean like classes with public constructor(s) and setters.
* They do not need to be registered with Ebean before use.
- *
*
* @param dtoType The type of the DTO bean the rows will be mapped into.
* @param sql The SQL query to execute.
@@ -1028,10 +954,8 @@ public final class DB {
* going back to the database.
*
* This produces and returns a new list with the sort and filters applied.
- *
*
* Refer to {@link Filter} for an example of its use.
- *
*/
public static Filter filter(Class beanType) {
return getDefault().filter(beanType);
@@ -1042,7 +966,7 @@ public final class DB {
*
* The scope can control the transaction type, isolation and rollback
* semantics.
- *
+ *
* {@code
*
* // set specific transactional scope settings
@@ -1066,7 +990,7 @@ public final class DB {
*
* The default scope runs with REQUIRED and by default will rollback on any
* exception (checked or runtime).
- *
+ *
* {@code
*
* DB.execute(() -> {
@@ -1091,7 +1015,7 @@ public final class DB {
*
* The scope can control the transaction type, isolation and rollback
* semantics.
- *
+ *
* {@code
*
* // set specific transactional scope settings
@@ -1115,11 +1039,10 @@ public final class DB {
*
* The default scope runs with REQUIRED and by default will rollback on any
* exception (checked or runtime).
- *
*
* This is basically the same as TxRunnable except that it returns an Object
* (and you specify the return type via generics).
- *
+ *
* {@code
*
* DB.executeCall(() -> {
@@ -1148,23 +1071,19 @@ public final class DB {
*
* If you use DB.execute(UpdateSql) then the table modification information
* is automatically deduced and you do not need to call this method yourself.
- *
*
* This information is used to invalidate objects out of the cache and
* potentially text indexes. This information is also automatically broadcast
* across the cluster.
- *
*
* If there is a transaction then this information is placed into the current
* transactions event information. When the transaction is committed this
* information is registered (with the transaction manager). If this
* transaction is rolled back then none of the transaction event information
* registers including the information you put in via this method.
- *
*
* If there is NO current transaction when you call this method then this
* information is registered immediately (with the transaction manager).
- *
*
* @param tableName the name of the table that was modified
* @param inserts true if rows where inserted into the table
@@ -1179,20 +1098,11 @@ public final class DB {
* Return the BeanState for a given entity bean.
*
* This will return null if the bean is not an enhanced entity bean.
- *
*/
public static BeanState beanState(Object bean) {
return getDefault().beanState(bean);
}
- /**
- * Deprecated migrate to beanState().
- */
- @Deprecated
- public static BeanState getBeanState(Object bean) {
- return beanState(bean);
- }
-
/**
* Return the value of the Id property for a given bean.
*/
@@ -1200,14 +1110,6 @@ public final class DB {
return getDefault().beanId(bean);
}
- /**
- * Deprecated migrate to beanId().
- */
- @Deprecated
- public static Object getBeanId(Object bean) {
- return beanId(bean);
- }
-
/**
* Load and lock the bean using {@code select for update}.
*
@@ -1223,14 +1125,6 @@ public final class DB {
getDefault().lock(bean);
}
- /**
- * Deprecated migrate to cacheManager().
- */
- @Deprecated
- public static ServerCacheManager getServerCacheManager() {
- return getDefault().cacheManager();
- }
-
/**
* Return the manager of the level 2 cache ("L2" cache).
*/
@@ -1246,14 +1140,6 @@ public final class DB {
return getDefault().backgroundExecutor();
}
- /**
- * Deprecated migrate to backgroundExecutor().
- */
- @Deprecated
- public static BackgroundExecutor getBackgroundExecutor() {
- return backgroundExecutor();
- }
-
/**
* Return the JsonContext for reading/writing JSON.
*/
diff --git a/ebean-api/src/main/java/io/ebean/Database.java b/ebean-api/src/main/java/io/ebean/Database.java
index 3353d1944..f58b3a028 100644
--- a/ebean-api/src/main/java/io/ebean/Database.java
+++ b/ebean-api/src/main/java/io/ebean/Database.java
@@ -123,81 +123,33 @@ public interface Database {
*/
AutoTune autoTune();
- /**
- * Deprecated migrate to autoTune().
- */
- @Deprecated
- default AutoTune getAutoTune() {
- return autoTune();
- }
-
/**
* Return the associated DataSource for this Database instance.
*/
DataSource dataSource();
- /**
- * Deprecated migrate to dataSource().
- */
- @Deprecated
- default DataSource getDataSource() {
- return dataSource();
- }
-
/**
* Return the associated read only DataSource for this Database instance (can be null).
*/
DataSource readOnlyDataSource();
- /**
- * Deprecated migrate to readOnlyDataSource().
- */
- @Deprecated
- default DataSource getReadOnlyDataSource() {
- return readOnlyDataSource();
- }
-
/**
* Return the name. This is used with {@link DB#byName(String)} to get a
* Database that was registered with the DB singleton.
*/
String name();
- /**
- * Deprecated migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
-
/**
* Return the ExpressionFactory for this database.
*/
ExpressionFactory expressionFactory();
- /**
- * Deprecated migrate to expressionFactory().
- */
- @Deprecated
- default ExpressionFactory getExpressionFactory() {
- return expressionFactory();
- }
-
/**
* Return the MetaInfoManager which is used to get meta data from the Database
* such as query execution statistics.
*/
MetaInfoManager metaInfo();
- /**
- * Deprecated migrate to metaInfo().
- */
- @Deprecated
- default MetaInfoManager getMetaInfoManager() {
- return metaInfo();
- }
-
/**
* Return the platform used for this database instance.
*
@@ -217,27 +169,11 @@ public interface Database {
*/
Platform platform();
- /**
- * Deprecated migrate to platform().
- */
- @Deprecated
- default Platform getPlatform() {
- return platform();
- }
-
/**
* Return the extended API intended for use by plugins.
*/
SpiServer pluginApi();
- /**
- * Deprecated migrate to pluginApi().
- */
- @Deprecated
- default SpiServer getPluginApi() {
- return pluginApi();
- }
-
/**
* Return the BeanState for a given entity bean.
*
@@ -246,27 +182,11 @@ public interface Database {
*/
BeanState beanState(Object bean);
- /**
- * Deprecated migrate to beanState().
- */
- @Deprecated
- default BeanState getBeanState(Object bean) {
- return beanState(bean);
- }
-
/**
* Return the value of the Id property for a given bean.
*/
Object beanId(Object bean);
- /**
- * Deprecated migrate to beanId().
- */
- @Deprecated
- default Object getBeanId(Object bean) {
- return beanId(bean);
- }
-
/**
* Set the Id value onto the bean converting the type of the id value if necessary.
*
@@ -279,14 +199,6 @@ public interface Database {
*/
Object beanId(Object bean, Object id);
- /**
- * Deprecated migrate to beanId().
- */
- @Deprecated
- default Object setBeanId(Object bean, Object id) {
- return beanId(bean, id);
- }
-
/**
* Return a map of the differences between two objects of the same type.
*
@@ -588,14 +500,6 @@ public interface Database {
*/
SqlQuery sqlQuery(String sql);
- /**
- * Deprecated - migrate to sqlQuery().
- *
- * This is an alias for {@link #sqlQuery(String)}.
- */
- @Deprecated
- SqlQuery createSqlQuery(String sql);
-
/**
* Look to execute a native sql insert update or delete statement.
*
@@ -611,14 +515,6 @@ public interface Database {
*/
SqlUpdate sqlUpdate(String sql);
- /**
- * Deprecated - migrate to sqlUpdate().
- *
- * This is an alias for {@link #sqlUpdate(String)}.
- */
- @Deprecated
- SqlUpdate createSqlUpdate(String sql);
-
/**
* Create a CallableSql to execute a given stored procedure.
*/
@@ -952,14 +848,6 @@ public interface Database {
*/
T reference(Class beanType, Object id);
- /**
- * Deprecated migrate to reference().
- */
- @Deprecated
- default T getReference(Class beanType, Object id) {
- return reference(beanType, id);
- }
-
/**
* Return the extended API for Database.
*
@@ -1539,28 +1427,12 @@ public interface Database {
*/
ServerCacheManager cacheManager();
- /**
- * Deprecated migrate to cacheManager().
- */
- @Deprecated
- default ServerCacheManager getServerCacheManager() {
- return cacheManager();
- }
-
/**
* Return the BackgroundExecutor service for asynchronous processing of
* queries.
*/
BackgroundExecutor backgroundExecutor();
- /**
- * Deprecated migrate to backgroundExecutor().
- */
- @Deprecated
- default BackgroundExecutor getBackgroundExecutor() {
- return backgroundExecutor();
- }
-
/**
* Return the JsonContext for reading/writing JSON.
*
diff --git a/ebean-api/src/main/java/io/ebean/DatabaseFactory.java b/ebean-api/src/main/java/io/ebean/DatabaseFactory.java
index 588f48c24..9696954f7 100644
--- a/ebean-api/src/main/java/io/ebean/DatabaseFactory.java
+++ b/ebean-api/src/main/java/io/ebean/DatabaseFactory.java
@@ -26,7 +26,7 @@ import java.util.concurrent.locks.ReentrantLock;
* methods on the DB singleton such as {@link DB#find(Class)} are just a
* convenient way of using the 'default/primary' Database.
*/
-public class DatabaseFactory {
+public final class DatabaseFactory {
private static final ReentrantLock lock = new ReentrantLock();
private static SpiContainer container;
diff --git a/ebean-api/src/main/java/io/ebean/DbPrimary.java b/ebean-api/src/main/java/io/ebean/DbPrimary.java
index ffec8b114..156038f8e 100644
--- a/ebean-api/src/main/java/io/ebean/DbPrimary.java
+++ b/ebean-api/src/main/java/io/ebean/DbPrimary.java
@@ -10,7 +10,7 @@ import java.util.concurrent.locks.ReentrantLock;
*
* Intended for internal use as part of bootup, construction, registration of the default database.
*/
-class DbPrimary {
+final class DbPrimary {
private static final ReentrantLock lock = new ReentrantLock();
private static String defaultServerName;
diff --git a/ebean-api/src/main/java/io/ebean/EbeanVersion.java b/ebean-api/src/main/java/io/ebean/EbeanVersion.java
index 6a764d911..c4e63efff 100644
--- a/ebean-api/src/main/java/io/ebean/EbeanVersion.java
+++ b/ebean-api/src/main/java/io/ebean/EbeanVersion.java
@@ -12,7 +12,7 @@ import java.util.Properties;
*
* @author Roland Praml, FOCONIS AG
*/
-public class EbeanVersion {
+public final class EbeanVersion {
private static final Logger log = LoggerFactory.getLogger("io.ebean");
diff --git a/ebean-api/src/main/java/io/ebean/Expr.java b/ebean-api/src/main/java/io/ebean/Expr.java
index 1316f9873..525bc3272 100644
--- a/ebean-api/src/main/java/io/ebean/Expr.java
+++ b/ebean-api/src/main/java/io/ebean/Expr.java
@@ -25,7 +25,7 @@ import java.util.Map;
*
* @see Query#where()
*/
-public class Expr {
+public final class Expr {
private Expr() {
}
diff --git a/ebean-api/src/main/java/io/ebean/ExtendedServer.java b/ebean-api/src/main/java/io/ebean/ExtendedServer.java
index 1bb21a721..0088e9c2b 100644
--- a/ebean-api/src/main/java/io/ebean/ExtendedServer.java
+++ b/ebean-api/src/main/java/io/ebean/ExtendedServer.java
@@ -112,19 +112,6 @@ public interface ExtendedServer {
*/
Stream findStream(Query query, Transaction transaction);
- /**
- * Deprecated - migrate to findStream().
- *
- * Execute the query returning the result as a Stream.
- *
- * Note that this can support very large queries iterating any number of results.
- * To do so internally it can use multiple persistence contexts.
- *
- * Note that the stream needs to be closed so use with try with resources.
- */
- @Deprecated
- Stream findLargeStream(Query query, Transaction transaction);
-
/**
* Execute the query visiting the each bean one at a time.
*
diff --git a/ebean-api/src/main/java/io/ebean/FetchConfig.java b/ebean-api/src/main/java/io/ebean/FetchConfig.java
index e2d4fbe35..cfb14a235 100644
--- a/ebean-api/src/main/java/io/ebean/FetchConfig.java
+++ b/ebean-api/src/main/java/io/ebean/FetchConfig.java
@@ -31,7 +31,7 @@ import java.io.Serializable;
* @author mario
* @author rbygrave
*/
-public class FetchConfig implements Serializable {
+public final class FetchConfig implements Serializable {
private static final long serialVersionUID = 1L;
diff --git a/ebean-api/src/main/java/io/ebean/Query.java b/ebean-api/src/main/java/io/ebean/Query.java
index 4ddfc9af5..0bc8939f3 100644
--- a/ebean-api/src/main/java/io/ebean/Query.java
+++ b/ebean-api/src/main/java/io/ebean/Query.java
@@ -750,29 +750,6 @@ public interface Query extends CancelableQuery {
*/
Stream findStream();
- /**
- * Deprecated - migrate to findStream.
- *
- * Execute the query returning the result as a Stream.
- *
- * Note that this uses multiple persistence contexts such that we can use
- * it with a large number of results.
- *
- * {@code
- *
- * // use try with resources to ensure Stream is closed
- *
- * try (Stream stream = query.findLargeStream()) {
- * stream
- * .map(...)
- * .collect(...);
- * }
- *
- * }
- */
- @Deprecated
- Stream findLargeStream();
-
/**
* Execute the query processing the beans one at a time.
*
diff --git a/ebean-api/src/main/java/io/ebean/SqlQuery.java b/ebean-api/src/main/java/io/ebean/SqlQuery.java
index 240d42aad..797e41381 100644
--- a/ebean-api/src/main/java/io/ebean/SqlQuery.java
+++ b/ebean-api/src/main/java/io/ebean/SqlQuery.java
@@ -74,18 +74,6 @@ public interface SqlQuery extends Serializable, CancelableQuery {
@Nullable
SqlRow findOne();
- /**
- * Deprecated migrate to use {@link #mapTo(RowMapper)}
- */
- @Deprecated
- T findOne(RowMapper mapper);
-
- /**
- * Deprecated migrate to use {@link #mapTo(RowMapper)}
- */
- @Deprecated
- List findList(RowMapper mapper);
-
/**
* Execute the query reading each row from ResultSet using the RowConsumer.
*
@@ -121,50 +109,6 @@ public interface SqlQuery extends Serializable, CancelableQuery {
*/
Optional findOneOrEmpty();
- /**
- * Deprecated - migrate to .mapToScalar(attributeType).findOne().
- * {@code
- *
- * .mapToScalar(BigDecimal.class)
- * .findOne();
- * }
- */
- @Deprecated
- T findSingleAttribute(Class attributeType);
-
- /**
- * Deprecated - migrate to .mapToScalar(BigDecimal.class).findOne().
- * {@code
- *
- * .mapToScalar(BigDecimal.class)
- * .findOne();
- * }
- */
- @Deprecated
- BigDecimal findSingleDecimal();
-
- /**
- * Deprecated - migrate to .mapToScalar(Long.class).findOne().
- * {@code
- *
- * .mapToScalar(Long.class)
- * .findOne();
- * }
- */
- @Deprecated
- Long findSingleLong();
-
- /**
- * Deprecated - migrate to .mapToScalar(Long.class).findList().
- * {@code
- *
- * .mapToScalar(Long.class)
- * .findList();
- * }
- */
- @Deprecated
- List findSingleAttributeList(Class attributeType);
-
/**
* Set one of more positioned parameters.
*
@@ -194,12 +138,6 @@ public interface SqlQuery extends Serializable, CancelableQuery {
*/
SqlQuery setParameters(Object... values);
- /**
- * Deprecated migrate to setParameters(Object... values)
- */
- @Deprecated
- SqlQuery setParams(Object... values);
-
/**
* Set the next bind parameter by position.
*
{@code
@@ -246,6 +184,16 @@ public interface SqlQuery extends Serializable, CancelableQuery {
*/
SqlQuery setParameter(Object value);
+ /**
+ * Set a null parameter by position.
+ */
+ SqlQuery setNullParameter(int position, int jdbcType);
+
+ /**
+ * Set a null parameter by name.
+ */
+ SqlQuery setNullParameter(String name, int jdbcType);
+
/**
* Bind the parameter by its index position (1 based like JDBC).
*
diff --git a/ebean-api/src/main/java/io/ebean/SqlUpdate.java b/ebean-api/src/main/java/io/ebean/SqlUpdate.java
index 9ce704922..33eedf3b2 100644
--- a/ebean-api/src/main/java/io/ebean/SqlUpdate.java
+++ b/ebean-api/src/main/java/io/ebean/SqlUpdate.java
@@ -287,12 +287,6 @@ public interface SqlUpdate {
*/
SqlUpdate setParameters(Object... values);
- /**
- * Deprecated migrate to setParameters(Object... values).
- */
- @Deprecated
- SqlUpdate setParams(Object... values);
-
/**
* Set the next bind parameter by position.
*
@@ -300,12 +294,6 @@ public interface SqlUpdate {
*/
SqlUpdate setParameter(Object value);
- /**
- * Deprecated migrate to setParameter(value).
- */
- @Deprecated
- SqlUpdate setNextParameter(Object value);
-
/**
* Set a parameter via its index position.
*/
diff --git a/ebean-api/src/main/java/io/ebean/XServiceProvider.java b/ebean-api/src/main/java/io/ebean/XServiceProvider.java
index 7f7ce9cc6..9d362571c 100644
--- a/ebean-api/src/main/java/io/ebean/XServiceProvider.java
+++ b/ebean-api/src/main/java/io/ebean/XServiceProvider.java
@@ -11,7 +11,7 @@ import java.util.ServiceLoader;
/**
* Lookup internal services.
*/
-class XServiceProvider {
+final class XServiceProvider {
private static SpiRawSqlService rawSqlService = initRawSql();
diff --git a/ebean-api/src/main/java/io/ebean/annotation/EntityImplements.java b/ebean-api/src/main/java/io/ebean/annotation/ext/EntityImplements.java
similarity index 93%
rename from ebean-api/src/main/java/io/ebean/annotation/EntityImplements.java
rename to ebean-api/src/main/java/io/ebean/annotation/ext/EntityImplements.java
index e7986d147..ee312bb72 100644
--- a/ebean-api/src/main/java/io/ebean/annotation/EntityImplements.java
+++ b/ebean-api/src/main/java/io/ebean/annotation/ext/EntityImplements.java
@@ -1,4 +1,4 @@
-package io.ebean.annotation;
+package io.ebean.annotation.ext;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
diff --git a/ebean-api/src/main/java/io/ebean/annotation/EntityOverride.java b/ebean-api/src/main/java/io/ebean/annotation/ext/EntityOverride.java
similarity index 94%
rename from ebean-api/src/main/java/io/ebean/annotation/EntityOverride.java
rename to ebean-api/src/main/java/io/ebean/annotation/ext/EntityOverride.java
index bbe9d2aa2..2c166812a 100644
--- a/ebean-api/src/main/java/io/ebean/annotation/EntityOverride.java
+++ b/ebean-api/src/main/java/io/ebean/annotation/ext/EntityOverride.java
@@ -1,4 +1,4 @@
-package io.ebean.annotation;
+package io.ebean.annotation.ext;
import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
diff --git a/ebean-api/src/main/java/io/ebean/annotation/package.html b/ebean-api/src/main/java/io/ebean/annotation/ext/package.html
similarity index 100%
rename from ebean-api/src/main/java/io/ebean/annotation/package.html
rename to ebean-api/src/main/java/io/ebean/annotation/ext/package.html
diff --git a/ebean-api/src/main/java/io/ebean/cache/ServerCache.java b/ebean-api/src/main/java/io/ebean/cache/ServerCache.java
index 1476e567d..28ff22780 100644
--- a/ebean-api/src/main/java/io/ebean/cache/ServerCache.java
+++ b/ebean-api/src/main/java/io/ebean/cache/ServerCache.java
@@ -1,5 +1,6 @@
package io.ebean.cache;
+import io.avaje.lang.Nullable;
import io.ebean.meta.MetricVisitor;
import java.util.LinkedHashMap;
@@ -68,40 +69,39 @@ public interface ServerCache {
/**
* Return the number of entries in the cache.
*/
- int size();
+ default int size() {
+ return 0;
+ }
/**
* Return the hit ratio the cache is currently getting.
*/
default int hitRatio() {
- return getHitRatio();
+ return 0;
}
- /**
- * Deprecated migrate to hitRatio().
- */
- @Deprecated
- int getHitRatio();
-
/**
* Return statistics for the cache.
*
* @param reset if true the statistics are reset.
*/
+ @Nullable
default ServerCacheStatistics statistics(boolean reset) {
- return getStatistics(reset);
+ return null;
}
- /**
- * Deprecated migrate to statistics().
- */
- @Deprecated
- ServerCacheStatistics getStatistics(boolean reset);
-
/**
* Visit the metrics for the cache.
*/
default void visit(MetricVisitor visitor) {
// do nothing by default
}
+
+ /**
+ * Unwrap the underlying ServerCache.
+ */
+ @SuppressWarnings("unchecked")
+ default T unwrap(Class cls) {
+ return (T) this;
+ }
}
diff --git a/ebean-api/src/main/java/io/ebean/cache/ServerCacheConfig.java b/ebean-api/src/main/java/io/ebean/cache/ServerCacheConfig.java
index f5e429299..80ffe471a 100644
--- a/ebean-api/src/main/java/io/ebean/cache/ServerCacheConfig.java
+++ b/ebean-api/src/main/java/io/ebean/cache/ServerCacheConfig.java
@@ -13,6 +13,7 @@ public class ServerCacheConfig {
private final ServerCacheOptions cacheOptions;
private final CurrentTenantProvider tenantProvider;
private final QueryCacheEntryValidate queryCacheEntryValidate;
+ private final TenantAwareKey tenantAwareKey;
public ServerCacheConfig(ServerCacheType type, String cacheKey, String shortName, ServerCacheOptions cacheOptions, CurrentTenantProvider tenantProvider, QueryCacheEntryValidate queryCacheEntryValidate) {
this.type = type;
@@ -21,6 +22,14 @@ public class ServerCacheConfig {
this.cacheOptions = cacheOptions;
this.tenantProvider = tenantProvider;
this.queryCacheEntryValidate = queryCacheEntryValidate;
+ this.tenantAwareKey = (tenantProvider == null) ? null : new TenantAwareKey(tenantProvider);
+ }
+
+ /**
+ * Return the ServerCache taking into account if multi-tenant is used.
+ */
+ public ServerCache tenantAware(ServerCache cache) {
+ return tenantAwareKey == null ? cache : new TenantAwareCache(cache, tenantAwareKey);
}
/**
diff --git a/ebean-api/src/main/java/io/ebean/cache/ServerCacheManager.java b/ebean-api/src/main/java/io/ebean/cache/ServerCacheManager.java
index 67156a642..0168a4d58 100644
--- a/ebean-api/src/main/java/io/ebean/cache/ServerCacheManager.java
+++ b/ebean-api/src/main/java/io/ebean/cache/ServerCacheManager.java
@@ -23,14 +23,6 @@ public interface ServerCacheManager {
*/
boolean localL2Caching();
- /**
- * Deprecated migrate to localL2Caching().
- */
- @Deprecated
- default boolean isLocalL2Caching() {
- return localL2Caching();
- }
-
/**
* Return all the cache regions.
*/
@@ -46,77 +38,36 @@ public interface ServerCacheManager {
*/
void enabledRegions(String regions);
- /**
- * Deprecated migrate to enabledRegions().
- */
- @Deprecated
- default void setEnabledRegions(String regions) {
- enabledRegions(regions);
- }
-
/**
* Enable or disable all the cache regions.
*/
void allRegionsEnabled(boolean enabled);
- /**
- * Deprecated migrate to allRegionsEnabled().
- */
- @Deprecated
- default void setAllRegionsEnabled(boolean enabled) {
- allRegionsEnabled(enabled);
- }
-
/**
* Return the cache region by name. Typically, to enable or disable the region.
*/
ServerCacheRegion region(String name);
- @Deprecated
- default ServerCacheRegion getRegion(String name) {
- return region(name);
- }
-
/**
* Return the cache for mapping natural keys to id values.
*/
ServerCache naturalKeyCache(Class> beanType);
- @Deprecated
- default ServerCache getNaturalKeyCache(Class> beanType) {
- return naturalKeyCache(beanType);
- }
-
/**
* Return the cache for beans of a particular type.
*/
ServerCache beanCache(Class> beanType);
- @Deprecated
- default ServerCache getBeanCache(Class> beanType) {
- return beanCache(beanType);
- }
-
/**
* Return the cache for associated many properties of a bean type.
*/
ServerCache collectionIdsCache(Class> beanType, String propertyName);
- @Deprecated
- default ServerCache getCollectionIdsCache(Class> beanType, String propertyName) {
- return collectionIdsCache(beanType, propertyName);
- }
-
/**
* Return the cache for query results of a particular type of bean.
*/
ServerCache queryCache(Class> beanType);
- @Deprecated
- default ServerCache getQueryCache(Class> beanType) {
- return queryCache(beanType);
- }
-
/**
* This clears both the bean and query cache for a given type.
*/
diff --git a/ebean-api/src/main/java/io/ebean/cache/ServerCacheRegion.java b/ebean-api/src/main/java/io/ebean/cache/ServerCacheRegion.java
index c798b5a35..5cfd3c595 100644
--- a/ebean-api/src/main/java/io/ebean/cache/ServerCacheRegion.java
+++ b/ebean-api/src/main/java/io/ebean/cache/ServerCacheRegion.java
@@ -10,14 +10,6 @@ public interface ServerCacheRegion {
*/
String name();
- /**
- * Deprecated migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
-
/**
* Return true if the cache region is enabled.
*/
diff --git a/ebean-api/src/main/java/io/ebean/cache/TenantAwareCache.java b/ebean-api/src/main/java/io/ebean/cache/TenantAwareCache.java
new file mode 100644
index 000000000..42e22a950
--- /dev/null
+++ b/ebean-api/src/main/java/io/ebean/cache/TenantAwareCache.java
@@ -0,0 +1,104 @@
+package io.ebean.cache;
+
+import io.ebean.meta.MetricVisitor;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.stream.Collectors;
+
+/**
+ * A ServerCache proxy that is tenant aware.
+ */
+public final class TenantAwareCache implements ServerCache {
+
+ private final ServerCache delegate;
+ private final TenantAwareKey tenantAwareKey;
+
+ /**
+ * Create given the TenantAwareKey and delegate cache to proxy to.
+ *
+ * @param delegate The cache to proxy to
+ * @param tenantAwareKey Provides tenant aware keys to use in the cache
+ */
+ public TenantAwareCache(ServerCache delegate, TenantAwareKey tenantAwareKey) {
+ this.delegate = delegate;
+ this.tenantAwareKey = tenantAwareKey;
+ }
+
+ /**
+ * Return the underlying ServerCache that is being delegated to.
+ */
+ @Override
+ public T unwrap(Class cls) {
+ return (T)delegate;
+ }
+
+ @Override
+ public void visit(MetricVisitor visitor) {
+ delegate.visit(visitor);
+ }
+
+ private Object key(Object key) {
+ return tenantAwareKey.key(key);
+ }
+
+ @Override
+ public Object get(Object id) {
+ return delegate.get(key(id));
+ }
+
+ @Override
+ public void put(Object id, Object value) {
+ delegate.put(key(id), value);
+ }
+
+ @Override
+ public void remove(Object id) {
+ delegate.remove(key(id));
+ }
+
+ @Override
+ public void clear() {
+ delegate.clear();
+ }
+
+ @Override
+ public int size() {
+ return delegate.size();
+ }
+
+ @Override
+ public int hitRatio() {
+ return delegate.hitRatio();
+ }
+
+ @Override
+ public ServerCacheStatistics statistics(boolean reset) {
+ return delegate.statistics(reset);
+ }
+
+ @Override
+ public Map getAll(Set keys) {
+ Map keyMapping = new HashMap<>(keys.size());
+ keys.forEach(k -> keyMapping.put(key(k), k));
+ Map tmp = delegate.getAll(keyMapping.keySet());
+ Map ret = new HashMap<>(keys.size());
+ // unwrap tenant info here
+ tmp.forEach((k,v)-> ret.put(((TenantAwareKey.CacheKey) k).key, v));
+ return ret;
+ }
+
+ @Override
+ public void putAll(Map keyValues) {
+ Map tmp = new HashMap<>();
+ keyValues.forEach((k, v) -> tmp.put(key(k), v));
+ delegate.putAll(tmp);
+ }
+
+ @Override
+ public void removeAll(Set keys) {
+ delegate.removeAll(keys.stream().map(this::key).collect(Collectors.toSet()));
+ }
+
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/QueryPlanCapture.java b/ebean-api/src/main/java/io/ebean/config/QueryPlanCapture.java
index 13f0a1ed2..09cd6fa73 100644
--- a/ebean-api/src/main/java/io/ebean/config/QueryPlanCapture.java
+++ b/ebean-api/src/main/java/io/ebean/config/QueryPlanCapture.java
@@ -25,14 +25,6 @@ public class QueryPlanCapture {
return database;
}
- /**
- * Deprecated migrate to database().
- */
- @Deprecated
- public Database getDatabase() {
- return database;
- }
-
/**
* Return the captured query plans.
*/
@@ -40,11 +32,4 @@ public class QueryPlanCapture {
return plans;
}
- /**
- * Deprecated migrate to plans().
- */
- @Deprecated
- public List getPlans() {
- return plans;
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatformProvider.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatformProvider.java
new file mode 100644
index 000000000..ebf0aba2a
--- /dev/null
+++ b/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatformProvider.java
@@ -0,0 +1,46 @@
+package io.ebean.config.dbplatform;
+
+import io.ebean.annotation.Platform;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * Provides DatabasePlatform matching by name, JDBC product name and specific platform enum.
+ *
+ * DatabasePlatformProvider implementations are service loaded and custom implementations
+ * can be added and used via the service loading mechanism.
+ */
+public interface DatabasePlatformProvider {
+
+ /**
+ * Match on the lower case platform name.
+ */
+ boolean match(String name);
+
+ /**
+ * Create the platform based on the lower case platform name.
+ */
+ DatabasePlatform create(String name);
+
+ /**
+ * Match on the lower case JDBC metadata product name.
+ */
+ boolean matchByProductName(String productName);
+
+ /**
+ * Create the platform based on the lower case JDBC metadata product name.
+ */
+ DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection);
+
+ /**
+ * Match on the specific platform.
+ */
+ boolean matchPlatform(Platform platform);
+
+ /**
+ * Create the specific platform.
+ */
+ DatabasePlatform create(Platform platform);
+
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/clickhouse/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/clickhouse/package-info.java
deleted file mode 100644
index e262c22d2..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/clickhouse/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Clickhouse DB specific support.
- */
-package io.ebean.config.dbplatform.clickhouse;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/cockroach/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/cockroach/package-info.java
deleted file mode 100644
index 3b3145b6f..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/cockroach/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Cockroach DB specific support.
- */
-package io.ebean.config.dbplatform.cockroach;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/package-info.java
deleted file mode 100644
index 5760f5232..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * DB2 specific support.
- */
-package io.ebean.config.dbplatform.db2;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/package-info.java
deleted file mode 100644
index e303b7760..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * H2 specific support.
- */
-package io.ebean.config.dbplatform.h2;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/package-info.java
deleted file mode 100644
index 55fc12c5e..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * SAP HANA specific support.
- */
-package io.ebean.config.dbplatform.hana;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/hsqldb/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/hsqldb/package-info.java
deleted file mode 100644
index 6a5ddf752..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/hsqldb/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Hsqldb specific support.
- */
-package io.ebean.config.dbplatform.hsqldb;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/package-info.java
deleted file mode 100644
index 4030ba6d5..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * MySql specific support.
- */
-package io.ebean.config.dbplatform.mysql;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/package-info.java
deleted file mode 100644
index f33720ccd..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * NuoDB specific support.
- */
-package io.ebean.config.dbplatform.nuodb;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/package-info.java
deleted file mode 100644
index 5889cf2aa..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Oracle specific support.
- */
-package io.ebean.config.dbplatform.oracle;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/package-info.java
deleted file mode 100644
index e94d3814c..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Postgres specific support.
- */
-package io.ebean.config.dbplatform.postgres;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/package-info.java
deleted file mode 100644
index 344570001..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * SqlAnywhere specific support.
- */
-package io.ebean.config.dbplatform.sqlanywhere;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/package-info.java
deleted file mode 100644
index bc583818a..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * Sqlite specific support.
- */
-package io.ebean.config.dbplatform.sqlite;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/package-info.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/package-info.java
deleted file mode 100644
index 41ffef0cf..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/package-info.java
+++ /dev/null
@@ -1,4 +0,0 @@
-/**
- * SqlServer specific support.
- */
-package io.ebean.config.dbplatform.sqlserver;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/yugabyte/YugabytePlaform.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/yugabyte/YugabytePlaform.java
deleted file mode 100644
index 622f8e5f8..000000000
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/yugabyte/YugabytePlaform.java
+++ /dev/null
@@ -1,12 +0,0 @@
-package io.ebean.config.dbplatform.yugabyte;
-
-import io.ebean.annotation.Platform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-
-public class YugabytePlaform extends PostgresPlatform {
-
- public YugabytePlaform() {
- super();
- this.platform = Platform.YUGABYTE;
- }
-}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
index cdaa2d7fa..da6a5dacc 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
@@ -10,11 +10,4 @@ public interface MetaCountMetric extends MetaMetric {
*/
long count();
- /**
- * Migrate to count()
- */
- @Deprecated
- default long getCount() {
- return count();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
index 671dc05c1..14a6566bb 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
@@ -10,11 +10,4 @@ public interface MetaMetric {
*/
String name();
- /**
- * Migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
index 1c9b5fe12..6d8cd8a07 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
@@ -10,40 +10,16 @@ public interface MetaQueryMetric extends MetaTimedMetric {
*/
Class> type();
- /**
- * Migrate to type().
- */
- @Deprecated
- default Class> getType() {
- return type();
- }
-
/**
* The label for the query (can be null).
*/
String label();
- /**
- * Migrate to label().
- */
- @Deprecated
- default String getLabel() {
- return label();
- }
-
/**
* The actual SQL of the query.
*/
String sql();
- /**
- * Migrate to sql().
- */
- @Deprecated
- default String getSql() {
- return sql();
- }
-
/**
* Return the hash of the plan.
*/
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
index f95f3248d..4d5d91ec6 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
@@ -11,67 +11,26 @@ public interface MetaTimedMetric extends MetaMetric {
*/
String location();
- /**
- * Migrate to location()
- */
- @Deprecated
- default String getLocation() {
- return location();
- }
-
/**
* Return the total count.
*/
long count();
- /**
- * Migrate to count()
- */
- @Deprecated
- default long getCount() {
- return count();
- }
-
/**
* Return the total execution time in micros.
*/
long total();
- /**
- * Migrate to total()
- */
- @Deprecated
- default long getTotal() {
- return total();
- }
-
/**
* Return the max execution time in micros.
*/
long max();
- /**
- * Migrate to max()
- */
- @Deprecated
- default long getMax() {
- return max();
- }
-
/**
* Return the mean execution time in micros.
*/
long mean();
-
- /**
- * Migrate to mean()
- */
- @Deprecated
- default long getMean() {
- return mean();
- }
-
/**
* Return true if this is the first metrics collection for this query.
*
diff --git a/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java b/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
index b8a50d85d..f9ca58c33 100644
--- a/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
+++ b/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
@@ -12,37 +12,14 @@ public interface ServerMetrics {
*/
List timedMetrics();
- /**
- * Migrate to timedMetrics().
- */
- @Deprecated
- default List getTimedMetrics() {
- return timedMetrics();
- }
-
/**
* Return the query metrics.
*/
List queryMetrics();
- /**
- * Migrate to queryMetrics().
- */
- @Deprecated
- default List getQueryMetrics() {
- return queryMetrics();
- }
-
/**
* Return the Counter metrics.
*/
List countMetrics();
- /**
- * Migrate to countMetrics().
- */
- @Deprecated
- default List getCountMetrics() {
- return countMetrics();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java b/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
index 7e42302c8..b2d43f470 100644
--- a/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
+++ b/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
@@ -19,6 +19,7 @@ public interface ServerMetricsAsJson {
/**
* Set the sort property - see SortMetric
+ *
* @see SortMetric
*/
ServerMetricsAsJson withSort(Comparator sortBy);
@@ -35,9 +36,9 @@ public interface ServerMetricsAsJson {
*/
ServerMetricsAsJson withHeader(boolean withHeader);
- /**
- * Collect and write metrics as JSON to the given buffer.
- */
+ /**
+ * Collect and write metrics as JSON to the given buffer.
+ */
void write(Appendable buffer);
/**
diff --git a/ebean-api/src/main/java/io/ebean/meta/SortMetric.java b/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
index 30104f1ff..5a20ee7c9 100644
--- a/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
@@ -5,7 +5,7 @@ import java.util.Comparator;
/**
* Comparator for timed metrics sorted by name and then count.
*/
-public class SortMetric {
+public final class SortMetric {
public static final Comparator COUNT_NAME = new CountName();
diff --git a/ebean-api/src/main/java/io/ebean/metric/MetricServiceProvider.java b/ebean-api/src/main/java/io/ebean/metric/MetricServiceProvider.java
index 89603ee56..25ab9716e 100644
--- a/ebean-api/src/main/java/io/ebean/metric/MetricServiceProvider.java
+++ b/ebean-api/src/main/java/io/ebean/metric/MetricServiceProvider.java
@@ -6,7 +6,7 @@ import java.util.ServiceLoader;
/**
* Lookup MetricFactory service.
*/
-class MetricServiceProvider {
+final class MetricServiceProvider {
private static final MetricFactory metricFactory = init();
diff --git a/ebean-api/src/main/java/io/ebean/metric/QueryPlanMetric.java b/ebean-api/src/main/java/io/ebean/metric/QueryPlanMetric.java
index 07a9ca6d2..24999ce0e 100644
--- a/ebean-api/src/main/java/io/ebean/metric/QueryPlanMetric.java
+++ b/ebean-api/src/main/java/io/ebean/metric/QueryPlanMetric.java
@@ -12,14 +12,6 @@ public interface QueryPlanMetric {
*/
TimedMetric metric();
- /**
- * Deprecated migrate to metric().
- */
- @Deprecated
- default TimedMetric getMetric() {
- return metric();
- }
-
/**
* Visit the underlying metric.
*/
diff --git a/ebean-api/src/main/java/io/ebean/plugin/BeanDocType.java b/ebean-api/src/main/java/io/ebean/plugin/BeanDocType.java
index 77a8f72d9..55e7c146b 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/BeanDocType.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/BeanDocType.java
@@ -16,28 +16,12 @@ public interface BeanDocType {
/**
* Return the doc store index type for this bean type.
*/
- default String indexType() {
- return getIndexType();
- }
-
- /**
- * Deprecated migrate to indexType().
- */
- @Deprecated
- String getIndexType();
+ String indexType();
/**
* Return the doc store index name for this bean type.
*/
- default String indexName() {
- return getIndexName();
- }
-
- /**
- * Deprecated migrate to indexName().
- */
- @Deprecated
- String getIndexName();
+ String indexName();
/**
* Apply the appropriate fetch path to the query such that the query returns beans matching
@@ -48,29 +32,13 @@ public interface BeanDocType {
/**
* Return the FetchPath for the embedded document.
*/
- default FetchPath embedded(String path) {
- return getEmbedded(path);
- }
-
- /**
- * Deprecated migrate to embedded().
- */
- @Deprecated
- FetchPath getEmbedded(String path);
+ FetchPath embedded(String path);
/**
* For embedded 'many' properties we need a FetchPath relative to the root which is used to
* build and replace the embedded list.
*/
- default FetchPath embeddedManyRoot(String path) {
- return getEmbeddedManyRoot(path);
- }
-
- /**
- * Deprecated migrate to embeddedManyRoot().
- */
- @Deprecated
- FetchPath getEmbeddedManyRoot(String path);
+ FetchPath embeddedManyRoot(String path);
/**
* Return a 'raw' property mapped for the given property.
diff --git a/ebean-api/src/main/java/io/ebean/plugin/BeanType.java b/ebean-api/src/main/java/io/ebean/plugin/BeanType.java
index e7f324a56..762f077f4 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/BeanType.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/BeanType.java
@@ -22,53 +22,21 @@ public interface BeanType {
*/
String name();
- /**
- * Deprecated migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
-
/**
* Return the full name of the bean type.
*/
String fullName();
- /**
- * Deprecated migrate to fullName().
- */
- @Deprecated
- default String getFullName() {
- return fullName();
- }
-
/**
* Return the class type this BeanDescriptor describes.
*/
Class type();
- /**
- * Deprecated migrate to type().
- */
- @Deprecated
- default Class getBeanType() {
- return type();
- }
-
/**
* Return the type bean for an OneToMany or ManyToOne or ManyToMany property.
*/
BeanType> beanTypeAtPath(String propertyName);
- /**
- * Deprecated migrate to beanTypeAtPath().
- */
- @Deprecated
- default BeanType> getBeanTypeAtPath(String propertyName) {
- return beanTypeAtPath(propertyName);
- }
-
/**
* Return all the properties for this bean type.
*/
@@ -79,53 +47,21 @@ public interface BeanType {
*/
Property idProperty();
- /**
- * Deprecated migrate to idProperty().
- */
- @Deprecated
- default Property getIdProperty() {
- return idProperty();
- }
-
/**
* Return the when modified property if there is one defined.
*/
Property whenModifiedProperty();
- /**
- * Deprecated migrate to idProperty().
- */
- @Deprecated
- default Property getWhenModifiedProperty() {
- return whenModifiedProperty();
- }
-
/**
* Return the when created property if there is one defined.
*/
Property whenCreatedProperty();
- /**
- * Deprecated migrate to idProperty().
- */
- @Deprecated
- default Property getWhenCreatedProperty() {
- return whenCreatedProperty();
- }
-
/**
* Return the Property to read values from a bean.
*/
Property property(String propertyName);
- /**
- * Deprecated migrate to property().
- */
- @Deprecated
- default Property getProperty(String propertyName) {
- return property(propertyName);
- }
-
/**
* Return the ExpressionPath for a given property path.
*
@@ -134,14 +70,6 @@ public interface BeanType {
*/
ExpressionPath expressionPath(String path);
- /**
- * Deprecated migrate to expressionPath().
- */
- @Deprecated
- default ExpressionPath getExpressionPath(String path) {
- return expressionPath(path);
- }
-
/**
* Return true if the property is a valid known property or path for the given bean type.
*/
@@ -177,14 +105,6 @@ public interface BeanType {
*/
String baseTable();
- /**
- * Deprecated migrate to baseTable().
- */
- @Deprecated
- default String getBaseTable() {
- return baseTable();
- }
-
/**
* Create a new instance of the bean.
*/
@@ -195,98 +115,36 @@ public interface BeanType {
*/
Object id(Object bean);
- /**
- * Deprecated migrate to id()
- */
- @Deprecated
- default Object beanId(Object bean) {
- return id(bean);
- }
-
- /**
- * Deprecated migrate to id()
- */
- @Deprecated
- Object getBeanId(T bean);
-
/**
* Set the id value to the bean.
*/
void setId(T bean, Object idValue);
- /**
- * Deprecated migrate to setId()
- */
- @Deprecated
- default void setBeanId(T bean, Object idValue) {
- setId(bean, idValue);
- }
-
/**
* Return the bean persist controller.
*/
BeanPersistController persistController();
- /**
- * Deprecated migrate to persistController()
- */
- @Deprecated
- default BeanPersistController getPersistController() {
- return persistController();
- }
-
/**
* Return the bean persist listener.
*/
BeanPersistListener persistListener();
- /**
- * Deprecated migrate to persistListener()
- */
- @Deprecated
- default BeanPersistListener getPersistListener() {
- return persistListener();
- }
-
/**
* Return the beanFinder. Usually null unless overriding the finder.
*/
BeanFindController findController();
- /**
- * Deprecated migrate to findController()
- */
- @Deprecated
- default BeanFindController getFindController() {
- return findController();
- }
-
/**
* Return the BeanQueryAdapter or null if none is defined.
*/
BeanQueryAdapter queryAdapter();
- /**
- * Deprecated migrate to queryAdapter()
- */
- @Deprecated
- default BeanQueryAdapter getQueryAdapter() {
- return queryAdapter();
- }
-
/**
* Return the identity generation type.
*/
IdType idType();
- /**
- * Deprecated migrate to idType()
- */
- @Deprecated
- default IdType getIdType() {
- return idType();
- }
-
/**
* Return true if this bean type has doc store backing.
*/
@@ -301,27 +159,11 @@ public interface BeanType {
*/
DocMapping docMapping();
- /**
- * Deprecated migrate to docMapping()
- */
- @Deprecated
- default DocMapping getDocMapping() {
- return docMapping();
- }
-
/**
* Return the doc store queueId for this bean type.
*/
String docStoreQueueId();
- /**
- * Deprecated migrate to docStoreQueueId()
- */
- @Deprecated
- default String getDocStoreQueueId() {
- return docStoreQueueId();
- }
-
/**
* Return the doc store support for this bean type.\
*/
@@ -353,27 +195,11 @@ public interface BeanType {
*/
List> inheritanceChildren();
- /**
- * Deprecated migrate to inheritanceChildren()
- */
- @Deprecated
- default List> getInheritanceChildren() {
- return inheritanceChildren();
- }
-
/**
* Returns the parent in inheritance hierarchy
*/
BeanType> inheritanceParent();
- /**
- * Deprecated migrate to inheritanceParent()
- */
- @Deprecated
- default BeanType> getInheritanceParent() {
- return inheritanceParent();
- }
-
/**
* Visit all children recursively
*/
@@ -384,14 +210,6 @@ public interface BeanType {
*/
String discColumn();
- /**
- * Deprecated migrate to discColumn()
- */
- @Deprecated
- default String getDiscColumn() {
- return discColumn();
- }
-
/**
* Create a bean given the discriminator value.
*/
diff --git a/ebean-api/src/main/java/io/ebean/plugin/ExpressionPath.java b/ebean-api/src/main/java/io/ebean/plugin/ExpressionPath.java
index b7675f87b..29a5abdab 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/ExpressionPath.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/ExpressionPath.java
@@ -39,14 +39,6 @@ public interface ExpressionPath {
*/
StringParser stringParser();
- /**
- * Deprecated migrate to stringParser().
- */
- @Deprecated
- default StringParser getStringParser() {
- return stringParser();
- }
-
/**
* For DateTime capable scalar types convert the long systemTimeMillis into
* an appropriate java time (Date,Timestamp,Time,Calendar, JODA type etc).
@@ -64,14 +56,6 @@ public interface ExpressionPath {
*/
int jdbcType();
- /**
- * Deprecated migrate to jdbcType().
- */
- @Deprecated
- default int getJdbcType() {
- return jdbcType();
- }
-
/**
* Return true if this is an ManyToOne or OneToOne associated bean property.
*/
@@ -85,50 +69,19 @@ public interface ExpressionPath {
*/
String assocIdExpression(String propName, String bindOperator);
- /**
- * Deprecated migrate to assocIdExpression().
- */
- @Deprecated
- default String getAssocIdExpression(String propName, String bindOperator) {
- return assocIdExpression(propName, bindOperator);
- }
-
/**
* Return the Id values for the given bean value.
*/
Object[] assocIdValues(EntityBean bean);
- /**
- * Deprecated migrate to assocIdValues().
- */
- @Deprecated
- default Object[] getAssocIdValues(EntityBean bean) {
- return assocIdValues(bean);
- }
-
/**
* Return the underlying bean property.
*/
Property property();
- /**
- * Deprecated migrate to property().
- */
- @Deprecated
- default Property getProperty() {
- return property();
- }
-
/**
* The ElPrefix plus name.
*/
String elName();
- /**
- * Deprecated migrate to elName().
- */
- @Deprecated
- default String getElName() {
- return elName();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/plugin/Property.java b/ebean-api/src/main/java/io/ebean/plugin/Property.java
index d37fa2959..81a1fc115 100644
--- a/ebean-api/src/main/java/io/ebean/plugin/Property.java
+++ b/ebean-api/src/main/java/io/ebean/plugin/Property.java
@@ -10,40 +10,16 @@ public interface Property {
*/
String name();
- /**
- * Deprecated migrate to name().
- */
- @Deprecated
- default String getName() {
- return name();
- }
-
/**
* Return the type of the property.
*/
Class> type();
- /**
- * Deprecated migrate to type().
- */
- @Deprecated
- default Class> getPropertyType() {
- return type();
- }
-
/**
* Return the value of the property on the given bean.
*/
Object value(Object bean);
- /**
- * Deprecated migrate to value().
- */
- @Deprecated
- default Object getVal(Object bean) {
- return value(bean);
- }
-
/**
* Return true if this is a OneToMany or ManyToMany property.
*/
diff --git a/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java b/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
index 629c06eaa..8fde33c47 100644
--- a/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
+++ b/ebean-api/src/main/java/io/ebean/text/json/JsonBeanReader.java
@@ -13,14 +13,17 @@ import io.ebean.bean.PersistenceContext;
public interface JsonBeanReader {
/**
- * Read the JSON returning a bean.
+ * Read the JSON into given bean. Will update existing properties.
*/
T read(T target);
+ /**
+ * Read the JSON returning a bean.
+ */
default T read() {
return read(null);
}
-
+
/**
* Create a new reader taking the context from the existing one but using a new JsonParser.
*/
diff --git a/ebean-api/src/main/java/io/ebean/text/json/JsonContext.java b/ebean-api/src/main/java/io/ebean/text/json/JsonContext.java
index b73828a99..e05881609 100644
--- a/ebean-api/src/main/java/io/ebean/text/json/JsonContext.java
+++ b/ebean-api/src/main/java/io/ebean/text/json/JsonContext.java
@@ -59,42 +59,73 @@ public interface JsonContext {
T toBean(Class cls, JsonParser parser, JsonReadOptions options) throws JsonIOException;
/**
+<<<<<<< HEAD
* Convert json parser input into a Bean of a specific type.
+=======
+ * Read json parser input into a given Bean.
+ * Note: This is a kind of "update". Only properties in the json will be modified. Embedded Lists and Maps will become new
+ * instances, so the object identity will not be preserved here.
+>>>>>>> upstream/master
*
* @throws JsonIOException When IOException occurs
*/
void toBean(T target, JsonParser parser) throws JsonIOException;
/**
+<<<<<<< HEAD
* Convert json parser input into a Bean of a specific type additionally using JsonReadOptions..
+=======
+ * Read json parser input into a given Bean additionally using JsonReadOptions.
+ * See {@link #toBean(Class, JsonParser)} for details modified.
+>>>>>>> upstream/master
*
* @throws JsonIOException When IOException occurs
*/
void toBean(T target, JsonParser parser, JsonReadOptions options) throws JsonIOException;
/**
+<<<<<<< HEAD
* Convert json reader input into a Bean of a specific type.
+=======
+ * Read json reader input into a given Bean.
+ * See {@link #toBean(Class, JsonParser)} for details
+>>>>>>> upstream/master
*
* @throws JsonIOException When IOException occurs
*/
void toBean(T target, Reader json) throws JsonIOException;
/**
+<<<<<<< HEAD
* Convert json reader input into a Bean of a specific type additionally using JsonReadOptions.
+=======
+ * Read json reader input into a given Bean additionally using JsonReadOptions.
+ * See {@link #toBean(Class, JsonParser)} for details modified.
+>>>>>>> upstream/master
*
* @throws JsonIOException When IOException occurs
*/
void toBean(T target, Reader json, JsonReadOptions options) throws JsonIOException;
/**
+<<<<<<< HEAD
* Convert json string input into a Bean of a specific type.
+=======
+ * Read json string input into a given Bean.
+ * See {@link #toBean(Class, JsonParser)} for details
+>>>>>>> upstream/master
*
* @throws JsonIOException When IOException occurs
*/
void toBean(T target, String json) throws JsonIOException;
/**
+<<<<<<< HEAD
* Convert json string input into a Bean of a specific type additionally using JsonReadOptions.
+=======
+ * Read json string input into a given Bean additionally using JsonReadOptions.
+ * See {@link #toBean(Class, JsonParser)} for details
+>>>>>>> upstream/master
*
* @throws JsonIOException When IOException occurs
*/
@@ -103,9 +134,8 @@ public interface JsonContext {
/**
* Create and return a new bean reading for the bean type given the JSON options and source.
*
- * Note that JsonOption provides an option for setting a persistence context and also enabling
- * further lazy loading. Further lazy loading requires a persistence context so if that is set
- * on then a persistence context is created if there is not one set.
+ * Note that JsonOption provides an option for setting a persistence context and also enabling further lazy loading. Further lazy
+ * loading requires a persistence context so if that is set on then a persistence context is created if there is not one set.
*/
JsonBeanReader createBeanReader(Class cls, JsonParser parser, JsonReadOptions options) throws JsonIOException;
diff --git a/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java b/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java
index 709019158..580a00b9e 100644
--- a/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java
+++ b/ebean-api/src/main/java/io/ebean/util/AnnotationUtil.java
@@ -10,7 +10,7 @@ import java.util.Set;
/**
* Annotation utility methods to find annotations.
*/
-public class AnnotationUtil {
+public final class AnnotationUtil {
/**
* Determine if the supplied {@link Annotation} is defined in the core JDK {@code java.lang.annotation} package.
diff --git a/ebean-api/src/main/java/io/ebean/util/CamelCaseHelper.java b/ebean-api/src/main/java/io/ebean/util/CamelCaseHelper.java
index c58c78200..f32cddf8b 100644
--- a/ebean-api/src/main/java/io/ebean/util/CamelCaseHelper.java
+++ b/ebean-api/src/main/java/io/ebean/util/CamelCaseHelper.java
@@ -1,6 +1,6 @@
package io.ebean.util;
-public class CamelCaseHelper {
+public final class CamelCaseHelper {
/**
* To underscore from camel case using digits compressed true and force upper case false.
diff --git a/ebean-api/src/main/java/io/ebean/util/IOUtils.java b/ebean-api/src/main/java/io/ebean/util/IOUtils.java
index e4f437e10..2dd54e73a 100644
--- a/ebean-api/src/main/java/io/ebean/util/IOUtils.java
+++ b/ebean-api/src/main/java/io/ebean/util/IOUtils.java
@@ -16,7 +16,7 @@ import java.nio.charset.StandardCharsets;
* Utilities for IO. It uses UTF-8 as encoding when reading/writing and uses
* buffered IO for better performance.
*/
-public class IOUtils {
+public final class IOUtils {
/**
* Read from stream as UTF-8.
diff --git a/ebean-api/src/main/java/io/ebean/util/JdbcClose.java b/ebean-api/src/main/java/io/ebean/util/JdbcClose.java
index e78be2376..a1d04536e 100644
--- a/ebean-api/src/main/java/io/ebean/util/JdbcClose.java
+++ b/ebean-api/src/main/java/io/ebean/util/JdbcClose.java
@@ -11,7 +11,7 @@ import java.sql.Statement;
/**
* Utility for closing raw Jdbc resources.
*/
-public class JdbcClose {
+public final class JdbcClose {
private static final Logger log = LoggerFactory.getLogger("io.ebean");
diff --git a/ebean-api/src/main/java/io/ebean/util/SplitName.java b/ebean-api/src/main/java/io/ebean/util/SplitName.java
index 3e1e9951e..3a6cd4f2f 100644
--- a/ebean-api/src/main/java/io/ebean/util/SplitName.java
+++ b/ebean-api/src/main/java/io/ebean/util/SplitName.java
@@ -3,7 +3,7 @@ package io.ebean.util;
/**
* Helper for dot notation property paths.
*/
-public class SplitName {
+public final class SplitName {
private static final char PERIOD = '.';
diff --git a/ebean-api/src/main/java/io/ebean/util/StringHelper.java b/ebean-api/src/main/java/io/ebean/util/StringHelper.java
index b35deb36e..4268288f6 100644
--- a/ebean-api/src/main/java/io/ebean/util/StringHelper.java
+++ b/ebean-api/src/main/java/io/ebean/util/StringHelper.java
@@ -7,7 +7,7 @@ import java.util.regex.Pattern;
/**
* Utility String class that supports String manipulation functions.
*/
-public class StringHelper {
+public final class StringHelper {
private static final Pattern SPLIT_NAMES = Pattern.compile("[\\s,;]+");
diff --git a/ebean-api/src/main/java9/module-info.java b/ebean-api/src/main/java/module-info.java
similarity index 63%
rename from ebean-api/src/main/java9/module-info.java
rename to ebean-api/src/main/java/module-info.java
index 75ff243e2..c12fe2541 100644
--- a/ebean-api/src/main/java9/module-info.java
+++ b/ebean-api/src/main/java/module-info.java
@@ -1,6 +1,7 @@
module io.ebean.api {
uses io.ebean.config.AutoConfigure;
+ uses io.ebean.config.dbplatform.DatabasePlatformProvider;
uses io.ebean.datasource.DataSourceAlertFactory;
uses io.ebean.metric.MetricFactory;
uses io.ebean.service.SpiContainerFactory;
@@ -19,7 +20,6 @@ module io.ebean.api {
requires static io.ebean.types;
requires static com.fasterxml.jackson.core;
requires static javax.servlet.api;
- requires static com.h2database;
exports io.ebean;
exports io.ebean.bean;
@@ -27,21 +27,6 @@ module io.ebean.api {
exports io.ebean.meta;
exports io.ebean.config;
exports io.ebean.config.dbplatform;
- exports io.ebean.config.dbplatform.clickhouse;
- exports io.ebean.config.dbplatform.h2;
- exports io.ebean.config.dbplatform.db2;
- exports io.ebean.config.dbplatform.cockroach;
- exports io.ebean.config.dbplatform.hana;
- exports io.ebean.config.dbplatform.hsqldb;
- exports io.ebean.config.dbplatform.mariadb;
- exports io.ebean.config.dbplatform.mysql;
- exports io.ebean.config.dbplatform.nuodb;
- exports io.ebean.config.dbplatform.oracle;
- exports io.ebean.config.dbplatform.postgres;
- exports io.ebean.config.dbplatform.sqlanywhere;
- exports io.ebean.config.dbplatform.sqlite;
- exports io.ebean.config.dbplatform.sqlserver;
- exports io.ebean.config.dbplatform.yugabyte;
exports io.ebean.event;
exports io.ebean.event.readaudit;
exports io.ebean.event.changelog;
@@ -55,5 +40,5 @@ module io.ebean.api {
exports io.ebean.text.json;
exports io.ebean.text.csv;
exports io.ebean.util;
-
+ exports io.ebean.annotation.ext;
}
diff --git a/ebean-api/src/test/java/io/ebean/cache/TenantAwareCacheTest.java b/ebean-api/src/test/java/io/ebean/cache/TenantAwareCacheTest.java
new file mode 100644
index 000000000..4bffa2d00
--- /dev/null
+++ b/ebean-api/src/test/java/io/ebean/cache/TenantAwareCacheTest.java
@@ -0,0 +1,113 @@
+package io.ebean.cache;
+
+import io.ebean.cache.TenantAwareKey.CacheKey;
+import io.ebean.config.CurrentTenantProvider;
+import org.junit.jupiter.api.Test;
+
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class TenantAwareCacheTest {
+
+ ServerCache serverCache;
+ TenantAwareCache cache;
+
+ TenantAwareCacheTest() {
+ TenantAwareKey key = new TenantAwareKey(new TenantProv());
+ this.serverCache = new Cache();
+ this.cache = new TenantAwareCache(serverCache, key);
+ }
+
+ @Test
+ void put_get_remove() {
+ cache.put("A", "a");
+ Object val = cache.get("A");
+ assertThat(val).isEqualTo("a");
+
+ CacheKey cacheKey = new CacheKey("A", 42);
+ Object val2 = serverCache.get(cacheKey);
+ assertThat(val2).isEqualTo("a");
+
+ cache.put("B", "bb");
+ assertThat(cache.size()).isEqualTo(2);
+ cache.remove("A");
+ assertThat(cache.get("A")).isNull();
+ assertThat(cache.size()).isEqualTo(1);
+
+ cache.clear();
+ assertThat(cache.size()).isEqualTo(0);
+ assertThat(cache.get("B")).isNull();
+ }
+
+ @Test
+ void putAll_getAll_removeAll() {
+ Map map = new HashMap<>();
+ map.put("A", "a");
+ map.put("B", "b");
+ map.put("C", "c");
+
+ cache.putAll(map);
+ assertThat(cache.size()).isEqualTo(3);
+ assertThat(cache.get("A")).isEqualTo("a");
+ assertThat(serverCache.get(new CacheKey("A", 42))).isEqualTo("a");
+
+
+ Map result = cache.getAll(Set.of("A", "B", "C", "D"));
+ assertThat(result).hasSize(3);
+ assertThat(result).containsOnlyKeys("A", "B", "C");
+ assertThat(result.values()).containsOnly("a", "b", "c");
+
+ cache.removeAll(Set.of("A", "C", "D"));
+ assertThat(cache.size()).isEqualTo(1);
+
+ assertThat(cache.get("B")).isEqualTo("b");
+ assertThat(serverCache.get(new CacheKey("B", 42))).isEqualTo("b");
+
+ cache.remove("B");
+ assertThat(cache.size()).isEqualTo(0);
+ }
+
+
+ static class TenantProv implements CurrentTenantProvider {
+
+ @Override
+ public Object currentId() {
+ return 42;
+ }
+ }
+
+ static class Cache implements ServerCache {
+
+ Map map = new ConcurrentHashMap<>();
+
+ @Override
+ public Object get(Object id) {
+ return map.get(id);
+ }
+
+ @Override
+ public void put(Object id, Object value) {
+ map.put(id, value);
+ }
+
+ @Override
+ public void remove(Object id) {
+ map.remove(id);
+ }
+
+ @Override
+ public void clear() {
+ map.clear();
+ }
+
+ @Override
+ public int size() {
+ return map.size();
+ }
+
+ }
+}
diff --git a/ebean-api/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java b/ebean-api/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java
deleted file mode 100644
index b7b6d524f..000000000
--- a/ebean-api/src/test/java/io/ebean/config/dbplatform/PostgresPlatformTest.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package io.ebean.config.dbplatform;
-
-import io.ebean.Query;
-import io.ebean.config.PlatformConfig;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import org.junit.jupiter.api.Test;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class PostgresPlatformTest {
-
- @Test
- public void testUuidType() {
-
- PostgresPlatform platform = new PostgresPlatform();
- platform.configure(new PlatformConfig(), false);
-
- DbPlatformType dbType = platform.getDbTypeMap().get(DbPlatformType.UUID);
- String columnDefn = dbType.renderType(0, 0);
-
- assertThat(columnDefn).isEqualTo("uuid");
- }
-
- @Test
- public void default_forUpdate_expect_noKeyUsed() {
-
- DatabasePlatform platform = new PostgresPlatform();
-
- PlatformConfig config = new PlatformConfig();
- platform.configure(config);
-
- assertThat(config.isForUpdateNoKey()).isFalse();
- assertThat(platform.withForUpdate("X", Query.LockWait.SKIPLOCKED, Query.LockType.DEFAULT)).isEqualTo("X for update skip locked");
- assertThat(platform.withForUpdate("X", Query.LockWait.NOWAIT, Query.LockType.DEFAULT)).isEqualTo("X for update nowait");
- assertThat(platform.withForUpdate("X", Query.LockWait.WAIT, Query.LockType.DEFAULT)).isEqualTo("X for update");
-
- assertThat(platform.withForUpdate("X", Query.LockWait.SKIPLOCKED, Query.LockType.UPDATE)).isEqualTo("X for update skip locked");
- assertThat(platform.withForUpdate("X", Query.LockWait.SKIPLOCKED, Query.LockType.NO_KEY_UPDATE)).isEqualTo("X for no key update skip locked");
- assertThat(platform.withForUpdate("X", Query.LockWait.SKIPLOCKED, Query.LockType.SHARE)).isEqualTo("X for share skip locked");
- assertThat(platform.withForUpdate("X", Query.LockWait.SKIPLOCKED, Query.LockType.KEY_SHARE)).isEqualTo("X for key share skip locked");
-
- assertThat(platform.withForUpdate("X", Query.LockWait.NOWAIT, Query.LockType.UPDATE)).isEqualTo("X for update nowait");
- assertThat(platform.withForUpdate("X", Query.LockWait.NOWAIT, Query.LockType.NO_KEY_UPDATE)).isEqualTo("X for no key update nowait");
- assertThat(platform.withForUpdate("X", Query.LockWait.NOWAIT, Query.LockType.SHARE)).isEqualTo("X for share nowait");
- assertThat(platform.withForUpdate("X", Query.LockWait.NOWAIT, Query.LockType.KEY_SHARE)).isEqualTo("X for key share nowait");
-
- assertThat(platform.withForUpdate("X", Query.LockWait.WAIT, Query.LockType.UPDATE)).isEqualTo("X for update");
- assertThat(platform.withForUpdate("X", Query.LockWait.WAIT, Query.LockType.NO_KEY_UPDATE)).isEqualTo("X for no key update");
- assertThat(platform.withForUpdate("X", Query.LockWait.WAIT, Query.LockType.SHARE)).isEqualTo("X for share");
- assertThat(platform.withForUpdate("X", Query.LockWait.WAIT, Query.LockType.KEY_SHARE)).isEqualTo("X for key share");
- }
-
- @Test
- public void lockWithKey_forUpdate() {
-
- DatabasePlatform platform = new PostgresPlatform();
-
- PlatformConfig config = new PlatformConfig();
- config.setForUpdateNoKey(true);
- platform.configure(config);
-
- assertThat(config.isForUpdateNoKey()).isTrue();
- assertThat(platform.withForUpdate("X", Query.LockWait.SKIPLOCKED, Query.LockType.DEFAULT)).isEqualTo("X for no key update skip locked");
- assertThat(platform.withForUpdate("X", Query.LockWait.NOWAIT, Query.LockType.DEFAULT)).isEqualTo("X for no key update nowait");
- assertThat(platform.withForUpdate("X", Query.LockWait.WAIT, Query.LockType.DEFAULT)).isEqualTo("X for no key update");
- }
-
-}
diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml
index 36bb35617..29dbe121a 100644
--- a/ebean-autotune/pom.xml
+++ b/ebean-autotune/pom.xml
@@ -52,6 +52,13 @@
test
+
+ io.ebean
+ ebean-platform-h2
+ 13.2.1-SNAPSHOT
+ test
+
+
@@ -63,8 +70,7 @@
true
- io.ebean.tile:enhancement:12.15.0
- io.avaje.tile:moditech-module:1.0
+ io.ebean.tile:enhancement:13.1.0
diff --git a/ebean-autotune/src/main/java9/module-info.java b/ebean-autotune/src/main/java/module-info.java
similarity index 100%
rename from ebean-autotune/src/main/java9/module-info.java
rename to ebean-autotune/src/main/java/module-info.java
diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml
index 936959daa..f5c522577 100644
--- a/ebean-core-type/pom.xml
+++ b/ebean-core-type/pom.xml
@@ -28,19 +28,4 @@
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
diff --git a/ebean-core-type/src/main/java9/module-info.java b/ebean-core-type/src/main/java/module-info.java
similarity index 100%
rename from ebean-core-type/src/main/java9/module-info.java
rename to ebean-core-type/src/main/java/module-info.java
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index a0c289b5e..8ad75d84e 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -135,6 +135,26 @@
+
+ io.ebean
+ ebean-platform-h2
+ 13.2.1-SNAPSHOT
+ test
+
+
+
+ io.ebean
+ ebean-platform-postgres
+ 13.2.1-SNAPSHOT
+ test
+
+
+
+ io.ebean
+ ebean-platform-sqlserver
+ 13.2.1-SNAPSHOT
+ test
+
io.ebean
@@ -222,18 +242,6 @@
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java b/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java
index ec3b6ed05..1c6d43719 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/BindParams.java
@@ -167,7 +167,7 @@ public final class BindParams implements Serializable {
*/
@SuppressWarnings("rawtypes")
public void setParameter(int position, Object value) {
- assert value != null : "use setNullParameter";
+ //TODO: Review - assert value != null : "use setNullParameter";
Param p = getParam(position);
if (value instanceof Collection) {
// use of postgres ANY with positioned parameter
@@ -219,7 +219,7 @@ public final class BindParams implements Serializable {
* Set a named In parameter that is not null.
*/
public Param setParameter(String name, Object value) {
- assert value != null : "use setNullParameter";
+ // TODO: Review - assert value != null : "use setNullParameter";
Param p = getParam(name);
p.setInValue(value);
return p;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/CacheChangeSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/CacheChangeSet.java
index 298b856df..31fa0e19b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/CacheChangeSet.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/CacheChangeSet.java
@@ -2,14 +2,7 @@ package io.ebeaninternal.server.cache;
import io.ebeaninternal.server.deploy.BeanDescriptor;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.HashMap;
-import java.util.HashSet;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
+import java.util.*;
/**
* List of changes to be applied to L2 cache.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
index 6d632acc3..ad3faa749 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultCacheHolder.java
@@ -3,12 +3,7 @@ package io.ebeaninternal.server.cache;
import io.ebean.annotation.Cache;
import io.ebean.annotation.CacheBeanTuning;
import io.ebean.annotation.CacheQueryTuning;
-import io.ebean.cache.QueryCacheEntryValidate;
-import io.ebean.cache.ServerCache;
-import io.ebean.cache.ServerCacheConfig;
-import io.ebean.cache.ServerCacheFactory;
-import io.ebean.cache.ServerCacheOptions;
-import io.ebean.cache.ServerCacheType;
+import io.ebean.cache.*;
import io.ebean.config.CurrentTenantProvider;
import io.ebean.meta.MetricVisitor;
import io.ebean.util.AnnotationUtil;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
index ebd086117..ae3a297b3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java
@@ -3,7 +3,6 @@ package io.ebeaninternal.server.cache;
import io.ebean.BackgroundExecutor;
import io.ebean.cache.ServerCache;
import io.ebean.cache.ServerCacheStatistics;
-import io.ebean.cache.TenantAwareKey;
import io.ebean.meta.MetricVisitor;
import io.ebean.metric.CountMetric;
import io.ebean.metric.MetricFactory;
@@ -12,11 +11,7 @@ import org.slf4j.LoggerFactory;
import java.io.Serializable;
import java.lang.ref.SoftReference;
-import java.util.ArrayList;
-import java.util.Comparator;
-import java.util.Iterator;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
import java.util.concurrent.TimeUnit;
/**
@@ -52,14 +47,12 @@ public class DefaultServerCache implements ServerCache {
private final int trimFrequency;
private final int maxIdleSecs;
private final int maxSecsToLive;
- private final TenantAwareKey tenantAwareKey;
public DefaultServerCache(DefaultServerCacheConfig config) {
this.name = config.getName();
this.shortName = config.getShortName();
this.map = config.getMap();
this.maxSize = config.getMaxSize();
- this.tenantAwareKey = new TenantAwareKey(config.getTenantProvider());
this.maxIdleSecs = config.getMaxIdleSecs();
this.maxSecsToLive = config.getMaxSecsToLive();
this.trimFrequency = config.determineTrimFrequency();
@@ -92,7 +85,7 @@ public class DefaultServerCache implements ServerCache {
}
@Override
- public ServerCacheStatistics getStatistics(boolean reset) {
+ public ServerCacheStatistics statistics(boolean reset) {
ServerCacheStatistics cacheStats = new ServerCacheStatistics();
cacheStats.setCacheName(name);
cacheStats.setMaxSize(maxSize);
@@ -121,7 +114,7 @@ public class DefaultServerCache implements ServerCache {
}
@Override
- public int getHitRatio() {
+ public int hitRatio() {
long mc = missCount.get(false);
long hc = hitCount.get(false);
long totalCount = hc + mc;
@@ -152,19 +145,12 @@ public class DefaultServerCache implements ServerCache {
map.clear();
}
- /**
- * Return the tenant aware key.
- */
- protected Object key(Object id) {
- return tenantAwareKey.key(id);
- }
-
/**
* Return a value from the cache.
*/
@Override
- public Object get(Object id) {
- CacheEntry entry = getCacheEntry(id);
+ public Object get(Object key) {
+ CacheEntry entry = getCacheEntry(key);
if (entry == null) {
missCount.increment();
return null;
@@ -184,8 +170,8 @@ public class DefaultServerCache implements ServerCache {
/**
* Get the cache entry - override for query cache to validate dependent tables.
*/
- protected CacheEntry getCacheEntry(Object id) {
- final SoftReference ref = map.get(key(id));
+ protected CacheEntry getCacheEntry(Object key) {
+ final SoftReference ref = map.get(key);
return ref != null ? ref.get() : null;
}
@@ -198,8 +184,7 @@ public class DefaultServerCache implements ServerCache {
* Put a value into the cache.
*/
@Override
- public void put(Object id, Object value) {
- Object key = key(id);
+ public void put(Object key, Object value) {
map.put(key, new SoftReference<>(new CacheEntry(key, value)));
putCount.increment();
}
@@ -208,8 +193,8 @@ public class DefaultServerCache implements ServerCache {
* Remove an entry from the cache.
*/
@Override
- public void remove(Object id) {
- SoftReference entry = map.remove(key(id));
+ public void remove(Object key) {
+ SoftReference entry = map.remove(key);
if (entry != null && entry.get() != null) {
removeCount.increment();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java
index 2c329a62a..2e5c5dbcd 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java
@@ -3,7 +3,6 @@ package io.ebeaninternal.server.cache;
import io.ebean.cache.QueryCacheEntryValidate;
import io.ebean.cache.ServerCacheConfig;
import io.ebean.cache.ServerCacheOptions;
-import io.ebean.config.CurrentTenantProvider;
import io.ebeaninternal.server.cache.DefaultServerCache.CacheEntry;
import java.lang.ref.SoftReference;
@@ -34,10 +33,6 @@ public final class DefaultServerCacheConfig {
this.maxSize = options.getMaxSize();
}
- public CurrentTenantProvider getTenantProvider() {
- return config.getTenantProvider();
- }
-
public QueryCacheEntryValidate getQueryCacheEntryValidate() {
return config.getQueryCacheEntryValidate();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheFactory.java
index eab615ed1..a847aa8e1 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheFactory.java
@@ -1,11 +1,7 @@
package io.ebeaninternal.server.cache;
import io.ebean.BackgroundExecutor;
-import io.ebean.cache.ServerCache;
-import io.ebean.cache.ServerCacheConfig;
-import io.ebean.cache.ServerCacheFactory;
-import io.ebean.cache.ServerCacheNotification;
-import io.ebean.cache.ServerCacheNotify;
+import io.ebean.cache.*;
/**
@@ -41,7 +37,7 @@ final class DefaultServerCacheFactory implements ServerCacheFactory {
if (executor != null) {
cache.periodicTrim(executor);
}
- return cache;
+ return config.tenantAware(cache);
}
@Override
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
index d3a652437..00f551da8 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheManager.java
@@ -10,11 +10,7 @@ import io.ebeaninternal.server.deploy.DCacheRegion;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
/**
* Manages the bean and query caches.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java
index 4f437eafc..942ffbb82 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java
@@ -27,8 +27,7 @@ public class DefaultServerQueryCache extends DefaultServerCache {
}
@Override
- protected CacheEntry getCacheEntry(Object id) {
- Object key = key(id);
+ protected CacheEntry getCacheEntry(Object key) {
final SoftReference ref = map.get(key);
CacheEntry entry = ref != null ? ref.get() : null;
if (entry == null) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
index 5b49d5292..3f010e3c7 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java
@@ -2,36 +2,18 @@ package io.ebeaninternal.server.core;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.dbplatform.DatabasePlatform;
-import io.ebean.config.dbplatform.clickhouse.ClickHousePlatform;
-import io.ebean.config.dbplatform.cockroach.CockroachPlatform;
-import io.ebean.config.dbplatform.db2.DB2ForIPlatform;
-import io.ebean.config.dbplatform.db2.DB2LegacyPlatform;
-import io.ebean.config.dbplatform.db2.DB2LuwPlatform;
-import io.ebean.config.dbplatform.db2.DB2ZosPlatform;
-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.mariadb.MariaDbPlatform;
-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.Oracle11Platform;
-import io.ebean.config.dbplatform.oracle.Oracle12Platform;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
-import io.ebean.config.dbplatform.postgres.Postgres9Platform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import io.ebean.config.dbplatform.sqlanywhere.SqlAnywherePlatform;
-import io.ebean.config.dbplatform.sqlite.SQLitePlatform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer16Platform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
-import io.ebean.config.dbplatform.yugabyte.YugabytePlaform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
import io.ebeaninternal.api.CoreLog;
import io.ebeaninternal.api.DbOffline;
import javax.persistence.PersistenceException;
import javax.sql.DataSource;
-import java.sql.*;
-import java.util.Locale;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.ServiceLoader;
/**
* Create a DatabasePlatform from the configuration.
@@ -41,6 +23,14 @@ import java.util.Locale;
*/
public class DatabasePlatformFactory {
+ private final List providers = new ArrayList<>();
+
+ public DatabasePlatformFactory() {
+ for (DatabasePlatformProvider platformProvider : ServiceLoader.load(DatabasePlatformProvider.class)) {
+ providers.add(platformProvider);
+ }
+ }
+
/**
* Create the appropriate database specific platform.
*/
@@ -71,68 +61,10 @@ public class DatabasePlatformFactory {
*/
private DatabasePlatform byDatabaseName(String dbName) {
dbName = dbName.toLowerCase();
- if (dbName.equals("h2")) {
- return new H2Platform();
- }
- if (dbName.equals("mariadb")) {
- return new MariaDbPlatform();
- }
- if (dbName.equals("mysql")) {
- return new MySqlPlatform();
- }
- if (dbName.equals("mysql55")) {
- return new MySql55Platform();
- }
- if (dbName.equals("postgres") || dbName.equals("postgres9")) {
- return new PostgresPlatform();
- }
- if (dbName.equals("oracle11") || dbName.equals("oracle10") || dbName.equals("oracle9")) {
- return new Oracle11Platform();
- }
- if (dbName.equals("oracle12")) {
- return new Oracle12Platform();
- }
- if (dbName.equals("oracle")) {
- return new OraclePlatform();
- }
- if (dbName.equals("sqlserver16")) {
- return new SqlServer16Platform();
- }
- if (dbName.equals("sqlserver17")) {
- return new SqlServer17Platform();
- }
- if (dbName.equals("sqlserver")) {
- throw new IllegalArgumentException("Please choose the more specific sqlserver16 or sqlserver17 platform. Refer to issue #1340 for details");
- }
- if (dbName.equals("sqlanywhere")) {
- return new SqlAnywherePlatform();
- }
- if (dbName.equals("db2")) {
- throw new IllegalArgumentException("Please choose the more specific db2luw/db2zos/db2fori platform. Refer to issue #2514 for details");
- }
- if (dbName.equals("db2legacy")) {
- return new DB2LegacyPlatform();
- }
- if (dbName.equals("db2zos")) {
- return new DB2ZosPlatform();
- }
- if (dbName.equals("db2fori")) {
- return new DB2ForIPlatform();
- }
- if (dbName.equals("db2luw")) {
- return new DB2LuwPlatform();
- }
- if (dbName.equals("clickhouse")) {
- return new ClickHousePlatform();
- }
- if (dbName.equals("nuodb")) {
- return new NuoDbPlatform();
- }
- if (dbName.equals("sqlite")) {
- return new SQLitePlatform();
- }
- if (dbName.equals("hana")) {
- return new HanaPlatform();
+ for (DatabasePlatformProvider provider : providers) {
+ if (provider.match(dbName)) {
+ return provider.create(dbName);
+ }
}
throw new RuntimeException("database platform " + dbName + " is not known?");
}
@@ -156,79 +88,15 @@ public class DatabasePlatformFactory {
final int majorVersion = metaData.getDatabaseMajorVersion();
final int minorVersion = metaData.getDatabaseMinorVersion();
CoreLog.log.debug("platform for productName[{}] version[{}.{}]", dbProductName, majorVersion, minorVersion);
-
- if (dbProductName.contains("oracle")) {
- return oracleVersion(majorVersion);
- } else if (dbProductName.contains("microsoft")) {
- throw new IllegalArgumentException("For SqlServer please explicitly choose either sqlserver16 or sqlserver17 as the platform via DatabaseConfig.setDatabasePlatformName. Refer to issue #1340 for more details");
- } else if (dbProductName.contains("h2")) {
- return new H2Platform();
- } else if (dbProductName.contains("hsql database engine")) {
- return new HsqldbPlatform();
- } else if (dbProductName.contains("postgres")) {
- String productVersion = metaData.getDatabaseProductVersion().toLowerCase(Locale.ENGLISH);
- return readPostgres(connection, majorVersion, productVersion);
- } else if (dbProductName.contains("mariadb")) {
- return new MariaDbPlatform();
- } else if (dbProductName.contains("mysql")) {
- return mysqlVersion(majorVersion, minorVersion);
- } else if (dbProductName.contains("nuo")) {
- return new NuoDbPlatform();
- } else if (dbProductName.contains("sqlite")) {
- return new SQLitePlatform();
- } else if (dbProductName.contains("db2")) {
- throw new IllegalArgumentException("For DB2 please explicitly choose either db2legacy/db2luw/db2zos/db2fori platform. Refer to issue #2514 for details");
- } else if (dbProductName.contains("sql anywhere")) {
- return new SqlAnywherePlatform();
- } else if (dbProductName.contains("hdb")) {
- return new HanaPlatform();
- } else if (dbProductName.contains("clickhouse")) {
- return new ClickHousePlatform();
- }
-
- // use the standard one
- return new DatabasePlatform();
- }
-
- private DatabasePlatform oracleVersion(int majorVersion) {
- if (majorVersion < 12) {
- return new Oracle11Platform();
- }
- if (majorVersion < 13) {
- return new Oracle12Platform();
- }
- return new OraclePlatform();
- }
-
- 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.
- */
- private static DatabasePlatform readPostgres(Connection connection, int majorVersion, String productVersion) {
- if (productVersion.contains("-yb-")) {
- return new YugabytePlaform();
- }
- try (PreparedStatement statement = connection.prepareStatement("select version() as \"version\"")) {
- try (ResultSet resultSet = statement.executeQuery()) {
- if (resultSet.next()) {
- productVersion = resultSet.getString("version").toLowerCase();
- if (productVersion.contains("cockroach")) {
- return new CockroachPlatform();
- }
- }
+ for (DatabasePlatformProvider provider : providers) {
+ if (provider.matchByProductName(dbProductName)) {
+ return provider.create(majorVersion, minorVersion, metaData, connection);
}
- } catch (SQLException e) {
- CoreLog.log.warn("Error running detection query on Postgres", e);
}
- if (majorVersion <= 9) {
- return new Postgres9Platform();
- }
- return new PostgresPlatform();
+ throw new IllegalStateException("Unable to determine the appropriate ebean platform given database product name [" + dbProductName
+ + "] and ebean platform providers " + providers + ". With ebean 13+ we now have separate platforms (ebean-postgres, ebean-mysql etc)"
+ + " and should use database specific platform dependency like ebean-postgres. Note that we can use ebean-platform-all to include"
+ + " all the platforms.");
}
+
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
index 2001b043c..bde0e1ce4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java
@@ -10,7 +10,6 @@ import io.ebean.config.ServerConfigProvider;
import io.ebean.config.TenantMode;
import io.ebean.config.UnderscoreNamingConvention;
import io.ebean.config.dbplatform.DatabasePlatform;
-import io.ebean.config.dbplatform.h2.H2Platform;
import io.ebean.event.ShutdownManager;
import io.ebean.service.SpiContainer;
import io.ebeaninternal.api.CoreLog;
@@ -24,6 +23,7 @@ import io.ebeaninternal.server.executor.DefaultBackgroundExecutor;
import org.slf4j.Logger;
import javax.persistence.PersistenceException;
+import java.net.URL;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.List;
@@ -86,7 +86,7 @@ public final class DefaultContainer implements SpiContainer {
boolean online = true;
if (config.isDocStoreOnly()) {
- config.setDatabasePlatform(new H2Platform());
+ config.setDatabasePlatform(new DatabasePlatform());
} else {
TenantMode tenantMode = config.getTenantMode();
if (TenantMode.DB != tenantMode) {
@@ -141,9 +141,21 @@ public final class DefaultContainer implements SpiContainer {
}
if (config.isAutoLoadModuleInfo()) {
// auto register entity classes
+ boolean found = false;
for (ModuleInfoLoader loader : ServiceLoader.load(ModuleInfoLoader.class)) {
config.addAll(loader.classesFor(config.getName(), config.isDefaultServer()));
+ found = true;
}
+ if (!found) {
+ checkMissingModulePathProvides();
+ }
+ }
+ }
+
+ private void checkMissingModulePathProvides() {
+ URL servicesFile = ClassLoader.getSystemResource("META-INF/services/io.ebean.config.ModuleInfoLoader");
+ if (servicesFile != null) {
+ log.error("module-info.java is probably missing 'provides io.ebean.config.ModuleInfoLoader with _Ebean$ModuleInfo' clause. ModuleInfoLoader exists but was not service loaded.");
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 6d396d77f..d188f9539 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -974,21 +974,11 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
return new DefaultRelationalQuery(this, sql.trim());
}
- @Override
- public SqlQuery createSqlQuery(String sql) {
- return sqlQuery(sql);
- }
-
@Override
public SqlUpdate sqlUpdate(String sql) {
return new DefaultSqlUpdate(this, sql.trim());
}
- @Override
- public SqlUpdate createSqlUpdate(String sql) {
- return sqlUpdate(sql);
- }
-
@Override
public CallableSql createCallableSql(String sql) {
return new DefaultCallableSql(this, sql.trim());
@@ -1372,11 +1362,6 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
}
}
- @Override
- public Stream findLargeStream(Query query, Transaction transaction) {
- return findStream(query, transaction);
- }
-
@Override
public Stream findStream(Query query, Transaction transaction) {
return toStream(findIterate(query, transaction));
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
index 756c5665f..d9023b356 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSqlUpdate.java
@@ -261,16 +261,6 @@ public final class DefaultSqlUpdate implements Serializable, SpiSqlUpdate {
return this;
}
- @Override
- public SqlUpdate setParams(Object... values) {
- return setParameters(values);
- }
-
- @Override
- public SqlUpdate setNextParameter(Object value) {
- return setParameter(value);
- }
-
@Override
public SqlUpdate setParameters(Object... values) {
for (Object value : values) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java
index abe20b1ca..386d4c383 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java
@@ -17,12 +17,14 @@ import java.util.logging.Logger;
*/
final class MultiTenantDbCatalogSupplier implements DataSourceSupplier {
+ private final CurrentTenantProvider tenantProvider;
private final DataSource dataSource;
private final DataSource readOnlyDataSource;
private final CatalogDataSource catalogDataSource;
private final CatalogDataSource readOnly;
MultiTenantDbCatalogSupplier(CurrentTenantProvider tenantProvider, DataSource dataSource, DataSource readOnlyDataSource, TenantCatalogProvider catalogProvider) {
+ this.tenantProvider = tenantProvider;
this.dataSource = dataSource;
this.readOnlyDataSource = readOnlyDataSource;
this.catalogDataSource = new CatalogDataSource(dataSource, tenantProvider, catalogProvider);
@@ -33,6 +35,11 @@ final class MultiTenantDbCatalogSupplier implements DataSourceSupplier {
}
}
+ @Override
+ public Object currentTenantId() {
+ return tenantProvider.currentId();
+ }
+
@Override
public DataSource getDataSource() {
return catalogDataSource;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java
index 2a1af6016..eca06a893 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java
@@ -17,12 +17,14 @@ import java.util.logging.Logger;
*/
final class MultiTenantDbSchemaSupplier implements DataSourceSupplier {
+ private final CurrentTenantProvider tenantProvider;
private final DataSource dataSource;
private final DataSource readOnlyDataSource;
private final SchemaDataSource schemaDataSource;
private final SchemaDataSource readOnly;
MultiTenantDbSchemaSupplier(CurrentTenantProvider tenantProvider, DataSource dataSource, DataSource readOnlyDataSource, TenantSchemaProvider schemaProvider) {
+ this.tenantProvider = tenantProvider;
this.dataSource = dataSource;
this.readOnlyDataSource = readOnlyDataSource;
this.schemaDataSource = new SchemaDataSource(dataSource, schemaProvider, tenantProvider);
@@ -33,6 +35,11 @@ final class MultiTenantDbSchemaSupplier implements DataSourceSupplier {
}
}
+ @Override
+ public Object currentTenantId() {
+ return tenantProvider.currentId();
+ }
+
@Override
public DataSource getDataSource() {
return schemaDataSource;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java
index e6237abfa..c0e810eff 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java
@@ -21,6 +21,11 @@ final class MultiTenantDbSupplier implements DataSourceSupplier {
this.dataSourceProvider = dataSourceProvider;
}
+ @Override
+ public Object currentTenantId() {
+ return tenantProvider.currentId();
+ }
+
@Override
public DataSource getReadOnlyDataSource() {
// read only datasource not supported with DB per tenant at this stage
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java
index 7680dd086..03640dc90 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java
@@ -20,6 +20,11 @@ final class SimpleDataSourceProvider implements DataSourceSupplier {
this.readOnlyDataSource = readOnlyDataSource;
}
+ @Override
+ public Object currentTenantId() {
+ return null; // not required here
+ }
+
@Override
public DataSource getDataSource() {
return dataSource;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
index d7a5f5ff5..4974f221c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java
@@ -2106,10 +2106,10 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
return getId((EntityBean) bean);
}
- @Override
- public Object getBeanId(T bean) {
- return getId((EntityBean) bean);
- }
+// @Override
+// public Object beanId(T bean) {
+// return getId((EntityBean) bean);
+// }
/**
* Return the Id value for the bean with embeddedId beans converted into maps.
@@ -2673,7 +2673,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
public PartitionMeta partitionMeta() {
return partitionMeta;
}
-
+
/**
* Return the tablespace details of the bean.
*/
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
index 4c01a3bde..664e40da9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorElementEmbeddedMap.java
@@ -58,13 +58,13 @@ class BeanDescriptorElementEmbeddedMap extends BeanDescriptorElementEmbedded<
}
if (stringKey) {
parser.nextToken();
- Object val = readJsonElement(readJson, null, null); // FIXME
+ Object val = readJsonElement(readJson, null, null); // CHECKME: Update existing map entry here?
add.addKeyValue(fieldName, val);
} else {
parser.nextFieldName();
Object key = scalarTypeKey.jsonRead(parser);
parser.nextFieldName();
- Object val = readJsonElement(readJson, null, null); // FIXME
+ Object val = readJsonElement(readJson, null, null); // CHECKME: Update existing map entry here?
add.addKeyValue(key, val);
}
} while (true);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
index fbf53fd14..f20db7315 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java
@@ -102,7 +102,7 @@ final class BeanDescriptorJsonHelp {
String msg = "Error reading inheritance discriminator - expected [" + discColumn + "] but no json key?";
throw new JsonParseException(newParser, msg, parser.getCurrentLocation());
}
-
+
BeanDescriptor inheritDesc = (BeanDescriptor) inheritInfo.readType(discNode.asText()).desc();
return inheritDesc.jsonReadObject(newReader, path, target);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
index 6a5c66888..1cd5c6b52 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java
@@ -575,7 +575,29 @@ public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTy
@SuppressWarnings("unchecked")
public BeanManager beanManager(Class entityType) {
- return (BeanManager) beanManager(entityType.getName());
+ BeanManager mgr = (BeanManager) beanManager(entityType.getName());
+ if (mgr == null) {
+ errorBeanNotRegistered(entityType);
+ }
+ return mgr;
+ }
+
+ private void errorBeanNotRegistered(Class entityType) {
+ if (beanManagerMap.isEmpty()) {
+ throw new PersistenceException(errNothingRegistered());
+ } else {
+ throw new PersistenceException(errNotRegistered(entityType));
+ }
+ }
+
+ private String errNothingRegistered() {
+ return "There are no registered entities. If using query beans, that generates _Ebean$ModuleInfo.java into " +
+ "generated sources and is service loaded. If using module-info.java, then probably missing 'provides io.ebean.config.ModuleInfoLoader with _Ebean$ModuleInfo' clause.";
+ }
+
+ private String errNotRegistered(Class> beanClass) {
+ return "The type [" + beanClass + "] is not a registered entity?"
+ + " If you don't explicitly list the entity classes to use Ebean will search for them in the classpath.";
}
private BeanManager> beanManager(String beanClassName) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
index f512f35f9..4e6f2d577 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocMany.java
@@ -1016,7 +1016,8 @@ public class BeanPropertyAssocMany extends BeanPropertyAssoc implements ST
BeanCollection> collection = createEmpty(parentBean);
BeanCollectionAdd add = beanCollectionAdd(collection);
do {
- EntityBean detailBean = (EntityBean) targetDescriptor.jsonRead(readJson, name, null); // FIXME
+ // CHECKME: Update existing list entry here?
+ EntityBean detailBean = (EntityBean) targetDescriptor.jsonRead(readJson, name, null);
if (detailBean == null) {
// read the entire array
break;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java
index 38bd5aaac..bed7e2351 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java
@@ -3,7 +3,7 @@ package io.ebeaninternal.server.deploy.meta;
import io.ebean.annotation.Cache;
import io.ebean.annotation.DocStore;
import io.ebean.annotation.DocStoreMode;
-import io.ebean.annotation.EntityOverride;
+import io.ebean.annotation.ext.EntityOverride;
import io.ebean.annotation.Identity;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.TableName;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
index 7c15443e7..954182f7a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java
@@ -1,6 +1,5 @@
package io.ebeaninternal.server.deploy.meta;
-import io.ebean.annotation.CreatedTimestamp;
import io.ebean.annotation.DocCode;
import io.ebean.annotation.DocProperty;
import io.ebean.annotation.DocSortable;
@@ -8,7 +7,6 @@ import io.ebean.annotation.Formula;
import io.ebean.annotation.MutationDetection;
import io.ebean.annotation.Platform;
import io.ebean.annotation.SoftDelete;
-import io.ebean.annotation.UpdatedTimestamp;
import io.ebean.annotation.WhenCreated;
import io.ebean.annotation.WhenModified;
import io.ebean.annotation.Where;
@@ -233,9 +231,7 @@ public class DeployBeanProperty implements DeployBeanPropertyMeta {
return (AnnotationUtil.has(field, WhenCreated.class)
|| AnnotationUtil.has(field, WhenModified.class)
|| AnnotationUtil.has(field, WhoModified.class)
- || AnnotationUtil.has(field, WhoCreated.class)
- || AnnotationUtil.has(field, UpdatedTimestamp.class)
- || AnnotationUtil.has(field, CreatedTimestamp.class));
+ || AnnotationUtil.has(field, WhoCreated.class));
}
public String getFullBeanName() {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java
index 1ce197f61..8d976a032 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java
@@ -6,8 +6,8 @@ import io.ebean.annotation.DbPartition;
import io.ebean.annotation.DocStore;
import io.ebean.annotation.Draftable;
import io.ebean.annotation.DraftableElement;
-import io.ebean.annotation.EntityImplements;
-import io.ebean.annotation.EntityOverride;
+import io.ebean.annotation.ext.EntityImplements;
+import io.ebean.annotation.ext.EntityOverride;
import io.ebean.annotation.History;
import io.ebean.annotation.Identity;
import io.ebean.annotation.Index;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
index 571e1d3ca..f93fbf028 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java
@@ -1,38 +1,7 @@
package io.ebeaninternal.server.deploy.parse;
-import io.ebean.annotation.Aggregation;
-import io.ebean.annotation.CreatedTimestamp;
-import io.ebean.annotation.DbArray;
-import io.ebean.annotation.DbComment;
-import io.ebean.annotation.DbDefault;
-import io.ebean.annotation.DbJson;
-import io.ebean.annotation.DbJsonB;
-import io.ebean.annotation.DbMap;
-import io.ebean.annotation.DbMigration;
-import io.ebean.annotation.DocCode;
-import io.ebean.annotation.DocEmbedded;
-import io.ebean.annotation.DocProperty;
-import io.ebean.annotation.DocSortable;
-import io.ebean.annotation.Draft;
-import io.ebean.annotation.DraftDirty;
-import io.ebean.annotation.DraftOnly;
-import io.ebean.annotation.DraftReset;
-import io.ebean.annotation.Encrypted;
-import io.ebean.annotation.Expose;
-import io.ebean.annotation.Formula;
-import io.ebean.annotation.HistoryExclude;
-import io.ebean.annotation.Identity;
import io.ebean.annotation.Index;
-import io.ebean.annotation.JsonIgnore;
-import io.ebean.annotation.Length;
-import io.ebean.annotation.SoftDelete;
-import io.ebean.annotation.TenantId;
-import io.ebean.annotation.UnmappedJson;
-import io.ebean.annotation.UpdatedTimestamp;
-import io.ebean.annotation.WhenCreated;
-import io.ebean.annotation.WhenModified;
-import io.ebean.annotation.WhoCreated;
-import io.ebean.annotation.WhoModified;
+import io.ebean.annotation.*;
import io.ebean.config.EncryptDeploy;
import io.ebean.config.EncryptDeploy.Mode;
import io.ebean.config.dbplatform.DbEncrypt;
@@ -51,24 +20,7 @@ import io.ebeaninternal.server.type.ScalarTypeBytesBase;
import io.ebeaninternal.server.type.ScalarTypeBytesEncrypted;
import io.ebeaninternal.server.type.ScalarTypeEncryptedWrapper;
-import javax.persistence.Basic;
-import javax.persistence.Column;
-import javax.persistence.EmbeddedId;
-import javax.persistence.Enumerated;
-import javax.persistence.FetchType;
-import javax.persistence.GeneratedValue;
-import javax.persistence.GenerationType;
-import javax.persistence.Id;
-import javax.persistence.Lob;
-import javax.persistence.ManyToOne;
-import javax.persistence.OneToMany;
-import javax.persistence.OneToOne;
-import javax.persistence.PersistenceException;
-import javax.persistence.SequenceGenerator;
-import javax.persistence.Temporal;
-import javax.persistence.TemporalType;
-import javax.persistence.Transient;
-import javax.persistence.Version;
+import javax.persistence.*;
import java.sql.Types;
import java.util.Set;
import java.util.UUID;
@@ -339,10 +291,10 @@ final class AnnotationFields extends AnnotationParser {
}
private void initWhen(DeployBeanProperty prop) {
- if (has(prop, WhenCreated.class) || has(prop, CreatedTimestamp.class)) {
+ if (has(prop, WhenCreated.class)) {
generatedPropFactory.setInsertTimestamp(prop);
}
- if (has(prop, WhenModified.class) || has(prop, UpdatedTimestamp.class)) {
+ if (has(prop, WhenModified.class)) {
generatedPropFactory.setUpdateTimestamp(prop);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/DefaultPersister.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/DefaultPersister.java
index 4e4fc1039..1f6b18df5 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/DefaultPersister.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/DefaultPersister.java
@@ -1196,11 +1196,6 @@ public final class DefaultPersister implements Persister {
return request;
}
- private String errNotRegistered(Class> beanClass) {
- return "The type [" + beanClass + "] is not a registered entity?"
- + " If you don't explicitly list the entity classes to use Ebean will search for them in the classpath.";
- }
-
/**
* Return the BeanDescriptor for a bean that is being persisted.
*
@@ -1210,10 +1205,6 @@ public final class DefaultPersister implements Persister {
*/
@SuppressWarnings("unchecked")
private BeanManager beanManager(Class> cls) {
- BeanManager mgr = (BeanManager) beanDescriptorManager.beanManager(cls);
- if (mgr == null) {
- throw new PersistenceException(errNotRegistered(cls));
- }
- return mgr;
+ return (BeanManager) beanDescriptorManager.beanManager(cls);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
index ba74a5e65..962c6ce22 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
@@ -48,7 +48,6 @@ final class DCountMetric implements CountMetric {
@Override
public void visit(MetricVisitor visitor) {
-
long val = visitor.reset() ? count.sumThenReset() : count.sum();
if (val > 0) {
visitor.visitCount(new DCountMetricStats(name, val));
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
index 8011cc1b5..da8caf0b1 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java
@@ -251,11 +251,6 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
}
- @Override
- public Stream findLargeStream() {
- throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
- }
-
@Override
public void findEach(Consumer consumer) {
throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup");
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java
index 307b2713c..6aa0f9a6a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java
@@ -1456,11 +1456,6 @@ public final class DefaultOrmQuery extends AbstractQuery implements SpiQuery<
return server.findStream(this, transaction);
}
- @Override
- public Stream findLargeStream() {
- return server.findLargeStream(this, transaction);
- }
-
@Override
public List> findVersions() {
this.temporalMode = TemporalMode.VERSIONS;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
index 69c8dbb7a..a68bb5d2a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java
@@ -10,7 +10,6 @@ import io.ebeaninternal.api.BindParams;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.api.SpiSqlQuery;
-import java.math.BigDecimal;
import java.util.List;
import java.util.Optional;
import java.util.function.Consumer;
@@ -56,36 +55,6 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
return server.findList(this, null);
}
- @Override
- public BigDecimal findSingleDecimal() {
- return server.findSingleAttribute(this, BigDecimal.class);
- }
-
- @Override
- public Long findSingleLong() {
- return server.findSingleAttribute(this, Long.class);
- }
-
- @Override
- public T findSingleAttribute(Class cls) {
- return server.findSingleAttribute(this, cls);
- }
-
- @Override
- public List findSingleAttributeList(Class cls) {
- return server.findSingleAttributeList(this, cls);
- }
-
- @Override
- public T findOne(RowMapper mapper) {
- return server.findOneMapper(this, mapper);
- }
-
- @Override
- public List findList(RowMapper mapper) {
- return server.findListMapper(this, mapper);
- }
-
@Override
public void findEachRow(RowConsumer consumer) {
server.findEachRow(this, consumer);
@@ -101,12 +70,6 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
return Optional.ofNullable(findOne());
}
- @Override
- @Deprecated
- public DefaultRelationalQuery setParams(Object... values) {
- return setParameters(values);
- }
-
@Override
public DefaultRelationalQuery setParameters(Object... values) {
bindParams.setNextParameters(values);
@@ -119,6 +82,18 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
return this;
}
+ @Override
+ public SqlQuery setNullParameter(int position, int jdbcType) {
+ bindParams.setNullParameter(position, jdbcType);
+ return this;
+ }
+
+ @Override
+ public SqlQuery setNullParameter(String name, int jdbcType) {
+ bindParams.setNullParameter(name, jdbcType);
+ return this;
+ }
+
@Override
public DefaultRelationalQuery setParameter(int position, Object value) {
bindParams.setParameter(position, value);
@@ -225,6 +200,14 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq
return new Mapper(mapper);
}
+ private T findSingleAttribute(Class cls) {
+ return server.findSingleAttribute(this, cls);
+ }
+
+ private List findSingleAttributeList(Class cls) {
+ return server.findSingleAttributeList(this, cls);
+ }
+
private class Scalar implements SqlQuery.TypeQuery {
private final Class type;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonContext.java
index aac9075e7..83b04cb6d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonContext.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonContext.java
@@ -224,7 +224,8 @@ public final class DJsonContext implements SpiJsonContext {
List list = new ArrayList<>();
do {
- T bean = desc.jsonRead(readJson, null, null); // FIXME: Should we update the list
+ // CHECKME: Should we update the list
+ T bean = desc.jsonRead(readJson, null, null);
if (bean == null) {
break;
} else {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DataSourceSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DataSourceSupplier.java
index b95f035e1..da100b546 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DataSourceSupplier.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DataSourceSupplier.java
@@ -16,7 +16,6 @@ public interface DataSourceSupplier {
* Return the DataSource to use for the current request.
*
* This should take into account multi-tenancy and the current tenantId.
- *
*/
DataSource getDataSource();
@@ -25,10 +24,14 @@ public interface DataSourceSupplier {
*
* This can return null meaning that no read only DataSource (with autoCommit)
* is available for use so normal transactions with explicit commit should be used.
- *
*/
DataSource getReadOnlyDataSource();
+ /**
+ * Obtain the current TenantId *IF* it is required for the DataSource.
+ */
+ Object currentTenantId();
+
/**
* Return a connection from the DataSource taking into account a tenantId for multi-tenant lazy loading.
*
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenantWithRead.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenantWithRead.java
index cb9f8c9c4..d4feba7b5 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenantWithRead.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenantWithRead.java
@@ -27,8 +27,8 @@ final class TransactionFactoryTenantWithRead extends TransactionFactoryTenant {
Connection connection = null;
try {
if (tenantId == null) {
- // tenantId not set (by lazy loading) so get current tenantId
- tenantId = tenantProvider.currentId();
+ // obtain the tenantId if the DataSource requires it
+ tenantId = dataSourceSupplier.currentTenantId();
}
connection = dataSourceSupplier.getReadOnlyConnection(tenantId);
return new ImplicitReadOnlyTransaction(manager, connection, tenantId);
diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/api/DocStoreBeanAdapter.java b/ebean-core/src/main/java/io/ebeanservice/docstore/api/DocStoreBeanAdapter.java
index 5c0dd02be..c3a8cd6e7 100644
--- a/ebean-core/src/main/java/io/ebeanservice/docstore/api/DocStoreBeanAdapter.java
+++ b/ebean-core/src/main/java/io/ebeanservice/docstore/api/DocStoreBeanAdapter.java
@@ -54,14 +54,13 @@ public interface DocStoreBeanAdapter extends BeanDocType {
/**
* Return the index type for this bean type.
*/
- @Override
- String getIndexType();
+ String indexType();
/**
* Return the index name for this bean type.
*/
@Override
- String getIndexName();
+ String indexName();
/**
* Process a delete by id of a given document.
diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java b/ebean-core/src/main/java/io/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java
index 4cd2b692f..626daf1b4 100644
--- a/ebean-core/src/main/java/io/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java
+++ b/ebean-core/src/main/java/io/ebeanservice/docstore/api/support/DocStoreBeanBaseAdapter.java
@@ -102,7 +102,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
private boolean registerPaths;
public DocStoreBeanBaseAdapter(BeanDescriptor desc, DeployBeanDescriptor deploy) {
-
this.desc = desc;
this.server = desc.ebeanServer();
this.mapped = deploy.isDocStoreMapped();
@@ -123,7 +122,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
@Override
public DocumentMapping createDocMapping() {
-
if (documentMapping != null) {
return documentMapping;
}
@@ -143,12 +141,12 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
}
@Override
- public String getIndexType() {
+ public String indexType() {
return indexType;
}
@Override
- public String getIndexName() {
+ public String indexName() {
return indexName;
}
@@ -159,7 +157,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
@Override
public String rawProperty(String property) {
-
String rawProperty = sortableMap.get(property);
return rawProperty == null ? property : rawProperty;
}
@@ -192,7 +189,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
*/
@Override
public void registerInvalidationPath(String queueId, String path, Set properties) {
-
if (!mapped) {
if (update == DocStoreMode.IGNORE) {
// bean type not mapped but is included as nested document
@@ -207,7 +203,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
* Return the DsInvalidationListener based on the properties, path.
*/
protected DocStoreEmbeddedInvalidation getEmbeddedInvalidation(String queueId, String path, Set properties) {
-
if (properties.contains("*")) {
return new DocStoreEmbeddedInvalidation(queueId, path);
} else {
@@ -245,19 +240,15 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
* This can add derived/embedded/nested parts to the document.
*/
protected DocStructure derivePathProperties(PathProperties pathProps) {
-
boolean includeByDefault = (pathProps == null);
if (pathProps == null) {
pathProps = new PathProperties();
}
-
return getDocStructure(pathProps, includeByDefault);
}
protected DocStructure getDocStructure(PathProperties pathProps, final boolean includeByDefault) {
-
final DocStructure docStructure = new DocStructure(pathProps);
-
BeanProperty[] properties = desc.propertiesNonTransient();
for (BeanProperty property : properties) {
property.docStoreInclude(includeByDefault, docStructure);
@@ -271,17 +262,16 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
}
});
}
-
return docStructure;
}
@Override
- public FetchPath getEmbedded(String path) {
+ public FetchPath embedded(String path) {
return docStructure.getEmbedded(path);
}
@Override
- public FetchPath getEmbeddedManyRoot(String path) {
+ public FetchPath embeddedManyRoot(String path) {
return docStructure.getEmbeddedManyRoot(path);
}
@@ -297,7 +287,6 @@ public abstract class DocStoreBeanBaseAdapter implements DocStoreBeanAdapter<
@Override
public DocStoreMode getMode(PersistRequest.Type persistType, DocStoreMode txnMode) {
-
if (txnMode == null) {
return getMode(persistType);
} else if (txnMode == DocStoreMode.IGNORE) {
diff --git a/ebean-core/src/main/java9/module-info.java b/ebean-core/src/main/java/module-info.java
similarity index 59%
rename from ebean-core/src/main/java9/module-info.java
rename to ebean-core/src/main/java/module-info.java
index 398a43d87..bbcc1772f 100644
--- a/ebean-core/src/main/java9/module-info.java
+++ b/ebean-core/src/main/java/module-info.java
@@ -6,29 +6,29 @@ module io.ebean.core {
uses io.ebean.config.DatabaseConfigProvider;
uses io.ebean.config.ServerConfigProvider;
uses io.ebean.config.ModuleInfoLoader;
+ uses io.ebean.config.dbplatform.DatabasePlatformProvider;
uses io.ebean.datasource.DataSourceAlertFactory;
uses io.ebean.core.type.ExtraTypeFactory;
uses io.ebeanservice.docstore.api.DocStoreFactory;
- uses io.ebean.migration.auto.AutoMigrationRunner;
- uses io.avaje.classpath.scanner.ClassPathScannerFactory;
+ uses io.avaje.classpath.scanner.ClassPathScannerFactory;
uses io.ebeaninternal.api.SpiLoggerFactory;
uses io.ebeaninternal.api.GeoTypeProvider;
- uses io.ebeaninternal.api.SpiDdlGeneratorProvider;
uses io.ebeaninternal.xmapping.api.XmapService;
uses io.ebeaninternal.server.autotune.AutoTuneServiceProvider;
uses io.ebeaninternal.server.cluster.ClusterBroadcastFactory;
requires transitive io.ebean.api;
- requires transitive io.ebean.migration.auto;
requires transitive io.ebean.xmapping.api;
requires transitive io.ebean.core.type;
requires transitive io.ebean.ddl.runner;
- requires transitive org.antlr.antlr4.runtime;
+ requires org.antlr.antlr4.runtime;
+ requires io.avaje.classpath.scanner.api;
requires io.avaje.classpath.scanner;
requires io.ebean.types;
requires org.slf4j;
requires static io.avaje.jsr305x;
+ requires static com.fasterxml.jackson.annotation;
requires static com.fasterxml.jackson.core;
requires static com.fasterxml.jackson.databind;
requires static jakarta.validation;
@@ -40,18 +40,35 @@ module io.ebean.core {
exports io.ebeaninternal.server.cache;
- exports io.ebeaninternal.api to io.ebean.ddl.generator, io.ebean.querybean, io.ebean.autotune, io.ebean.postgis, io.ebean.test;
- exports io.ebeaninternal.server.deploy to io.ebean.autotune, io.ebean.ddl.generator;
- exports io.ebeaninternal.server.deploy.id to io.ebean.ddl.generator;
- exports io.ebeaninternal.server.deploy.meta to io.ebean.ddl.generator;
- exports io.ebeaninternal.server.deploy.visitor to io.ebean.ddl.generator;
+ exports io.ebeanservice.docstore.api;
+ exports io.ebeanservice.docstore.api.support to io.ebean.elastic, io.ebean.test;
+ exports io.ebeanservice.docstore.api.mapping to io.ebean.elastic;
- exports io.ebeaninternal.server.el to io.ebean.autotune;
+ exports io.ebeaninternal.api to io.ebean.ddl.generator, io.ebean.querybean, io.ebean.autotune, io.ebean.postgis, io.ebean.test, io.ebean.elastic, io.ebean.spring.txn;
+ exports io.ebeaninternal.api.json to io.ebean.test;
+ exports io.ebeaninternal.json to io.ebean.test;
exports io.ebeaninternal.server.autotune to io.ebean.autotune;
- exports io.ebeaninternal.server.querydefn to io.ebean.autotune, io.ebean.querybean;
- exports io.ebeaninternal.server.type to io.ebean.postgis;
+ exports io.ebeaninternal.server.core to io.ebean.test, io.ebean.elastic;
+ exports io.ebeaninternal.server.core.bootup to io.ebean.test;
+ exports io.ebeaninternal.server.core.timezone to io.ebean.test;
+ exports io.ebeaninternal.server.cluster to io.ebean.test, io.ebean.k8scache;
+ exports io.ebeaninternal.server.deploy to io.ebean.autotune, io.ebean.ddl.generator, io.ebean.test, io.ebean.elastic;
+ exports io.ebeaninternal.server.deploy.id to io.ebean.ddl.generator;
+ exports io.ebeaninternal.server.deploy.meta to io.ebean.ddl.generator, io.ebean.test, io.ebean.elastic;
+ exports io.ebeaninternal.server.deploy.visitor to io.ebean.ddl.generator;
+ exports io.ebeaninternal.server.el to io.ebean.autotune, io.ebean.test;
+ exports io.ebeaninternal.server.expression to io.ebean.querybean, io.ebean.test, io.ebean.elastic;
+ exports io.ebeaninternal.server.expression.platform to io.ebean.test;
+ exports io.ebeaninternal.server.grammer to io.ebean.test;
+ exports io.ebeaninternal.server.idgen to io.ebean.test;
+ exports io.ebeaninternal.server.persist to io.ebean.test, io.ebean.elastic;
+ exports io.ebeaninternal.server.query to io.ebean.test;
+ exports io.ebeaninternal.server.querydefn to io.ebean.autotune, io.ebean.querybean, io.ebean.test, io.ebean.elastic;
+ exports io.ebeaninternal.server.rawsql to io.ebean.test;
+ exports io.ebeaninternal.server.text.json to io.ebean.test, io.ebean.elastic;
+ exports io.ebeaninternal.server.type to io.ebean.postgis, io.ebean.test;
+ exports io.ebeaninternal.server.transaction to io.ebean.test, io.ebean.elastic, io.ebean.spring.txn, io.ebean.k8scache;
exports io.ebeaninternal.server.util to io.ebean.querybean;
- exports io.ebeaninternal.server.expression to io.ebean.querybean;
provides io.ebean.metric.MetricFactory with io.ebeaninternal.server.profile.DMetricFactory;
provides io.ebean.service.SpiContainerFactory with io.ebeaninternal.server.DContainerFactory;
diff --git a/ebean-core/src/test/ddl-review/h2-create-all.sql b/ebean-core/src/test/ddl-review/h2-create-all.sql
index ab1dff363..5a52face9 100644
--- a/ebean-core/src/test/ddl-review/h2-create-all.sql
+++ b/ebean-core/src/test/ddl-review/h2-create-all.sql
@@ -5469,14 +5469,14 @@ create table c_user_history(
);
create view c_user_with_history as select * from c_user union all select * from c_user_history;
-create trigger hembi_bean_history_upd before update,delete on hembi_bean for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger hx_link_history_upd before update,delete on hx_link for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger hi_link_history_upd before update,delete on hi_link for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger hi_link_doc_history_upd before update,delete on hi_link_doc for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger hi_tone_history_upd before update,delete on hi_tone for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger hi_tthree_history_upd before update,delete on hi_tthree for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger hi_ttwo_history_upd before update,delete on hi_ttwo for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger hsd_setting_history_upd before update,delete on hsd_setting for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger hsd_user_history_upd before update,delete on hsd_user for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger link_history_upd before update,delete on link for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
-create trigger c_user_history_upd before update,delete on c_user for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger hembi_bean_history_upd before update,delete on hembi_bean for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger hx_link_history_upd before update,delete on hx_link for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger hi_link_history_upd before update,delete on hi_link for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger hi_link_doc_history_upd before update,delete on hi_link_doc for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger hi_tone_history_upd before update,delete on hi_tone for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger hi_tthree_history_upd before update,delete on hi_tthree for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger hi_ttwo_history_upd before update,delete on hi_ttwo for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger hsd_setting_history_upd before update,delete on hsd_setting for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger hsd_user_history_upd before update,delete on hsd_user for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger link_history_upd before update,delete on link for each row call "io.ebean.platform.h2.H2HistoryTrigger";
+create trigger c_user_history_upd before update,delete on c_user for each row call "io.ebean.platform.h2.H2HistoryTrigger";
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolderTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolderTest.java
index 3a61f60ee..565d41d76 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolderTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultCacheHolderTest.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.cache;
+import io.ebean.cache.ServerCache;
import io.ebean.cache.ServerCacheFactory;
import io.ebean.cache.ServerCacheOptions;
import io.ebean.cache.ServerCacheType;
@@ -12,7 +13,7 @@ import org.tests.model.basic.Customer;
import static org.assertj.core.api.Assertions.assertThat;
-public class DefaultCacheHolderTest {
+class DefaultCacheHolderTest {
private final ThreadLocal tenantId = new ThreadLocal<>();
@@ -25,42 +26,30 @@ public class DefaultCacheHolderTest {
.with(cacheFactory, new TableModState());
}
-
@Test
- public void getCache_normal() {
-
+ void getCache_normal() {
DefaultCacheHolder holder = new DefaultCacheHolder(options());
- DefaultServerCache cache = cache(holder, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
- assertThat(cache.getShortName()).isEqualTo("Customer_B");
-
- DefaultServerCache cache1 = cache(holder, Customer.class);
+ ServerCache cache = cache(holder, Customer.class);
+ ServerCache cache1 = cache(holder, Customer.class);
assertThat(cache1).isSameAs(cache);
- DefaultServerCache cache2 = cache(holder, Contact.class);
+ ServerCache cache2 = cache(holder, Contact.class);
assertThat(cache1).isNotSameAs(cache2);
- assertThat(cache2.getName()).isEqualTo("org.tests.model.basic.Contact_B");
- assertThat(cache2.getShortName()).isEqualTo("Contact_B");
-
}
- private DefaultServerCache cache(DefaultCacheHolder holder, Class> type) {
- return (DefaultServerCache) holder.getCache(type, ServerCacheType.BEAN);
+ private ServerCache cache(DefaultCacheHolder holder, Class> type) {
+ return holder.getCache(type, ServerCacheType.BEAN);
}
@Test
- public void getCache_multiTenant() throws Exception {
-
+ void getCache_multiTenant() throws Exception {
CacheManagerOptions builder = options().with(tenantId::get);
DefaultCacheHolder holder = new DefaultCacheHolder(builder);
tenantId.set("ten_1");
- DefaultServerCache cache = cache(holder, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
- assertThat(cache.getShortName()).isEqualTo("Customer_B");
-
+ ServerCache cache = cache(holder, Customer.class);
cache.put("1", "value-for-tenant1");
cache.put("2", "an other value-for-tenant1");
@@ -109,10 +98,9 @@ public class DefaultCacheHolderTest {
}
@Test
- public void clearAll() {
-
+ void clearAll() {
DefaultCacheHolder holder = new DefaultCacheHolder(options());
- DefaultServerCache cache = cache(holder, Customer.class);
+ ServerCache cache = cache(holder, Customer.class);
cache.put("foo", "foo");
assertThat(cache.size()).isEqualTo(1);
holder.clearAll();
@@ -121,12 +109,11 @@ public class DefaultCacheHolderTest {
}
@Test
- public void clearAll_multiTenant() {
-
+ void clearAll_multiTenant() {
CacheManagerOptions options = options().with(tenantId::get);
DefaultCacheHolder holder = new DefaultCacheHolder(options);
- DefaultServerCache cache = cache(holder, Customer.class);
+ ServerCache cache = cache(holder, Customer.class);
cache.put("foo", "foo");
assertThat(cache.size()).isEqualTo(1);
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java
index b689d9e50..8d9a3b51c 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/cache/DefaultServerCacheManagerTest.java
@@ -1,5 +1,6 @@
package io.ebeaninternal.server.cache;
+import io.ebean.cache.ServerCache;
import io.ebean.config.ContainerConfig;
import io.ebean.config.CurrentTenantProvider;
import io.ebean.config.DatabaseConfig;
@@ -11,7 +12,7 @@ import org.tests.model.basic.Customer;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertTrue;
-public class DefaultServerCacheManagerTest {
+class DefaultServerCacheManagerTest {
private final ThreadLocal tenantId = new ThreadLocal<>();
@@ -29,7 +30,7 @@ public class DefaultServerCacheManagerTest {
private final DefaultServerCacheManager multiTenantManager;
- public DefaultServerCacheManagerTest(){
+ DefaultServerCacheManagerTest(){
CacheManagerOptions builder = new CacheManagerOptions(clusterManager, new DatabaseConfig(), true);
builder.with(new TdTenPro());
this.multiTenantManager = new DefaultServerCacheManager(builder);
@@ -37,86 +38,79 @@ public class DefaultServerCacheManagerTest {
@Test
- public void getCache_normal() {
+ void getCache_normal() {
+ ServerCache cache = cache(manager, Customer.class);
+ DefaultServerCache dsc = cache.unwrap(DefaultServerCache.class);
+ assertThat(dsc.getName()).isEqualTo("org.tests.model.basic.Customer_B");
+ assertThat(dsc.getShortName()).isEqualTo("Customer_B");
- DefaultServerCache cache = cache(manager, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
- assertThat(cache.getShortName()).isEqualTo("Customer_B");
-
- DefaultServerCache cache1 = cache(manager, Customer.class);
+ ServerCache cache1 = cache(manager, Customer.class);
assertThat(cache1).isSameAs(cache);
- DefaultServerCache cache2 = cache(manager, Contact.class);
+ ServerCache cache2 = cache(manager, Contact.class);
assertThat(cache1).isNotSameAs(cache2);
- assertThat(cache2.getName()).isEqualTo("org.tests.model.basic.Contact_B");
- assertThat(cache2.getShortName()).isEqualTo("Contact_B");
+ DefaultServerCache dsc2 = cache2.unwrap(DefaultServerCache.class);
+ assertThat(dsc2.getName()).isEqualTo("org.tests.model.basic.Contact_B");
+ assertThat(dsc2.getShortName()).isEqualTo("Contact_B");
- DefaultServerCache natKeyCache = (DefaultServerCache) manager.getNaturalKeyCache(Customer.class);
- assertThat(natKeyCache.getName()).isEqualTo("org.tests.model.basic.Customer_N");
- assertThat(natKeyCache.getShortName()).isEqualTo("Customer_N");
+ ServerCache natKeyCache = manager.getNaturalKeyCache(Customer.class);
+ DefaultServerCache dscNatKey = natKeyCache.unwrap(DefaultServerCache.class);
+ assertThat(dscNatKey.getName()).isEqualTo("org.tests.model.basic.Customer_N");
+ assertThat(dscNatKey.getShortName()).isEqualTo("Customer_N");
- DefaultServerCache queryCache = (DefaultServerCache) manager.getQueryCache(Customer.class);
- assertThat(queryCache.getName()).isEqualTo("org.tests.model.basic.Customer_Q");
- assertThat(queryCache.getShortName()).isEqualTo("Customer_Q");
+ ServerCache queryCache = manager.getQueryCache(Customer.class);
+ DefaultServerCache dscQueryCache = queryCache.unwrap(DefaultServerCache.class);
+ assertThat(dscQueryCache.getName()).isEqualTo("org.tests.model.basic.Customer_Q");
+ assertThat(dscQueryCache.getShortName()).isEqualTo("Customer_Q");
- DefaultServerCache collCache = (DefaultServerCache) manager.getCollectionIdsCache(Customer.class, "contacts");
- assertThat(collCache.getName()).isEqualTo("org.tests.model.basic.Customer.contacts_C");
- assertThat(collCache.getShortName()).isEqualTo("Customer.contacts_C");
+ ServerCache collCache = manager.getCollectionIdsCache(Customer.class, "contacts");
+ DefaultServerCache dscCollCache = collCache.unwrap(DefaultServerCache.class);
+ assertThat(dscCollCache.getName()).isEqualTo("org.tests.model.basic.Customer.contacts_C");
+ assertThat(dscCollCache.getShortName()).isEqualTo("Customer.contacts_C");
- cache.clearCount.reset();
- collCache.clearCount.reset();
- queryCache.clearCount.reset();
- natKeyCache.clearCount.reset();
+ cache.statistics(true);
+ collCache.statistics(true);
+ queryCache.statistics(true);
+ natKeyCache.statistics(true);
manager.clear(Customer.class);
- assertThat(cache.clearCount.get(true)).isEqualTo(1);
- assertThat(natKeyCache.clearCount.get(true)).isEqualTo(1);
- assertThat(queryCache.clearCount.get(true)).isEqualTo(1);
- assertThat(collCache.clearCount.get(true)).isEqualTo(1);
+ assertThat(cache.statistics(true).getClearCount()).isEqualTo(1);
+ assertThat(natKeyCache.statistics(true).getClearCount()).isEqualTo(1);
+ assertThat(queryCache.statistics(true).getClearCount()).isEqualTo(1);
+ assertThat(collCache.statistics(true).getClearCount()).isEqualTo(1);
}
- private DefaultServerCache cache(DefaultServerCacheManager manager, Class> beanType) {
- return (DefaultServerCache) manager.getBeanCache(beanType);
+ private ServerCache cache(DefaultServerCacheManager manager, Class> beanType) {
+ return manager.getBeanCache(beanType);
}
@Test
- public void getCache_multiTenant() {
-
+ void getCache_multiTenant() {
tenantId.set("ten1");
- DefaultServerCache cache = cache(multiTenantManager, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
+ ServerCache cache = cache(multiTenantManager, Customer.class);
cache.put("1", "tenant1");
tenantId.set("ten2");
-
assertThat(cache.get("1")).isNull();
tenantId.set("ten1");
-
- assertThat(cache.get("1")).isNotNull();
-
+ assertThat(cache.get("1")).isEqualTo("tenant1");
}
@Test
- public void getCache_singleTenant() {
-
+ void getCache_singleTenant() {
+ ServerCache cache = cache(manager, Customer.class);
tenantId.set("ten1");
- DefaultServerCache cache = cache(manager, Customer.class);
- assertThat(cache.getName()).isEqualTo("org.tests.model.basic.Customer_B");
-
cache.put("1", "tenant1");
tenantId.set("ten2");
-
assertThat(cache.get("1")).isEqualTo("tenant1");
-
}
@Test
- public void isLocalL2Caching() {
-
+ void isLocalL2Caching() {
assertTrue(manager.isLocalL2Caching());
assertTrue(multiTenantManager.isLocalL2Caching());
}
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java
index a83521d76..7c178d996 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManyTest.java
@@ -1,6 +1,5 @@
package io.ebeaninternal.server.deploy;
-import io.ebean.DB;
import io.ebean.bean.BeanCollection;
import io.ebean.bean.EntityBean;
import io.ebean.common.BeanList;
@@ -9,7 +8,6 @@ import org.tests.model.basic.Contact;
import org.tests.model.basic.Customer;
import java.util.ArrayList;
-import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/parse/AnnotationClassTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/parse/AnnotationClassTest.java
index 48d67baee..72e88a013 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/parse/AnnotationClassTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/parse/AnnotationClassTest.java
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.deploy.parse;
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.server.core.bootup.BootupClasses;
import io.ebeaninternal.server.deploy.generatedproperty.GeneratedPropertyFactory;
import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor;
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java
index e7cacbbe5..6563886dc 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/querydefn/DefaultOrmQueryTest.java
@@ -3,11 +3,8 @@ package io.ebeaninternal.server.querydefn;
import io.ebean.*;
import io.ebeaninternal.api.BindValuesKey;
-import io.ebeaninternal.api.SpiQuery;
-import io.ebeaninternal.server.core.DefaultServer;
import io.ebeaninternal.server.core.OrmQueryRequest;
import io.ebeaninternal.server.core.OrmQueryRequestTestHelper;
-import io.ebeaninternal.server.deploy.BaseTest;
import io.ebeaninternal.server.expression.BaseExpressionTest;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer;
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java
index f1eecb84e..bf5d7a3df 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/DefaultTypeManagerTest.java
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.type;
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
import io.ebean.core.type.ScalarType;
import io.ebeaninternal.server.core.bootup.BootupClasses;
import org.junit.jupiter.api.Test;
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java
index b79851ef6..71108a4ac 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/TestTypeManager.java
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.type;
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.h2.H2Platform;
+import io.ebean.platform.h2.H2Platform;
import io.ebean.core.type.DataReader;
import io.ebean.core.type.ScalarType;
import io.ebeaninternal.server.core.bootup.BootupClasses;
diff --git a/ebean-core/src/test/java/org/tests/model/basic/Contact.java b/ebean-core/src/test/java/org/tests/model/basic/Contact.java
index 883d27d5c..a4d670071 100644
--- a/ebean-core/src/test/java/org/tests/model/basic/Contact.java
+++ b/ebean-core/src/test/java/org/tests/model/basic/Contact.java
@@ -40,7 +40,7 @@ public class Contact {
@OneToMany(cascade = CascadeType.ALL)
List notes;
- @CreatedTimestamp
+ @WhenCreated
Timestamp cretime;
@Version
diff --git a/ebean-core/src/test/java/org/tests/model/basic/Product.java b/ebean-core/src/test/java/org/tests/model/basic/Product.java
index 60f73475c..b0fde6d07 100644
--- a/ebean-core/src/test/java/org/tests/model/basic/Product.java
+++ b/ebean-core/src/test/java/org/tests/model/basic/Product.java
@@ -33,7 +33,7 @@ public class Product implements Serializable {
String name;
- @CreatedTimestamp
+ @WhenCreated
Timestamp cretime;
@Version
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index 2005cef48..3572e4be9 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -61,7 +61,14 @@
13.2.1-SNAPSHOT
test
-
+
+
+ io.ebean
+ ebean-platform-all
+ 13.2.1-SNAPSHOT
+ test
+
+
io.ebean
ebean-datasource
@@ -104,17 +111,6 @@
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
index 6c6fc6c7a..eb3676690 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
@@ -9,28 +9,7 @@ import io.ebean.config.DbConstraintNaming;
import io.ebean.config.PlatformConfig;
import io.ebean.config.PropertiesWrapper;
import io.ebean.config.dbplatform.DatabasePlatform;
-import io.ebean.config.dbplatform.clickhouse.ClickHousePlatform;
-import io.ebean.config.dbplatform.cockroach.CockroachPlatform;
-import io.ebean.config.dbplatform.db2.DB2ForIPlatform;
-import io.ebean.config.dbplatform.db2.DB2LegacyPlatform;
-import io.ebean.config.dbplatform.db2.DB2LuwPlatform;
-import io.ebean.config.dbplatform.db2.DB2ZosPlatform;
-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.mariadb.MariaDbPlatform;
-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.Oracle11Platform;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
-import io.ebean.config.dbplatform.postgres.Postgres9Platform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import io.ebean.config.dbplatform.sqlanywhere.SqlAnywherePlatform;
-import io.ebean.config.dbplatform.sqlite.SQLitePlatform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer16Platform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
-import io.ebean.config.dbplatform.yugabyte.YugabytePlaform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
import io.ebean.dbmigration.DbMigration;
import io.ebean.util.IOUtils;
import io.ebean.util.StringHelper;
@@ -53,8 +32,10 @@ import java.io.Writer;
import java.util.ArrayList;
import java.util.List;
import java.util.Properties;
+import java.util.ServiceLoader;
import java.util.StringJoiner;
+
import static io.ebeaninternal.api.PlatformMatch.matchPlatform;
/**
@@ -84,6 +65,7 @@ public class DefaultDbMigration implements DbMigration {
private static final String initialVersion = "1.0";
private static final String GENERATED_COMMENT = "THIS IS A GENERATED FILE - DO NOT MODIFY";
+ private List platformProviders = new ArrayList<>();
protected boolean online;
private boolean logToSystemOut = true;
protected SpiEbeanServer server;
@@ -121,6 +103,9 @@ public class DefaultDbMigration implements DbMigration {
*/
public DefaultDbMigration() {
this.online = false;
+ for (DatabasePlatformProvider platformProvider : ServiceLoader.load(DatabasePlatformProvider.class)) {
+ platformProviders.add(platformProvider);
+ }
}
@Override
@@ -892,58 +877,18 @@ public class DefaultDbMigration implements DbMigration {
*/
protected DatabasePlatform platform(Platform platform) {
switch (platform) {
- case H2:
- return new H2Platform();
- case HSQLDB:
- return new HsqldbPlatform();
- case POSTGRES9:
- return new Postgres9Platform();
- case POSTGRES:
- return new PostgresPlatform();
- case YUGABYTE:
- return new YugabytePlaform();
- case MARIADB:
- return new MariaDbPlatform();
- case MYSQL55:
- return new MySql55Platform();
- case MYSQL:
- return new MySqlPlatform();
- case ORACLE:
- return new OraclePlatform();
- case ORACLE11:
- return new Oracle11Platform();
- case SQLANYWHERE:
- return new SqlAnywherePlatform();
- case SQLSERVER16:
- return new SqlServer16Platform();
- case SQLSERVER17:
- return new SqlServer17Platform();
case SQLSERVER:
throw new IllegalArgumentException("Please choose the more specific SQLSERVER16 or SQLSERVER17 platform. Refer to issue #1340 for details");
case DB2:
logger.warn("Using DB2LegacyPlatform. It is recommended to migrate to db2luw/db2zos/db2fori. Refer to issue #2514 for details");
- return new DB2LegacyPlatform();
- case DB2LUW:
- return new DB2LuwPlatform();
- case DB2ZOS:
- return new DB2ZosPlatform();
- case DB2FORI:
- return new DB2ForIPlatform();
- case SQLITE:
- return new SQLitePlatform();
- case HANA:
- return new HanaPlatform();
- case NUODB:
- return new NuoDbPlatform();
- case COCKROACH:
- return new CockroachPlatform();
- case CLICKHOUSE:
- return new ClickHousePlatform();
-
case GENERIC:
return new DatabasePlatform();
-
default:
+ for (DatabasePlatformProvider platformProvider : platformProviders) {
+ if (platformProvider.matchPlatform(platform)) {
+ return platformProvider.create(platform);
+ }
+ }
throw new IllegalArgumentException("Platform missing? " + platform);
}
}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java
index 5f45ee2f7..9726b1983 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/H2HistoryDdl.java
@@ -9,7 +9,7 @@ import io.ebeaninternal.dbmigration.ddlgeneration.DdlBuffer;
*/
public class H2HistoryDdl extends DbTriggerBasedHistoryDdl {
- private static final String TRIGGER_CLASS = "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+ private static final String TRIGGER_CLASS = "io.ebean.platform.h2.H2HistoryTrigger";
H2HistoryDdl() {
this.sysPeriodType = "timestamp";
diff --git a/ebean-ddl-generator/src/main/java9/module-info.java b/ebean-ddl-generator/src/main/java/module-info.java
similarity index 63%
rename from ebean-ddl-generator/src/main/java9/module-info.java
rename to ebean-ddl-generator/src/main/java/module-info.java
index 3553b3f58..5a7869793 100644
--- a/ebean-ddl-generator/src/main/java9/module-info.java
+++ b/ebean-ddl-generator/src/main/java/module-info.java
@@ -1,9 +1,8 @@
-open module io.ebean.ddl.generator {
+module io.ebean.ddl.generator {
exports io.ebean.dbmigration;
- provides io.ebean.plugin.Plugin with io.ebeaninternal.dbmigration.DbMigrationPlugin;
- provides io.ebean.plugin.Plugin with io.ebeaninternal.dbmigration.DdlPlugin;
+ provides io.ebean.plugin.Plugin with io.ebeaninternal.dbmigration.DbMigrationPlugin,io.ebeaninternal.dbmigration.DdlPlugin;
requires transitive io.ebean.ddl.runner;
requires transitive io.ebean.core;
@@ -12,4 +11,7 @@ open module io.ebean.ddl.generator {
requires io.ebean.migration;
uses io.ebean.dbmigration.DbMigration;
+
+ // support existing tests
+ exports io.ebeaninternal.extraddl.model to io.ebean.test;
}
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/H2PlatformTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/H2PlatformTest.java
index f282b75fc..26e43f4e6 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/H2PlatformTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/H2PlatformTest.java
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration;
-import io.ebean.config.dbplatform.h2.H2Platform;
+import io.ebean.platform.h2.H2Platform;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
import org.junit.jupiter.api.Test;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/HanaPlatformTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/HanaPlatformTest.java
index 5bafff7e0..d7d3ff29d 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/HanaPlatformTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/HanaPlatformTest.java
@@ -2,7 +2,7 @@ package io.ebeaninternal.dbmigration;
import io.ebean.config.PlatformConfig;
import io.ebean.config.dbplatform.DbPlatformType;
-import io.ebean.config.dbplatform.hana.HanaPlatform;
+import io.ebean.platform.hana.HanaPlatform;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
import org.junit.jupiter.api.Test;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
index f953088b9..bf013fd6b 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
@@ -1,8 +1,8 @@
package io.ebeaninternal.dbmigration;
import io.ebean.config.dbplatform.DatabasePlatform;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.postgres.PostgresPlatform;
import org.junit.jupiter.api.Test;
import java.io.File;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/MySqlPlatformTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/MySqlPlatformTest.java
index 8cfcae78a..d94c17f6a 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/MySqlPlatformTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/MySqlPlatformTest.java
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration;
-import io.ebean.config.dbplatform.mysql.MySqlPlatform;
+import io.ebean.platform.mysql.MySqlPlatform;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
import org.junit.jupiter.api.Test;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/OraclePlatformTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/OraclePlatformTest.java
index 9f38f6879..a7566538b 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/OraclePlatformTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/OraclePlatformTest.java
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
+import io.ebean.platform.oracle.OraclePlatform;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
import org.junit.jupiter.api.Test;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/PostgresPlatformTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/PostgresPlatformTest.java
index a374afbeb..814580225 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/PostgresPlatformTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/PostgresPlatformTest.java
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
import org.junit.jupiter.api.Test;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/SqlserverPlatformTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/SqlserverPlatformTest.java
index 9d80285a2..89e7b087f 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/SqlserverPlatformTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/SqlserverPlatformTest.java
@@ -2,7 +2,7 @@ package io.ebeaninternal.dbmigration;
import io.ebean.config.PlatformConfig;
import io.ebean.config.dbplatform.DbPlatformType;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.PlatformDdl;
import org.junit.jupiter.api.Test;
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 afd56d72c..e8b526dca 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
@@ -4,11 +4,11 @@ import io.localtest.BaseTestCase;
import io.ebean.DB;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.dbplatform.DatabasePlatform;
-import io.ebean.config.dbplatform.db2.DB2LuwPlatform;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.hana.HanaPlatform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.db2.DB2LuwPlatform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.hana.HanaPlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.dbmigration.migration.ChangeSet;
import io.ebeaninternal.dbmigration.model.CurrentModel;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java
index 3f09718f6..893ced81d 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdlTest.java
@@ -1,11 +1,10 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
-
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.clickhouse.ClickHousePlatform;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.mysql.MySqlPlatform;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
+import io.ebean.platform.clickhouse.ClickHousePlatform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.mysql.MySqlPlatform;
+import io.ebean.platform.oracle.OraclePlatform;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite;
import io.ebeaninternal.dbmigration.ddlgeneration.Helper;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaDdlTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaDdlTest.java
index 17a904aca..97492d542 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaDdlTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/HanaDdlTest.java
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
-import io.ebean.config.dbplatform.hana.HanaPlatform;
+import io.ebean.platform.hana.HanaPlatform;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite;
import io.ebeaninternal.dbmigration.migration.Column;
import org.junit.jupiter.api.Test;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/OracleDdlTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/OracleDdlTest.java
index 5d74e0b68..847fc2243 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/OracleDdlTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/OracleDdlTest.java
@@ -1,7 +1,7 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.annotation.ConstraintMode;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
+import io.ebean.platform.oracle.OraclePlatform;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
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 c688a669a..7bf3e8d57 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
@@ -3,13 +3,13 @@ package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.DB;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.dbplatform.IdType;
-import io.ebean.config.dbplatform.db2.DB2LuwPlatform;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.hana.HanaPlatform;
-import io.ebean.config.dbplatform.mysql.MySqlPlatform;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.db2.DB2LuwPlatform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.hana.HanaPlatform;
+import io.ebean.platform.mysql.MySqlPlatform;
+import io.ebean.platform.oracle.OraclePlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.dbmigration.ddlgeneration.DdlWrite;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import io.ebeaninternal.dbmigration.migration.AlterColumn;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_CreateIndexTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_CreateIndexTest.java
index 73156d0a7..871a065f1 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_CreateIndexTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_CreateIndexTest.java
@@ -2,13 +2,13 @@ package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.DB;
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.db2.DB2LuwPlatform;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.hana.HanaPlatform;
-import io.ebean.config.dbplatform.mysql.MySqlPlatform;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.db2.DB2LuwPlatform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.hana.HanaPlatform;
+import io.ebean.platform.mysql.MySqlPlatform;
+import io.ebean.platform.oracle.OraclePlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import io.ebeaninternal.dbmigration.migration.CreateIndex;
import org.junit.jupiter.api.Test;
@@ -104,7 +104,7 @@ public class PlatformDdl_CreateIndexTest {
public void db2luw_fkeyCreateIndex() {
String sql = db2LuwDdl.createIndex(fkeyCreateIndex(true));
assertEquals("create unique index ix_mytab_acol on mytab (acol)", sql);
-
+
sql = db2LuwDdl.createIndex(fkeyCreateIndex(false));
assertEquals("create index ix_mytab_acol on mytab (acol)", sql);
}
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_dropUniqueConstraintTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_dropUniqueConstraintTest.java
index cebab093f..bb9aca37d 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_dropUniqueConstraintTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl_dropUniqueConstraintTest.java
@@ -1,12 +1,12 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.hana.HanaPlatform;
-import io.ebean.config.dbplatform.mysql.MySqlPlatform;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.hana.HanaPlatform;
+import io.ebean.platform.mysql.MySqlPlatform;
+import io.ebean.platform.oracle.OraclePlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.dbmigration.ddlgeneration.PlatformDdlBuilder;
import org.junit.jupiter.api.Test;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformTypeConverterTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformTypeConverterTest.java
index 25a4621d5..b9665298e 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformTypeConverterTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformTypeConverterTest.java
@@ -1,8 +1,8 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import io.ebean.config.dbplatform.DbPlatformTypeMapping;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.postgres.PostgresPlatform;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.util.PlatformTypeConverter;
import org.junit.jupiter.api.Test;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdlTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdlTest.java
index 3d12d29b7..b8018cc3d 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdlTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdlTest.java
@@ -1,6 +1,6 @@
package io.ebeaninternal.dbmigration.ddlgeneration.platform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdlTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdlTest.java
index 0cc69865e..76971ddce 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdlTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/SqlServerHistoryDdlTest.java
@@ -3,7 +3,7 @@ package io.ebeaninternal.dbmigration.ddlgeneration.platform;
import org.junit.jupiter.api.Test;
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/build/ModelBuildBeanVisitorTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/build/ModelBuildBeanVisitorTest.java
index a6aee3cd1..7be24c6f7 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/build/ModelBuildBeanVisitorTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/model/build/ModelBuildBeanVisitorTest.java
@@ -6,8 +6,8 @@ import io.ebean.DB;
import io.ebean.DatabaseFactory;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.DbConstraintNaming;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.dbmigration.ddlgeneration.platform.DefaultConstraintMaxLength;
import io.ebeaninternal.dbmigration.model.MColumn;
diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml
index 18c22c3cd..ab0d8ab46 100644
--- a/ebean-externalmapping-api/pom.xml
+++ b/ebean-externalmapping-api/pom.xml
@@ -11,20 +11,4 @@
API for mapping external named queries
ebean-externalmapping-api
-
-
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
-
-
-
diff --git a/ebean-externalmapping-api/src/main/java9/module-info.java b/ebean-externalmapping-api/src/main/java/module-info.java
similarity index 100%
rename from ebean-externalmapping-api/src/main/java9/module-info.java
rename to ebean-externalmapping-api/src/main/java/module-info.java
diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml
index 78ac852db..6e889fc0c 100644
--- a/ebean-externalmapping-xml/pom.xml
+++ b/ebean-externalmapping-xml/pom.xml
@@ -6,11 +6,6 @@
io.ebean
13.2.1-SNAPSHOT
-
-
-
-
-
scm:git:git@github.com:FOCONIS/ebean.git
@@ -42,6 +37,13 @@
2.3.6
+
+ jakarta.activation
+ jakarta.activation-api
+ 1.2.1
+ provided
+
+
io.avaje
classpath-scanner
@@ -56,6 +58,13 @@
test
+
+ io.ebean
+ ebean-platform-h2
+ 13.2.1-SNAPSHOT
+ test
+
+
io.ebean
ebean-core
@@ -89,8 +98,7 @@
- io.ebean.tile:enhancement:12.15.0
- io.avaje.tile:moditech-module:1.0
+ io.ebean.tile:enhancement:13.1.0
diff --git a/ebean-externalmapping-xml/src/main/java9/module-info.java b/ebean-externalmapping-xml/src/main/java/module-info.java
similarity index 80%
rename from ebean-externalmapping-xml/src/main/java9/module-info.java
rename to ebean-externalmapping-xml/src/main/java/module-info.java
index c81eda11b..de792b2df 100644
--- a/ebean-externalmapping-xml/src/main/java9/module-info.java
+++ b/ebean-externalmapping-xml/src/main/java/module-info.java
@@ -12,7 +12,10 @@ module io.ebean.xmapping.xml {
requires transitive io.ebean.xmapping.api;
requires transitive java.xml;
requires transitive java.xml.bind;
+ requires io.avaje.classpath.scanner.api;
requires io.avaje.classpath.scanner;
+ requires static org.slf4j;
+ requires static java.sql; // for testing
uses ClassPathScannerFactory;
diff --git a/ebean-kotlin/pom.xml b/ebean-kotlin/pom.xml
index 6d9b60fb1..ffa26f953 100644
--- a/ebean-kotlin/pom.xml
+++ b/ebean-kotlin/pom.xml
@@ -91,7 +91,7 @@
true
- io.ebean.tile:enhancement:12.15.0
+ io.ebean.tile:enhancement:13.1.0
diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml
index 316d36368..4bd17df14 100644
--- a/ebean-postgis/pom.xml
+++ b/ebean-postgis/pom.xml
@@ -19,6 +19,12 @@
+
+ io.ebean
+ ebean-platform-postgres
+ 13.2.1-SNAPSHOT
+
+
io.ebean
@@ -98,8 +104,7 @@
true
- io.ebean.tile:enhancement:12.15.0
- io.avaje.tile:moditech-module:1.0
+ io.ebean.tile:enhancement:13.1.0
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index bf442bfd7..ba35a8d5d 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -21,6 +21,13 @@
provided
+
+ io.avaje
+ avaje-jsr305-x
+ 1.1
+ provided
+
+
+
+ jakarta.activation
+ jakarta.activation-api
+ 1.2.1
+ provided
+
+
com.h2database
@@ -79,12 +93,20 @@
${h2database.version}
+
+
+ io.avaje
+ avaje-jsr305-x
+ 1.1
+ provided
+
+
- io.avaje
- avaje-jsr305
- 1.1
+ io.ebean
+ ebean-platform-all
+ 13.2.1-SNAPSHOT
test
@@ -131,12 +153,6 @@
test
-
- javax.annotation
- javax.annotation-api
- 1.3.2
- test
-
commons-io
commons-io
@@ -230,11 +246,12 @@
test
+
io.avaje
junit
1.1
- test
+ provided
@@ -249,8 +266,7 @@
true
- io.ebean.tile:enhancement:12.15.0
- io.avaje.tile:moditech-module:1.0
+ io.ebean.tile:enhancement:13.1.0
diff --git a/ebean-test/src/main/java9/module-info.java b/ebean-test/src/main/java/module-info.java
similarity index 77%
rename from ebean-test/src/main/java9/module-info.java
rename to ebean-test/src/main/java/module-info.java
index 94307a376..a297ce170 100644
--- a/ebean-test/src/main/java9/module-info.java
+++ b/ebean-test/src/main/java/module-info.java
@@ -1,5 +1,5 @@
-open module io.ebean.test {
+module io.ebean.test {
exports io.ebean.test;
exports io.ebean.test.config;
@@ -13,6 +13,7 @@ open module io.ebean.test {
requires transitive io.ebean.datasource;
requires transitive io.ebean.core;
requires transitive io.ebean.ddl.generator;
+ requires com.fasterxml.jackson.annotation;
requires com.fasterxml.jackson.core;
requires com.fasterxml.jackson.databind;
requires com.fasterxml.jackson.datatype.jsr310;
@@ -22,4 +23,9 @@ open module io.ebean.test {
requires transitive java.xml.bind;
requires transitive com.h2database;
+ // support testing
+ requires static org.junit.jupiter.api;
+ requires static jdk.management;
+ requires static io.avaje.jsr305x;
+ requires io.ebean.api;
}
diff --git a/ebean-test/src/test/java/io/ebean/config/TestServerOffline.java b/ebean-test/src/test/java/io/ebean/test/config/TestServerOffline.java
similarity index 98%
rename from ebean-test/src/test/java/io/ebean/config/TestServerOffline.java
rename to ebean-test/src/test/java/io/ebean/test/config/TestServerOffline.java
index 75e0288f2..ff0aaa686 100644
--- a/ebean-test/src/test/java/io/ebean/config/TestServerOffline.java
+++ b/ebean-test/src/test/java/io/ebean/test/config/TestServerOffline.java
@@ -1,9 +1,10 @@
-package io.ebean.config;
+package io.ebean.test.config;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.annotation.Platform;
+import io.ebean.config.DatabaseConfig;
import io.ebean.datasource.DataSourceAlert;
import io.ebean.datasource.DataSourceInitialiseException;
import io.ebean.xtest.ForPlatform;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/base/EbeanServerFactory_MultiTenancy_Test.java b/ebean-test/src/test/java/io/ebean/xtest/base/EbeanServerFactory_MultiTenancy_Test.java
index 7547436b3..291565728 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/base/EbeanServerFactory_MultiTenancy_Test.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/base/EbeanServerFactory_MultiTenancy_Test.java
@@ -4,8 +4,8 @@ import io.ebean.xtest.BaseTestCase;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.config.*;
-import io.ebean.config.dbplatform.mysql.MySqlPlatform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import io.ebean.platform.mysql.MySqlPlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
import org.junit.jupiter.api.Test;
import org.mockito.Mockito;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/MatchingNamingConventionTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/MatchingNamingConventionTest.java
index 4e0bb89d4..0742ed2fa 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/MatchingNamingConventionTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/MatchingNamingConventionTest.java
@@ -3,8 +3,8 @@ package io.ebean.xtest.config;
import io.ebean.config.MatchingNamingConvention;
import io.ebean.config.PlatformConfig;
import io.ebean.config.TableName;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/PlatformNoGeneratedKeysTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/PlatformNoGeneratedKeysTest.java
index 1fa24400b..efa396b08 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/PlatformNoGeneratedKeysTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/PlatformNoGeneratedKeysTest.java
@@ -7,7 +7,7 @@ import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.dbplatform.DbIdentity;
import io.ebean.config.dbplatform.IdType;
-import io.ebean.config.dbplatform.h2.H2Platform;
+import io.ebean.platform.h2.H2Platform;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.EBasicVer;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/DbTypeMapTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/DbTypeMapTest.java
index eb59e5e2e..79f0b0ac8 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/DbTypeMapTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/DbTypeMapTest.java
@@ -2,13 +2,13 @@ package io.ebean.xtest.config.dbplatform;
import io.ebean.config.dbplatform.DbPlatformType;
import io.ebean.config.dbplatform.DbPlatformTypeMapping;
-import io.ebean.config.dbplatform.clickhouse.ClickHousePlatform;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.mysql.MySqlPlatform;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer16Platform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.clickhouse.ClickHousePlatform;
+import io.ebean.platform.h2.H2Platform;
+import io.ebean.platform.mysql.MySqlPlatform;
+import io.ebean.platform.oracle.OraclePlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
+import io.ebean.platform.sqlserver.SqlServer16Platform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/HanaHistorySupportTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/HanaHistorySupportTest.java
index 880f7f216..69c743506 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/HanaHistorySupportTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/HanaHistorySupportTest.java
@@ -1,6 +1,6 @@
package io.ebean.xtest.config.dbplatform;
-import io.ebean.config.dbplatform.hana.HanaHistorySupport;
+import io.ebean.platform.hana.HanaHistorySupport;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/HanaPlatformTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/HanaPlatformTest.java
index 5c56b7fb8..f7fc9392d 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/HanaPlatformTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/HanaPlatformTest.java
@@ -2,7 +2,7 @@ package io.ebean.xtest.config.dbplatform;
import io.ebean.config.PlatformConfig;
import io.ebean.config.dbplatform.DbPlatformType;
-import io.ebean.config.dbplatform.hana.HanaPlatform;
+import io.ebean.platform.hana.HanaPlatform;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/MySqlHistorySupportTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/MySqlHistorySupportTest.java
index d3a36ba0d..61446c0bc 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/MySqlHistorySupportTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/MySqlHistorySupportTest.java
@@ -1,7 +1,7 @@
package io.ebean.xtest.config.dbplatform;
-import io.ebean.config.dbplatform.mysql.MySqlHistorySupport;
+import io.ebean.platform.mysql.MySqlHistorySupport;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/PostgresHistorySupportTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/PostgresHistorySupportTest.java
index 3e473b80f..135675591 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/PostgresHistorySupportTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/PostgresHistorySupportTest.java
@@ -1,6 +1,6 @@
package io.ebean.xtest.config.dbplatform;
-import io.ebean.config.dbplatform.postgres.PostgresHistorySupport;
+import io.ebean.platform.postgres.PostgresHistorySupport;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/SqlserverPlatformTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/SqlserverPlatformTest.java
index c2459470a..fbbb8924c 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/SqlserverPlatformTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/SqlserverPlatformTest.java
@@ -2,7 +2,7 @@ package io.ebean.xtest.config.dbplatform;
import io.ebean.config.PlatformConfig;
import io.ebean.config.dbplatform.DbPlatformType;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/sqlserver/SqlServer2016PlatformTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/sqlserver/SqlServer2016PlatformTest.java
index 82fbda0bf..206b7f65d 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/sqlserver/SqlServer2016PlatformTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/sqlserver/SqlServer2016PlatformTest.java
@@ -1,7 +1,7 @@
package io.ebean.xtest.config.dbplatform.sqlserver;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
-import io.ebean.config.dbplatform.sqlserver.SqlServerHistorySupport;
+import io.ebean.platform.sqlserver.SqlServer17Platform;
+import io.ebean.platform.sqlserver.SqlServerHistorySupport;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/sqlserver/SqlServerStepSequenceTest.java b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/sqlserver/SqlServerStepSequenceTest.java
index a2ffd5f7c..a9305bd2a 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/sqlserver/SqlServerStepSequenceTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/config/dbplatform/sqlserver/SqlServerStepSequenceTest.java
@@ -4,7 +4,7 @@ import io.ebean.BackgroundExecutor;
import io.ebean.xtest.BaseTestCase;
import io.ebean.xtest.ForPlatform;
import io.ebean.annotation.Platform;
-import io.ebean.config.dbplatform.sqlserver.SqlServerStepSequence;
+import io.ebean.platform.sqlserver.SqlServerStepSequence;
import org.junit.jupiter.api.Disabled;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/dbmigration/DbMigrationTest.java b/ebean-test/src/test/java/io/ebean/xtest/dbmigration/DbMigrationTest.java
index 56cdbf964..a337fc1b3 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/dbmigration/DbMigrationTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/dbmigration/DbMigrationTest.java
@@ -4,7 +4,7 @@ import io.ebean.*;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.dbplatform.DbHistorySupport;
-import io.ebean.datasource.pool.ConnectionPool;
+import io.ebean.datasource.DataSourcePool;
import io.ebean.xtest.BaseTestCase;
import io.ebean.xtest.IgnorePlatform;
import misc.migration.v1_0.ETable;
@@ -38,7 +38,7 @@ public class DbMigrationTest extends BaseTestCase {
private void runScript(String scriptName) {
URL url = getClass().getResource("/migrationtest/dbmigration/" + server().platform().name().toLowerCase() + "/" + scriptName);
- assert url != null : scriptName + " not found";
+ assert url != null : scriptName + " not found for platform [" + server().platform().name().toLowerCase() + "]";
server().script().run(url);
}
@@ -51,8 +51,8 @@ public class DbMigrationTest extends BaseTestCase {
@Test
public void testRunMigration() throws IOException, SQLException {
// Shutdown and reconnect - this prevents postgres from lock up
- ((ConnectionPool)server().dataSource()).offline();
- ((ConnectionPool)server().dataSource()).online();
+ ((DataSourcePool)server().dataSource()).offline();
+ ((DataSourcePool)server().dataSource()).online();
cleanup("migtest_ckey_assoc",
"migtest_ckey_detail",
"migtest_ckey_parent",
@@ -86,8 +86,8 @@ public class DbMigrationTest extends BaseTestCase {
"table",
"\"table\"",
"`table`");
- ((ConnectionPool)server().dataSource()).offline();
- ((ConnectionPool)server().dataSource()).online();
+ ((DataSourcePool)server().dataSource()).offline();
+ ((DataSourcePool)server().dataSource()).online();
if (isSqlServer() || isMariaDB() || isMySql() || isHana()) {
runScript("I__create_procs.sql");
diff --git a/ebean-test/src/test/java/io/ebean/xtest/expression/IsEmptyExpressionQueryTest.java b/ebean-test/src/test/java/io/ebean/xtest/expression/IsEmptyExpressionQueryTest.java
index 3227ca02e..f5c921c81 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/expression/IsEmptyExpressionQueryTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/expression/IsEmptyExpressionQueryTest.java
@@ -4,7 +4,6 @@ import io.ebean.xtest.BaseTestCase;
import io.ebean.DB;
import io.ebean.Query;
import io.ebean.test.LoggedSql;
-import org.assertj.core.api.Assertions;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Contact;
import org.tests.model.basic.Customer;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java
index de0e61945..909ddcbb3 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java
@@ -495,21 +495,11 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
return null;
}
- @Override
- public SqlQuery createSqlQuery(String sql) {
- return sqlQuery(sql);
- }
-
@Override
public SqlUpdate sqlUpdate(String sql) {
return null;
}
- @Override
- public SqlUpdate createSqlUpdate(String sql) {
- return sqlUpdate(sql);
- }
-
@Override
public CallableSql createCallableSql(String callableSql) {
return null;
@@ -653,11 +643,6 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
return null;
}
- @Override
- public Stream findLargeStream(Query query, Transaction transaction) {
- return null;
- }
-
@Override
public void findEach(Query query, Consumer consumer, Transaction transaction) {
}
diff --git a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java
index 25f89e460..cd6f2cc40 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiServer.java
@@ -177,21 +177,11 @@ public class TDSpiServer implements SpiServer {
return null;
}
- @Override
- public SqlQuery createSqlQuery(String sql) {
- return null;
- }
-
@Override
public SqlUpdate sqlUpdate(String sql) {
return null;
}
- @Override
- public SqlUpdate createSqlUpdate(String sql) {
- return null;
- }
-
@Override
public CallableSql createCallableSql(String callableSql) {
return null;
diff --git a/ebean-test/src/test/java/io/ebean/xtest/internal/server/text/json/DJsonScalarTest.java b/ebean-test/src/test/java/io/ebean/xtest/internal/server/text/json/DJsonScalarTest.java
index b05eb5ff6..6ffd81a10 100644
--- a/ebean-test/src/test/java/io/ebean/xtest/internal/server/text/json/DJsonScalarTest.java
+++ b/ebean-test/src/test/java/io/ebean/xtest/internal/server/text/json/DJsonScalarTest.java
@@ -3,7 +3,7 @@ package io.ebean.xtest.internal.server.text.json;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.h2.H2Platform;
+import io.ebean.platform.h2.H2Platform;
import io.ebeaninternal.server.core.bootup.BootupClasses;
import io.ebeaninternal.server.text.json.DJsonScalar;
import io.ebeaninternal.server.type.DefaultTypeManager;
diff --git a/ebean-test/src/test/java/org/multitenant/partition/CurrentTenant.java b/ebean-test/src/test/java/org/multitenant/partition/CurrentTenant.java
index 7e8b73b9f..3166f95f2 100644
--- a/ebean-test/src/test/java/org/multitenant/partition/CurrentTenant.java
+++ b/ebean-test/src/test/java/org/multitenant/partition/CurrentTenant.java
@@ -2,13 +2,22 @@ package org.multitenant.partition;
import io.ebean.config.CurrentTenantProvider;
+import java.util.concurrent.atomic.AtomicInteger;
+
class CurrentTenant implements CurrentTenantProvider {
+ static AtomicInteger callCounter = new AtomicInteger();
+
+ static int count() {
+ return callCounter.get();
+ }
+
/**
* Return the current tenantId from the user context.
*/
@Override
public String currentId() {
+ callCounter.incrementAndGet();
return UserContext.get().getTenantId();
}
}
diff --git a/ebean-test/src/test/java/org/multitenant/partition/MtNone.java b/ebean-test/src/test/java/org/multitenant/partition/MtNone.java
new file mode 100644
index 000000000..83968e172
--- /dev/null
+++ b/ebean-test/src/test/java/org/multitenant/partition/MtNone.java
@@ -0,0 +1,21 @@
+package org.multitenant.partition;
+
+import javax.persistence.Entity;
+import javax.persistence.Id;
+import javax.persistence.Version;
+
+@Entity
+public class MtNone {
+
+ @Id
+ long id;
+
+ final String none;
+
+ @Version
+ long version;
+
+ public MtNone(String none) {
+ this.none = none;
+ }
+}
diff --git a/ebean-test/src/test/java/org/multitenant/partition/MultiTenantPartitionTest.java b/ebean-test/src/test/java/org/multitenant/partition/MultiTenantPartitionTest.java
index a70a4cc35..f6bbade52 100644
--- a/ebean-test/src/test/java/org/multitenant/partition/MultiTenantPartitionTest.java
+++ b/ebean-test/src/test/java/org/multitenant/partition/MultiTenantPartitionTest.java
@@ -1,11 +1,11 @@
package org.multitenant.partition;
-import io.ebean.xtest.BaseTestCase;
import io.ebean.Database;
import io.ebean.DatabaseFactory;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.TenantMode;
import io.ebean.test.LoggedSql;
+import io.ebean.xtest.BaseTestCase;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.Test;
@@ -15,7 +15,7 @@ import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
-public class MultiTenantPartitionTest extends BaseTestCase {
+class MultiTenantPartitionTest extends BaseTestCase {
private static final String[] names = {"Ace", "Base", "Case", "Dae", "Eva"};
@@ -33,13 +33,26 @@ public class MultiTenantPartitionTest extends BaseTestCase {
}
@AfterAll
- public static void shutdown() {
+ static void shutdown() {
server.shutdown();
}
@Test
- public void start() {
+ void queryOnly_noTenantIdRequired_expect_currentTenantNotCalled() {
+ // MtNone does not have any @TenantId property
+ MtNone none = new MtNone("none");
+ server.save(none);
+ int beforeCount = CurrentTenant.count();
+ // CurrentTenant should not be called for this query
+ server.find(MtNone.class).findList();
+ int afterCount = CurrentTenant.count();
+
+ assertThat(afterCount).isSameAs(beforeCount);
+ }
+
+ @Test
+ void start() {
UserContext.set("rob", "ten_1");
LoggedSql.start();
@@ -64,8 +77,7 @@ public class MultiTenantPartitionTest extends BaseTestCase {
}
@Test
- public void deleteById() {
-
+ void deleteById() {
UserContext.set("fred", "ten_2");
MtContent content = new MtContent("first title");
@@ -83,8 +95,7 @@ public class MultiTenantPartitionTest extends BaseTestCase {
}
@Test
- public void deleteByIds() {
-
+ void deleteByIds() {
UserContext.set("fred", "ten_2");
MtContent a = newContent("title a");
@@ -107,11 +118,8 @@ public class MultiTenantPartitionTest extends BaseTestCase {
return content;
}
-
private static Database init() {
-
DatabaseConfig config = new DatabaseConfig();
-
config.setName("h2multitenant");
config.loadFromProperties();
config.setDdlGenerate(true);
@@ -124,6 +132,7 @@ public class MultiTenantPartitionTest extends BaseTestCase {
config.getClasses().add(MtTenant.class);
config.getClasses().add(MtContent.class);
+ config.getClasses().add(MtNone.class);
return DatabaseFactory.create(config);
}
diff --git a/ebean-test/src/test/java/org/tests/basic/MainDbBoolean.java b/ebean-test/src/test/java/org/tests/basic/MainDbBoolean.java
index a45243287..31cbbfd0a 100644
--- a/ebean-test/src/test/java/org/tests/basic/MainDbBoolean.java
+++ b/ebean-test/src/test/java/org/tests/basic/MainDbBoolean.java
@@ -5,7 +5,7 @@ import io.ebean.DatabaseFactory;
import io.ebean.Query;
import io.ebean.SqlRow;
import io.ebean.config.DatabaseConfig;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
import io.ebean.datasource.DataSourceConfig;
import org.tests.model.basic.TOne;
import org.tests.model.basic.TSDetail;
diff --git a/ebean-test/src/test/java/org/tests/basic/TestManyOneInterface.java b/ebean-test/src/test/java/org/tests/basic/TestManyOneInterface.java
index f915aaf8f..f4b35ae27 100644
--- a/ebean-test/src/test/java/org/tests/basic/TestManyOneInterface.java
+++ b/ebean-test/src/test/java/org/tests/basic/TestManyOneInterface.java
@@ -25,7 +25,7 @@ public class TestManyOneInterface extends BaseTestCase {
IPerson p = DB.getDefault().createEntityBean(Person.class);
assertThat(p).isInstanceOf(ExtPerson1and2.class);
- p = DB.getDefault().getPluginApi().createEntityBean(IPerson.class);
+ p = DB.getDefault().pluginApi().createEntityBean(IPerson.class);
assertThat(p).isInstanceOf(ExtPerson1and2.class);
p.setDefaultAddress(a);
@@ -46,8 +46,8 @@ public class TestManyOneInterface extends BaseTestCase {
assertThat(p2.getDefaultAddress()).isInstanceOf(Address.class);
// some more checks
- IExtPerson1 pe1 = DB.getDefault().getPluginApi().createEntityBean(IExtPerson1.class);
- IExtPerson2 pe2 = DB.getDefault().getPluginApi().createEntityBean(IExtPerson2.class);
+ IExtPerson1 pe1 = DB.getDefault().pluginApi().createEntityBean(IExtPerson1.class);
+ IExtPerson2 pe2 = DB.getDefault().pluginApi().createEntityBean(IExtPerson2.class);
assertThat(pe1).isInstanceOf(ExtPerson1and2.class);
assertThat(pe2).isInstanceOf(ExtPerson1and2.class);
diff --git a/ebean-test/src/test/java/org/tests/model/EGenProps.java b/ebean-test/src/test/java/org/tests/model/EGenProps.java
index f5dcadd43..623b131f9 100644
--- a/ebean-test/src/test/java/org/tests/model/EGenProps.java
+++ b/ebean-test/src/test/java/org/tests/model/EGenProps.java
@@ -1,7 +1,5 @@
package org.tests.model;
-import io.ebean.annotation.CreatedTimestamp;
-import io.ebean.annotation.UpdatedTimestamp;
import io.ebean.annotation.WhenCreated;
import io.ebean.annotation.WhenModified;
@@ -31,40 +29,40 @@ public class EGenProps {
@WhenModified
Timestamp whenModified;
- @CreatedTimestamp
+ @WhenCreated
Timestamp tsCreated;
- @UpdatedTimestamp
+ @WhenModified
Timestamp tsUpdated;
- @CreatedTimestamp
+ @WhenCreated
LocalDateTime ldtCreated;
- @UpdatedTimestamp
+ @WhenModified
LocalDateTime ldtUpdated;
- @CreatedTimestamp
+ @WhenCreated
OffsetDateTime odtCreated;
- @UpdatedTimestamp
+ @WhenModified
OffsetDateTime odtUpdated;
- @CreatedTimestamp
+ @WhenCreated
ZonedDateTime zdtCreated;
- @UpdatedTimestamp
+ @WhenModified
ZonedDateTime zdtUpdated;
- @CreatedTimestamp
+ @WhenCreated
Instant instantCreated;
- @UpdatedTimestamp
+ @WhenModified
Instant instantUpdated;
- @CreatedTimestamp
+ @WhenCreated
long longCreated;
- @UpdatedTimestamp
+ @WhenModified
long longUpdated;
public Long getId() {
diff --git a/ebean-test/src/test/java/org/tests/model/basic/Contact.java b/ebean-test/src/test/java/org/tests/model/basic/Contact.java
index 883d27d5c..a4d670071 100644
--- a/ebean-test/src/test/java/org/tests/model/basic/Contact.java
+++ b/ebean-test/src/test/java/org/tests/model/basic/Contact.java
@@ -40,7 +40,7 @@ public class Contact {
@OneToMany(cascade = CascadeType.ALL)
List notes;
- @CreatedTimestamp
+ @WhenCreated
Timestamp cretime;
@Version
diff --git a/ebean-test/src/test/java/org/tests/model/basic/Product.java b/ebean-test/src/test/java/org/tests/model/basic/Product.java
index 60f73475c..b0fde6d07 100644
--- a/ebean-test/src/test/java/org/tests/model/basic/Product.java
+++ b/ebean-test/src/test/java/org/tests/model/basic/Product.java
@@ -33,7 +33,7 @@ public class Product implements Serializable {
String name;
- @CreatedTimestamp
+ @WhenCreated
Timestamp cretime;
@Version
diff --git a/ebean-test/src/test/java/org/tests/model/basic/cache/TestNatKeyCacheWithForeignKey.java b/ebean-test/src/test/java/org/tests/model/basic/cache/TestNatKeyCacheWithForeignKey.java
index 6e73f72c4..c08edb848 100644
--- a/ebean-test/src/test/java/org/tests/model/basic/cache/TestNatKeyCacheWithForeignKey.java
+++ b/ebean-test/src/test/java/org/tests/model/basic/cache/TestNatKeyCacheWithForeignKey.java
@@ -117,9 +117,9 @@ public class TestNatKeyCacheWithForeignKey extends BaseTestCase {
@Test
public void findSimple() {
-
setupData();
clearAllL2Cache();
+ appStats();
OCachedApp app0 = findAppByName("app0");
assertThat(app0).isNotNull();
diff --git a/ebean-test/src/test/java/org/tests/model/interfaces/Address.java b/ebean-test/src/test/java/org/tests/model/interfaces/Address.java
index 0e5f7a32e..454616fea 100644
--- a/ebean-test/src/test/java/org/tests/model/interfaces/Address.java
+++ b/ebean-test/src/test/java/org/tests/model/interfaces/Address.java
@@ -1,6 +1,6 @@
package org.tests.model.interfaces;
-import io.ebean.annotation.EntityImplements;
+import io.ebean.annotation.ext.EntityImplements;
import javax.persistence.Entity;
import javax.persistence.Id;
diff --git a/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson1.java b/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson1.java
index ffe781ecf..dc9fac9e0 100644
--- a/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson1.java
+++ b/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson1.java
@@ -1,7 +1,7 @@
package org.tests.model.interfaces;
-import io.ebean.annotation.EntityImplements;
-import io.ebean.annotation.EntityOverride;
+import io.ebean.annotation.ext.EntityImplements;
+import io.ebean.annotation.ext.EntityOverride;
import javax.persistence.Entity;
diff --git a/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson1and2.java b/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson1and2.java
index edc7486f2..a6d2661fd 100644
--- a/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson1and2.java
+++ b/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson1and2.java
@@ -1,7 +1,7 @@
package org.tests.model.interfaces;
-import io.ebean.annotation.EntityImplements;
-import io.ebean.annotation.EntityOverride;
+import io.ebean.annotation.ext.EntityImplements;
+import io.ebean.annotation.ext.EntityOverride;
import javax.persistence.Entity;
import javax.persistence.Table;
diff --git a/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson2.java b/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson2.java
index d1866ba4a..670f73ad3 100644
--- a/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson2.java
+++ b/ebean-test/src/test/java/org/tests/model/interfaces/ExtPerson2.java
@@ -1,7 +1,7 @@
package org.tests.model.interfaces;
-import io.ebean.annotation.EntityImplements;
-import io.ebean.annotation.EntityOverride;
+import io.ebean.annotation.ext.EntityImplements;
+import io.ebean.annotation.ext.EntityOverride;
import javax.persistence.Entity;
import javax.persistence.Table;
diff --git a/ebean-test/src/test/java/org/tests/model/interfaces/Person.java b/ebean-test/src/test/java/org/tests/model/interfaces/Person.java
index 50d6b9330..a2e5e8daf 100644
--- a/ebean-test/src/test/java/org/tests/model/interfaces/Person.java
+++ b/ebean-test/src/test/java/org/tests/model/interfaces/Person.java
@@ -1,6 +1,6 @@
package org.tests.model.interfaces;
-import io.ebean.annotation.EntityImplements;
+import io.ebean.annotation.ext.EntityImplements;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
diff --git a/ebean-test/src/test/java/org/tests/query/TestQueryFindStream.java b/ebean-test/src/test/java/org/tests/query/TestQueryFindStream.java
index b53276d40..894141654 100644
--- a/ebean-test/src/test/java/org/tests/query/TestQueryFindStream.java
+++ b/ebean-test/src/test/java/org/tests/query/TestQueryFindStream.java
@@ -37,27 +37,6 @@ public class TestQueryFindStream extends BaseTestCase {
}
}
- @Test
- public void findLargeStream_basic() {
- ResetBasicData.reset();
- try (Stream stream = DB.find(Customer.class)
- .findLargeStream()) {
-
- // bad example, don't use a stream like this when we can
- // use findSingleAttributeList() instead
- final List namesStream = stream
- .map(Customer::getName)
- .collect(toList());
-
- final List namesQuery = DB.find(Customer.class)
- .select("name")
- .findSingleAttributeList();
-
- assertThat(namesStream).hasSize(namesQuery.size());
- assertThat(namesStream).containsAll(namesQuery);
- }
- }
-
@Test
public void manualTest_findSteam_when_closeWithResources() {
// confirm manually the stream is closed via try with resources block
diff --git a/ebean-test/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java b/ebean-test/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
index fd3768090..99379e374 100644
--- a/ebean-test/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
+++ b/ebean-test/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
@@ -13,6 +13,7 @@ import org.tests.model.basic.ResetBasicData;
import java.math.BigDecimal;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.sql.Types;
import java.time.OffsetDateTime;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
@@ -23,6 +24,54 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
public class SqlQueryTests extends BaseTestCase {
+ @ForPlatform(Platform.H2)
+ @Test
+ public void selectBindNull_byPos() {
+ String sql = "select nvl(cast(? as int), 42)";
+ final Long val = DB.sqlQuery(sql)
+ .setNullParameter(1, Types.INTEGER)
+ .mapToScalar(Long.class)
+ .findOne();
+
+ assertThat(val).isEqualTo(42);
+ }
+
+ @ForPlatform(Platform.H2)
+ @Test
+ public void selectBindNull_byName() {
+ String sql = "select nvl(cast(:val as int), 42)";
+ final Long val = DB.sqlQuery(sql)
+ .setNullParameter("val", Types.INTEGER)
+ .mapToScalar(Long.class)
+ .findOne();
+
+ assertThat(val).isEqualTo(42);
+ }
+
+ @ForPlatform(Platform.H2)
+ @Test
+ public void selectBindNull_usingSetParameter_ByPosition() {
+ String sql = "select nvl(cast(? as int), 42)";
+ final Long val = DB.sqlQuery(sql)
+ .setParameter(1, null)
+ .mapToScalar(Long.class)
+ .findOne();
+
+ assertThat(val).isEqualTo(42);
+ }
+
+ @ForPlatform(Platform.H2)
+ @Test
+ public void selectBindNull_usingSetParameter_byName() {
+ String sql = "select nvl(cast(:val as int), 42)";
+ final Long val = DB.sqlQuery(sql)
+ .setParameter("val", null)
+ .mapToScalar(Long.class)
+ .findOne();
+
+ assertThat(val).isEqualTo(42);
+ }
+
@ForPlatform(Platform.H2)
@Test
public void selectFunction() {
diff --git a/ebean-test/src/test/resources/migrationtest-history/dbmigration/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest-history/dbmigration/1.0__initial.sql
index 6c49b58a9..e5a7b67cb 100644
--- a/ebean-test/src/test/resources/migrationtest-history/dbmigration/1.0__initial.sql
+++ b/ebean-test/src/test/resources/migrationtest-history/dbmigration/1.0__initial.sql
@@ -15,5 +15,5 @@ create table migtest_e_history7_history(
sys_period_end timestamp
);
create view migtest_e_history7_with_history as select * from migtest_e_history7 union all select * from migtest_e_history7_history;
-create trigger migtest_e_history7_history_upd before update,delete on migtest_e_history7 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history7_history_upd before update,delete on migtest_e_history7 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql
index add87042b..4deaeeaa5 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.0__initial.sql
@@ -1,13 +1,13 @@
-- Migrationscripts for ebean unittest
-- apply changes
create table migtest_ckey_assoc (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
assoc_one varchar(255),
constraint pk_migtest_ckey_assoc primary key (id)
);
create table migtest_ckey_detail (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
something varchar(255),
constraint pk_migtest_ckey_detail primary key (id)
);
@@ -21,48 +21,48 @@ create table migtest_ckey_parent (
);
create table migtest_fk_cascade (
- id bigint generated by default as identity not null,
+ id bigint auto_increment not null,
one_id bigint,
constraint pk_migtest_fk_cascade primary key (id)
);
create table migtest_fk_cascade_one (
- id bigint generated by default as identity not null,
+ id bigint auto_increment not null,
constraint pk_migtest_fk_cascade_one primary key (id)
);
create table migtest_fk_none (
- id bigint generated by default as identity not null,
+ id bigint auto_increment not null,
one_id bigint,
constraint pk_migtest_fk_none primary key (id)
);
create table migtest_fk_none_via_join (
- id bigint generated by default as identity not null,
+ id bigint auto_increment not null,
one_id bigint,
constraint pk_migtest_fk_none_via_join primary key (id)
);
create table migtest_fk_one (
- id bigint generated by default as identity not null,
+ id bigint auto_increment not null,
constraint pk_migtest_fk_one primary key (id)
);
create table migtest_fk_set_null (
- id bigint generated by default as identity not null,
+ id bigint auto_increment not null,
one_id bigint,
constraint pk_migtest_fk_set_null primary key (id)
);
create table migtest_e_basic (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
status varchar(1),
status2 varchar(1) default 'N' not null,
name varchar(127),
description varchar(127),
- description_file blob(64M),
- json_list clob(16K) inline length 500 compact,
- a_lob clob(16K) inline length 500 not logged default 'X' not null,
+ description_file blob,
+ json_list clob,
+ a_lob varchar(255) default 'X' not null,
some_date timestamp,
old_boolean boolean default false not null,
old_boolean2 boolean,
@@ -74,26 +74,28 @@ create table migtest_e_basic (
indextest5 varchar(127),
indextest6 varchar(127),
user_id integer not null,
- constraint ck_mgtst__bsc_stts check ( status in ('N','A','I')),
- constraint ck_mgtst__b_z543fg check ( status2 in ('N','A','I')),
+ constraint ck_migtest_e_basic_status check ( status in ('N','A','I')),
+ constraint ck_migtest_e_basic_status2 check ( status2 in ('N','A','I')),
+ constraint uq_migtest_e_basic_indextest2 unique (indextest2),
+ constraint uq_migtest_e_basic_indextest6 unique (indextest6),
constraint pk_migtest_e_basic primary key (id)
-) in TSTABLES index in INDEXTS long in TSTABLES;
+);
create table migtest_e_enum (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
test_status varchar(1),
- constraint ck_mgtst__n_773sok check ( test_status in ('N','A','I')),
+ constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I')),
constraint pk_migtest_e_enum primary key (id)
);
create table migtest_e_history (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
test_string varchar(255),
constraint pk_migtest_e_history primary key (id)
-) in MAIN index in MAIN long in MAIN;
+);
create table migtest_e_history2 (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
test_string varchar(255),
obsolete_string1 varchar(255),
obsolete_string2 varchar(255),
@@ -101,25 +103,25 @@ create table migtest_e_history2 (
);
create table migtest_e_history3 (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
test_string varchar(255),
constraint pk_migtest_e_history3 primary key (id)
);
create table migtest_e_history4 (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
test_number integer,
constraint pk_migtest_e_history4 primary key (id)
);
create table migtest_e_history5 (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
test_number integer,
constraint pk_migtest_e_history5 primary key (id)
);
create table migtest_e_history6 (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
test_number1 integer,
test_number2 integer not null,
constraint pk_migtest_e_history6 primary key (id)
@@ -129,19 +131,21 @@ create table "migtest_QuOtEd" (
id varchar(255) not null,
status1 varchar(1),
status2 varchar(1),
- constraint ck_mgtst_qtd_stts1 check ( status1 in ('N','A','I')),
- constraint ck_mgtst_qtd_stts2 check ( status2 in ('N','A','I')),
+ constraint ck_migtest_quoted_status1 check ( status1 in ('N','A','I')),
+ constraint ck_migtest_quoted_status2 check ( status2 in ('N','A','I')),
+ constraint uq_migtest_quoted_status2 unique (status2),
constraint pk_migtest_quoted primary key (id)
);
create table migtest_e_ref (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
name varchar(127) not null,
+ constraint uq_migtest_e_ref_name unique (name),
constraint pk_migtest_e_ref primary key (id)
);
create table migtest_e_softdelete (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
test_string varchar(255),
constraint pk_migtest_e_softdelete primary key (id)
);
@@ -152,92 +156,50 @@ create table "table" (
"to" varchar(255),
"varchar" varchar(255),
"foreign" varchar(255),
+ constraint uq_table_to unique ("to"),
+ constraint uq_table_varchar unique ("varchar"),
constraint pk_table primary key ("index")
);
comment on column "table"."index" is 'this is a comment';
create table migtest_mtm_c (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
name varchar(255),
constraint pk_migtest_mtm_c primary key (id)
);
create table migtest_mtm_m (
- id bigint generated by default as identity not null,
+ id bigint auto_increment not null,
name varchar(255),
constraint pk_migtest_mtm_m primary key (id)
);
create table migtest_oto_child (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
name varchar(255),
constraint pk_migtest_oto_child primary key (id)
);
create table migtest_oto_master (
- id bigint generated by default as identity not null,
+ id bigint auto_increment not null,
name varchar(255),
constraint pk_migtest_oto_master primary key (id)
);
--- apply alter tables
-alter table "table" add column sys_period_start timestamp(12) not null generated always as row begin;
-alter table "table" add column sys_period_end timestamp(12) not null generated always as row end;
-alter table "table" add column sys_period_txn timestamp(12) generated always as transaction start id;
-alter table "table" add period system_time (sys_period_start,sys_period_end);
-alter table migtest_e_history2 add column sys_period_start timestamp(12) not null generated always as row begin;
-alter table migtest_e_history2 add column sys_period_end timestamp(12) not null generated always as row end;
-alter table migtest_e_history2 add column sys_period_txn timestamp(12) generated always as transaction start id;
-alter table migtest_e_history2 add period system_time (sys_period_start,sys_period_end);
-alter table migtest_e_history3 add column sys_period_start timestamp(12) not null generated always as row begin;
-alter table migtest_e_history3 add column sys_period_end timestamp(12) not null generated always as row end;
-alter table migtest_e_history3 add column sys_period_txn timestamp(12) generated always as transaction start id;
-alter table migtest_e_history3 add period system_time (sys_period_start,sys_period_end);
-alter table migtest_e_history4 add column sys_period_start timestamp(12) not null generated always as row begin;
-alter table migtest_e_history4 add column sys_period_end timestamp(12) not null generated always as row end;
-alter table migtest_e_history4 add column sys_period_txn timestamp(12) generated always as transaction start id;
-alter table migtest_e_history4 add period system_time (sys_period_start,sys_period_end);
-alter table migtest_e_history5 add column sys_period_start timestamp(12) not null generated always as row begin;
-alter table migtest_e_history5 add column sys_period_end timestamp(12) not null generated always as row end;
-alter table migtest_e_history5 add column sys_period_txn timestamp(12) generated always as transaction start id;
-alter table migtest_e_history5 add period system_time (sys_period_start,sys_period_end);
-alter table migtest_e_history6 add column sys_period_start timestamp(12) not null generated always as row begin;
-alter table migtest_e_history6 add column sys_period_end timestamp(12) not null generated always as row end;
-alter table migtest_e_history6 add column sys_period_txn timestamp(12) generated always as transaction start id;
-alter table migtest_e_history6 add period system_time (sys_period_start,sys_period_end);
--- apply post alter
-create unique index uq_mgtst__b_4aybzy on migtest_e_basic(indextest2) exclude null keys;
-create unique index uq_mgtst__b_4ayc02 on migtest_e_basic(indextest6) exclude null keys;
-create table migtest_e_history2_history as (select * from migtest_e_history2) with no data;
-alter table migtest_e_history2 add versioning use history table migtest_e_history2_history;
-create table migtest_e_history3_history as (select * from migtest_e_history3) with no data;
-alter table migtest_e_history3 add versioning use history table migtest_e_history3_history;
-create table migtest_e_history4_history as (select * from migtest_e_history4) with no data;
-alter table migtest_e_history4 add versioning use history table migtest_e_history4_history;
-create table migtest_e_history5_history as (select * from migtest_e_history5) with no data;
-alter table migtest_e_history5 add versioning use history table migtest_e_history5_history;
-create table migtest_e_history6_history as (select * from migtest_e_history6) with no data;
-alter table migtest_e_history6 add versioning use history table migtest_e_history6_history;
-create unique index uq_mgtst_qtd_stts2 on "migtest_QuOtEd"(status2) exclude null keys;
-alter table migtest_e_ref add constraint uq_mgtst__rf_nm unique (name);
-create unique index uq_table_to on "table"("to") exclude null keys;
-create unique index uq_table_varchar on "table"("varchar") exclude null keys;
-create table table_history as (select * from "table") with no data;
-alter table "table" add versioning use history table table_history;
-- foreign keys and indices
-create index ix_mgtst_fk_mok1xj on migtest_fk_cascade (one_id);
-alter table migtest_fk_cascade add constraint fk_mgtst_fk_65kf6l foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict;
+create index ix_migtest_fk_cascade_one_id on migtest_fk_cascade (one_id);
+alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict;
-create index ix_mgtst_fk_c4p3mv on migtest_fk_set_null (one_id);
-alter table migtest_fk_set_null add constraint fk_mgtst_fk_wicx8x foreign key (one_id) references migtest_fk_one (id) on delete set null on update restrict;
+create index ix_migtest_fk_set_null_one_id on migtest_fk_set_null (one_id);
+alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete set null on update restrict;
-create index ix_mgtst__bsc_rf_d on migtest_e_basic (eref_id);
-alter table migtest_e_basic add constraint fk_mgtst__bsc_rf_d foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict;
+create index ix_migtest_e_basic_eref_id on migtest_e_basic (eref_id);
+alter table migtest_e_basic add constraint fk_migtest_e_basic_eref_id foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict;
create index ix_table_foreign on "table" ("foreign");
alter table "table" add constraint fk_table_foreign foreign key ("foreign") references "table" ("index") on delete restrict on update restrict;
-create index ix_mgtst__b_eu8csq on migtest_e_basic (indextest1);
-create index ix_mgtst__b_eu8csu on migtest_e_basic (indextest5);
-create index ix_mgtst_qtd_stts1 on "migtest_QuOtEd" (status1);
+create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1);
+create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5);
+create index ix_migtest_quoted_status1 on "migtest_QuOtEd" (status1);
create index ix_table_from on "table" ("from");
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql
index 3a55740be..10c455972 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.1.sql
@@ -1,92 +1,18 @@
-- Migrationscripts for ebean unittest
-- drop dependencies
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'FK_MGTST_FK_65KF6L' and ucase(tabname) = 'MIGTEST_FK_CASCADE') then
- prepare stmt from 'alter table migtest_fk_cascade drop constraint fk_mgtst_fk_65kf6l';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'FK_MGTST_FK_WICX8X' and ucase(tabname) = 'MIGTEST_FK_SET_NULL') then
- prepare stmt from 'alter table migtest_fk_set_null drop constraint fk_mgtst_fk_wicx8x';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'CK_MGTST__BSC_STTS' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint ck_mgtst__bsc_stts';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'CK_MGTST__B_Z543FG' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint ck_mgtst__b_z543fg';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'UQ_MGTST__B_4AYBZY' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint uq_mgtst__b_4aybzy';
- execute stmt;
-end if;
-end$$
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'UQ_MGTST__B_4AYBZY') then
- prepare stmt from 'drop index uq_mgtst__b_4aybzy';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'UQ_MGTST__B_4AYC02' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint uq_mgtst__b_4ayc02';
- execute stmt;
-end if;
-end$$
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'UQ_MGTST__B_4AYC02') then
- prepare stmt from 'drop index uq_mgtst__b_4ayc02';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'CK_MGTST__N_773SOK' and ucase(tabname) = 'MIGTEST_E_ENUM') then
- prepare stmt from 'alter table migtest_e_enum drop constraint ck_mgtst__n_773sok';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'IX_MGTST__B_EU8CSQ') then
- prepare stmt from 'drop index ix_mgtst__b_eu8csq';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'IX_MGTST__B_EU8CSU') then
- prepare stmt from 'drop index ix_mgtst__b_eu8csu';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'IX_MGTST_QTD_STTS1') then
- prepare stmt from 'drop index ix_mgtst_qtd_stts1';
- execute stmt;
-end if;
-end$$;
+alter table migtest_fk_cascade drop constraint if exists fk_migtest_fk_cascade_one_id;
+alter table migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null_one_id;
+alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status;
+alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status2;
+alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest2;
+alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest6;
+alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status;
+drop index if exists ix_migtest_e_basic_indextest1;
+drop index if exists ix_migtest_e_basic_indextest5;
+drop index if exists ix_migtest_quoted_status1;
-- apply changes
create table migtest_e_user (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
constraint pk_migtest_e_user primary key (id)
);
@@ -94,41 +20,31 @@ create table migtest_mtm_c_migtest_mtm_m (
migtest_mtm_c_id integer not null,
migtest_mtm_m_id bigint not null,
constraint pk_migtest_mtm_c_migtest_mtm_m primary key (migtest_mtm_c_id,migtest_mtm_m_id)
-) in TESTTS index in TESTTS long in TESTTS;
+);
create table migtest_mtm_m_migtest_mtm_c (
migtest_mtm_m_id bigint not null,
migtest_mtm_c_id integer not null,
constraint pk_migtest_mtm_m_migtest_mtm_c primary key (migtest_mtm_m_id,migtest_mtm_c_id)
-) in TSMASTER index in TSMASTER long in TSMASTER;
+);
create table migtest_mtm_m_phone_numbers (
migtest_mtm_m_id bigint not null,
value varchar(255) not null
-) in TSMASTER index in TSMASTER long in TSMASTER;
+);
update migtest_e_basic set status = 'A' where status is null;
--- db2 does not support parial null indices :( - so we have to clean;
-update migtest_e_basic set status = 'N' where id = 1;
+-- rename all collisions;
insert into migtest_e_user (id) select distinct user_id from migtest_e_basic;
-CALL SYSPROC.ADMIN_MOVE_TABLE(CURRENT_SCHEMA,'MIGTEST_E_BASIC','USERSPACE1','USERSPACE1','USERSPACE1','','','','','','MOVE');
-- NOTE: table has @History - special migration may be necessary
update migtest_e_history2 set test_string = 'unknown' where test_string is null;
-alter table migtest_e_history2 drop versioning;
-alter table migtest_e_history3 drop versioning;
-alter table migtest_e_history4 drop versioning;
-alter table migtest_e_history5 drop versioning;
-- NOTE: table has @History - special migration may be necessary
update migtest_e_history6 set test_number1 = 42 where test_number1 is null;
-alter table migtest_e_history6 drop versioning;
-alter table "table" drop versioning;
-CALL SYSPROC.ADMIN_MOVE_TABLE(CURRENT_SCHEMA,'MIGTEST_MTM_C','TESTTS','TESTTS','TESTTS','','','','','','MOVE');
-CALL SYSPROC.ADMIN_MOVE_TABLE(CURRENT_SCHEMA,'MIGTEST_MTM_M','TSMASTER','TSMASTER','TSMASTER','','','','','','MOVE');
-- apply alter tables
alter table "table" add column "select" varchar(255);
alter table migtest_ckey_detail add column one_key integer;
@@ -136,100 +52,71 @@ alter table migtest_ckey_detail add column two_key varchar(127);
alter table migtest_ckey_parent add column assoc_id integer;
alter table migtest_e_basic alter column status set default 'A';
alter table migtest_e_basic alter column status set not null;
-alter table migtest_e_basic alter column status2 set data type varchar(127);
+alter table migtest_e_basic alter column status2 varchar(127);
alter table migtest_e_basic alter column status2 drop default;
-alter table migtest_e_basic alter column status2 drop not null;
+alter table migtest_e_basic alter column status2 set null;
alter table migtest_e_basic alter column a_lob drop default;
-alter table migtest_e_basic alter column a_lob drop not null;
-alter table migtest_e_basic alter column user_id drop not null;
+alter table migtest_e_basic alter column a_lob set null;
+alter table migtest_e_basic alter column user_id set null;
alter table migtest_e_basic add column new_string_field varchar(255) default 'foo''bar' not null;
alter table migtest_e_basic add column new_boolean_field boolean default true not null;
alter table migtest_e_basic add column new_boolean_field2 boolean default true not null;
alter table migtest_e_basic add column progress integer default 0 not null;
alter table migtest_e_basic add column new_integer integer default 42 not null;
-call sysproc.admin_cmd('reorg table migtest_e_basic');
-alter table migtest_e_history add column sys_period_start timestamp(12) not null generated always as row begin;
-alter table migtest_e_history add column sys_period_end timestamp(12) not null generated always as row end;
-alter table migtest_e_history add column sys_period_txn timestamp(12) generated always as transaction start id;
-alter table migtest_e_history add period system_time (sys_period_start,sys_period_end);
-alter table migtest_e_history alter column test_string set data type bigint;
-call sysproc.admin_cmd('reorg table migtest_e_history');
+alter table migtest_e_history alter column test_string bigint;
alter table migtest_e_history2 alter column test_string set default 'unknown';
alter table migtest_e_history2 alter column test_string set not null;
alter table migtest_e_history2 add column test_string2 varchar(255);
alter table migtest_e_history2 add column test_string3 varchar(255) default 'unknown' not null;
alter table migtest_e_history2 add column new_column varchar(20);
-call sysproc.admin_cmd('reorg table migtest_e_history2');
-alter table migtest_e_history2_history alter column test_string set not null;
-alter table migtest_e_history2_history add column test_string2 varchar(255);
-alter table migtest_e_history2_history add column test_string3 varchar(255) default 'unknown' not null;
-alter table migtest_e_history2_history add column new_column varchar(20);
-call sysproc.admin_cmd('reorg table migtest_e_history2_history');
-alter table migtest_e_history4 alter column test_number set data type bigint;
-call sysproc.admin_cmd('reorg table migtest_e_history4');
-alter table migtest_e_history4_history alter column test_number set data type bigint;
-call sysproc.admin_cmd('reorg table migtest_e_history4_history');
+alter table migtest_e_history4 alter column test_number bigint;
alter table migtest_e_history5 add column test_boolean boolean default false not null;
-alter table migtest_e_history5_history add column test_boolean boolean default false not null;
alter table migtest_e_history6 alter column test_number1 set default 42;
alter table migtest_e_history6 alter column test_number1 set not null;
-alter table migtest_e_history6 alter column test_number2 drop not null;
-call sysproc.admin_cmd('reorg table migtest_e_history6');
-alter table migtest_e_history6_history alter column test_number1 set not null;
-alter table migtest_e_history6_history alter column test_number2 drop not null;
-call sysproc.admin_cmd('reorg table migtest_e_history6_history');
+alter table migtest_e_history6 alter column test_number2 set null;
alter table migtest_e_softdelete add column deleted boolean default false not null;
alter table migtest_oto_child add column master_id bigint;
-alter table table_history add column "select" varchar(255);
-- apply post alter
-alter table migtest_e_basic add constraint ck_mgtst__bsc_stts check ( status in ('N','A','I','?'));
-create unique index uq_mgtst__b_vs45xo on migtest_e_basic(description) exclude null keys;
+alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I','?'));
+alter table migtest_e_basic add constraint uq_migtest_e_basic_description unique (description);
-- NOTE: table has @History - special migration may be necessary
update migtest_e_basic set new_boolean_field = old_boolean;
-alter table migtest_e_basic add constraint ck_mgtst__b_l39g41 check ( progress in (0,1,2));
-create unique index uq_mgtst__b_ucfcne on migtest_e_basic(status,indextest1) exclude null keys;
-create unique index uq_mgtst__bsc_nm on migtest_e_basic(name) exclude null keys;
-create unique index uq_mgtst__b_4ayc00 on migtest_e_basic(indextest4) exclude null keys;
-create unique index uq_mgtst__b_4ayc01 on migtest_e_basic(indextest5) exclude null keys;
-create table migtest_e_history_history as (select * from migtest_e_history) with no data in MAIN index in MAIN long in MAIN;
-alter table migtest_e_history add versioning use history table migtest_e_history_history;
+alter table migtest_e_basic add constraint ck_migtest_e_basic_progress check ( progress in (0,1,2));
+alter table migtest_e_basic add constraint uq_migtest_e_basic_status_indextest1 unique (status,indextest1);
+alter table migtest_e_basic add constraint uq_migtest_e_basic_name unique (name);
+alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest4 unique (indextest4);
+alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest5 unique (indextest5);
comment on column migtest_e_history.test_string is 'Column altered to long now';
comment on table migtest_e_history is 'We have history now';
-alter table migtest_e_history2 add versioning use history table migtest_e_history2_history;
-alter table migtest_e_history3 add versioning use history table migtest_e_history3_history;
-alter table migtest_e_history4 add versioning use history table migtest_e_history4_history;
-alter table migtest_e_history5 add versioning use history table migtest_e_history5_history;
-alter table migtest_e_history6 add versioning use history table migtest_e_history6_history;
comment on column "table"."index" is 'this is an other comment';
-alter table "table" add versioning use history table table_history;
-create unique index uq_table_select on "table"("select") exclude null keys;
+alter table "table" add constraint uq_table_select unique ("select");
-- foreign keys and indices
-create index ix_mgtst_mt_3ug4ok on migtest_mtm_c_migtest_mtm_m (migtest_mtm_c_id);
-alter table migtest_mtm_c_migtest_mtm_m add constraint fk_mgtst_mt_93awga foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict;
+create index ix_migtest_mtm_c_migtest_mtm_m_migtest_mtm_c on migtest_mtm_c_migtest_mtm_m (migtest_mtm_c_id);
+alter table migtest_mtm_c_migtest_mtm_m add constraint fk_migtest_mtm_c_migtest_mtm_m_migtest_mtm_c foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict;
-create index ix_mgtst_mt_3ug4ou on migtest_mtm_c_migtest_mtm_m (migtest_mtm_m_id);
-alter table migtest_mtm_c_migtest_mtm_m add constraint fk_mgtst_mt_93awgk foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict;
+create index ix_migtest_mtm_c_migtest_mtm_m_migtest_mtm_m on migtest_mtm_c_migtest_mtm_m (migtest_mtm_m_id);
+alter table migtest_mtm_c_migtest_mtm_m add constraint fk_migtest_mtm_c_migtest_mtm_m_migtest_mtm_m foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict;
-create index ix_mgtst_mt_b7nbcu on migtest_mtm_m_migtest_mtm_c (migtest_mtm_m_id);
-alter table migtest_mtm_m_migtest_mtm_c add constraint fk_mgtst_mt_ggi34k foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict;
+create index ix_migtest_mtm_m_migtest_mtm_c_migtest_mtm_m on migtest_mtm_m_migtest_mtm_c (migtest_mtm_m_id);
+alter table migtest_mtm_m_migtest_mtm_c add constraint fk_migtest_mtm_m_migtest_mtm_c_migtest_mtm_m foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict;
-create index ix_mgtst_mt_b7nbck on migtest_mtm_m_migtest_mtm_c (migtest_mtm_c_id);
-alter table migtest_mtm_m_migtest_mtm_c add constraint fk_mgtst_mt_ggi34a foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict;
+create index ix_migtest_mtm_m_migtest_mtm_c_migtest_mtm_c on migtest_mtm_m_migtest_mtm_c (migtest_mtm_c_id);
+alter table migtest_mtm_m_migtest_mtm_c add constraint fk_migtest_mtm_m_migtest_mtm_c_migtest_mtm_c foreign key (migtest_mtm_c_id) references migtest_mtm_c (id) on delete restrict on update restrict;
-create index ix_mgtst_mt_do9ma3 on migtest_mtm_m_phone_numbers (migtest_mtm_m_id);
-alter table migtest_mtm_m_phone_numbers add constraint fk_mgtst_mt_s8neid foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict;
+create index ix_migtest_mtm_m_phone_numbers_migtest_mtm_m_id on migtest_mtm_m_phone_numbers (migtest_mtm_m_id);
+alter table migtest_mtm_m_phone_numbers add constraint fk_migtest_mtm_m_phone_numbers_migtest_mtm_m_id foreign key (migtest_mtm_m_id) references migtest_mtm_m (id) on delete restrict on update restrict;
-alter table migtest_ckey_detail add constraint fk_mgtst_ck_e1qkb5 foreign key (one_key,two_key) references migtest_ckey_parent (one_key,two_key) on delete restrict on update restrict;
-create index ix_mgtst_ck_x45o21 on migtest_ckey_parent (assoc_id);
-alter table migtest_ckey_parent add constraint fk_mgtst_ck_da00mr foreign key (assoc_id) references migtest_ckey_assoc (id) on delete restrict on update restrict;
+alter table migtest_ckey_detail add constraint fk_migtest_ckey_detail_parent foreign key (one_key,two_key) references migtest_ckey_parent (one_key,two_key) on delete restrict on update restrict;
+create index ix_migtest_ckey_parent_assoc_id on migtest_ckey_parent (assoc_id);
+alter table migtest_ckey_parent add constraint fk_migtest_ckey_parent_assoc_id foreign key (assoc_id) references migtest_ckey_assoc (id) on delete restrict on update restrict;
-alter table migtest_fk_cascade add constraint fk_mgtst_fk_65kf6l foreign key (one_id) references migtest_fk_cascade_one (id) on delete restrict on update restrict;
-alter table migtest_fk_none add constraint fk_mgtst_fk_nn_n_d foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
-alter table migtest_fk_none_via_join add constraint fk_mgtst_fk_9tknzj foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
-alter table migtest_fk_set_null add constraint fk_mgtst_fk_wicx8x foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
-alter table migtest_e_basic add constraint fk_mgtst__bsc_sr_d foreign key (user_id) references migtest_e_user (id) on delete restrict on update restrict;
-alter table migtest_oto_child add constraint fk_mgtst_t__csyl38 foreign key (master_id) references migtest_oto_master (id) on delete restrict on update restrict;
+alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete restrict on update restrict;
+alter table migtest_fk_none add constraint fk_migtest_fk_none_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
+alter table migtest_fk_none_via_join add constraint fk_migtest_fk_none_via_join_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
+alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete restrict on update restrict;
+alter table migtest_e_basic add constraint fk_migtest_e_basic_user_id foreign key (user_id) references migtest_e_user (id) on delete restrict on update restrict;
+alter table migtest_oto_child add constraint fk_migtest_oto_child_master_id foreign key (master_id) references migtest_oto_master (id) on delete restrict on update restrict;
-create index ix_mgtst__b_eu8css on migtest_e_basic (indextest3);
-create index ix_mgtst__b_eu8csv on migtest_e_basic (indextest6);
+create index ix_migtest_e_basic_indextest3 on migtest_e_basic (indextest3);
+create index ix_migtest_e_basic_indextest6 on migtest_e_basic (indextest6);
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.2__dropsFor_1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.2__dropsFor_1.1.sql
index 28b8850d6..cb6860e63 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.2__dropsFor_1.1.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.2__dropsFor_1.1.sql
@@ -1,26 +1,11 @@
-- Migrationscripts for ebean unittest
--- apply changes
-alter table migtest_e_history2 drop versioning;
-- apply alter tables
alter table migtest_e_basic drop column description_file;
alter table migtest_e_basic drop column old_boolean;
alter table migtest_e_basic drop column old_boolean2;
alter table migtest_e_basic drop column eref_id;
-call sysproc.admin_cmd('reorg table migtest_e_basic');
alter table migtest_e_history2 drop column obsolete_string1;
alter table migtest_e_history2 drop column obsolete_string2;
-call sysproc.admin_cmd('reorg table migtest_e_history2');
-alter table migtest_e_history2_history drop column obsolete_string1;
-alter table migtest_e_history2_history drop column obsolete_string2;
-call sysproc.admin_cmd('reorg table migtest_e_history2_history');
-- apply post alter
-alter table migtest_e_history2 add versioning use history table migtest_e_history2_history;
-drop table "migtest_QuOtEd";
-drop table migtest_e_ref;
-delimiter $$
-begin
-if exists (select seqschema from syscat.sequences where seqschema = current_schema and ucase(seqname) = 'MIGTEST_E_REF_SEQ') then
- prepare stmt from 'drop sequence migtest_e_ref_seq';
- execute stmt;
-end if;
-end$$;
+drop table if exists "migtest_QuOtEd";
+drop table if exists migtest_e_ref;
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.3.sql
index f388af01d..ac80b64d5 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.3.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.3.sql
@@ -1,165 +1,36 @@
-- Migrationscripts for ebean unittest
-- drop dependencies
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'FK_MGTST_CK_E1QKB5' and ucase(tabname) = 'MIGTEST_CKEY_DETAIL') then
- prepare stmt from 'alter table migtest_ckey_detail drop constraint fk_mgtst_ck_e1qkb5';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'FK_MGTST_FK_65KF6L' and ucase(tabname) = 'MIGTEST_FK_CASCADE') then
- prepare stmt from 'alter table migtest_fk_cascade drop constraint fk_mgtst_fk_65kf6l';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'FK_MGTST_FK_NN_N_D' and ucase(tabname) = 'MIGTEST_FK_NONE') then
- prepare stmt from 'alter table migtest_fk_none drop constraint fk_mgtst_fk_nn_n_d';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'FK_MGTST_FK_9TKNZJ' and ucase(tabname) = 'MIGTEST_FK_NONE_VIA_JOIN') then
- prepare stmt from 'alter table migtest_fk_none_via_join drop constraint fk_mgtst_fk_9tknzj';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'FK_MGTST_FK_WICX8X' and ucase(tabname) = 'MIGTEST_FK_SET_NULL') then
- prepare stmt from 'alter table migtest_fk_set_null drop constraint fk_mgtst_fk_wicx8x';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'CK_MGTST__BSC_STTS' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint ck_mgtst__bsc_stts';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'CK_MGTST__B_Z543FG' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint ck_mgtst__b_z543fg';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'UQ_MGTST__B_VS45XO' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint uq_mgtst__b_vs45xo';
- execute stmt;
-end if;
-end$$
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'UQ_MGTST__B_VS45XO') then
- prepare stmt from 'drop index uq_mgtst__b_vs45xo';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'FK_MGTST__BSC_SR_D' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint fk_mgtst__bsc_sr_d';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'UQ_MGTST__B_UCFCNE' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint uq_mgtst__b_ucfcne';
- execute stmt;
-end if;
-end$$
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'UQ_MGTST__B_UCFCNE') then
- prepare stmt from 'drop index uq_mgtst__b_ucfcne';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'UQ_MGTST__BSC_NM' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint uq_mgtst__bsc_nm';
- execute stmt;
-end if;
-end$$
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'UQ_MGTST__BSC_NM') then
- prepare stmt from 'drop index uq_mgtst__bsc_nm';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'UQ_MGTST__B_4AYC00' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint uq_mgtst__b_4ayc00';
- execute stmt;
-end if;
-end$$
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'UQ_MGTST__B_4AYC00') then
- prepare stmt from 'drop index uq_mgtst__b_4ayc00';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'UQ_MGTST__B_4AYC01' and ucase(tabname) = 'MIGTEST_E_BASIC') then
- prepare stmt from 'alter table migtest_e_basic drop constraint uq_mgtst__b_4ayc01';
- execute stmt;
-end if;
-end$$
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'UQ_MGTST__B_4AYC01') then
- prepare stmt from 'drop index uq_mgtst__b_4ayc01';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select constname from syscat.tabconst where tabschema = current_schema and ucase(constname) = 'CK_MGTST__N_773SOK' and ucase(tabname) = 'MIGTEST_E_ENUM') then
- prepare stmt from 'alter table migtest_e_enum drop constraint ck_mgtst__n_773sok';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'IX_MGTST__B_EU8CSS') then
- prepare stmt from 'drop index ix_mgtst__b_eu8css';
- execute stmt;
-end if;
-end$$;
-delimiter $$
-begin
-if exists (select indname from syscat.indexes where indschema = current_schema and ucase(indname) = 'IX_MGTST__B_EU8CSV') then
- prepare stmt from 'drop index ix_mgtst__b_eu8csv';
- execute stmt;
-end if;
-end$$;
+alter table migtest_ckey_detail drop constraint if exists fk_migtest_ckey_detail_parent;
+alter table migtest_fk_cascade drop constraint if exists fk_migtest_fk_cascade_one_id;
+alter table migtest_fk_none drop constraint if exists fk_migtest_fk_none_one_id;
+alter table migtest_fk_none_via_join drop constraint if exists fk_migtest_fk_none_via_join_one_id;
+alter table migtest_fk_set_null drop constraint if exists fk_migtest_fk_set_null_one_id;
+alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status;
+alter table migtest_e_basic drop constraint if exists ck_migtest_e_basic_status2;
+alter table migtest_e_basic drop constraint uq_migtest_e_basic_description;
+alter table migtest_e_basic drop constraint if exists fk_migtest_e_basic_user_id;
+alter table migtest_e_basic drop constraint uq_migtest_e_basic_status_indextest1;
+alter table migtest_e_basic drop constraint uq_migtest_e_basic_name;
+alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest4;
+alter table migtest_e_basic drop constraint uq_migtest_e_basic_indextest5;
+alter table migtest_e_enum drop constraint if exists ck_migtest_e_enum_test_status;
+drop index if exists ix_migtest_e_basic_indextest3;
+drop index if exists ix_migtest_e_basic_indextest6;
-- apply changes
create table "migtest_QuOtEd" (
id varchar(255) not null,
status1 varchar(1),
status2 varchar(1),
- constraint ck_mgtst_qtd_stts1 check ( status1 in ('N','A','I')),
- constraint ck_mgtst_qtd_stts2 check ( status2 in ('N','A','I')),
+ constraint ck_migtest_quoted_status1 check ( status1 in ('N','A','I')),
+ constraint ck_migtest_quoted_status2 check ( status2 in ('N','A','I')),
+ constraint uq_migtest_quoted_status2 unique (status2),
constraint pk_migtest_quoted primary key (id)
);
create table migtest_e_ref (
- id integer generated by default as identity not null,
+ id integer auto_increment not null,
name varchar(127) not null,
+ constraint uq_migtest_e_ref_name unique (name),
constraint pk_migtest_e_ref primary key (id)
);
@@ -169,73 +40,48 @@ update migtest_e_basic set status2 = 'N' where status2 is null;
update migtest_e_basic set a_lob = 'X' where a_lob is null;
update migtest_e_basic set user_id = 23 where user_id is null;
-alter table migtest_e_history2 drop versioning;
-alter table migtest_e_history3 drop versioning;
-alter table migtest_e_history4 drop versioning;
-alter table migtest_e_history6 drop versioning;
-- NOTE: table has @History - special migration may be necessary
update migtest_e_history6 set test_number2 = 7 where test_number2 is null;
-CALL SYSPROC.ADMIN_MOVE_TABLE(CURRENT_SCHEMA,'MIGTEST_MTM_C','USERSPACE1','USERSPACE1','USERSPACE1','','','','','','MOVE');
-CALL SYSPROC.ADMIN_MOVE_TABLE(CURRENT_SCHEMA,'MIGTEST_MTM_M','USERSPACE1','USERSPACE1','USERSPACE1','','','','','','MOVE');
-- apply alter tables
alter table migtest_e_basic alter column status drop default;
-alter table migtest_e_basic alter column status drop not null;
-alter table migtest_e_basic alter column status2 set data type varchar(1);
+alter table migtest_e_basic alter column status set null;
+alter table migtest_e_basic alter column status2 varchar(1);
alter table migtest_e_basic alter column status2 set default 'N';
alter table migtest_e_basic alter column status2 set not null;
-alter table migtest_e_basic alter column a_lob set data type clob(16K);
-alter table migtest_e_basic alter column a_lob set inline length 500;
--- ignored options for migtest_e_basic.a_lob: compact=true, logged=true;
+alter table migtest_e_basic alter column a_lob varchar(255);
alter table migtest_e_basic alter column a_lob set default 'X';
alter table migtest_e_basic alter column a_lob set not null;
alter table migtest_e_basic alter column user_id set default 23;
alter table migtest_e_basic alter column user_id set not null;
-alter table migtest_e_basic add column description_file blob(64M);
+alter table migtest_e_basic add column description_file blob;
alter table migtest_e_basic add column old_boolean boolean default false not null;
alter table migtest_e_basic add column old_boolean2 boolean;
alter table migtest_e_basic add column eref_id integer;
-call sysproc.admin_cmd('reorg table migtest_e_basic');
alter table migtest_e_history2 alter column test_string drop default;
-alter table migtest_e_history2 alter column test_string drop not null;
+alter table migtest_e_history2 alter column test_string set null;
alter table migtest_e_history2 add column obsolete_string1 varchar(255);
alter table migtest_e_history2 add column obsolete_string2 varchar(255);
-alter table migtest_e_history2_history alter column test_string drop not null;
-alter table migtest_e_history2_history add column obsolete_string1 varchar(255);
-alter table migtest_e_history2_history add column obsolete_string2 varchar(255);
-alter table migtest_e_history4 alter column test_number set data type integer;
-call sysproc.admin_cmd('reorg table migtest_e_history4');
-alter table migtest_e_history4_history alter column test_number set data type integer;
-call sysproc.admin_cmd('reorg table migtest_e_history4_history');
+alter table migtest_e_history4 alter column test_number integer;
alter table migtest_e_history6 alter column test_number1 drop default;
-alter table migtest_e_history6 alter column test_number1 drop not null;
+alter table migtest_e_history6 alter column test_number1 set null;
alter table migtest_e_history6 alter column test_number2 set default 7;
alter table migtest_e_history6 alter column test_number2 set not null;
-call sysproc.admin_cmd('reorg table migtest_e_history6');
-alter table migtest_e_history6_history alter column test_number1 drop not null;
-alter table migtest_e_history6_history alter column test_number2 set not null;
-call sysproc.admin_cmd('reorg table migtest_e_history6_history');
-- apply post alter
-create unique index uq_mgtst_qtd_stts2 on "migtest_QuOtEd"(status2) exclude null keys;
-alter table migtest_e_ref add constraint uq_mgtst__rf_nm unique (name);
-alter table migtest_e_basic add constraint ck_mgtst__bsc_stts check ( status in ('N','A','I'));
-alter table migtest_e_basic add constraint ck_mgtst__b_z543fg check ( status2 in ('N','A','I'));
-create unique index uq_mgtst__b_4aybzy on migtest_e_basic(indextest2) exclude null keys;
-create unique index uq_mgtst__b_4ayc02 on migtest_e_basic(indextest6) exclude null keys;
-alter table migtest_e_enum add constraint ck_mgtst__n_773sok check ( test_status in ('N','A','I'));
+alter table migtest_e_basic add constraint ck_migtest_e_basic_status check ( status in ('N','A','I'));
+alter table migtest_e_basic add constraint ck_migtest_e_basic_status2 check ( status2 in ('N','A','I'));
+alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest2 unique (indextest2);
+alter table migtest_e_basic add constraint uq_migtest_e_basic_indextest6 unique (indextest6);
+alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check ( test_status in ('N','A','I'));
comment on column migtest_e_history.test_string is '';
comment on table migtest_e_history is '';
-alter table migtest_e_history2 add versioning use history table migtest_e_history2_history;
-alter table migtest_e_history3 add versioning use history table migtest_e_history3_history;
-alter table migtest_e_history4 add versioning use history table migtest_e_history4_history;
-alter table migtest_e_history6 add versioning use history table migtest_e_history6_history;
comment on column "table"."index" is 'this is a comment';
-- foreign keys and indices
-alter table migtest_fk_cascade add constraint fk_mgtst_fk_65kf6l foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict;
-alter table migtest_fk_set_null add constraint fk_mgtst_fk_wicx8x foreign key (one_id) references migtest_fk_one (id) on delete set null on update restrict;
-create index ix_mgtst__bsc_rf_d on migtest_e_basic (eref_id);
-alter table migtest_e_basic add constraint fk_mgtst__bsc_rf_d foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict;
+alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict;
+alter table migtest_fk_set_null add constraint fk_migtest_fk_set_null_one_id foreign key (one_id) references migtest_fk_one (id) on delete set null on update restrict;
+create index ix_migtest_e_basic_eref_id on migtest_e_basic (eref_id);
+alter table migtest_e_basic add constraint fk_migtest_e_basic_eref_id foreign key (eref_id) references migtest_e_ref (id) on delete restrict on update restrict;
-create index ix_mgtst__b_eu8csq on migtest_e_basic (indextest1);
-create index ix_mgtst__b_eu8csu on migtest_e_basic (indextest5);
-create index ix_mgtst_qtd_stts1 on "migtest_QuOtEd" (status1);
+create index ix_migtest_e_basic_indextest1 on migtest_e_basic (indextest1);
+create index ix_migtest_e_basic_indextest5 on migtest_e_basic (indextest5);
+create index ix_migtest_quoted_status1 on "migtest_QuOtEd" (status1);
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.4__dropsFor_1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.4__dropsFor_1.3.sql
index 95bd2ed00..b4087d6d6 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.4__dropsFor_1.3.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/1.4__dropsFor_1.3.sql
@@ -1,53 +1,21 @@
-- Migrationscripts for ebean unittest
--- apply changes
-alter table migtest_e_history drop versioning;
-alter table migtest_e_history drop period system_time;
-alter table migtest_e_history2 drop versioning;
-alter table migtest_e_history5 drop versioning;
-- apply alter tables
alter table migtest_ckey_detail drop column one_key;
alter table migtest_ckey_detail drop column two_key;
-call sysproc.admin_cmd('reorg table migtest_ckey_detail');
alter table migtest_ckey_parent drop column assoc_id;
-call sysproc.admin_cmd('reorg table migtest_ckey_parent');
alter table migtest_e_basic drop column new_string_field;
alter table migtest_e_basic drop column new_boolean_field;
alter table migtest_e_basic drop column new_boolean_field2;
alter table migtest_e_basic drop column progress;
alter table migtest_e_basic drop column new_integer;
-call sysproc.admin_cmd('reorg table migtest_e_basic');
-alter table migtest_e_history drop column sys_period_start;
-alter table migtest_e_history drop column sys_period_end;
-alter table migtest_e_history drop column sys_period_txn;
-call sysproc.admin_cmd('reorg table migtest_e_history');
alter table migtest_e_history2 drop column test_string2;
alter table migtest_e_history2 drop column test_string3;
alter table migtest_e_history2 drop column new_column;
-call sysproc.admin_cmd('reorg table migtest_e_history2');
-alter table migtest_e_history2_history drop column test_string2;
-alter table migtest_e_history2_history drop column test_string3;
-alter table migtest_e_history2_history drop column new_column;
-call sysproc.admin_cmd('reorg table migtest_e_history2_history');
alter table migtest_e_history5 drop column test_boolean;
-call sysproc.admin_cmd('reorg table migtest_e_history5');
-alter table migtest_e_history5_history drop column test_boolean;
-call sysproc.admin_cmd('reorg table migtest_e_history5_history');
alter table migtest_e_softdelete drop column deleted;
-call sysproc.admin_cmd('reorg table migtest_e_softdelete');
alter table migtest_oto_child drop column master_id;
-call sysproc.admin_cmd('reorg table migtest_oto_child');
-- apply post alter
-drop table migtest_e_history_history;
-alter table migtest_e_history2 add versioning use history table migtest_e_history2_history;
-alter table migtest_e_history5 add versioning use history table migtest_e_history5_history;
-drop table migtest_e_user;
-delimiter $$
-begin
-if exists (select seqschema from syscat.sequences where seqschema = current_schema and ucase(seqname) = 'MIGTEST_E_USER_SEQ') then
- prepare stmt from 'drop sequence migtest_e_user_seq';
- execute stmt;
-end if;
-end$$;
-drop table migtest_mtm_c_migtest_mtm_m;
-drop table migtest_mtm_m_migtest_mtm_c;
-drop table migtest_mtm_m_phone_numbers;
+drop table if exists migtest_e_user;
+drop table if exists migtest_mtm_c_migtest_mtm_m;
+drop table if exists migtest_mtm_m_migtest_mtm_c;
+drop table if exists migtest_mtm_m_phone_numbers;
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/R__order_views.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/R__order_views.sql
deleted file mode 100644
index ccf30a2c6..000000000
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/R__order_views.sql
+++ /dev/null
@@ -1,7 +0,0 @@
-
- create or replace view order_agg_vw as
- select d.order_id, sum(d.order_qty * d.unit_price) as order_total,
- sum(d.ship_qty * d.unit_price) as ship_total
- from o_order_detail d
- group by d.order_id
-
\ No newline at end of file
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_generic.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_generic.migrations
new file mode 100644
index 000000000..8dfa501f7
--- /dev/null
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_generic.migrations
@@ -0,0 +1,6 @@
+-710189690, 1.0__initial.sql
+1626063176, 1.1.sql
+688811494, 1.2__dropsFor_1.1.sql
+2025934113, 1.3.sql
+80209848, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.0__initial.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.0__initial.sql
index 508177c05..421988c4d 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.0__initial.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.0__initial.sql
@@ -209,7 +209,7 @@ create table migtest_e_history2_history(
sys_period_end timestamp
);
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
-create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create table migtest_e_history3_history(
id integer,
@@ -218,7 +218,7 @@ create table migtest_e_history3_history(
sys_period_end timestamp
);
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
-create trigger migtest_e_history3_history_upd before update,delete on migtest_e_history3 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history3_history_upd before update,delete on migtest_e_history3 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create table migtest_e_history4_history(
id integer,
@@ -227,7 +227,7 @@ create table migtest_e_history4_history(
sys_period_end timestamp
);
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
-create trigger migtest_e_history4_history_upd before update,delete on migtest_e_history4 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history4_history_upd before update,delete on migtest_e_history4 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create table migtest_e_history5_history(
id integer,
@@ -236,7 +236,7 @@ create table migtest_e_history5_history(
sys_period_end timestamp
);
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
-create trigger migtest_e_history5_history_upd before update,delete on migtest_e_history5 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history5_history_upd before update,delete on migtest_e_history5 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create table migtest_e_history6_history(
id integer,
@@ -246,7 +246,7 @@ create table migtest_e_history6_history(
sys_period_end timestamp
);
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
-create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create table table_history(
"index" varchar(255),
@@ -258,7 +258,7 @@ create table table_history(
sys_period_end timestamp
);
create view table_with_history as select * from "table" union all select * from table_history;
-create trigger table_history_upd before update,delete on "table" for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger table_history_upd before update,delete on "table" for each row call "io.ebean.platform.h2.H2HistoryTrigger";
-- foreign keys and indices
create index ix_migtest_fk_cascade_one_id on migtest_fk_cascade (one_id);
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.1.sql
index 0936da80e..cf690d3b2 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.1.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.1.sql
@@ -115,23 +115,23 @@ create table migtest_e_history_history(
sys_period_end timestamp
);
create view migtest_e_history_with_history as select * from migtest_e_history union all select * from migtest_e_history_history;
-create trigger migtest_e_history_history_upd before update,delete on migtest_e_history for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history_history_upd before update,delete on migtest_e_history for each row call "io.ebean.platform.h2.H2HistoryTrigger";
comment on column migtest_e_history.test_string is 'Column altered to long now';
comment on table migtest_e_history is 'We have history now';
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
-create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
-create trigger migtest_e_history3_history_upd before update,delete on migtest_e_history3 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history3_history_upd before update,delete on migtest_e_history3 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
-create trigger migtest_e_history4_history_upd before update,delete on migtest_e_history4 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history4_history_upd before update,delete on migtest_e_history4 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
-create trigger migtest_e_history5_history_upd before update,delete on migtest_e_history5 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history5_history_upd before update,delete on migtest_e_history5 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
-create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
comment on column "table"."index" is 'this is an other comment';
create view table_with_history as select * from "table" union all select * from table_history;
-create trigger table_history_upd before update,delete on "table" for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger table_history_upd before update,delete on "table" for each row call "io.ebean.platform.h2.H2HistoryTrigger";
alter table "table" add constraint uq_table_select unique ("select");
-- foreign keys and indices
create index ix_migtest_mtm_c_migtest_mtm_m_migtest_mtm_c on migtest_mtm_c_migtest_mtm_m (migtest_mtm_c_id);
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.2__dropsFor_1.1.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.2__dropsFor_1.1.sql
index 1037b7b67..a0c8ec44b 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.2__dropsFor_1.1.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.2__dropsFor_1.1.sql
@@ -13,7 +13,7 @@ alter table migtest_e_history2_history drop column obsolete_string1;
alter table migtest_e_history2_history drop column obsolete_string2;
-- apply post alter
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
-create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
drop table if exists "migtest_QuOtEd";
drop table if exists migtest_e_ref;
drop sequence if exists migtest_e_ref_seq;
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.3.sql
index 9ec4e5674..7d0188eed 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.3.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.3.sql
@@ -89,13 +89,13 @@ alter table migtest_e_enum add constraint ck_migtest_e_enum_test_status check (
comment on column migtest_e_history.test_string is '';
comment on table migtest_e_history is '';
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
-create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create view migtest_e_history3_with_history as select * from migtest_e_history3 union all select * from migtest_e_history3_history;
-create trigger migtest_e_history3_history_upd before update,delete on migtest_e_history3 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history3_history_upd before update,delete on migtest_e_history3 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create view migtest_e_history4_with_history as select * from migtest_e_history4 union all select * from migtest_e_history4_history;
-create trigger migtest_e_history4_history_upd before update,delete on migtest_e_history4 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history4_history_upd before update,delete on migtest_e_history4 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create view migtest_e_history6_with_history as select * from migtest_e_history6 union all select * from migtest_e_history6_history;
-create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history6_history_upd before update,delete on migtest_e_history6 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
comment on column "table"."index" is 'this is a comment';
-- foreign keys and indices
alter table migtest_fk_cascade add constraint fk_migtest_fk_cascade_one_id foreign key (one_id) references migtest_fk_cascade_one (id) on delete cascade on update restrict;
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.4__dropsFor_1.3.sql b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.4__dropsFor_1.3.sql
index 50e6ed546..feea9437a 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.4__dropsFor_1.3.sql
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/1.4__dropsFor_1.3.sql
@@ -32,9 +32,9 @@ alter table migtest_e_softdelete drop column deleted;
alter table migtest_oto_child drop column master_id;
-- apply post alter
create view migtest_e_history2_with_history as select * from migtest_e_history2 union all select * from migtest_e_history2_history;
-create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history2_history_upd before update,delete on migtest_e_history2 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
create view migtest_e_history5_with_history as select * from migtest_e_history5 union all select * from migtest_e_history5_history;
-create trigger migtest_e_history5_history_upd before update,delete on migtest_e_history5 for each row call "io.ebean.config.dbplatform.h2.H2HistoryTrigger";
+create trigger migtest_e_history5_history_upd before update,delete on migtest_e_history5 for each row call "io.ebean.platform.h2.H2HistoryTrigger";
drop table if exists migtest_e_user;
drop sequence if exists migtest_e_user_seq;
drop table if exists migtest_mtm_c_migtest_mtm_m;
diff --git a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/idx_h2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/idx_h2.migrations
index f32ee0de6..31682c71e 100644
--- a/ebean-test/src/test/resources/migrationtest/dbmigration/h2/idx_h2.migrations
+++ b/ebean-test/src/test/resources/migrationtest/dbmigration/h2/idx_h2.migrations
@@ -1,8 +1,8 @@
--1826073043, 1.0__initial.sql
--132538485, 1.1.sql
--2064267391, 1.2__dropsFor_1.1.sql
--94686510, 1.3.sql
--1382108238, 1.4__dropsFor_1.3.sql
+-1806036603, 1.0__initial.sql
+1830755650, 1.1.sql
+1579867974, 1.2__dropsFor_1.1.sql
+-877392737, 1.3.sql
+116139207, 1.4__dropsFor_1.3.sql
783227075, R__multi_comments.sql
561281075, R__order_views.sql
diff --git a/platforms/all/pom.xml b/platforms/all/pom.xml
new file mode 100644
index 000000000..d66032532
--- /dev/null
+++ b/platforms/all/pom.xml
@@ -0,0 +1,81 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-all
+
+
+
+
+ io.ebean
+ ebean-platform-h2
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-clickhouse
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-db2
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-hana
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-hsqldb
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-mysql
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-mariadb
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-nuodb
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-oracle
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-postgres
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-sqlanywhere
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-sqlite
+ 13.2.1-SNAPSHOT
+
+
+ io.ebean
+ ebean-platform-sqlserver
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/platforms/all/src/main/java/io/ebean/platform/all/Assembly.java b/platforms/all/src/main/java/io/ebean/platform/all/Assembly.java
new file mode 100644
index 000000000..3263257ee
--- /dev/null
+++ b/platforms/all/src/main/java/io/ebean/platform/all/Assembly.java
@@ -0,0 +1,7 @@
+package io.ebean.platform.all;
+
+/**
+ * Nothing interesting here - look at ebean-api.
+ */
+public class Assembly {
+}
diff --git a/platforms/all/src/main/java/io/ebean/platform/all/package-info.java b/platforms/all/src/main/java/io/ebean/platform/all/package-info.java
new file mode 100644
index 000000000..fa1bd10d5
--- /dev/null
+++ b/platforms/all/src/main/java/io/ebean/platform/all/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Composite dependency of all platforms.
+ */
+package io.ebean.platform.all;
diff --git a/platforms/all/src/main/java/module-info.java b/platforms/all/src/main/java/module-info.java
new file mode 100644
index 000000000..c5cc7865f
--- /dev/null
+++ b/platforms/all/src/main/java/module-info.java
@@ -0,0 +1,17 @@
+module io.ebean.platform.all {
+
+ requires transitive io.ebean.platform.h2;
+ requires transitive io.ebean.platform.clickhouse;
+ requires transitive io.ebean.platform.db2;
+ requires transitive io.ebean.platform.hana;
+ requires transitive io.ebean.platform.hsqldb;
+ requires transitive io.ebean.platform.mysql;
+ requires transitive io.ebean.platform.mariadb;
+ requires transitive io.ebean.platform.nuodb;
+ requires transitive io.ebean.platform.oracle;
+ requires transitive io.ebean.platform.postgres;
+ requires transitive io.ebean.platform.sqlanywhere;
+ requires transitive io.ebean.platform.sqlite;
+ requires transitive io.ebean.platform.sqlserver;
+
+}
diff --git a/platforms/clickhouse/pom.xml b/platforms/clickhouse/pom.xml
new file mode 100644
index 000000000..6650a82b3
--- /dev/null
+++ b/platforms/clickhouse/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-clickhouse
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/clickhouse/ClickHousePlatform.java b/platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/ClickHousePlatform.java
similarity index 97%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/clickhouse/ClickHousePlatform.java
rename to platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/ClickHousePlatform.java
index bb1b141e6..f7472b99c 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/clickhouse/ClickHousePlatform.java
+++ b/platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/ClickHousePlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.clickhouse;
+package io.ebean.platform.clickhouse;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.DatabasePlatform;
diff --git a/platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/ClickHousePlatformProvider.java b/platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/ClickHousePlatformProvider.java
new file mode 100644
index 000000000..f5d5da152
--- /dev/null
+++ b/platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/ClickHousePlatformProvider.java
@@ -0,0 +1,49 @@
+package io.ebean.platform.clickhouse;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * ClickHouse platform provider.
+ */
+public class ClickHousePlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "ClickHouse";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.equals("clickhouse");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ return new ClickHousePlatform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("clickhouse");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new ClickHousePlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.CLICKHOUSE.equals(platform);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return new ClickHousePlatform();
+ }
+}
diff --git a/platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/package-info.java b/platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/package-info.java
new file mode 100644
index 000000000..50a575332
--- /dev/null
+++ b/platforms/clickhouse/src/main/java/io/ebean/platform/clickhouse/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Clickhouse DB specific support.
+ */
+package io.ebean.platform.clickhouse;
diff --git a/platforms/clickhouse/src/main/java/module-info.java b/platforms/clickhouse/src/main/java/module-info.java
new file mode 100644
index 000000000..aebca5026
--- /dev/null
+++ b/platforms/clickhouse/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.clickhouse {
+
+ exports io.ebean.platform.clickhouse;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.clickhouse.ClickHousePlatformProvider;
+}
diff --git a/platforms/clickhouse/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/clickhouse/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..4f258cadc
--- /dev/null
+++ b/platforms/clickhouse/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.clickhouse.ClickHousePlatformProvider
diff --git a/platforms/db2/pom.xml b/platforms/db2/pom.xml
new file mode 100644
index 000000000..260cfda65
--- /dev/null
+++ b/platforms/db2/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-db2
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/BaseDB2Platform.java b/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java
similarity index 98%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/db2/BaseDB2Platform.java
rename to platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java
index e84680233..ead2a5406 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/BaseDB2Platform.java
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/BaseDB2Platform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.db2;
+package io.ebean.platform.db2;
import java.sql.Types;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2ForIPlatform.java b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2ForIPlatform.java
similarity index 96%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2ForIPlatform.java
rename to platforms/db2/src/main/java/io/ebean/platform/db2/DB2ForIPlatform.java
index fa6028858..736ba92f4 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2ForIPlatform.java
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2ForIPlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.db2;
+package io.ebean.platform.db2;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.DbPlatformType;
@@ -9,7 +9,7 @@ import java.sql.Types;
/**
* DB2 specific platform for i Series.
- *
+ *
* @author Cédric Sougné
*/
public class DB2ForIPlatform extends BaseDB2Platform {
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2HistorySupport.java b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2HistorySupport.java
similarity index 94%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2HistorySupport.java
rename to platforms/db2/src/main/java/io/ebean/platform/db2/DB2HistorySupport.java
index 122f1b57c..76c97c178 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2HistorySupport.java
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2HistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.db2;
+package io.ebean.platform.db2;
import io.ebean.config.dbplatform.DbStandardHistorySupport;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2LegacyPlatform.java b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2LegacyPlatform.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2LegacyPlatform.java
rename to platforms/db2/src/main/java/io/ebean/platform/db2/DB2LegacyPlatform.java
index 896bdf9b0..7fa8f2186 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2LegacyPlatform.java
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2LegacyPlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.db2;
+package io.ebean.platform.db2;
import io.ebean.annotation.PersistBatch;
import io.ebean.annotation.Platform;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2LuwPlatform.java b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2LuwPlatform.java
similarity index 89%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2LuwPlatform.java
rename to platforms/db2/src/main/java/io/ebean/platform/db2/DB2LuwPlatform.java
index 967cc2428..194babcd6 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2LuwPlatform.java
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2LuwPlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.db2;
+package io.ebean.platform.db2;
import io.ebean.annotation.Platform;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2SequenceIdGenerator.java b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2SequenceIdGenerator.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2SequenceIdGenerator.java
rename to platforms/db2/src/main/java/io/ebean/platform/db2/DB2SequenceIdGenerator.java
index 3f2d3eb25..aa8fd40cb 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2SequenceIdGenerator.java
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2SequenceIdGenerator.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.db2;
+package io.ebean.platform.db2;
import io.ebean.BackgroundExecutor;
import io.ebean.config.dbplatform.SequenceBatchIdGenerator;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2ZosPlatform.java b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2ZosPlatform.java
similarity index 83%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2ZosPlatform.java
rename to platforms/db2/src/main/java/io/ebean/platform/db2/DB2ZosPlatform.java
index 2cb4cb35b..e3c1b6310 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/DB2ZosPlatform.java
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/DB2ZosPlatform.java
@@ -1,9 +1,9 @@
-package io.ebean.config.dbplatform.db2;
+package io.ebean.platform.db2;
import io.ebean.annotation.Platform;
/**
- * DB2 platform for z/OS.
+ * DB2 platform for z/OS.
* Note: This platform is currently not tested!
* @author Roland Praml, FOCONIS AG
*
diff --git a/platforms/db2/src/main/java/io/ebean/platform/db2/Db2PlatformProvider.java b/platforms/db2/src/main/java/io/ebean/platform/db2/Db2PlatformProvider.java
new file mode 100644
index 000000000..aade711c5
--- /dev/null
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/Db2PlatformProvider.java
@@ -0,0 +1,73 @@
+package io.ebean.platform.db2;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * DB2 platform provider.
+ */
+public class Db2PlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "DB2";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.startsWith("db2");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ if (name.equals("db2")) {
+ throw new IllegalArgumentException("Please choose the more specific db2luw/db2zos/db2fori platform. Refer to issue #2514 for details");
+ }
+ if (name.equals("db2legacy")) {
+ return new DB2LegacyPlatform();
+ }
+ if (name.equals("db2zos")) {
+ return new DB2ZosPlatform();
+ }
+ if (name.equals("db2fori")) {
+ return new DB2ForIPlatform();
+ }
+ if (name.equals("db2luw")) {
+ return new DB2LuwPlatform();
+ }
+ throw new IllegalArgumentException("Unknown DB2 platform, expecting db2luw/db2zos/db2fori but got "+ name);
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ if (productName.contains("db2")) {
+ throw new IllegalArgumentException("For DB2 please explicitly choose either db2legacy/db2luw/db2zos/db2fori platform. Refer to issue #2514 for details");
+ }
+ return false;
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ throw new IllegalStateException("Never called");
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return platform.base().equals(Platform.DB2);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ switch (platform) {
+ case DB2FORI: return new DB2ForIPlatform();
+ case DB2ZOS: return new DB2ZosPlatform();
+ case DB2LUW: return new DB2LuwPlatform();
+ case DB2: return new DB2LegacyPlatform();
+ }
+ throw new IllegalStateException("Unknown DB2 platform " + platform);
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/Db2SqlLimiter.java b/platforms/db2/src/main/java/io/ebean/platform/db2/Db2SqlLimiter.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/db2/Db2SqlLimiter.java
rename to platforms/db2/src/main/java/io/ebean/platform/db2/Db2SqlLimiter.java
index 670cb324c..2ce09ec6d 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/db2/Db2SqlLimiter.java
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/Db2SqlLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.db2;
+package io.ebean.platform.db2;
import io.ebean.config.dbplatform.SqlLimitRequest;
import io.ebean.config.dbplatform.SqlLimitResponse;
diff --git a/platforms/db2/src/main/java/io/ebean/platform/db2/package-info.java b/platforms/db2/src/main/java/io/ebean/platform/db2/package-info.java
new file mode 100644
index 000000000..cd18a27d3
--- /dev/null
+++ b/platforms/db2/src/main/java/io/ebean/platform/db2/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * DB2 specific support.
+ */
+package io.ebean.platform.db2;
diff --git a/platforms/db2/src/main/java/module-info.java b/platforms/db2/src/main/java/module-info.java
new file mode 100644
index 000000000..4460e7230
--- /dev/null
+++ b/platforms/db2/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.db2 {
+
+ exports io.ebean.platform.db2;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.db2.Db2PlatformProvider;
+}
diff --git a/platforms/db2/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/db2/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..af1579fed
--- /dev/null
+++ b/platforms/db2/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.db2.Db2PlatformProvider
diff --git a/platforms/h2/pom.xml b/platforms/h2/pom.xml
new file mode 100644
index 000000000..5bb72c6c0
--- /dev/null
+++ b/platforms/h2/pom.xml
@@ -0,0 +1,37 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-h2
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+
+ com.h2database
+ h2
+ ${h2database.version}
+ true
+
+
+
+ io.avaje
+ junit
+ 1.1
+ test
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2DbEncrypt.java b/platforms/h2/src/main/java/io/ebean/platform/h2/H2DbEncrypt.java
similarity index 97%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2DbEncrypt.java
rename to platforms/h2/src/main/java/io/ebean/platform/h2/H2DbEncrypt.java
index f3eeeffa0..058c049bd 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2DbEncrypt.java
+++ b/platforms/h2/src/main/java/io/ebean/platform/h2/H2DbEncrypt.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.h2;
+package io.ebean.platform.h2;
import io.ebean.config.dbplatform.AbstractDbEncrypt;
import io.ebean.config.dbplatform.DbEncryptFunction;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2HistorySupport.java b/platforms/h2/src/main/java/io/ebean/platform/h2/H2HistorySupport.java
similarity index 81%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2HistorySupport.java
rename to platforms/h2/src/main/java/io/ebean/platform/h2/H2HistorySupport.java
index 9669d58ff..dbe6ffd0d 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2HistorySupport.java
+++ b/platforms/h2/src/main/java/io/ebean/platform/h2/H2HistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.h2;
+package io.ebean.platform.h2;
import io.ebean.config.dbplatform.DbViewHistorySupport;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2HistoryTrigger.java b/platforms/h2/src/main/java/io/ebean/platform/h2/H2HistoryTrigger.java
similarity index 98%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2HistoryTrigger.java
rename to platforms/h2/src/main/java/io/ebean/platform/h2/H2HistoryTrigger.java
index d6c74df1f..1cd6b8848 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2HistoryTrigger.java
+++ b/platforms/h2/src/main/java/io/ebean/platform/h2/H2HistoryTrigger.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.h2;
+package io.ebean.platform.h2;
import org.h2.api.Trigger;
import org.slf4j.Logger;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2Platform.java b/platforms/h2/src/main/java/io/ebean/platform/h2/H2Platform.java
similarity index 85%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2Platform.java
rename to platforms/h2/src/main/java/io/ebean/platform/h2/H2Platform.java
index 4f81f4eb2..b879b2c03 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2Platform.java
+++ b/platforms/h2/src/main/java/io/ebean/platform/h2/H2Platform.java
@@ -1,8 +1,9 @@
-package io.ebean.config.dbplatform.h2;
+package io.ebean.platform.h2;
import io.ebean.BackgroundExecutor;
import io.ebean.Query;
import io.ebean.annotation.Platform;
+import io.ebean.config.PlatformConfig;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.config.dbplatform.DbPlatformType;
import io.ebean.config.dbplatform.DbType;
@@ -28,9 +29,9 @@ public class H2Platform extends DatabasePlatform {
this.dbDefaultValue.setNow("now()");
this.exceptionTranslator =
new SqlErrorCodes()
- .addAcquireLock("50200","HYT00")
- .addDuplicateKey("23001","23505")
- .addDataIntegrity("22001","22003","22012","22018","22025","23000","23002","23003","23502","23503","23506","23507","23513")
+ .addAcquireLock("50200", "HYT00")
+ .addDuplicateKey("23001", "23505")
+ .addDataIntegrity("22001", "22003", "22012", "22018", "22025", "23000", "23002", "23003", "23502", "23503", "23506", "23507", "23513")
.build();
this.dbIdentity.setIdType(IdType.IDENTITY);
diff --git a/platforms/h2/src/main/java/io/ebean/platform/h2/H2PlatformProvider.java b/platforms/h2/src/main/java/io/ebean/platform/h2/H2PlatformProvider.java
new file mode 100644
index 000000000..30b16f6bc
--- /dev/null
+++ b/platforms/h2/src/main/java/io/ebean/platform/h2/H2PlatformProvider.java
@@ -0,0 +1,49 @@
+package io.ebean.platform.h2;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * H2 platform provider.
+ */
+public class H2PlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "H2";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.equals("h2");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ return new H2Platform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("h2");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new H2Platform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.H2.equals(platform);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return new H2Platform();
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2SequenceIdGenerator.java b/platforms/h2/src/main/java/io/ebean/platform/h2/H2SequenceIdGenerator.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2SequenceIdGenerator.java
rename to platforms/h2/src/main/java/io/ebean/platform/h2/H2SequenceIdGenerator.java
index 5ef08c059..178c8f2da 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/h2/H2SequenceIdGenerator.java
+++ b/platforms/h2/src/main/java/io/ebean/platform/h2/H2SequenceIdGenerator.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.h2;
+package io.ebean.platform.h2;
import io.ebean.BackgroundExecutor;
import io.ebean.config.dbplatform.SequenceBatchIdGenerator;
diff --git a/platforms/h2/src/main/java/io/ebean/platform/h2/package-info.java b/platforms/h2/src/main/java/io/ebean/platform/h2/package-info.java
new file mode 100644
index 000000000..82a8af659
--- /dev/null
+++ b/platforms/h2/src/main/java/io/ebean/platform/h2/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * H2 specific support.
+ */
+package io.ebean.platform.h2;
diff --git a/platforms/h2/src/main/java/module-info.java b/platforms/h2/src/main/java/module-info.java
new file mode 100644
index 000000000..2eff2d5c5
--- /dev/null
+++ b/platforms/h2/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.platform.h2 {
+
+ exports io.ebean.platform.h2;
+
+ requires transitive io.ebean.api;
+ requires static com.h2database;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.h2.H2PlatformProvider;
+}
diff --git a/platforms/h2/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/h2/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..0f7ebb0bc
--- /dev/null
+++ b/platforms/h2/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.h2.H2PlatformProvider
diff --git a/platforms/h2/src/test/java/io/ebean/platform/h2/H2PlatformTest.java b/platforms/h2/src/test/java/io/ebean/platform/h2/H2PlatformTest.java
new file mode 100644
index 000000000..6c034d69f
--- /dev/null
+++ b/platforms/h2/src/test/java/io/ebean/platform/h2/H2PlatformTest.java
@@ -0,0 +1,46 @@
+package io.ebean.platform.h2;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.PlatformConfig;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DbType;
+import org.junit.jupiter.api.Test;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+class H2PlatformTest {
+
+ @Test
+ void defaultTypesForDecimalAndVarchar() {
+ DatabasePlatform dbPlatform = new DatabasePlatform();
+ assertEquals(defaultDecimalDefn(dbPlatform), "decimal(16,3)");
+ assertEquals(defaultDefn(DbType.VARCHAR, dbPlatform), "varchar(255)");
+ }
+
+ @Test
+ void configure_customType() {
+ PlatformConfig config = new PlatformConfig();
+ config.addCustomMapping(DbType.VARCHAR, "text", Platform.POSTGRES);
+ config.addCustomMapping(DbType.DECIMAL, "decimal(24,4)");
+
+// // PG renders custom decimal and varchar
+// PostgresPlatform pgPlatform = new PostgresPlatform();
+// pgPlatform.configure(config, false);
+// assertEquals(defaultDecimalDefn(pgPlatform), "decimal(24,4)");
+// assertEquals(defaultDefn(DbType.VARCHAR, pgPlatform), "text");
+
+ // H2 only renders custom decimal
+ H2Platform h2Platform = new H2Platform();
+ h2Platform.configure(config);
+ assertEquals(defaultDecimalDefn(h2Platform), "decimal(24,4)");
+ assertEquals(defaultDefn(DbType.VARCHAR, h2Platform), "varchar(255)");
+ }
+
+ private String defaultDecimalDefn(DatabasePlatform dbPlatform) {
+ return defaultDefn(DbType.DECIMAL, dbPlatform);
+ }
+
+ private String defaultDefn(DbType type, DatabasePlatform dbPlatform) {
+ return dbPlatform.getDbTypeMap().get(type).renderType(0, 0);
+ }
+}
diff --git a/platforms/hana/pom.xml b/platforms/hana/pom.xml
new file mode 100644
index 000000000..861e5bfbe
--- /dev/null
+++ b/platforms/hana/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-hana
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaBasicSqlLimiter.java b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaBasicSqlLimiter.java
similarity index 92%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaBasicSqlLimiter.java
rename to platforms/hana/src/main/java/io/ebean/platform/hana/HanaBasicSqlLimiter.java
index 42239fc1a..30e56bf35 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaBasicSqlLimiter.java
+++ b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaBasicSqlLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.hana;
+package io.ebean.platform.hana;
import io.ebean.config.dbplatform.BasicSqlLimiter;
@@ -21,4 +21,4 @@ public class HanaBasicSqlLimiter implements BasicSqlLimiter {
return sb.toString();
}
-}
\ No newline at end of file
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaHistorySupport.java b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaHistorySupport.java
similarity index 93%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaHistorySupport.java
rename to platforms/hana/src/main/java/io/ebean/platform/hana/HanaHistorySupport.java
index ea2c20d18..8df809972 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaHistorySupport.java
+++ b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaHistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.hana;
+package io.ebean.platform.hana;
import io.ebean.config.dbplatform.DbStandardHistorySupport;
@@ -23,5 +23,5 @@ public class HanaHistorySupport extends DbStandardHistorySupport {
public String getSysPeriodUpper(String tableAlias, String sysPeriod) {
return tableAlias + "." + sysPeriod + "_end";
}
-
+
}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaPlatform.java b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaPlatform.java
similarity index 99%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaPlatform.java
rename to platforms/hana/src/main/java/io/ebean/platform/hana/HanaPlatform.java
index f7f4c62e2..529e95050 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaPlatform.java
+++ b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaPlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.hana;
+package io.ebean.platform.hana;
import io.ebean.Query;
import io.ebean.Query.LockWait;
diff --git a/platforms/hana/src/main/java/io/ebean/platform/hana/HanaPlatformProvider.java b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaPlatformProvider.java
new file mode 100644
index 000000000..f159fd239
--- /dev/null
+++ b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaPlatformProvider.java
@@ -0,0 +1,49 @@
+package io.ebean.platform.hana;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * Hana platform provider.
+ */
+public class HanaPlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "Hana";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.equals("hana");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ return new HanaPlatform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("hdb");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new HanaPlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.HANA.equals(platform);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return new HanaPlatform();
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaSqlLimiter.java b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaSqlLimiter.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaSqlLimiter.java
rename to platforms/hana/src/main/java/io/ebean/platform/hana/HanaSqlLimiter.java
index bd55b5418..1cab7e271 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/hana/HanaSqlLimiter.java
+++ b/platforms/hana/src/main/java/io/ebean/platform/hana/HanaSqlLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.hana;
+package io.ebean.platform.hana;
import io.ebean.config.dbplatform.SqlLimitRequest;
import io.ebean.config.dbplatform.SqlLimitResponse;
diff --git a/platforms/hana/src/main/java/io/ebean/platform/hana/package-info.java b/platforms/hana/src/main/java/io/ebean/platform/hana/package-info.java
new file mode 100644
index 000000000..97af417d4
--- /dev/null
+++ b/platforms/hana/src/main/java/io/ebean/platform/hana/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * SAP HANA specific support.
+ */
+package io.ebean.platform.hana;
diff --git a/platforms/hana/src/main/java/module-info.java b/platforms/hana/src/main/java/module-info.java
new file mode 100644
index 000000000..6d12be6d9
--- /dev/null
+++ b/platforms/hana/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.hana {
+
+ exports io.ebean.platform.hana;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.hana.HanaPlatformProvider;
+}
diff --git a/platforms/hana/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/hana/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..fe60d4d6f
--- /dev/null
+++ b/platforms/hana/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.hana.HanaPlatformProvider
diff --git a/platforms/hsqldb/pom.xml b/platforms/hsqldb/pom.xml
new file mode 100644
index 000000000..85176e478
--- /dev/null
+++ b/platforms/hsqldb/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-hsqldb
+
+
+
+
+ io.ebean
+ ebean-platform-h2
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/HSqlDbPlatformProvider.java b/platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/HSqlDbPlatformProvider.java
new file mode 100644
index 000000000..647f8ceba
--- /dev/null
+++ b/platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/HSqlDbPlatformProvider.java
@@ -0,0 +1,49 @@
+package io.ebean.platform.hsqldb;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * HSqlDB platform provider.
+ */
+public class HSqlDbPlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "HSqlDb";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.equals("hsqldb");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ return new HsqldbPlatform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("hsql database engine");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new HsqldbPlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.HSQLDB.equals(platform);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return new HsqldbPlatform();
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/hsqldb/HsqldbPlatform.java b/platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/HsqldbPlatform.java
similarity index 87%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/hsqldb/HsqldbPlatform.java
rename to platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/HsqldbPlatform.java
index b8cb1e0dd..e5ece81d1 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/hsqldb/HsqldbPlatform.java
+++ b/platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/HsqldbPlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.hsqldb;
+package io.ebean.platform.hsqldb;
import io.ebean.BackgroundExecutor;
import io.ebean.annotation.Platform;
@@ -7,8 +7,8 @@ import io.ebean.config.dbplatform.DbPlatformType;
import io.ebean.config.dbplatform.DbType;
import io.ebean.config.dbplatform.IdType;
import io.ebean.config.dbplatform.PlatformIdGenerator;
-import io.ebean.config.dbplatform.h2.H2DbEncrypt;
-import io.ebean.config.dbplatform.h2.H2SequenceIdGenerator;
+import io.ebean.platform.h2.H2DbEncrypt;
+import io.ebean.platform.h2.H2SequenceIdGenerator;
import javax.sql.DataSource;
diff --git a/platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/package-info.java b/platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/package-info.java
new file mode 100644
index 000000000..cce7bd175
--- /dev/null
+++ b/platforms/hsqldb/src/main/java/io/ebean/platform/hsqldb/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Hsqldb specific support.
+ */
+package io.ebean.platform.hsqldb;
diff --git a/platforms/hsqldb/src/main/java/module-info.java b/platforms/hsqldb/src/main/java/module-info.java
new file mode 100644
index 000000000..0e1a9c316
--- /dev/null
+++ b/platforms/hsqldb/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.platform.hsqldb {
+
+ exports io.ebean.platform.hsqldb;
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.platform.h2;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.hsqldb.HSqlDbPlatformProvider;
+}
diff --git a/platforms/hsqldb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/hsqldb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..08cb8c898
--- /dev/null
+++ b/platforms/hsqldb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.hsqldb.HSqlDbPlatformProvider
diff --git a/platforms/mariadb/pom.xml b/platforms/mariadb/pom.xml
new file mode 100644
index 000000000..c5c3b5445
--- /dev/null
+++ b/platforms/mariadb/pom.xml
@@ -0,0 +1,27 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-mariadb
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.ebean
+ ebean-platform-mysql
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbHistorySupport.java b/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbHistorySupport.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbHistorySupport.java
rename to platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbHistorySupport.java
index b41185f8e..f5c2d6524 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbHistorySupport.java
+++ b/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbHistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mariadb;
+package io.ebean.platform.mariadb;
import io.ebean.config.dbplatform.DbStandardHistorySupport;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbPlatform.java b/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbPlatform.java
similarity index 86%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbPlatform.java
rename to platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbPlatform.java
index 0abdef7bd..1eaecd9cd 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbPlatform.java
+++ b/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbPlatform.java
@@ -1,11 +1,11 @@
-package io.ebean.config.dbplatform.mariadb;
+package io.ebean.platform.mariadb;
import javax.sql.DataSource;
import io.ebean.BackgroundExecutor;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.PlatformIdGenerator;
-import io.ebean.config.dbplatform.mysql.BaseMySqlPlatform;
+import io.ebean.platform.mysql.BaseMySqlPlatform;
/**
* MariaDB platform.
diff --git a/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbPlatformProvider.java b/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbPlatformProvider.java
new file mode 100644
index 000000000..8fdd31ad6
--- /dev/null
+++ b/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbPlatformProvider.java
@@ -0,0 +1,49 @@
+package io.ebean.platform.mariadb;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * MariaDb platform provider.
+ */
+public class MariaDbPlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "MariaDb";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.equals("mariadb");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ return new MariaDbPlatform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("mariadb");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new MariaDbPlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.MARIADB.equals(platform);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return new MariaDbPlatform();
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbSequence.java b/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbSequence.java
similarity index 92%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbSequence.java
rename to platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbSequence.java
index c6350213f..b33ba782f 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mariadb/MariaDbSequence.java
+++ b/platforms/mariadb/src/main/java/io/ebean/platform/mariadb/MariaDbSequence.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mariadb;
+package io.ebean.platform.mariadb;
import io.ebean.BackgroundExecutor;
import io.ebean.config.dbplatform.SequenceStepIdGenerator;
diff --git a/platforms/mariadb/src/main/java/module-info.java b/platforms/mariadb/src/main/java/module-info.java
new file mode 100644
index 000000000..8b709a2d4
--- /dev/null
+++ b/platforms/mariadb/src/main/java/module-info.java
@@ -0,0 +1,9 @@
+module io.ebean.platform.mariadb {
+
+ exports io.ebean.platform.mariadb;
+
+ requires transitive io.ebean.api;
+ requires transitive io.ebean.platform.mysql;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.mariadb.MariaDbPlatformProvider;
+}
diff --git a/platforms/mariadb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/mariadb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..4b88f4157
--- /dev/null
+++ b/platforms/mariadb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.mariadb.MariaDbPlatformProvider
diff --git a/platforms/mysql/pom.xml b/platforms/mysql/pom.xml
new file mode 100644
index 000000000..69edf3953
--- /dev/null
+++ b/platforms/mysql/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-mysql
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.avaje
+ junit
+ 1.1
+ test
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/BaseMySqlPlatform.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/BaseMySqlPlatform.java
similarity index 98%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/BaseMySqlPlatform.java
rename to platforms/mysql/src/main/java/io/ebean/platform/mysql/BaseMySqlPlatform.java
index 438b53697..6578901c8 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/BaseMySqlPlatform.java
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/BaseMySqlPlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mysql;
+package io.ebean.platform.mysql;
import io.ebean.Query;
import io.ebean.config.dbplatform.DatabasePlatform;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySql55Platform.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySql55Platform.java
similarity index 90%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySql55Platform.java
rename to platforms/mysql/src/main/java/io/ebean/platform/mysql/MySql55Platform.java
index dd8093683..60332e11a 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySql55Platform.java
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySql55Platform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mysql;
+package io.ebean.platform.mysql;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.DbPlatformType;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlBlob.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlBlob.java
similarity index 94%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlBlob.java
rename to platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlBlob.java
index fe25f41c8..d959c487f 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlBlob.java
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlBlob.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mysql;
+package io.ebean.platform.mysql;
import io.ebean.config.dbplatform.DbPlatformType;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlClob.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlClob.java
similarity index 94%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlClob.java
rename to platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlClob.java
index 2d3e48e11..07178b63c 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlClob.java
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlClob.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mysql;
+package io.ebean.platform.mysql;
import io.ebean.config.dbplatform.DbPlatformType;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlDbEncrypt.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlDbEncrypt.java
similarity index 96%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlDbEncrypt.java
rename to platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlDbEncrypt.java
index f8717936b..5ae6d2249 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlDbEncrypt.java
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlDbEncrypt.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mysql;
+package io.ebean.platform.mysql;
import io.ebean.config.dbplatform.AbstractDbEncrypt;
import io.ebean.config.dbplatform.DbEncryptFunction;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlHistorySupport.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlHistorySupport.java
similarity index 80%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlHistorySupport.java
rename to platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlHistorySupport.java
index 53ebd8d4e..00bffc8da 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlHistorySupport.java
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlHistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mysql;
+package io.ebean.platform.mysql;
import io.ebean.config.dbplatform.DbViewHistorySupport;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlPlatform.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlPlatform.java
similarity index 83%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlPlatform.java
rename to platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlPlatform.java
index be4aaa166..bd2d48d8c 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/mysql/MySqlPlatform.java
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlPlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.mysql;
+package io.ebean.platform.mysql;
import io.ebean.annotation.Platform;
diff --git a/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlPlatformProvider.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlPlatformProvider.java
new file mode 100644
index 000000000..fddbb278f
--- /dev/null
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/MySqlPlatformProvider.java
@@ -0,0 +1,58 @@
+package io.ebean.platform.mysql;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * MySql platform provider.
+ */
+public class MySqlPlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "MySql";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.startsWith("mysql");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ if (name.equals("mysql")) {
+ return new MySqlPlatform();
+ }
+ if (name.equals("mysql55")) {
+ return new MySql55Platform();
+ }
+ throw new IllegalArgumentException("Unexpected MySql platform name " + name);
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("mysql");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ if (majorVersion <= 5 && minorVersion <= 5) {
+ return new MySql55Platform();
+ }
+ return new MySqlPlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.MYSQL.equals(platform.base());
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return platform == Platform.MYSQL55 ? new MySql55Platform() : new MySqlPlatform();
+ }
+}
diff --git a/platforms/mysql/src/main/java/io/ebean/platform/mysql/package-info.java b/platforms/mysql/src/main/java/io/ebean/platform/mysql/package-info.java
new file mode 100644
index 000000000..d2eae4169
--- /dev/null
+++ b/platforms/mysql/src/main/java/io/ebean/platform/mysql/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * MySql specific support.
+ */
+package io.ebean.platform.mysql;
diff --git a/platforms/mysql/src/main/java/module-info.java b/platforms/mysql/src/main/java/module-info.java
new file mode 100644
index 000000000..ac36a8ee7
--- /dev/null
+++ b/platforms/mysql/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.mysql {
+
+ exports io.ebean.platform.mysql;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.mysql.MySqlPlatformProvider;
+}
diff --git a/platforms/mysql/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/mysql/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..7d89ec9b5
--- /dev/null
+++ b/platforms/mysql/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.mysql.MySqlPlatformProvider
diff --git a/ebean-api/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java b/platforms/mysql/src/test/java/io/ebean/platform/mysql/MySqlPlatformTest.java
similarity index 78%
rename from ebean-api/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java
rename to platforms/mysql/src/test/java/io/ebean/platform/mysql/MySqlPlatformTest.java
index 450749f96..d65331043 100644
--- a/ebean-api/src/test/java/io/ebean/config/dbplatform/MySqlPlatformTest.java
+++ b/platforms/mysql/src/test/java/io/ebean/platform/mysql/MySqlPlatformTest.java
@@ -1,7 +1,8 @@
-package io.ebean.config.dbplatform;
+package io.ebean.platform.mysql;
import io.ebean.config.PlatformConfig;
-import io.ebean.config.dbplatform.mysql.MySqlPlatform;
+import io.ebean.config.dbplatform.DbPlatformType;
+import io.ebean.platform.mysql.MySqlPlatform;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -12,7 +13,7 @@ public class MySqlPlatformTest {
public void uuid_default() {
MySqlPlatform platform = new MySqlPlatform();
- platform.configure(new PlatformConfig(), false);
+ platform.configure(new PlatformConfig());
DbPlatformType dbType = platform.getDbTypeMap().get(DbPlatformType.UUID);
assertThat(dbType.renderType(0, 0)).isEqualTo("varchar(40)");
@@ -25,7 +26,7 @@ public class MySqlPlatformTest {
MySqlPlatform platform = new MySqlPlatform();
PlatformConfig config = new PlatformConfig();
config.setDbUuid(PlatformConfig.DbUuid.AUTO_BINARY);
- platform.configure(config, false);
+ platform.configure(config);
DbPlatformType dbType = platform.getDbTypeMap().get(DbPlatformType.UUID);
assertThat(dbType.renderType(0, 0)).isEqualTo("binary(16)");
diff --git a/platforms/nuodb/pom.xml b/platforms/nuodb/pom.xml
new file mode 100644
index 000000000..8a5142159
--- /dev/null
+++ b/platforms/nuodb/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-nuodb
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbHistorySupport.java b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbHistorySupport.java
similarity index 80%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbHistorySupport.java
rename to platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbHistorySupport.java
index 2bb0918fc..be0808677 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbHistorySupport.java
+++ b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbHistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.nuodb;
+package io.ebean.platform.nuodb;
import io.ebean.config.dbplatform.DbViewHistorySupport;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbPlatform.java b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbPlatform.java
similarity index 91%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbPlatform.java
rename to platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbPlatform.java
index 349793153..d08fa0826 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbPlatform.java
+++ b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbPlatform.java
@@ -1,7 +1,8 @@
-package io.ebean.config.dbplatform.nuodb;
+package io.ebean.platform.nuodb;
import io.ebean.BackgroundExecutor;
import io.ebean.Query;
+import io.ebean.Query.LockWait;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.config.dbplatform.DbPlatformType;
@@ -48,7 +49,7 @@ public class NuoDbPlatform extends DatabasePlatform {
}
@Override
- protected String withForUpdate(String sql, Query.LockWait lockWait, Query.LockType lockType) {
+ protected String withForUpdate(String sql, LockWait lockWait, Query.LockType lockType) {
switch (lockWait) {
case NOWAIT:
return sql + " for update nowait";
diff --git a/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbPlatformProvider.java b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbPlatformProvider.java
new file mode 100644
index 000000000..6a1e35e07
--- /dev/null
+++ b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbPlatformProvider.java
@@ -0,0 +1,49 @@
+package io.ebean.platform.nuodb;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * NuoDB platform provider.
+ */
+public class NuoDbPlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "NuoDB";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.equals("nuodb");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ return new NuoDbPlatform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("nuo");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new NuoDbPlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.NUODB.equals(platform);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return new NuoDbPlatform();
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbSequence.java b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbSequence.java
similarity index 93%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbSequence.java
rename to platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbSequence.java
index 6767231c4..8ef2236c7 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/nuodb/NuoDbSequence.java
+++ b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/NuoDbSequence.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.nuodb;
+package io.ebean.platform.nuodb;
import io.ebean.BackgroundExecutor;
import io.ebean.config.dbplatform.SequenceStepIdGenerator;
diff --git a/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/package-info.java b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/package-info.java
new file mode 100644
index 000000000..3349ea76e
--- /dev/null
+++ b/platforms/nuodb/src/main/java/io/ebean/platform/nuodb/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * NuoDB specific support.
+ */
+package io.ebean.platform.nuodb;
diff --git a/platforms/nuodb/src/main/java/module-info.java b/platforms/nuodb/src/main/java/module-info.java
new file mode 100644
index 000000000..179889333
--- /dev/null
+++ b/platforms/nuodb/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.nuodb {
+
+ exports io.ebean.platform.nuodb;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.nuodb.NuoDbPlatformProvider;
+}
diff --git a/platforms/nuodb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/nuodb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..dc8c8cefe
--- /dev/null
+++ b/platforms/nuodb/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.nuodb.NuoDbPlatformProvider
diff --git a/platforms/oracle/pom.xml b/platforms/oracle/pom.xml
new file mode 100644
index 000000000..345740e8e
--- /dev/null
+++ b/platforms/oracle/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-oracle
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.avaje
+ junit
+ 1.1
+ test
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/Oracle11Platform.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/Oracle11Platform.java
similarity index 91%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/Oracle11Platform.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/Oracle11Platform.java
index cb32a7470..00cc9cd84 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/Oracle11Platform.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/Oracle11Platform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.IdType;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/Oracle12Platform.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/Oracle12Platform.java
similarity index 84%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/Oracle12Platform.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/Oracle12Platform.java
index 479c5f229..6cd7bdfa0 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/Oracle12Platform.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/Oracle12Platform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
/**
* Oracle 12 platform using column alias.
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleAnsiSqlRowsLimiter.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleAnsiSqlRowsLimiter.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleAnsiSqlRowsLimiter.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleAnsiSqlRowsLimiter.java
index 6e9e56993..7d22a35a5 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleAnsiSqlRowsLimiter.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleAnsiSqlRowsLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
import io.ebean.config.dbplatform.SqlLimitRequest;
import io.ebean.config.dbplatform.SqlLimitResponse;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleDbEncrypt.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleDbEncrypt.java
similarity index 98%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleDbEncrypt.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleDbEncrypt.java
index 2eae251a9..eac922323 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleDbEncrypt.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleDbEncrypt.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
import io.ebean.config.dbplatform.AbstractDbEncrypt;
import io.ebean.config.dbplatform.DbEncryptFunction;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleDbHistorySupport.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleDbHistorySupport.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleDbHistorySupport.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleDbHistorySupport.java
index 54e6c46ea..e77687361 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleDbHistorySupport.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleDbHistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
import io.ebean.config.dbplatform.DbStandardHistorySupport;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OraclePlatform.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OraclePlatform.java
similarity index 98%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OraclePlatform.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/OraclePlatform.java
index 74f68ced7..a76880606 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OraclePlatform.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OraclePlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
import io.ebean.BackgroundExecutor;
import io.ebean.Query;
diff --git a/platforms/oracle/src/main/java/io/ebean/platform/oracle/OraclePlatformProvider.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OraclePlatformProvider.java
new file mode 100644
index 000000000..e5184b8ba
--- /dev/null
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OraclePlatformProvider.java
@@ -0,0 +1,67 @@
+package io.ebean.platform.oracle;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * Oracle platform provider.
+ */
+public class OraclePlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "Oracle";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.startsWith("oracle");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ if (name.equals("oracle11") || name.equals("oracle10") || name.equals("oracle9")) {
+ return new Oracle11Platform();
+ }
+ if (name.equals("oracle12")) {
+ return new Oracle12Platform();
+ }
+ return new OraclePlatform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("oracle");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ if (majorVersion < 12) {
+ return new Oracle11Platform();
+ }
+ if (majorVersion < 13) {
+ return new Oracle12Platform();
+ }
+ return new OraclePlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.ORACLE.equals(platform.base());
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ if (platform.equals(Platform.ORACLE11)) {
+ return new Oracle11Platform();
+ }
+ if (platform.equals(Platform.ORACLE12)) {
+ return new Oracle12Platform();
+ }
+ return new OraclePlatform();
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleRownumBasicLimiter.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleRownumBasicLimiter.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleRownumBasicLimiter.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleRownumBasicLimiter.java
index e51df98cb..ae3de034b 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleRownumBasicLimiter.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleRownumBasicLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
import io.ebean.config.dbplatform.BasicSqlLimiter;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleRownumSqlLimiter.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleRownumSqlLimiter.java
similarity index 97%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleRownumSqlLimiter.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleRownumSqlLimiter.java
index cc70e29de..fa208d819 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleRownumSqlLimiter.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleRownumSqlLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
import io.ebean.config.dbplatform.SqlLimitRequest;
import io.ebean.config.dbplatform.SqlLimitResponse;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleSequenceIdGenerator.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleSequenceIdGenerator.java
similarity index 94%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleSequenceIdGenerator.java
rename to platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleSequenceIdGenerator.java
index 32dd7a28e..fb10f53a7 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/oracle/OracleSequenceIdGenerator.java
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/OracleSequenceIdGenerator.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.oracle;
+package io.ebean.platform.oracle;
import io.ebean.BackgroundExecutor;
import io.ebean.config.dbplatform.SequenceBatchIdGenerator;
diff --git a/platforms/oracle/src/main/java/io/ebean/platform/oracle/package-info.java b/platforms/oracle/src/main/java/io/ebean/platform/oracle/package-info.java
new file mode 100644
index 000000000..8fac13312
--- /dev/null
+++ b/platforms/oracle/src/main/java/io/ebean/platform/oracle/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Oracle specific support.
+ */
+package io.ebean.platform.oracle;
diff --git a/platforms/oracle/src/main/java/module-info.java b/platforms/oracle/src/main/java/module-info.java
new file mode 100644
index 000000000..bc8954e47
--- /dev/null
+++ b/platforms/oracle/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.oracle {
+
+ exports io.ebean.platform.oracle;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.oracle.OraclePlatformProvider;
+}
diff --git a/platforms/oracle/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/oracle/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..4ef1e921b
--- /dev/null
+++ b/platforms/oracle/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.oracle.OraclePlatformProvider
diff --git a/platforms/oracle/src/test/java/io/ebean/platform/oracle/OraclePlatformProviderTest.java b/platforms/oracle/src/test/java/io/ebean/platform/oracle/OraclePlatformProviderTest.java
new file mode 100644
index 000000000..184820eb6
--- /dev/null
+++ b/platforms/oracle/src/test/java/io/ebean/platform/oracle/OraclePlatformProviderTest.java
@@ -0,0 +1,27 @@
+package io.ebean.platform.oracle;
+
+import io.ebean.annotation.Platform;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+class OraclePlatformProviderTest {
+
+ OraclePlatformProvider provider = new OraclePlatformProvider();
+
+ @Test
+ void create() {
+ assertThat(provider.create(Platform.ORACLE)).isInstanceOf(OraclePlatform.class);
+ assertThat(provider.create(Platform.ORACLE11)).isInstanceOf(Oracle11Platform.class);
+ assertThat(provider.create(Platform.ORACLE12)).isInstanceOf(Oracle12Platform.class);
+ }
+
+ @Test
+ void create_byName() {
+ assertThat(provider.create("oracle")).isInstanceOf(OraclePlatform.class);
+ assertThat(provider.create("oracle12")).isInstanceOf(Oracle12Platform.class);
+ assertThat(provider.create("oracle11")).isInstanceOf(Oracle11Platform.class);
+ assertThat(provider.create("oracle10")).isInstanceOf(Oracle11Platform.class);
+ assertThat(provider.create("oracle9")).isInstanceOf(Oracle11Platform.class);
+ }
+}
diff --git a/ebean-api/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java b/platforms/oracle/src/test/java/io/ebean/platform/oracle/OraclePlatformTest.java
similarity index 69%
rename from ebean-api/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java
rename to platforms/oracle/src/test/java/io/ebean/platform/oracle/OraclePlatformTest.java
index 47d8fa0dd..af2cc0c51 100644
--- a/ebean-api/src/test/java/io/ebean/config/dbplatform/OraclePlatformTest.java
+++ b/platforms/oracle/src/test/java/io/ebean/platform/oracle/OraclePlatformTest.java
@@ -1,9 +1,7 @@
-package io.ebean.config.dbplatform;
+package io.ebean.platform.oracle;
import io.ebean.config.PlatformConfig;
-import io.ebean.config.dbplatform.oracle.Oracle11Platform;
-import io.ebean.config.dbplatform.oracle.Oracle12Platform;
-import io.ebean.config.dbplatform.oracle.OraclePlatform;
+import io.ebean.config.dbplatform.DbPlatformType;
import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -13,25 +11,25 @@ class OraclePlatformTest {
@Test
void columnAliasPrefix_Oracle11Platform() {
Oracle11Platform platform11 = new Oracle11Platform();
- assertThat(platform11.columnAliasPrefix).isEqualTo("c");
+ assertThat(platform11.getColumnAliasPrefix()).isEqualTo("c");
}
@Test
void columnAliasPrefix_Oracle12Platform() {
Oracle12Platform platform12 = new Oracle12Platform();
- assertThat(platform12.columnAliasPrefix).isEqualTo("c");
+ assertThat(platform12.getColumnAliasPrefix()).isEqualTo("c");
}
@Test
void columnAliasPrefix_OraclePlatform() {
OraclePlatform platform = new OraclePlatform();
- assertThat(platform.columnAliasPrefix).isNull();
+ assertThat(platform.getColumnAliasPrefix()).isNull();
}
@Test
void uuid_default() {
OraclePlatform platform = new OraclePlatform();
- platform.configure(new PlatformConfig(), false);
+ platform.configure(new PlatformConfig());
DbPlatformType dbType = platform.getDbTypeMap().get(DbPlatformType.UUID);
assertThat(dbType.renderType(0, 0)).isEqualTo("varchar2(40)");
}
@@ -42,7 +40,7 @@ class OraclePlatformTest {
PlatformConfig config = new PlatformConfig();
config.setDbUuid(PlatformConfig.DbUuid.AUTO_BINARY);
- platform.configure(config, false);
+ platform.configure(config);
DbPlatformType dbType = platform.getDbTypeMap().get(DbPlatformType.UUID);
assertThat(dbType.renderType(0, 0)).isEqualTo("raw(16)");
diff --git a/platforms/pom.xml b/platforms/pom.xml
new file mode 100644
index 000000000..636ebf4f1
--- /dev/null
+++ b/platforms/pom.xml
@@ -0,0 +1,30 @@
+
+
+ 4.0.0
+
+ ebean-parent
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ platforms
+ pom
+
+
+ all
+ clickhouse
+ db2
+ h2
+ hana
+ hsqldb
+ mariadb
+ mysql
+ nuodb
+ oracle
+ postgres
+ sqlanywhere
+ sqlite
+ sqlserver
+
+
+
diff --git a/platforms/postgres/pom.xml b/platforms/postgres/pom.xml
new file mode 100644
index 000000000..7cd287a22
--- /dev/null
+++ b/platforms/postgres/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-postgres
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.avaje
+ junit
+ 1.1
+ test
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/cockroach/CockroachPlatform.java b/platforms/postgres/src/main/java/io/ebean/platform/cockroach/CockroachPlatform.java
similarity index 73%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/cockroach/CockroachPlatform.java
rename to platforms/postgres/src/main/java/io/ebean/platform/cockroach/CockroachPlatform.java
index e388f87f6..8b9c780e0 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/cockroach/CockroachPlatform.java
+++ b/platforms/postgres/src/main/java/io/ebean/platform/cockroach/CockroachPlatform.java
@@ -1,7 +1,7 @@
-package io.ebean.config.dbplatform.cockroach;
+package io.ebean.platform.cockroach;
import io.ebean.annotation.Platform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import io.ebean.platform.postgres.PostgresPlatform;
/**
* CockroachDB based platform.
diff --git a/platforms/postgres/src/main/java/io/ebean/platform/cockroach/package-info.java b/platforms/postgres/src/main/java/io/ebean/platform/cockroach/package-info.java
new file mode 100644
index 000000000..c7bd20293
--- /dev/null
+++ b/platforms/postgres/src/main/java/io/ebean/platform/cockroach/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Cockroach DB support.
+ */
+package io.ebean.platform.cockroach;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/Postgres9Platform.java b/platforms/postgres/src/main/java/io/ebean/platform/postgres/Postgres9Platform.java
similarity index 85%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/Postgres9Platform.java
rename to platforms/postgres/src/main/java/io/ebean/platform/postgres/Postgres9Platform.java
index 47d554621..e30e0a3c9 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/Postgres9Platform.java
+++ b/platforms/postgres/src/main/java/io/ebean/platform/postgres/Postgres9Platform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.postgres;
+package io.ebean.platform.postgres;
import io.ebean.annotation.Platform;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresDbEncrypt.java b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresDbEncrypt.java
similarity index 96%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresDbEncrypt.java
rename to platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresDbEncrypt.java
index b2d24aaf3..3ba22b75b 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresDbEncrypt.java
+++ b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresDbEncrypt.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.postgres;
+package io.ebean.platform.postgres;
import io.ebean.config.dbplatform.AbstractDbEncrypt;
import io.ebean.config.dbplatform.DbEncryptFunction;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresHistorySupport.java b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresHistorySupport.java
similarity index 96%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresHistorySupport.java
rename to platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresHistorySupport.java
index d4aed03e5..681f986c7 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresHistorySupport.java
+++ b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresHistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.postgres;
+package io.ebean.platform.postgres;
import io.ebean.config.dbplatform.DbViewHistorySupport;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresPlatform.java b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatform.java
similarity index 99%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresPlatform.java
rename to platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatform.java
index d6397c615..714b52271 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresPlatform.java
+++ b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.postgres;
+package io.ebean.platform.postgres;
import io.ebean.BackgroundExecutor;
import io.ebean.Query;
diff --git a/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatformProvider.java b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatformProvider.java
new file mode 100644
index 000000000..554c4aeb5
--- /dev/null
+++ b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatformProvider.java
@@ -0,0 +1,100 @@
+package io.ebean.platform.postgres;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+import io.ebean.platform.cockroach.CockroachPlatform;
+import io.ebean.platform.yugabyte.YugabytePlatform;
+
+import javax.persistence.PersistenceException;
+import java.sql.*;
+import java.util.Locale;
+
+/**
+ * Postgres, Yugabyte and Cockroach platform provider.
+ */
+public class PostgresPlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "Postgres,Cockroach,Yugabyte";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.startsWith("postgres") || name.equals("cockroach") || name.equals("yugabyte");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ switch (name) {
+ case "postgres9":
+ return new Postgres9Platform();
+ case "postgres":
+ return new PostgresPlatform();
+ case "cockroach":
+ return new CockroachPlatform();
+ case "yugabyte":
+ return new YugabytePlatform();
+ }
+ throw new IllegalArgumentException("Unknown platform name " + name);
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("postgres");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ try {
+ String productVersion = meta.getDatabaseProductVersion().toLowerCase(Locale.ENGLISH);
+ if (productVersion.contains("-yb-")) {
+ return new YugabytePlatform();
+ }
+ try (PreparedStatement statement = connection.prepareStatement("select version() as \"version\"")) {
+ try (ResultSet resultSet = statement.executeQuery()) {
+ if (resultSet.next()) {
+ productVersion = resultSet.getString("version").toLowerCase();
+ if (productVersion.contains("cockroach")) {
+ return new CockroachPlatform();
+ }
+ }
+ }
+ }
+ if (majorVersion <= 9) {
+ return new Postgres9Platform();
+ }
+ return new PostgresPlatform();
+ } catch (SQLException e) {
+ throw new PersistenceException("Error trying to determine postgres platform via JDBC metadata", e);
+ }
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ switch (platform) {
+ case POSTGRES:
+ case POSTGRES9:
+ case COCKROACH:
+ case YUGABYTE:
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ switch (platform) {
+ case POSTGRES:
+ return new PostgresPlatform();
+ case POSTGRES9:
+ return new Postgres9Platform();
+ case COCKROACH:
+ return new CockroachPlatform();
+ case YUGABYTE:
+ return new YugabytePlatform();
+ }
+ throw new IllegalArgumentException("Unknown platform " + platform);
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresSequenceIdGenerator.java b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresSequenceIdGenerator.java
similarity index 94%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresSequenceIdGenerator.java
rename to platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresSequenceIdGenerator.java
index 4550c926d..9be62cf52 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/postgres/PostgresSequenceIdGenerator.java
+++ b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresSequenceIdGenerator.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.postgres;
+package io.ebean.platform.postgres;
import io.ebean.BackgroundExecutor;
import io.ebean.config.dbplatform.SequenceBatchIdGenerator;
diff --git a/platforms/postgres/src/main/java/io/ebean/platform/postgres/package-info.java b/platforms/postgres/src/main/java/io/ebean/platform/postgres/package-info.java
new file mode 100644
index 000000000..a996dab42
--- /dev/null
+++ b/platforms/postgres/src/main/java/io/ebean/platform/postgres/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Postgres specific support.
+ */
+package io.ebean.platform.postgres;
diff --git a/platforms/postgres/src/main/java/io/ebean/platform/yugabyte/YugabytePlatform.java b/platforms/postgres/src/main/java/io/ebean/platform/yugabyte/YugabytePlatform.java
new file mode 100644
index 000000000..00f8ac141
--- /dev/null
+++ b/platforms/postgres/src/main/java/io/ebean/platform/yugabyte/YugabytePlatform.java
@@ -0,0 +1,12 @@
+package io.ebean.platform.yugabyte;
+
+import io.ebean.annotation.Platform;
+import io.ebean.platform.postgres.PostgresPlatform;
+
+public class YugabytePlatform extends PostgresPlatform {
+
+ public YugabytePlatform() {
+ super();
+ this.platform = Platform.YUGABYTE;
+ }
+}
diff --git a/platforms/postgres/src/main/java/io/ebean/platform/yugabyte/package-info.java b/platforms/postgres/src/main/java/io/ebean/platform/yugabyte/package-info.java
new file mode 100644
index 000000000..64d50dbcd
--- /dev/null
+++ b/platforms/postgres/src/main/java/io/ebean/platform/yugabyte/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Yugabyte DB support.
+ */
+package io.ebean.platform.yugabyte;
diff --git a/platforms/postgres/src/main/java/module-info.java b/platforms/postgres/src/main/java/module-info.java
new file mode 100644
index 000000000..0863d664f
--- /dev/null
+++ b/platforms/postgres/src/main/java/module-info.java
@@ -0,0 +1,10 @@
+module io.ebean.platform.postgres {
+
+ exports io.ebean.platform.postgres;
+ exports io.ebean.platform.yugabyte;
+ exports io.ebean.platform.cockroach;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.postgres.PostgresPlatformProvider;
+}
diff --git a/platforms/postgres/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/postgres/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..976936e9a
--- /dev/null
+++ b/platforms/postgres/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.postgres.PostgresPlatformProvider
diff --git a/platforms/postgres/src/test/java/io/ebean/platform/postgres/PostgresPlatformTest.java b/platforms/postgres/src/test/java/io/ebean/platform/postgres/PostgresPlatformTest.java
new file mode 100644
index 000000000..cb2075158
--- /dev/null
+++ b/platforms/postgres/src/test/java/io/ebean/platform/postgres/PostgresPlatformTest.java
@@ -0,0 +1,96 @@
+package io.ebean.platform.postgres;
+
+import io.ebean.Query;
+import io.ebean.annotation.Platform;
+import io.ebean.config.PlatformConfig;
+import io.ebean.config.dbplatform.DbPlatformType;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DbType;
+
+import org.junit.jupiter.api.Test;
+
+import static io.ebean.Query.LockType.*;
+import static io.ebean.Query.LockWait.*;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+
+public class PostgresPlatformTest {
+
+ @Test
+ public void testUuidType() {
+
+ PostgresPlatform platform = new PostgresPlatform();
+ platform.configure(new PlatformConfig());
+
+ DbPlatformType dbType = platform.getDbTypeMap().get(DbPlatformType.UUID);
+ String columnDefn = dbType.renderType(0, 0);
+
+ assertThat(columnDefn).isEqualTo("uuid");
+ }
+
+ @Test
+ public void default_forUpdate_expect_noKeyUsed() {
+
+ PostgresPlatform platform = new PostgresPlatform();
+
+ PlatformConfig config = new PlatformConfig();
+ platform.configure(config);
+
+ assertThat(config.isForUpdateNoKey()).isFalse();
+ assertThat(platform.withForUpdate("X", SKIPLOCKED, DEFAULT)).isEqualTo("X for update skip locked");
+ assertThat(platform.withForUpdate("X", NOWAIT, DEFAULT)).isEqualTo("X for update nowait");
+ assertThat(platform.withForUpdate("X", WAIT, DEFAULT)).isEqualTo("X for update");
+
+ assertThat(platform.withForUpdate("X", SKIPLOCKED, UPDATE)).isEqualTo("X for update skip locked");
+ assertThat(platform.withForUpdate("X", SKIPLOCKED, NO_KEY_UPDATE)).isEqualTo("X for no key update skip locked");
+ assertThat(platform.withForUpdate("X", SKIPLOCKED, SHARE)).isEqualTo("X for share skip locked");
+ assertThat(platform.withForUpdate("X", SKIPLOCKED, KEY_SHARE)).isEqualTo("X for key share skip locked");
+
+ assertThat(platform.withForUpdate("X", NOWAIT, UPDATE)).isEqualTo("X for update nowait");
+ assertThat(platform.withForUpdate("X", NOWAIT, NO_KEY_UPDATE)).isEqualTo("X for no key update nowait");
+ assertThat(platform.withForUpdate("X", NOWAIT, SHARE)).isEqualTo("X for share nowait");
+ assertThat(platform.withForUpdate("X", NOWAIT, KEY_SHARE)).isEqualTo("X for key share nowait");
+
+ assertThat(platform.withForUpdate("X", WAIT, UPDATE)).isEqualTo("X for update");
+ assertThat(platform.withForUpdate("X", WAIT, NO_KEY_UPDATE)).isEqualTo("X for no key update");
+ assertThat(platform.withForUpdate("X", WAIT, SHARE)).isEqualTo("X for share");
+ assertThat(platform.withForUpdate("X", WAIT, KEY_SHARE)).isEqualTo("X for key share");
+ }
+
+ @Test
+ public void lockWithKey_forUpdate() {
+
+ PostgresPlatform platform = new PostgresPlatform();
+
+ PlatformConfig config = new PlatformConfig();
+ config.setForUpdateNoKey(true);
+ platform.configure(config);
+
+ assertThat(config.isForUpdateNoKey()).isTrue();
+ assertThat(platform.withForUpdate("X", SKIPLOCKED, DEFAULT)).isEqualTo("X for no key update skip locked");
+ assertThat(platform.withForUpdate("X", NOWAIT, DEFAULT)).isEqualTo("X for no key update nowait");
+ assertThat(platform.withForUpdate("X", WAIT, DEFAULT)).isEqualTo("X for no key update");
+ }
+
+ @Test
+ public void configure_customType() {
+ PlatformConfig config = new PlatformConfig();
+ config.addCustomMapping(DbType.VARCHAR, "text", Platform.POSTGRES);
+ config.addCustomMapping(DbType.DECIMAL, "decimal(24,4)");
+
+ // PG renders custom decimal and varchar
+ PostgresPlatform pgPlatform = new PostgresPlatform();
+ pgPlatform.configure(config);
+ assertEquals(defaultDecimalDefn(pgPlatform), "decimal(24,4)");
+ assertEquals(defaultDefn(DbType.VARCHAR, pgPlatform), "text");
+ }
+
+ private String defaultDecimalDefn(DatabasePlatform dbPlatform) {
+ return defaultDefn(DbType.DECIMAL, dbPlatform);
+ }
+
+ private String defaultDefn(DbType type, DatabasePlatform dbPlatform) {
+ return dbPlatform.getDbTypeMap().get(type).renderType(0, 0);
+ }
+
+}
diff --git a/platforms/sqlanywhere/pom.xml b/platforms/sqlanywhere/pom.xml
new file mode 100644
index 000000000..3618dcb2d
--- /dev/null
+++ b/platforms/sqlanywhere/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-sqlanywhere
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywhereLimiter.java b/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywhereLimiter.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywhereLimiter.java
rename to platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywhereLimiter.java
index 114b2b1ea..16415310c 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywhereLimiter.java
+++ b/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywhereLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlanywhere;
+package io.ebean.platform.sqlanywhere;
import io.ebean.config.dbplatform.SqlLimitRequest;
import io.ebean.config.dbplatform.SqlLimitResponse;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java b/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywherePlatform.java
similarity index 96%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java
rename to platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywherePlatform.java
index 4dfa401c3..7a8894b21 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlanywhere/SqlAnywherePlatform.java
+++ b/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywherePlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlanywhere;
+package io.ebean.platform.sqlanywhere;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.DatabasePlatform;
diff --git a/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywherePlatformProvider.java b/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywherePlatformProvider.java
new file mode 100644
index 000000000..d4069fadc
--- /dev/null
+++ b/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/SqlAnywherePlatformProvider.java
@@ -0,0 +1,49 @@
+package io.ebean.platform.sqlanywhere;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * SqlAnywhere platform provider.
+ */
+public class SqlAnywherePlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "SqlAnywhere";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.equals("sqlanywhere");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ return new SqlAnywherePlatform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("sql anywhere");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new SqlAnywherePlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.SQLANYWHERE.equals(platform);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return new SqlAnywherePlatform();
+ }
+}
diff --git a/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/package-info.java b/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/package-info.java
new file mode 100644
index 000000000..56163b504
--- /dev/null
+++ b/platforms/sqlanywhere/src/main/java/io/ebean/platform/sqlanywhere/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * SqlAnywhere specific support.
+ */
+package io.ebean.platform.sqlanywhere;
diff --git a/platforms/sqlanywhere/src/main/java/module-info.java b/platforms/sqlanywhere/src/main/java/module-info.java
new file mode 100644
index 000000000..bf17482dd
--- /dev/null
+++ b/platforms/sqlanywhere/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.sqlanywhere {
+
+ exports io.ebean.platform.sqlanywhere;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.sqlanywhere.SqlAnywherePlatformProvider;
+}
diff --git a/platforms/sqlanywhere/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/sqlanywhere/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..d7e1ed0b2
--- /dev/null
+++ b/platforms/sqlanywhere/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.sqlanywhere.SqlAnywherePlatformProvider
diff --git a/platforms/sqlite/pom.xml b/platforms/sqlite/pom.xml
new file mode 100644
index 000000000..727ed0c68
--- /dev/null
+++ b/platforms/sqlite/pom.xml
@@ -0,0 +1,21 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-sqlite
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/SQLitePlatform.java b/platforms/sqlite/src/main/java/io/ebean/platform/sqlite/SQLitePlatform.java
similarity index 96%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/SQLitePlatform.java
rename to platforms/sqlite/src/main/java/io/ebean/platform/sqlite/SQLitePlatform.java
index e936194d5..cfb2b2877 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlite/SQLitePlatform.java
+++ b/platforms/sqlite/src/main/java/io/ebean/platform/sqlite/SQLitePlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlite;
+package io.ebean.platform.sqlite;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.DatabasePlatform;
diff --git a/platforms/sqlite/src/main/java/io/ebean/platform/sqlite/SqlitePlatformProvider.java b/platforms/sqlite/src/main/java/io/ebean/platform/sqlite/SqlitePlatformProvider.java
new file mode 100644
index 000000000..1ed0dbd9f
--- /dev/null
+++ b/platforms/sqlite/src/main/java/io/ebean/platform/sqlite/SqlitePlatformProvider.java
@@ -0,0 +1,49 @@
+package io.ebean.platform.sqlite;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * Sqlite platform provider.
+ */
+public class SqlitePlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "Sqlite";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.equals("sqlite");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ return new SQLitePlatform();
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ return productName.contains("sqlite");
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new SQLitePlatform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.SQLITE.equals(platform);
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return new SQLitePlatform();
+ }
+}
diff --git a/platforms/sqlite/src/main/java/io/ebean/platform/sqlite/package-info.java b/platforms/sqlite/src/main/java/io/ebean/platform/sqlite/package-info.java
new file mode 100644
index 000000000..444be5200
--- /dev/null
+++ b/platforms/sqlite/src/main/java/io/ebean/platform/sqlite/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * Sqlite specific support.
+ */
+package io.ebean.platform.sqlite;
diff --git a/platforms/sqlite/src/main/java/module-info.java b/platforms/sqlite/src/main/java/module-info.java
new file mode 100644
index 000000000..18bc37b5b
--- /dev/null
+++ b/platforms/sqlite/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.sqlite {
+
+ exports io.ebean.platform.sqlite;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.sqlite.SqlitePlatformProvider;
+}
diff --git a/platforms/sqlite/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/sqlite/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..c20e827c5
--- /dev/null
+++ b/platforms/sqlite/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.sqlite.SqlitePlatformProvider
diff --git a/platforms/sqlserver/pom.xml b/platforms/sqlserver/pom.xml
new file mode 100644
index 000000000..9bfabbe81
--- /dev/null
+++ b/platforms/sqlserver/pom.xml
@@ -0,0 +1,28 @@
+
+
+ 4.0.0
+
+ platforms
+ io.ebean
+ 13.2.1-SNAPSHOT
+
+
+ ebean-platform-sqlserver
+
+
+
+
+ io.ebean
+ ebean-api
+ 13.2.1-SNAPSHOT
+
+
+
+ io.avaje
+ junit
+ 1.1
+ test
+
+
+
+
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServer16Platform.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServer16Platform.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServer16Platform.java
rename to platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServer16Platform.java
index 5b15620d7..0e09dc861 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServer16Platform.java
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServer16Platform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlserver;
+package io.ebean.platform.sqlserver;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.DbPlatformType;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServer17Platform.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServer17Platform.java
similarity index 91%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServer17Platform.java
rename to platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServer17Platform.java
index 56a9d1cc0..2a69401e1 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServer17Platform.java
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServer17Platform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlserver;
+package io.ebean.platform.sqlserver;
import io.ebean.annotation.Platform;
import io.ebean.config.dbplatform.DbPlatformType;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasePlatform.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerBasePlatform.java
similarity index 99%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasePlatform.java
rename to platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerBasePlatform.java
index 4dd2077b2..3cf3ed287 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasePlatform.java
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerBasePlatform.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlserver;
+package io.ebean.platform.sqlserver;
import io.ebean.BackgroundExecutor;
import io.ebean.Query;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasicSqlLimiter.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerBasicSqlLimiter.java
similarity index 93%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasicSqlLimiter.java
rename to platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerBasicSqlLimiter.java
index 3ac56f727..24fd299dc 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerBasicSqlLimiter.java
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerBasicSqlLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlserver;
+package io.ebean.platform.sqlserver;
import io.ebean.config.dbplatform.BasicSqlLimiter;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerDbEncrypt.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerDbEncrypt.java
similarity index 96%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerDbEncrypt.java
rename to platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerDbEncrypt.java
index 5647483cd..2ca7d9198 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerDbEncrypt.java
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerDbEncrypt.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlserver;
+package io.ebean.platform.sqlserver;
import io.ebean.config.dbplatform.AbstractDbEncrypt;
import io.ebean.config.dbplatform.DbEncryptFunction;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerHistorySupport.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerHistorySupport.java
similarity index 95%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerHistorySupport.java
rename to platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerHistorySupport.java
index 949f8c054..676b6cd43 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerHistorySupport.java
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerHistorySupport.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlserver;
+package io.ebean.platform.sqlserver;
import io.ebean.config.dbplatform.DbStandardHistorySupport;
diff --git a/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerPlatformProvider.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerPlatformProvider.java
new file mode 100644
index 000000000..94b65443d
--- /dev/null
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerPlatformProvider.java
@@ -0,0 +1,61 @@
+package io.ebean.platform.sqlserver;
+
+import io.ebean.annotation.Platform;
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.DatabasePlatformProvider;
+
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+
+/**
+ * SqlServer platform provider.
+ */
+public class SqlServerPlatformProvider implements DatabasePlatformProvider {
+
+ @Override
+ public String toString() {
+ return "SqlServer";
+ }
+
+ @Override
+ public boolean match(String name) {
+ return name.startsWith("sqlserver");
+ }
+
+ @Override
+ public DatabasePlatform create(String name) {
+ if (name.equals("sqlserver")) {
+ throw new IllegalArgumentException("Please choose the more specific sqlserver16 or sqlserver17 platform. Refer to issue #1340 for details");
+ }
+ if (name.equals("sqlserver16")) {
+ return new SqlServer16Platform();
+ }
+ if (name.equals("sqlserver17")) {
+ return new SqlServer17Platform();
+ }
+ throw new IllegalArgumentException("Unknown SqlServer name " + name);
+ }
+
+ @Override
+ public boolean matchByProductName(String productName) {
+ if (productName.contains("microsoft")) {
+ throw new IllegalArgumentException("For SqlServer please explicitly choose either sqlserver16 or sqlserver17 as the platform via DatabaseConfig.setDatabasePlatformName. Refer to issue #1340 for more details");
+ }
+ return false;
+ }
+
+ @Override
+ public DatabasePlatform create(int majorVersion, int minorVersion, DatabaseMetaData meta, Connection connection) {
+ return new SqlServer17Platform();
+ }
+
+ @Override
+ public boolean matchPlatform(Platform platform) {
+ return Platform.SQLSERVER.equals(platform.base());
+ }
+
+ @Override
+ public DatabasePlatform create(Platform platform) {
+ return platform.equals(Platform.SQLSERVER16) ? new SqlServer16Platform() : new SqlServer17Platform();
+ }
+}
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerSqlLimiter.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerSqlLimiter.java
similarity index 96%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerSqlLimiter.java
rename to platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerSqlLimiter.java
index ade97883d..9fb4202a9 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerSqlLimiter.java
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerSqlLimiter.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlserver;
+package io.ebean.platform.sqlserver;
import io.ebean.config.dbplatform.SqlLimitRequest;
import io.ebean.config.dbplatform.SqlLimitResponse;
diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerStepSequence.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerStepSequence.java
similarity index 92%
rename from ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerStepSequence.java
rename to platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerStepSequence.java
index d9a53a9f7..ff3810786 100644
--- a/ebean-api/src/main/java/io/ebean/config/dbplatform/sqlserver/SqlServerStepSequence.java
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/SqlServerStepSequence.java
@@ -1,4 +1,4 @@
-package io.ebean.config.dbplatform.sqlserver;
+package io.ebean.platform.sqlserver;
import io.ebean.BackgroundExecutor;
import io.ebean.config.dbplatform.SequenceStepIdGenerator;
diff --git a/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/package-info.java b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/package-info.java
new file mode 100644
index 000000000..c340acd74
--- /dev/null
+++ b/platforms/sqlserver/src/main/java/io/ebean/platform/sqlserver/package-info.java
@@ -0,0 +1,4 @@
+/**
+ * SqlServer specific support.
+ */
+package io.ebean.platform.sqlserver;
diff --git a/platforms/sqlserver/src/main/java/module-info.java b/platforms/sqlserver/src/main/java/module-info.java
new file mode 100644
index 000000000..9f48a9718
--- /dev/null
+++ b/platforms/sqlserver/src/main/java/module-info.java
@@ -0,0 +1,8 @@
+module io.ebean.platform.sqlserver {
+
+ exports io.ebean.platform.sqlserver;
+
+ requires transitive io.ebean.api;
+
+ provides io.ebean.config.dbplatform.DatabasePlatformProvider with io.ebean.platform.sqlserver.SqlServerPlatformProvider;
+}
diff --git a/platforms/sqlserver/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider b/platforms/sqlserver/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
new file mode 100644
index 000000000..89caea046
--- /dev/null
+++ b/platforms/sqlserver/src/main/resources/META-INF/services/io.ebean.config.dbplatform.DatabasePlatformProvider
@@ -0,0 +1 @@
+io.ebean.platform.sqlserver.SqlServerPlatformProvider
diff --git a/ebean-api/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java b/platforms/sqlserver/src/test/java/io/ebean/platform/sqlserver/SqlServerPlatformTest.java
similarity index 52%
rename from ebean-api/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java
rename to platforms/sqlserver/src/test/java/io/ebean/platform/sqlserver/SqlServerPlatformTest.java
index 4be838b39..18c186df7 100644
--- a/ebean-api/src/test/java/io/ebean/config/dbplatform/DatabasePlatformTest.java
+++ b/platforms/sqlserver/src/test/java/io/ebean/platform/sqlserver/SqlServerPlatformTest.java
@@ -1,17 +1,12 @@
-package io.ebean.config.dbplatform;
+package io.ebean.platform.sqlserver;
-import io.ebean.annotation.Platform;
-import io.ebean.config.DatabaseConfig;
-import io.ebean.config.MatchingNamingConvention;
-import io.ebean.config.PlatformConfig;
-import io.ebean.config.dbplatform.h2.H2Platform;
-import io.ebean.config.dbplatform.postgres.PostgresPlatform;
-import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform;
+import io.ebean.config.*;
+import io.ebean.config.dbplatform.*;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
-class DatabasePlatformTest {
+class SqlServerPlatformTest {
@Test
public void convertQuotedIdentifiers_when_allQuotedIdentifier_sqlServer() {
@@ -20,8 +15,8 @@ class DatabasePlatformTest {
config.setAllQuotedIdentifiers(true);
config.setNamingConvention(new MatchingNamingConvention());
- DatabasePlatform dbPlatform = new SqlServer17Platform();
- dbPlatform.configure(config.getPlatformConfig(), config.isAllQuotedIdentifiers());
+ SqlServer17Platform dbPlatform = new SqlServer17Platform();
+ dbPlatform.configure(config.getPlatformConfig());
assertEquals(dbPlatform.convertQuotedIdentifiers("order"), "[order]");
assertEquals(dbPlatform.convertQuotedIdentifiers("`order`"), "[order]");
@@ -32,8 +27,8 @@ class DatabasePlatformTest {
public void convertQuotedIdentifiers() {
DatabaseConfig config = new DatabaseConfig();
- DatabasePlatform dbPlatform = new SqlServer17Platform();
- dbPlatform.configure(config.getPlatformConfig(), config.isAllQuotedIdentifiers());
+ SqlServer17Platform dbPlatform = new SqlServer17Platform();
+ dbPlatform.configure(config.getPlatformConfig());
assertEquals(dbPlatform.convertQuotedIdentifiers("order"), "order");
assertEquals(dbPlatform.convertQuotedIdentifiers("`order`"), "[order]");
@@ -46,32 +41,11 @@ class DatabasePlatformTest {
@Test
public void defaultTypesForDecimalAndVarchar() {
-
DatabasePlatform dbPlatform = new DatabasePlatform();
assertEquals(defaultDecimalDefn(dbPlatform), "decimal(16,3)");
assertEquals(defaultDefn(DbType.VARCHAR, dbPlatform), "varchar(255)");
}
- @Test
- public void configure_customType() {
-
- PlatformConfig config = new PlatformConfig();
- config.addCustomMapping(DbType.VARCHAR, "text", Platform.POSTGRES);
- config.addCustomMapping(DbType.DECIMAL, "decimal(24,4)");
-
- // PG renders custom decimal and varchar
- PostgresPlatform pgPlatform = new PostgresPlatform();
- pgPlatform.configure(config, false);
- assertEquals(defaultDecimalDefn(pgPlatform), "decimal(24,4)");
- assertEquals(defaultDefn(DbType.VARCHAR, pgPlatform), "text");
-
- // H2 only renders custom decimal
- H2Platform h2Platform = new H2Platform();
- h2Platform.configure(config, false);
- assertEquals(defaultDecimalDefn(h2Platform), "decimal(24,4)");
- assertEquals(defaultDefn(DbType.VARCHAR, h2Platform), "varchar(255)");
- }
-
private String defaultDecimalDefn(DatabasePlatform dbPlatform) {
return defaultDefn(DbType.DECIMAL, dbPlatform);
}
diff --git a/pom.xml b/pom.xml
index 1b6b99919..475869efb 100644
--- a/pom.xml
+++ b/pom.xml
@@ -3,8 +3,8 @@
4.0.0
org.avaje
- java8-oss
- 3.6
+ java11-oss
+ 3.7
io.ebean
@@ -43,11 +43,12 @@
2.1.210
1.3
1.2
- 12.16.1
+ 13.0.0
4.5
7.5
- 12.16.0
- 12.16.0
+ 13.2.0
+ 13.2.0
+ false
@@ -94,7 +95,6 @@
- ebean
ebean-api
ebean-bom
ebean-core-type
@@ -110,7 +110,9 @@
ebean-querybean
ebean-postgis
ebean-redis
-
+ platforms
+ composites
+
diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml
index bb2ea5095..6d0606e8c 100644
--- a/querybean-generator/pom.xml
+++ b/querybean-generator/pom.xml
@@ -29,23 +29,12 @@
maven-compiler-plugin
3.10.1
- 1.8
- 1.8
+ 11
+ 11
-proc:none
-
- io.repaint.maven
- tiles-maven-plugin
- 2.24
- true
-
-
- io.avaje.tile:moditech-module:1.0
-
-
-
diff --git a/querybean-generator/src/main/java9/module-info.java b/querybean-generator/src/main/java/module-info.java
similarity index 100%
rename from querybean-generator/src/main/java9/module-info.java
rename to querybean-generator/src/main/java/module-info.java
diff --git a/tests/test-java16/pom.xml b/tests/test-java16/pom.xml
index a3170622c..d3d15b85a 100644
--- a/tests/test-java16/pom.xml
+++ b/tests/test-java16/pom.xml
@@ -58,7 +58,7 @@
io.ebean
querybean-generator
- 12.16.1-FOC3-SNAPSHOT
+ 13.2.1-SNAPSHOT