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 @@ [![datasource EA](https://github.com/ebean-orm/ebean-datasource/actions/workflows/jdk-ea.yml/badge.svg)](https://github.com/ebean-orm/ebean-datasource/actions/workflows/jdk-ea.yml) [![migration EA](https://github.com/ebean-orm/ebean-migration/actions/workflows/jdk-ea.yml/badge.svg)](https://github.com/ebean-orm/ebean-migration/actions/workflows/jdk-ea.yml) [![test-docker EA](https://github.com/ebean-orm/ebean-test-docker/actions/workflows/jdk-ea.yml/badge.svg)](https://github.com/ebean-orm/ebean-test-docker/actions/workflows/jdk-ea.yml) +[![ebean-agent EA](https://github.com/ebean-orm/ebean-agent/actions/workflows/jdk-ea.yml/badge.svg)](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