diff --git a/composites/ebean-clickhouse/pom.xml b/composites/ebean-clickhouse/pom.xml new file mode 100644 index 000000000..4e5a18990 --- /dev/null +++ b/composites/ebean-clickhouse/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-clickhouse + ebean-clickhouse composite + ebean-clickhouse + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-clickhouse + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-clickhouse/src/main/java9/module-info.java new file mode 100644 index 000000000..a8417405d --- /dev/null +++ b/composites/ebean-clickhouse/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.clickhouse { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..9f05dc4c5 --- /dev/null +++ b/composites/ebean-cockroach/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-cockroach + ebean-cockroach composite + ebean-cockroach + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-postgres + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-cockroach/src/main/java9/module-info.java new file mode 100644 index 000000000..d3ed1eb8d --- /dev/null +++ b/composites/ebean-cockroach/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.cockroach { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..d8f4f1333 --- /dev/null +++ b/composites/ebean-db2/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-db2 + ebean-db2 composite + ebean-db2 + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-db2 + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-db2/src/main/java9/module-info.java new file mode 100644 index 000000000..1479a97ec --- /dev/null +++ b/composites/ebean-db2/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.db2 { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + requires transitive io.ebean.querybean; + requires transitive io.ebean.platform.db2; + +} diff --git a/ebean/pom.xml b/composites/ebean-h2/pom.xml similarity index 83% rename from ebean/pom.xml rename to composites/ebean-h2/pom.xml index cd2554f39..67807e068 100644 --- a/ebean/pom.xml +++ b/composites/ebean-h2/pom.xml @@ -2,23 +2,17 @@ 4.0.0 - ebean-parent + composites io.ebean 12.16.2-SNAPSHOT - ebean composite - Composite of common runtime dependencies - ebean + ebean-h2 + ebean-h2 composite + ebean-h2 - - io.ebean - ebean-datasource - ${ebean-datasource.version} - - io.ebean ebean-api @@ -31,6 +25,12 @@ 12.16.2-SNAPSHOT + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + io.ebean @@ -38,6 +38,12 @@ 12.16.2-SNAPSHOT + + io.ebean + ebean-platform-h2 + 12.16.2-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/java9/module-info.java b/composites/ebean-h2/src/main/java9/module-info.java new file mode 100644 index 000000000..081e49b5f --- /dev/null +++ b/composites/ebean-h2/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.h2 { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..b9d61ca7d --- /dev/null +++ b/composites/ebean-hana/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-hana + ebean-hana composite + ebean-hana + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-hana + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-hana/src/main/java9/module-info.java new file mode 100644 index 000000000..24dc39368 --- /dev/null +++ b/composites/ebean-hana/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.hana { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..1846276a8 --- /dev/null +++ b/composites/ebean-mariadb/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-mariadb + ebean-mariadb composite + ebean-mariadb + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-mariadb + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-mariadb/src/main/java9/module-info.java new file mode 100644 index 000000000..38e20e613 --- /dev/null +++ b/composites/ebean-mariadb/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.mariadb { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..3085d8e2d --- /dev/null +++ b/composites/ebean-mysql/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-mysql + ebean-mysql composite + ebean-mysql + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-mysql + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-mysql/src/main/java9/module-info.java new file mode 100644 index 000000000..1d1ecf63b --- /dev/null +++ b/composites/ebean-mysql/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.mysql { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..31e80f4ce --- /dev/null +++ b/composites/ebean-nuodb/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-nuodb + ebean-nuodb composite + ebean-nuodb + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-nuodb + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-nuodb/src/main/java9/module-info.java new file mode 100644 index 000000000..ca5811304 --- /dev/null +++ b/composites/ebean-nuodb/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.nuodb { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..672088b77 --- /dev/null +++ b/composites/ebean-oracle/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-oracle + ebean-oracle composite + ebean-oracle + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-oracle + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-oracle/src/main/java9/module-info.java new file mode 100644 index 000000000..c149747ff --- /dev/null +++ b/composites/ebean-oracle/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.oracle { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..cf5e75f67 --- /dev/null +++ b/composites/ebean-postgres/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-postgres + ebean-postgres composite + ebean-postgres + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-postgres + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-postgres/src/main/java9/module-info.java new file mode 100644 index 000000000..c10865e39 --- /dev/null +++ b/composites/ebean-postgres/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.postgres { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..24830217e --- /dev/null +++ b/composites/ebean-sqlite/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-sqlite + ebean-sqlite composite + ebean-sqlite + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-sqlite + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-sqlite/src/main/java9/module-info.java new file mode 100644 index 000000000..169f84a8f --- /dev/null +++ b/composites/ebean-sqlite/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.sqlite { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..969f6ecd3 --- /dev/null +++ b/composites/ebean-sqlserver/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-sqlserver + ebean-sqlserver composite + ebean-sqlserver + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-sqlserver + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-sqlserver/src/main/java9/module-info.java new file mode 100644 index 000000000..6ead3d6ce --- /dev/null +++ b/composites/ebean-sqlserver/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.sqlserver { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + 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..63addf86a --- /dev/null +++ b/composites/ebean-yugabyte/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean-yugabyte + ebean-yugabyte composite + ebean-yugabyte + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-postgres + 12.16.2-SNAPSHOT + + + + + + + + io.repaint.maven + tiles-maven-plugin + 2.24 + true + + + io.avaje.tile:moditech-module:1.0 + + + + + + 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/java9/module-info.java b/composites/ebean-yugabyte/src/main/java9/module-info.java new file mode 100644 index 000000000..5559b1c50 --- /dev/null +++ b/composites/ebean-yugabyte/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.yugabyte { + + requires transitive io.ebean.api; + requires transitive io.ebean.core; + requires transitive io.ebean.querybean; + requires transitive io.ebean.platform.postgres; + +} diff --git a/composites/ebean/pom.xml b/composites/ebean/pom.xml new file mode 100644 index 000000000..e54170d5d --- /dev/null +++ b/composites/ebean/pom.xml @@ -0,0 +1,64 @@ + + + 4.0.0 + + composites + io.ebean + 12.16.2-SNAPSHOT + + + ebean (all platforms) + composite of common runtime dependencies for all platforms + ebean + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-core + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-datasource + ${ebean-datasource.version} + + + + + io.ebean + ebean-querybean + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-all + 12.16.2-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/java9/module-info.java similarity index 100% rename from ebean/src/main/java9/module-info.java rename to composites/ebean/src/main/java9/module-info.java diff --git a/composites/pom.xml b/composites/pom.xml new file mode 100644 index 000000000..ee53a6196 --- /dev/null +++ b/composites/pom.xml @@ -0,0 +1,34 @@ + + + 4.0.0 + + ebean-parent + io.ebean + 12.16.2-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 961e868f2..cbca6471b 100644 --- a/ebean-api/pom.xml +++ b/ebean-api/pom.xml @@ -49,7 +49,7 @@ io.ebean ebean-annotation - 7.7 + 7.8 @@ -80,15 +80,6 @@ true - - - com.h2database - h2 - ${h2database.version} - true - - javax.transaction jta 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/java9/module-info.java b/ebean-api/src/main/java9/module-info.java index 75ff243e2..7c873b199 100644 --- a/ebean-api/src/main/java9/module-info.java +++ b/ebean-api/src/main/java9/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; 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 0bafb7c80..97123c71b 100644 --- a/ebean-autotune/pom.xml +++ b/ebean-autotune/pom.xml @@ -52,6 +52,13 @@ test + + io.ebean + ebean-platform-h2 + 12.16.2-SNAPSHOT + test + + diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml index fad522913..58743d295 100644 --- a/ebean-core/pom.xml +++ b/ebean-core/pom.xml @@ -141,6 +141,26 @@ + + io.ebean + ebean-platform-h2 + 12.16.2-SNAPSHOT + test + + + + io.ebean + ebean-platform-postgres + 12.16.2-SNAPSHOT + test + + + + io.ebean + ebean-platform-sqlserver + 12.16.2-SNAPSHOT + test + io.ebean 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 a4565c3df..050697cee 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; @@ -86,7 +85,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) { 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/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/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-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml index 0a4964bf4..ad2d67378 100644 --- a/ebean-ddl-generator/pom.xml +++ b/ebean-ddl-generator/pom.xml @@ -55,6 +55,13 @@ test + + io.ebean + ebean-platform-all + 12.16.2-SNAPSHOT + test + + io.ebean ebean-datasource 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 4ef6ef72f..ed592e9d2 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 @@ -8,28 +8,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.ebeaninternal.api.DbOffline; @@ -51,6 +30,7 @@ import java.io.Writer; import java.util.ArrayList; import java.util.List; import java.util.Properties; +import java.util.ServiceLoader; import static io.ebeaninternal.api.PlatformMatch.matchPlatform; @@ -81,6 +61,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 final List platformProviders = new ArrayList<>(); protected final boolean online; private boolean logToSystemOut = true; protected SpiEbeanServer server; @@ -113,6 +94,9 @@ public class DefaultDbMigration implements DbMigration { */ public DefaultDbMigration() { this.online = false; + for (DatabasePlatformProvider platformProvider : ServiceLoader.load(DatabasePlatformProvider.class)) { + platformProviders.add(platformProvider); + } } @Override @@ -805,58 +789,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/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-xml/pom.xml b/ebean-externalmapping-xml/pom.xml index c5a37ec82..6bb62ac10 100644 --- a/ebean-externalmapping-xml/pom.xml +++ b/ebean-externalmapping-xml/pom.xml @@ -6,11 +6,6 @@ io.ebean 12.16.2-SNAPSHOT - - - - - scm:git:git@github.com:ebean-orm/ebean.git @@ -56,6 +51,13 @@ test + + io.ebean + ebean-platform-h2 + 12.16.2-SNAPSHOT + test + + io.ebean ebean-core diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml index 590680b1f..bf1c76eea 100644 --- a/ebean-postgis/pom.xml +++ b/ebean-postgis/pom.xml @@ -19,6 +19,12 @@ + + io.ebean + ebean-platform-postgres + 12.16.2-SNAPSHOT + + io.ebean diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 7c69fb4a4..136052d3d 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -26,6 +26,12 @@ ${ebean-datasource.version} + + io.ebean + ebean-platform-h2 + 12.16.2-SNAPSHOT + + io.ebean ebean-core @@ -81,6 +87,13 @@ + + io.ebean + ebean-platform-all + 12.16.2-SNAPSHOT + test + + io.avaje avaje-jsr305 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 33d9a4f8d..0dcc4afc2 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 3c856b13e..8b51d172d 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 @@ -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); } 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/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/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_db2.migrations b/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations deleted file mode 100644 index 0d7fca8b1..000000000 --- a/ebean-test/src/test/resources/migrationtest/dbmigration/db2legacy/idx_db2.migrations +++ /dev/null @@ -1,7 +0,0 @@ -1391889205, 1.0__initial.sql -1929266342, 1.1.sql --1187336846, 1.2__dropsFor_1.1.sql --799135439, 1.3.sql --1713819679, 1.4__dropsFor_1.3.sql -561281075, R__order_views.sql - 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..3bc41a5b0 --- /dev/null +++ b/platforms/all/pom.xml @@ -0,0 +1,85 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-all + + + + + io.ebean + ebean-platform-h2 + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-clickhouse + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-db2 + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-hana + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-hsqldb + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-mysql + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-mariadb + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-nuodb + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-oracle + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-postgres + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-sqlanywhere + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-sqlite + 12.16.2-SNAPSHOT + + + io.ebean + ebean-platform-sqlserver + 12.16.2-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/java9/module-info.java b/platforms/all/src/main/java9/module-info.java new file mode 100644 index 000000000..42de4f372 --- /dev/null +++ b/platforms/all/src/main/java9/module-info.java @@ -0,0 +1,7 @@ +module io.ebean.platform.all { + + requires transitive io.ebean.platform.h2; + requires transitive io.ebean.platform.postgres; + //TODO complete the list of platforms here ... + +} diff --git a/platforms/clickhouse/pom.xml b/platforms/clickhouse/pom.xml new file mode 100644 index 000000000..663a942a9 --- /dev/null +++ b/platforms/clickhouse/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-clickhouse + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/clickhouse/src/main/java9/module-info.java new file mode 100644 index 000000000..aebca5026 --- /dev/null +++ b/platforms/clickhouse/src/main/java9/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..8f3d13268 --- /dev/null +++ b/platforms/db2/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-db2 + + + + + io.ebean + ebean-api + 12.16.2-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 2ef1488ac..cb2b4d141 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 io.ebean.BackgroundExecutor; import io.ebean.annotation.Platform; 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/java9/module-info.java b/platforms/db2/src/main/java9/module-info.java new file mode 100644 index 000000000..4460e7230 --- /dev/null +++ b/platforms/db2/src/main/java9/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..a3817f6a9 --- /dev/null +++ b/platforms/h2/pom.xml @@ -0,0 +1,40 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-h2 + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/h2/src/main/java9/module-info.java new file mode 100644 index 000000000..472b87edc --- /dev/null +++ b/platforms/h2/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.platform.h2 { + + exports io.ebean.platform.h2; + + requires transitive io.ebean.api; + + 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..4245ebd32 --- /dev/null +++ b/platforms/hana/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-hana + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/hana/src/main/java9/module-info.java new file mode 100644 index 000000000..6d12be6d9 --- /dev/null +++ b/platforms/hana/src/main/java9/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..d8a74fd46 --- /dev/null +++ b/platforms/hsqldb/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-hsqldb + + + + + io.ebean + ebean-platform-h2 + 12.16.2-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/java9/module-info.java b/platforms/hsqldb/src/main/java9/module-info.java new file mode 100644 index 000000000..99b5641a7 --- /dev/null +++ b/platforms/hsqldb/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.platform.hsqldb { + + exports io.ebean.platform.hsqldb; + + requires transitive io.ebean.api; + + 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..7f6439716 --- /dev/null +++ b/platforms/mariadb/pom.xml @@ -0,0 +1,30 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-mariadb + + + + + io.ebean + ebean-api + 12.16.2-SNAPSHOT + + + + io.ebean + ebean-platform-mysql + 12.16.2-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/java9/module-info.java b/platforms/mariadb/src/main/java9/module-info.java new file mode 100644 index 000000000..26d084026 --- /dev/null +++ b/platforms/mariadb/src/main/java9/module-info.java @@ -0,0 +1,8 @@ +module io.ebean.platform.mariadb { + + exports io.ebean.platform.mariadb; + + requires transitive io.ebean.api; + + 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..7251af206 --- /dev/null +++ b/platforms/mysql/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-mysql + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/mysql/src/main/java9/module-info.java new file mode 100644 index 000000000..064aaec7f --- /dev/null +++ b/platforms/mysql/src/main/java9/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..e88b55887 --- /dev/null +++ b/platforms/nuodb/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-nuodb + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/nuodb/src/main/java9/module-info.java new file mode 100644 index 000000000..179889333 --- /dev/null +++ b/platforms/nuodb/src/main/java9/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..e186a4470 --- /dev/null +++ b/platforms/oracle/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-oracle + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/oracle/src/main/java9/module-info.java new file mode 100644 index 000000000..bc8954e47 --- /dev/null +++ b/platforms/oracle/src/main/java9/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..9e380c80a --- /dev/null +++ b/platforms/pom.xml @@ -0,0 +1,32 @@ + + + 4.0.0 + + ebean-parent + io.ebean + 12.16.2-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..75c5c65af --- /dev/null +++ b/platforms/postgres/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-postgres + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/postgres/src/main/java9/module-info.java new file mode 100644 index 000000000..0863d664f --- /dev/null +++ b/platforms/postgres/src/main/java9/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..5995bfa75 --- /dev/null +++ b/platforms/sqlanywhere/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-sqlanywhere + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/sqlanywhere/src/main/java9/module-info.java new file mode 100644 index 000000000..bf17482dd --- /dev/null +++ b/platforms/sqlanywhere/src/main/java9/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..f12bb412e --- /dev/null +++ b/platforms/sqlite/pom.xml @@ -0,0 +1,24 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-sqlite + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/sqlite/src/main/java9/module-info.java new file mode 100644 index 000000000..18bc37b5b --- /dev/null +++ b/platforms/sqlite/src/main/java9/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..bc4868d2c --- /dev/null +++ b/platforms/sqlserver/pom.xml @@ -0,0 +1,31 @@ + + + 4.0.0 + + platforms + io.ebean + 12.16.2-SNAPSHOT + + + ebean-platform-sqlserver + + + + + io.ebean + ebean-api + 12.16.2-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/java9/module-info.java b/platforms/sqlserver/src/main/java9/module-info.java new file mode 100644 index 000000000..9f48a9718 --- /dev/null +++ b/platforms/sqlserver/src/main/java9/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 32b177c25..defb7f799 100644 --- a/pom.xml +++ b/pom.xml @@ -76,7 +76,6 @@ - ebean ebean-api ebean-bom ebean-core-type @@ -91,7 +90,9 @@ ebean-querybean ebean-postgis ebean-redis - + platforms + composites +