From 3e3647816dab27c9a95e43dd339cc4e54d154f38 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 13 Jun 2022 15:44:43 +1200 Subject: [PATCH 01/21] #2715 - [ebean-test-containers] Fix for Postgis to support extraDb (second database), Update Oracle container --- .../io/ebean/test/config/platform/Config.java | 26 ++++++++++--- .../test/config/platform/OracleSetup.java | 6 +-- .../test/config/platform/PostgisSetup.java | 13 ++++--- .../test/config/platform/ConfigTest.java | 37 +++++++++++++++++++ pom.xml | 2 +- 5 files changed, 68 insertions(+), 16 deletions(-) diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/Config.java b/ebean-test/src/main/java/io/ebean/test/config/platform/Config.java index 3da2f3eee..4dd36034a 100644 --- a/ebean-test/src/main/java/io/ebean/test/config/platform/Config.java +++ b/ebean-test/src/main/java/io/ebean/test/config/platform/Config.java @@ -17,7 +17,7 @@ class Config { /** * Common optional docker parameters that we just transfer to docker properties. */ - private static final String[] DOCKER_TEST_PARAMS = {"fastStartMode", "inMemory", "initSqlFile", "seedSqlFile", "adminUser", "adminPassword", "extraDb", "extraDb.dbName", "extraDb.username", "extraDb.password", "extraDb.initSqlFile", "extraDb.seedSqlFile"}; + private static final String[] DOCKER_TEST_PARAMS = {"fastStartMode", "inMemory", "initSqlFile", "seedSqlFile", "adminUser", "adminPassword", "extraDb", "extraDb.dbName", "extraDb.username", "extraDb.password", "extraDb.extensions", "extraDb.initSqlFile", "extraDb.seedSqlFile"}; private static final String[] DOCKER_PLATFORM_PARAMS = {"containerName", "image", "internalPort", "startMode", "shutdownMode", "maxReadyAttempts", "tmpfs", "collation", "characterSet"}; private static final String DDL_MODE_OPTIONS = "dropCreate, create, none, migration, createOnly or migrationDropCreate"; @@ -224,14 +224,22 @@ class Config { properties.setProperty(dsKey, val); } - void setUrl(String urlPattern) { - String val = getKey("url", urlPattern); + private void setUrl(String key, String urlPattern) { + String val = getKey(key, urlPattern); val = val.replace("${host}", host()); val = val.replace("${port}", String.valueOf(port)); val = val.replace("${databaseName}", databaseName); this.url = val; } + void setUrl(String urlPattern) { + setUrl("url", urlPattern); + } + + void setExtraUrl(String urlPattern) { + setUrl("extraDb.url", urlPattern); + } + String host() { String explicitDockerHost = getKey("dockerHost", null); return getKey("host", dockerHost.dockerHost(explicitDockerHost)); @@ -343,9 +351,17 @@ class Config { void setExtensions(String defaultValue) { // ebean.test.postgres.extensions=hstore,pgcrypto - String val = getKey("extensions", defaultValue); + setExtensionsInternal("extensions", defaultValue); + } + + void setExtraExtensions(String defaultValue) { + setExtensionsInternal("extraDb.extensions", defaultValue); + } + + void setExtensionsInternal(String key, String defaultValue) { + String val = getKey(key, defaultValue); if (val != null) { - dockerProperties.setProperty(dockerKey("extensions"), trimExtensions(val)); + dockerProperties.setProperty(dockerKey(key), trimExtensions(val)); } } diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/OracleSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/OracleSetup.java index b93660615..db50d60be 100644 --- a/ebean-test/src/main/java/io/ebean/test/config/platform/OracleSetup.java +++ b/ebean-test/src/main/java/io/ebean/test/config/platform/OracleSetup.java @@ -6,25 +6,21 @@ class OracleSetup implements PlatformSetup { @Override public Properties setup(Config config) { - config.ddlMode("dropCreate"); config.setDefaultPort(1521); config.setUsernameDefault(); config.setPasswordDefault(); config.setDatabaseName("XE"); config.setUrl("jdbc:oracle:thin:@localhost:${port}:${databaseName}"); - config.setDriver("oracle.jdbc.driver.OracleDriver"); config.datasourceDefaults(); return dockerProperties(config); } private Properties dockerProperties(Config dbConfig) { - if (!dbConfig.isUseDocker()) { return new Properties(); } - - dbConfig.setDockerVersion("latest"); + dbConfig.setDockerVersion("21.3.0-slim"); return dbConfig.getDockerProperties(); } diff --git a/ebean-test/src/main/java/io/ebean/test/config/platform/PostgisSetup.java b/ebean-test/src/main/java/io/ebean/test/config/platform/PostgisSetup.java index 3a9cc34e3..b254aad60 100644 --- a/ebean-test/src/main/java/io/ebean/test/config/platform/PostgisSetup.java +++ b/ebean-test/src/main/java/io/ebean/test/config/platform/PostgisSetup.java @@ -12,8 +12,7 @@ class PostgisSetup implements PlatformSetup { @Override public Properties setup(Config config) { int defaultPort = config.isUseDocker() ? 7432 : 5432; - - config.setDockerPlatform("postgres"); + config.setDockerPlatform("postgis"); config.ddlMode("dropCreate"); config.setDefaultPort(defaultPort); config.setUsernameDefault(); @@ -35,14 +34,18 @@ class PostgisSetup implements PlatformSetup { } config.setExtensions("hstore,pgcrypto,postgis"); config.setDockerContainerName("ut_postgis"); - config.setDockerImage("postgis/postgis"); - config.setDockerVersion("14"); + config.setDockerVersion("14-3.2"); return config.getDockerProperties(); } @Override public void setupExtraDbDataSource(Config config) { - // not supported yet + int defaultPort = config.isUseDocker() ? 7432 : 5432; + config.setDefaultPort(defaultPort); + config.setExtraUsernameDefault(); + config.setExtraDbPasswordDefault(); + config.setExtraUrl("jdbc:postgresql_lwgis://${host}:${port}/${databaseName}"); + config.extraDatasourceDefaults(); } @Override diff --git a/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java b/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java index 7971c2bb7..3537954ed 100644 --- a/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java +++ b/ebean-test/src/test/java/io/ebean/test/config/platform/ConfigTest.java @@ -35,6 +35,43 @@ class ConfigTest { assertThat(config.trimExtensions(" a , , b ")).isEqualTo("a,b"); } + @Test + void extensions_whenNoSetValues() { + DatabaseConfig databaseConfig = new DatabaseConfig(); + databaseConfig.loadFromProperties(new Properties()); + + Config config = new Config("db", "postgis", "db", databaseConfig); + + config.setUsernameDefault(); + config.setPasswordDefault(); + config.setDefaultPort(42); + config.setExtensions("a,b"); + config.setExtraExtensions("c,d"); + + Properties dockerProperties = config.getDockerProperties(); + assertThat(dockerProperties.getProperty("postgis.extensions")).isEqualTo("a,b"); + assertThat(dockerProperties.getProperty("postgis.extraDb.extensions")).isEqualTo("c,d"); + } + + @Test + void extensions_whenSetValues() { + DatabaseConfig databaseConfig = new DatabaseConfig(); + Properties properties = new Properties(); + properties.setProperty("ebean.test.extensions", "x,y"); + properties.setProperty("ebean.test.extraDb.extensions", "z"); + databaseConfig.loadFromProperties(properties); + + Config config = new Config("db", "postgis", "db", databaseConfig); + + config.setExtensions("a,b"); + config.setExtraExtensions("c,d"); + + Properties dockerProperties = config.getDockerProperties(); + assertThat(dockerProperties.getProperty("postgis.extensions")).isEqualTo("x,y"); + assertThat(dockerProperties.getProperty("postgis.extraDb.extensions")).isEqualTo("z"); + } + + @Test void extraDbProperties_basic() { Properties p = new Properties(); diff --git a/pom.xml b/pom.xml index 931075c17..56f1e40bb 100644 --- a/pom.xml +++ b/pom.xml @@ -44,7 +44,7 @@ 2.0 1.2 13.6.0 - 6.0 + 6.1 8.0 13.6.3 13.6.3 From 8301fd5e74e5784db53ccff863549eb698a7377c Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 13 Jun 2022 18:35:42 +1200 Subject: [PATCH 02/21] #2710 - JSONB fields are not considered dirty after modified in BeanPersistController preUpdate --- .../server/core/PersistRequestBean.java | 20 +++++---- .../event/BeanPersistControllerTest.java | 41 ++++++++++++++++--- .../java/org/tests/model/basic/UTMaster.java | 29 +++++++++++++ 3 files changed, 75 insertions(+), 15 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java index f73fcb97d..b7545b07a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java @@ -77,8 +77,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP */ private List> updatedManys; /** - * Need to get and store the updated properties because the persist listener is notified - * later on a different thread and the bean has been reset at that point. + * Store the updated properties to notify persist listener. */ private Set updatedProperties; /** @@ -122,7 +121,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP */ private boolean complete; /** - * Many to many intersection table changes that are held for later batch processing. + * Many-to-many intersection table changes that are held for later batch processing. */ private List saveMany; @@ -149,8 +148,10 @@ public final class PersistRequestBean extends PersistRequest implements BeanP intercept.setNewBeanForUpdate(); statelessUpdate = true; } - // Mark Mutable scalar properties (like Hstore) as dirty where necessary - beanDescriptor.checkMutableProperties(intercept); + if (!intercept.isDirty()) { + // check if mutable scalar properties are dirty + beanDescriptor.checkMutableProperties(intercept); + } } this.concurrencyMode = beanDescriptor.concurrencyMode(intercept); this.publish = Flags.isPublish(flags); @@ -726,10 +727,6 @@ public final class PersistRequestBean extends PersistRequest implements BeanP executeInsert(); return -1; case UPDATE: - if (beanPersistListener != null) { - // store the updated properties for sending later - updatedProperties = updatedProperties(); - } executeUpdate(); return -1; case DELETE_SOFT: @@ -1208,6 +1205,11 @@ public final class PersistRequestBean extends PersistRequest implements BeanP private void executeUpdate() { setTenantId(); if (controller == null || controller.preUpdate(this)) { + // check dirty state for mutable scalar properties (like DbJson, Hstore) + beanDescriptor.checkMutableProperties(intercept); + if (beanPersistListener != null) { + updatedProperties = updatedProperties(); + } postControllerPrepareUpdate(); beanManager.getBeanPersister().update(this); } diff --git a/ebean-test/src/test/java/io/ebean/xtest/event/BeanPersistControllerTest.java b/ebean-test/src/test/java/io/ebean/xtest/event/BeanPersistControllerTest.java index e584bc40b..b991e07be 100644 --- a/ebean-test/src/test/java/io/ebean/xtest/event/BeanPersistControllerTest.java +++ b/ebean-test/src/test/java/io/ebean/xtest/event/BeanPersistControllerTest.java @@ -4,6 +4,7 @@ package io.ebean.xtest.event; import io.ebean.Database; import io.ebean.DatabaseFactory; import io.ebean.Transaction; +import io.ebean.ValuePair; import io.ebean.config.DatabaseConfig; import io.ebean.event.BeanDeleteIdRequest; import io.ebean.event.BeanPersistAdapter; @@ -13,9 +14,7 @@ import org.tests.model.basic.EBasicVer; import org.tests.model.basic.UTDetail; import org.tests.model.basic.UTMaster; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; +import java.util.*; import static org.assertj.core.api.Assertions.assertThat; @@ -26,8 +25,30 @@ public class BeanPersistControllerTest { private final PersistAdapter stopPersistingAdapter = new PersistAdapter(false); @Test - public void issue_1341() { + public void issued1() { + Database db = getDatabase(continuePersistingAdapter); + UTMaster bean0 = new UTMaster("m0"); + bean0.setJournal(new UTMaster.Journal()); + db.save(bean0); + + UTMaster change0 = db.find(UTMaster.class, bean0.getId()); + change0.setName("change0"); + db.save(change0); + + UTMaster change1 = db.find(UTMaster.class, bean0.getId()); + change1.setName("change1"); + db.save(change1); + + UTMaster again = db.find(UTMaster.class, bean0.getId()); + UTMaster.Journal journal = again.getJournal(); + assertThat(journal.getEntries()).hasSize(2); + + db.shutdown(); + } + + @Test + public void issue_1341() { Database db = getDatabase(continuePersistingAdapter); UTMaster bean0 = new UTMaster("one0"); @@ -118,7 +139,6 @@ public class BeanPersistControllerTest { } private Database getDatabase(PersistAdapter persistAdapter) { - DatabaseConfig config = new DatabaseConfig(); config.setName("h2ebasicver"); config.loadFromProperties(); @@ -133,7 +153,6 @@ public class BeanPersistControllerTest { config.getClasses().add(UTDetail.class); config.add(persistAdapter); - return DatabaseFactory.create(config); } @@ -177,6 +196,16 @@ public class BeanPersistControllerTest { // invoke lazy loading ... which invoke the flush of the jdbc batch detail.setQty(42); } + if (bean instanceof UTMaster) { + UTMaster master = (UTMaster)bean; + UTMaster.Journal journal = master.getJournal(); + if (journal == null) { + journal = new UTMaster.Journal(); + master.setJournal(journal); + } + // modify a "mutable scalar type" in preUpdate, should be included in update + journal.addEntry(); + } return continueDefaultPersisting; } diff --git a/ebean-test/src/test/java/org/tests/model/basic/UTMaster.java b/ebean-test/src/test/java/org/tests/model/basic/UTMaster.java index 07c5fec39..4c1b2998c 100644 --- a/ebean-test/src/test/java/org/tests/model/basic/UTMaster.java +++ b/ebean-test/src/test/java/org/tests/model/basic/UTMaster.java @@ -1,9 +1,11 @@ package org.tests.model.basic; import io.ebean.Model; +import io.ebean.annotation.DbJsonB; import javax.persistence.*; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; @@ -20,12 +22,31 @@ public class UTMaster extends Model { LocalDate eventDate; + @DbJsonB + Journal journal; + @Version Integer version; @OneToMany(cascade = CascadeType.ALL) List details; + /** + * Mutating content persisted as JSON. + */ + public static class Journal { + private List entries = new ArrayList<>(); + public List getEntries() { + return entries; + } + public void setEntries(List entries) { + this.entries = entries; + } + public void addEntry() { + entries.add(LocalDateTime.now().toString()); + } + } + public UTMaster() { } @@ -74,6 +95,14 @@ public class UTMaster extends Model { this.version = version; } + public Journal getJournal() { + return journal; + } + + public void setJournal(Journal journal) { + this.journal = journal; + } + public List getDetails() { return details; } From e29d83a379af69a9e58af5cb27c453b6494137fa Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 13 Jun 2022 18:58:38 +1200 Subject: [PATCH 03/21] #2710 - Update PersistRequestBean with checkAllMutableProperties() and checkAnyMutableProperties() --- .../server/core/PersistRequestBean.java | 11 +++++----- .../server/deploy/BeanDescriptor.java | 21 +++++++++++++++++-- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java index b7545b07a..2af16b25b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java @@ -147,10 +147,9 @@ public final class PersistRequestBean extends PersistRequest implements BeanP // 'stateless update' - set loaded properties as dirty intercept.setNewBeanForUpdate(); statelessUpdate = true; - } - if (!intercept.isDirty()) { - // check if mutable scalar properties are dirty - beanDescriptor.checkMutableProperties(intercept); + } else if (!intercept.isDirty()) { + // check if any mutable scalar properties are dirty + beanDescriptor.checkAnyMutableProperties(intercept); } } this.concurrencyMode = beanDescriptor.concurrencyMode(intercept); @@ -1205,8 +1204,8 @@ public final class PersistRequestBean extends PersistRequest implements BeanP private void executeUpdate() { setTenantId(); if (controller == null || controller.preUpdate(this)) { - // check dirty state for mutable scalar properties (like DbJson, Hstore) - beanDescriptor.checkMutableProperties(intercept); + // check dirty state for all mutable scalar properties (like DbJson, Hstore) + beanDescriptor.checkAllMutableProperties(intercept); if (beanPersistListener != null) { updatedProperties = updatedProperties(); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java index 6951438cf..e8d8f2d04 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptor.java @@ -3140,9 +3140,9 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType { } /** - * Check for mutable scalar types and mark as dirty if necessary. + * Check all mutable scalar types and mark as dirty if necessary. */ - public void checkMutableProperties(EntityBeanIntercept ebi) { + public void checkAllMutableProperties(EntityBeanIntercept ebi) { for (BeanProperty beanProperty : propertiesMutable) { int propertyIndex = beanProperty.propertyIndex(); if (ebi.isLoadedProperty(propertyIndex)) { @@ -3156,6 +3156,23 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType { } } + /** + * Return true if any mutable properties are dirty. + */ + public boolean checkAnyMutableProperties(EntityBeanIntercept ebi) { + for (BeanProperty beanProperty : propertiesMutable) { + int propertyIndex = beanProperty.propertyIndex(); + if (ebi.isLoadedProperty(propertyIndex)) { + Object value = beanProperty.getValue(ebi.getOwner()); + if (beanProperty.checkMutable(value, ebi.isDirtyProperty(propertyIndex), ebi)) { + ebi.markPropertyAsChanged(propertyIndex); + return true; + } + } + } + return false; + } + public ConcurrencyMode concurrencyMode(EntityBeanIntercept ebi) { if (!hasVersionProperty(ebi)) { return ConcurrencyMode.NONE; From 5be3b7717c11a811cdc14fe36ce6df78a1da7452 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 13 Jun 2022 22:38:15 +1200 Subject: [PATCH 04/21] #2716 - Refactor ScalarType interface to make use of default methods --- .../java/io/ebean/core/type/ScalarType.java | 72 ++++++++----------- .../server/type/ScalarTypeBase.java | 35 --------- .../server/type/ScalarTypeBaseVarchar.java | 10 --- .../server/type/ScalarTypeBoolean.java | 11 --- .../server/type/ScalarTypeByte.java | 10 --- .../server/type/ScalarTypeBytesBase.java | 10 --- .../server/type/ScalarTypeBytesEncrypted.java | 15 ---- .../server/type/ScalarTypeDuration.java | 10 --- .../type/ScalarTypeEncryptedWrapper.java | 5 -- .../server/type/ScalarTypeEnumStandard.java | 10 --- .../type/ScalarTypeEnumWithMapping.java | 10 --- .../server/type/ScalarTypeFile.java | 10 --- .../server/type/ScalarTypeJsonCollection.java | 10 --- .../server/type/ScalarTypeJsonMap.java | 10 --- .../server/type/ScalarTypeJsonNode.java | 10 --- .../type/ScalarTypeJsonObjectMapper.java | 30 ++------ .../server/type/ScalarTypeMonthDay.java | 10 --- .../server/type/ScalarTypeNotFound.java | 34 --------- .../server/type/ScalarTypePostgresHstore.java | 10 --- .../server/type/ScalarTypeShort.java | 10 --- .../server/type/ScalarTypeUUIDBase.java | 20 ------ .../server/type/ScalarTypeWrapper.java | 3 +- .../server/type/ScalarTypeYear.java | 10 --- .../server/type/ScalarTypeDurationTest.java | 27 +++---- .../type/ScalarTypeDurationWithNanosTest.java | 25 +++---- .../server/type/ScalarTypeYearTest.java | 23 +++--- .../io/ebean/postgis/ScalarTypePgisBase.java | 36 ---------- .../postgis/latte/ScalarTypeGeoLatteBase.java | 35 --------- 28 files changed, 65 insertions(+), 446 deletions(-) diff --git a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarType.java b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarType.java index 6c01811c5..af3e73493 100644 --- a/ebean-core-type/src/main/java/io/ebean/core/type/ScalarType.java +++ b/ebean-core-type/src/main/java/io/ebean/core/type/ScalarType.java @@ -16,25 +16,24 @@ import java.sql.SQLException; *

* Scalar in the sense that the types are not compound types. Scalar types only * map to a single database column. - *

*

* These types fall into two categories. Types that are mapped natively to JDBC * types and the rest. Types that map to native JDBC types do not require any * data type conversion to be persisted to the database. These are java types * that map via java.sql.Types. - *

*

* Types that are not native to JDBC require some conversion. These include some * common java types such as java.util.Date, java.util.Calendar, * java.math.BigInteger. - *

*

* Note that Booleans may be native for some databases and require conversion on * other databases. - *

*/ public interface ScalarType extends StringParser, StringFormatter, ScalarDataReader { + /** + * Return true for types that do mutation detection based on json content. + */ default boolean isJsonMapper() { return false; } @@ -43,38 +42,40 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData * Return true if this is a binary type and can not support parse() and format() from/to string. * This allows Ebean to optimise marshalling types to string. */ - boolean isBinaryType(); + default boolean isBinaryType() { + return false; + } /** * Return true if this is a mutable scalar type (like hstore). */ - boolean isMutable(); + default boolean isMutable() { + return false; + } /** * For mutable scalarType's return true if the value is dirty. * Non-dirty properties may be excluded from updates. */ - boolean isDirty(Object value); + default boolean isDirty(Object value) { + return false; + } /** * Return the default DB column length for this type. *

* If a BeanProperty has no explicit length defined then this length should * be assigned. - *

- *

- * This is primarily to support defining a length on Enum types (to - * supplement defining the length on the BeanProperty directly). - *

*/ - int getLength(); + default int getLength() { + return 0; + } /** * Return true if the type is native to JDBC. *

* If it is native to JDBC then its values/instances do not need to be * converted to and from an associated JDBC type. - *

*/ boolean isJdbcNative(); @@ -83,16 +84,13 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData *

* This type should be consistent with the toJdbcType() method in converting * the type to the appropriate type for binding to preparedStatements. - *

*/ int getJdbcType(); /** * Return the type that matches the bean property type. *

- * This represents the 'logical' type rather than the JDBC type this maps - * to. - *

+ * This represents the 'logical' type rather than the JDBC type this maps to. */ Class getType(); @@ -104,7 +102,7 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData T read(DataReader reader) throws SQLException; /** - * Ignore the reading of this value. Typically this means moving the index + * Ignore the reading of this value. Typically, this means moving the index * position in the ResultSet. */ void loadIgnore(DataReader reader); @@ -114,20 +112,16 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData *

* value may need to be converted from the logical bean property type to the * JDBC type. - *

*/ void bind(DataBinder binder, T value) throws SQLException; /** * Convert the value as necessary to the JDBC type. *

- * Note that this should also match the type as per the getJdbcType() - * method. - *

+ * Note that this should also match the type as per the getJdbcType() method. *

* This is typically used when the matching type is used in a where clause * and we use this to ensure it is an appropriate jdbc type. - *

*/ Object toJdbcType(Object value); @@ -135,19 +129,14 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData * Convert the value as necessary to the logical Bean type. *

* The type as per the bean property. - *

*

* This is used to automatically convert id values (typically from a string * to a int, long or UUID). - *

*/ T toBeanType(Object value); /** * Convert the type into a string representation. - *

- * Reciprocal of parse(). - *

*/ String formatValue(T value); @@ -155,10 +144,8 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData * Convert the type into a string representation. *

* This assumes the value is of the correct type. - *

*

* This is so that ScalarType also implements the StringFormatter interface. - *

*/ @Override String format(Object value); @@ -167,10 +154,6 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData * Convert the string value to the appropriate java object. *

* Mostly used to support CSV, JSON and XML parsing. - *

- *

- * Reciprocal of formatValue(). - *

*/ @Override T parse(String value); @@ -183,29 +166,32 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData /** * Return true if the type can accept long systemTimeMillis input. *

- * This is used to determine if is is sensible to use the + * This is used to determine if it is sensible to use the * {@link #convertFromMillis(long)} method. - *

*

* This includes the Date, Calendar, sql Date, Time, Timestamp, JODA types * as well as Long, BigDecimal and String (although it generally is not * expected to parse systemTimeMillis to a String or BigDecimal). - *

*/ - boolean isDateTimeCapable(); + default boolean isDateTimeCapable() { + return false; + } /** * Convert the value into a long version value. */ - long asVersion(T value); + default long asVersion(T value) { + throw new UnsupportedOperationException(); + } /** * Convert the systemTimeMillis into the appropriate java object. *

* For non dateTime types this will throw an exception. - *

*/ - T convertFromMillis(long dateTime); + default T convertFromMillis(long dateTime) { + throw new UnsupportedOperationException(); + } /** * Read the value from binary input. @@ -215,7 +201,7 @@ public interface ScalarType extends StringParser, StringFormatter, ScalarData /** * Write the value to binary output. */ - void writeData(DataOutput dataOutput, T v) throws IOException; + void writeData(DataOutput dataOutput, T value) throws IOException; /** * Read the value from JsonParser. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBase.java index 5d2bb45e9..93ab0a6a6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBase.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBase.java @@ -18,41 +18,6 @@ abstract class ScalarTypeBase implements ScalarType { this.jdbcType = jdbcType; } - @Override - public long asVersion(T value) { - throw new RuntimeException("not supported"); - } - - @Override - public boolean isBinaryType() { - // override for binary/byte based types - return false; - } - - /** - * Default implementation of mutable false. - */ - @Override - public boolean isMutable() { - return false; - } - - /** - * Default to true. - */ - @Override - public boolean isDirty(Object value) { - return true; - } - - /** - * Just return 0. - */ - @Override - public int getLength() { - return 0; - } - @Override public boolean isJdbcNative() { return jdbcNative; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java index 7fd7d974e..75eaa17b5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBaseVarchar.java @@ -88,16 +88,6 @@ abstract class ScalarTypeBaseVarchar extends ScalarTypeBase { return format(value); } - @Override - public T convertFromMillis(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override @SuppressWarnings("unchecked") public String format(Object value) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java index 56bc180a9..848b0fc2a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java @@ -234,7 +234,6 @@ public final class ScalarTypeBoolean { @Override public int getLength() { - // typically this will return 1 return Math.max(trueValue.length(), falseValue.length()); } @@ -329,16 +328,6 @@ public final class ScalarTypeBoolean { return Boolean.valueOf(value); } - @Override - public Boolean convertFromMillis(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public Boolean readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java index 250bb1006..5437ecb77 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java @@ -85,16 +85,6 @@ final class ScalarTypeByte extends ScalarTypeBase { throw new TextException("Not supported"); } - @Override - public Byte convertFromMillis(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public Byte readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBase.java index 437c626f8..51f811ede 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBase.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBase.java @@ -59,16 +59,6 @@ public abstract class ScalarTypeBytesBase extends ScalarTypeBase { throw new TextException("Not supported"); } - @Override - public byte[] convertFromMillis(long systemTimeMillis) { - throw new TextException("Not supported"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public byte[] readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java index df8b32ba9..ec753b307 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java @@ -26,26 +26,11 @@ public final class ScalarTypeBytesEncrypted implements ScalarType { this.dataEncryptSupport = dataEncryptSupport; } - @Override - public long asVersion(byte[] value) { - throw new RuntimeException("not supported"); - } - @Override public boolean isBinaryType() { return true; } - @Override - public boolean isMutable() { - return false; - } - - @Override - public boolean isDirty(Object value) { - return false; - } - @Override public void bind(DataBinder binder, byte[] value) throws SQLException { value = dataEncryptSupport.encrypt(value); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java index 8e34afe27..5daff6f4c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDuration.java @@ -93,16 +93,6 @@ class ScalarTypeDuration extends ScalarTypeBase { return Duration.parse(value); } - @Override - public boolean isDateTimeCapable() { - return false; - } - - @Override - public Duration convertFromMillis(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - @Override public Duration jsonRead(JsonParser parser) throws IOException { return Duration.parse(parser.getValueAsString()); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java index 1a552d11a..392fc1b86 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java @@ -30,11 +30,6 @@ public final class ScalarTypeEncryptedWrapper implements ScalarType, Local return dataEncryptSupport.encryptObject(formatValue); } - @Override - public long asVersion(T value) { - throw new RuntimeException("not supported"); - } - @Override public boolean isBinaryType() { return wrapped.isBinaryType(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java index 969bfd016..d33b06af4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java @@ -229,16 +229,6 @@ final class ScalarTypeEnumStandard { return Enum.valueOf(enumType, value); } - @Override - public Object convertFromMillis(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public Object jsonRead(JsonParser parser) throws IOException { if (parser.getCodec() != null) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java index cafee64f7..287c11f60 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java @@ -39,16 +39,6 @@ class ScalarTypeEnumWithMapping extends ScalarTypeEnumStandard.EnumBase implemen return enumType == null; } - @Override - public long asVersion(Object value) { - throw new RuntimeException("not supported"); - } - - @Override - public boolean isBinaryType() { - return false; - } - /** * Return the IN values for DB constraint construction. */ diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java index d5f500d78..be712b659 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java @@ -129,16 +129,6 @@ final class ScalarTypeFile extends ScalarTypeBase { throw new TextException("Not supported"); } - @Override - public File convertFromMillis(long systemTimeMillis) { - throw new TextException("Not supported"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public File readData(DataInput dataInput) throws IOException { // skip reading large file diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonCollection.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonCollection.java index e40e1a9ae..e78f6b02d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonCollection.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonCollection.java @@ -80,16 +80,6 @@ abstract class ScalarTypeJsonCollection extends ScalarTypeBase implements return docPropertyType; } - @Override - public boolean isDateTimeCapable() { - return false; - } - - @Override - public T convertFromMillis(long dateTime) { - return null; - } - @Override public T readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java index b5942289e..96030c23f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java @@ -215,16 +215,6 @@ abstract class ScalarTypeJsonMap extends ScalarTypeBase { } } - @Override - public final Map convertFromMillis(long dateTime) { - throw new RuntimeException("Should never be called"); - } - - @Override - public final boolean isDateTimeCapable() { - return false; - } - @Override public final Map readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNode.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNode.java index 8d2501f04..5efcb2c7b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNode.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNode.java @@ -167,16 +167,6 @@ abstract class ScalarTypeJsonNode extends ScalarTypeBase { } } - @Override - public JsonNode convertFromMillis(long dateTime) { - throw new RuntimeException("Should never be called"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public JsonNode readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonObjectMapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonObjectMapper.java index 3a863df1e..94bfd4c88 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonObjectMapper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonObjectMapper.java @@ -55,16 +55,6 @@ final class ScalarTypeJsonObjectMapper { NoMutationDetection(TypeJsonManager jsonManager, AnnotatedField field, int dbType, DocPropertyType docType) { super(Object.class, jsonManager, field, dbType, docType); } - - @Override - public boolean isMutable() { - return false; - } - - @Override - public boolean isDirty(Object value) { - return false; - } } /** @@ -79,6 +69,11 @@ final class ScalarTypeJsonObjectMapper { this.jsonb = "jsonb".equals(pgType); } + @Override + public boolean isMutable() { + return true; + } + @Override public boolean isJsonMapper() { return true; @@ -144,11 +139,6 @@ final class ScalarTypeJsonObjectMapper { this.objectWriter = helper.objectWriter(); } - @Override - public boolean isMutable() { - return true; - } - @Override public T read(DataReader reader) throws SQLException { String json = reader.getString(); @@ -212,16 +202,6 @@ final class ScalarTypeJsonObjectMapper { return docType; } - @Override - public final boolean isDateTimeCapable() { - return false; - } - - @Override - public final T convertFromMillis(long dateTime) { - throw new IllegalStateException("Not supported"); - } - @Override public final T jsonRead(JsonParser parser) throws IOException { return objectReader.readValue(parser, deserType); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonthDay.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonthDay.java index eb26a84b9..f655894ee 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonthDay.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonthDay.java @@ -78,16 +78,6 @@ final class ScalarTypeMonthDay extends ScalarTypeBase { return MonthDay.parse(value); } - @Override - public boolean isDateTimeCapable() { - return false; - } - - @Override - public MonthDay convertFromMillis(long dateTime) { - throw new RuntimeException("Not supported on this type"); - } - @Override public MonthDay readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeNotFound.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeNotFound.java index 7fbb5b5e9..ef0495296 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeNotFound.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeNotFound.java @@ -22,25 +22,6 @@ class ScalarTypeNotFound implements ScalarType { public static final ScalarTypeNotFound INSTANCE = new ScalarTypeNotFound(); private ScalarTypeNotFound() { } - @Override - public boolean isBinaryType() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isMutable() { - throw new UnsupportedOperationException(); - } - - @Override - public boolean isDirty(Object value) { - throw new UnsupportedOperationException(); - } - - @Override - public int getLength() { - throw new UnsupportedOperationException(); - } @Override public boolean isJdbcNative() { @@ -102,21 +83,6 @@ class ScalarTypeNotFound implements ScalarType { throw new UnsupportedOperationException(); } - @Override - public boolean isDateTimeCapable() { - throw new UnsupportedOperationException(); - } - - @Override - public long asVersion(Void value) { - throw new UnsupportedOperationException(); - } - - @Override - public Void convertFromMillis(long dateTime) { - throw new UnsupportedOperationException(); - } - @Override public Void readData(DataInput dataInput) throws IOException { throw new UnsupportedOperationException(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePostgresHstore.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePostgresHstore.java index 69b3d8a5b..2f33dc929 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePostgresHstore.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePostgresHstore.java @@ -82,16 +82,6 @@ final class ScalarTypePostgresHstore extends ScalarTypeBase { } } - @Override - public Map convertFromMillis(long dateTime) { - throw new RuntimeException("Should never be called"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public Map readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java index b3205b747..11bfa7b22 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java @@ -57,16 +57,6 @@ final class ScalarTypeShort extends ScalarTypeBase { return Short.valueOf(value); } - @Override - public Short convertFromMillis(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public Short readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBase.java index 7da989b82..db003d526 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBase.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeUUIDBase.java @@ -25,16 +25,6 @@ abstract class ScalarTypeUUIDBase extends ScalarTypeBase implements Scalar return DbPlatformType.UUID; } - @Override - public boolean isMutable() { - return false; - } - - @Override - public boolean isDirty(Object value) { - return true; - } - @Override public String format(Object value) { return String.valueOf(value); @@ -50,16 +40,6 @@ abstract class ScalarTypeUUIDBase extends ScalarTypeBase implements Scalar return UUID.fromString(value); } - @Override - public UUID convertFromMillis(long dateTime) { - throw new RuntimeException("Should never be called"); - } - - @Override - public boolean isDateTimeCapable() { - return false; - } - @Override public UUID toBeanType(Object value) { return BasicTypeConverter.toUUID(value, false); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeWrapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeWrapper.java index 1ce79bec0..f0e83bed3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeWrapper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeWrapper.java @@ -44,8 +44,7 @@ public class ScalarTypeWrapper implements ScalarType { @Override public long asVersion(B value) { - S unwrapValue = converter.unwrapValue(value); - return scalarType.asVersion(unwrapValue); + return scalarType.asVersion(converter.unwrapValue(value)); } @Override diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYear.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYear.java index c515de0e3..7d19c248c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYear.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeYear.java @@ -81,16 +81,6 @@ final class ScalarTypeYear extends ScalarTypeBase { return Year.parse(value); } - @Override - public boolean isDateTimeCapable() { - return false; - } - - @Override - public Year convertFromMillis(long systemTimeMillis) { - throw new TextException("Not Supported"); - } - @Override public Year jsonRead(JsonParser parser) throws IOException { return Year.of(parser.getIntValue()); diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java index 1a57f6080..1a8fb3218 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationTest.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.type; -import io.ebean.text.TextException; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; @@ -11,13 +10,12 @@ import java.time.Duration; import static org.junit.jupiter.api.Assertions.*; -public class ScalarTypeDurationTest { +class ScalarTypeDurationTest { ScalarTypeDuration type = new ScalarTypeDuration(); @Test - public void testReadData() throws Exception { - + void testReadData() throws Exception { Duration duration = Duration.ofSeconds(1234); ByteArrayOutputStream os = new ByteArrayOutputStream(); @@ -39,8 +37,7 @@ public class ScalarTypeDurationTest { } @Test - public void testToJdbcType() throws Exception { - + void testToJdbcType() throws Exception { Duration duration = Duration.ofSeconds(1234); long seconds = duration.getSeconds(); @@ -52,8 +49,7 @@ public class ScalarTypeDurationTest { } @Test - public void testToBeanType() throws Exception { - + void testToBeanType() throws Exception { Duration duration = Duration.ofSeconds(1234); long seconds = duration.getSeconds(); @@ -67,37 +63,34 @@ public class ScalarTypeDurationTest { } @Test - public void testFormatValue() throws Exception { - + void testFormatValue() { Duration duration = Duration.ofSeconds(1234); String formatValue = type.formatValue(duration); assertEquals("PT20M34S", formatValue); } @Test - public void testParse() { + void testParse() { Duration duration = type.parse("PT20M34S"); assertEquals(Duration.ofSeconds(1234), duration); } @Test - public void testIsDateTimeCapable() { + void testIsDateTimeCapable() { assertFalse(type.isDateTimeCapable()); } @Test - public void testConvertFromMillis() { - assertThrows(TextException.class, () -> type.convertFromMillis(1000)); + void testConvertFromMillis() { + assertThrows(UnsupportedOperationException.class, () -> type.convertFromMillis(1000)); } @Test - public void testJsonRead() throws Exception { - + void testJsonRead() throws Exception { Duration duration = Duration.ofSeconds(1234); JsonTester jsonTester = new JsonTester<>(type); jsonTester.test(duration); - } } diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java index 60e4ffe29..aca406df5 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanosTest.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.type; -import io.ebean.text.TextException; import org.junit.jupiter.api.Test; import java.io.ByteArrayInputStream; @@ -12,13 +11,12 @@ import java.time.Duration; import static org.junit.jupiter.api.Assertions.*; -public class ScalarTypeDurationWithNanosTest { +class ScalarTypeDurationWithNanosTest { ScalarTypeDurationWithNanos type = new ScalarTypeDurationWithNanos(); @Test - public void testReadData() throws Exception { - + void testReadData() throws Exception { Duration duration = Duration.ofSeconds(323, 1500000); ByteArrayOutputStream os = new ByteArrayOutputStream(); @@ -40,8 +38,7 @@ public class ScalarTypeDurationWithNanosTest { } @Test - public void testToJdbcType() throws Exception { - + void testToJdbcType() throws Exception { Duration duration = Duration.ofSeconds(323, 1500000); BigDecimal bigDecimal = DecimalUtils.toDecimal(duration); @@ -53,8 +50,7 @@ public class ScalarTypeDurationWithNanosTest { } @Test - public void testToBeanType() throws Exception { - + void testToBeanType() throws Exception { Duration duration = Duration.ofSeconds(323, 1500000); BigDecimal bigDecimal = DecimalUtils.toDecimal(duration); @@ -66,32 +62,31 @@ public class ScalarTypeDurationWithNanosTest { } @Test - public void testFormatValue() throws Exception { - + void testFormatValue() { Duration duration = Duration.ofSeconds(323, 1500000); String formatValue = type.formatValue(duration); assertEquals("PT5M23.0015S", formatValue); } @Test - public void testParse() { + void testParse() { Duration duration = Duration.ofSeconds(323, 1500000); Duration val1 = type.parse("PT5M23.0015S"); assertEquals(duration, val1); } @Test - public void testIsDateTimeCapable() { + void testIsDateTimeCapable() { assertFalse(type.isDateTimeCapable()); } @Test - public void testConvertFromMillis() { - assertThrows(TextException.class, () -> type.convertFromMillis(1000)); + void testConvertFromMillis() { + assertThrows(UnsupportedOperationException.class, () -> type.convertFromMillis(1000)); } @Test - public void testJsonRead() throws Exception { + void testJsonRead() throws Exception { Duration duration = Duration.ofSeconds(323, 1500000); JsonTester jsonTester = new JsonTester<>(type); diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java index c37282744..9a0440b67 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeYearTest.java @@ -11,13 +11,12 @@ import java.time.Year; import static org.junit.jupiter.api.Assertions.*; -public class ScalarTypeYearTest { +class ScalarTypeYearTest { ScalarTypeYear type = new ScalarTypeYear(); @Test - public void testReadData() throws Exception { - + void testReadData() throws Exception { ByteArrayOutputStream os = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(os); @@ -37,8 +36,7 @@ public class ScalarTypeYearTest { } @Test - public void testToJdbcType() throws Exception { - + void testToJdbcType() throws Exception { Integer year = 2013; Object val1 = type.toJdbcType(Year.of(2013)); Object val2 = type.toJdbcType(2013); @@ -50,8 +48,7 @@ public class ScalarTypeYearTest { } @Test - public void testToBeanType() throws Exception { - + void testToBeanType() throws Exception { Year year = Year.of(2013); Year val1 = type.toBeanType(year); Year val2 = type.toBeanType(2013); @@ -63,29 +60,29 @@ public class ScalarTypeYearTest { } @Test - public void testFormatValue() throws Exception { + void testFormatValue() { String formatted = type.formatValue(Year.of(2013)); assertEquals("2013", formatted); } @Test - public void testParse() { + void testParse() { Year year = type.parse("2013"); assertEquals(Year.of(2013), year); } @Test - public void testIsDateTimeCapable() { + void testIsDateTimeCapable() { assertFalse(type.isDateTimeCapable()); } @Test - public void testConvertFromMillis() { - assertThrows(TextException.class, () -> type.convertFromMillis(1000)); + void testConvertFromMillis() { + assertThrows(UnsupportedOperationException.class, () -> type.convertFromMillis(1000)); } @Test - public void testJson() throws Exception { + void testJson() throws Exception { JsonTester jsonTester = new JsonTester<>(type); jsonTester.test(Year.of(2013)); } diff --git a/ebean-postgis/src/main/java/io/ebean/postgis/ScalarTypePgisBase.java b/ebean-postgis/src/main/java/io/ebean/postgis/ScalarTypePgisBase.java index adc3bbd98..d96f45476 100644 --- a/ebean-postgis/src/main/java/io/ebean/postgis/ScalarTypePgisBase.java +++ b/ebean-postgis/src/main/java/io/ebean/postgis/ScalarTypePgisBase.java @@ -86,26 +86,6 @@ abstract class ScalarTypePgisBase implements ScalarType { } - @Override - public boolean isBinaryType() { - return false; - } - - @Override - public boolean isMutable() { - return false; - } - - @Override - public boolean isDirty(Object value) { - return false; - } - - @Override - public int getLength() { - return 0; - } - @Override public void loadIgnore(DataReader reader) { reader.incrementPos(1); @@ -141,22 +121,6 @@ abstract class ScalarTypePgisBase implements ScalarType { return null; } - @Override - public boolean isDateTimeCapable() { - return false; - } - - @Override - public long asVersion(T value) { - return 0; - } - - @Override - public T convertFromMillis(long dateTime) { - return null; - } - - @Override public T jsonRead(JsonParser parser) { return null; diff --git a/ebean-postgis/src/main/java/io/ebean/postgis/latte/ScalarTypeGeoLatteBase.java b/ebean-postgis/src/main/java/io/ebean/postgis/latte/ScalarTypeGeoLatteBase.java index 2dd779c38..c90b887f5 100644 --- a/ebean-postgis/src/main/java/io/ebean/postgis/latte/ScalarTypeGeoLatteBase.java +++ b/ebean-postgis/src/main/java/io/ebean/postgis/latte/ScalarTypeGeoLatteBase.java @@ -77,26 +77,6 @@ abstract class ScalarTypeGeoLatteBase implements ScalarType< } - @Override - public boolean isBinaryType() { - return false; - } - - @Override - public boolean isMutable() { - return false; - } - - @Override - public boolean isDirty(Object value) { - return false; - } - - @Override - public int getLength() { - return 0; - } - @Override public void loadIgnore(DataReader reader) { reader.incrementPos(1); @@ -132,21 +112,6 @@ abstract class ScalarTypeGeoLatteBase implements ScalarType< return null; } - @Override - public boolean isDateTimeCapable() { - return false; - } - - @Override - public long asVersion(T value) { - return 0; - } - - @Override - public T convertFromMillis(long dateTime) { - return null; - } - @Override public T jsonRead(JsonParser parser) { return null; From 239f87bb5dc0016b8643fa1d2265731f01f52c6f Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 13 Jun 2022 22:39:35 +1200 Subject: [PATCH 05/21] Rename Oracle GH WF build --- .github/workflows/{oracle18.yml => oracle.yml} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename .github/workflows/{oracle18.yml => oracle.yml} (98%) diff --git a/.github/workflows/oracle18.yml b/.github/workflows/oracle.yml similarity index 98% rename from .github/workflows/oracle18.yml rename to .github/workflows/oracle.yml index 20a8d01e2..19c155d2e 100644 --- a/.github/workflows/oracle18.yml +++ b/.github/workflows/oracle.yml @@ -1,5 +1,5 @@ -name: Oracle18 +name: Oracle on: workflow_dispatch: From ab047996d2583ed1708ed700ec6398bd98d55f51 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 14 Jun 2022 09:18:17 +1200 Subject: [PATCH 06/21] Add build badge for Oracle --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 83bcbae96..b43bd0b63 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ [![Postgres](https://github.com/ebean-orm/ebean/actions/workflows/postgres.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/postgres.yml) [![MySql](https://github.com/ebean-orm/ebean/actions/workflows/mysql.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/mysql.yml) [![MariaDB](https://github.com/ebean-orm/ebean/actions/workflows/mariadb.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/mariadb.yml) +[![Oracle](https://github.com/ebean-orm/ebean/actions/workflows/oracle.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/oracle.yml) [![SqlServer](https://github.com/ebean-orm/ebean/actions/workflows/sqlserver.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/sqlserver.yml) [![Yugabyte](https://github.com/ebean-orm/ebean/actions/workflows/yugabyte.yml/badge.svg)](https://github.com/ebean-orm/ebean/actions/workflows/yugabyte.yml) From 583c5f74eb8a0c2b685cd45cbf0d6c083a805d33 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 14 Jun 2022 14:57:50 +1200 Subject: [PATCH 07/21] Support Postgres JSONB/JSON with String - @DbJsonb String content; --- .../server/type/DefaultTypeManager.java | 3 + .../server/type/ScalarTypeJsonString.java | 41 ++++++++++++ ebean-test/pom.xml | 3 +- .../src/test/java/main/StartPostgres.java | 10 +-- .../org/tests/json/TestDbJsonBStringType.java | 47 ++++++++++++++ .../org/tests/json/TestDbJsonStringType.java | 47 ++++++++++++++ .../tests/model/json/EBasicJsonBString.java | 62 +++++++++++++++++++ .../tests/model/json/EBasicJsonString.java | 62 +++++++++++++++++++ .../src/test/resources/ebean.properties | 2 +- .../src/test/resources/logback-test.xml | 6 +- 10 files changed, 273 insertions(+), 10 deletions(-) create mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonString.java create mode 100644 ebean-test/src/test/java/org/tests/json/TestDbJsonBStringType.java create mode 100644 ebean-test/src/test/java/org/tests/json/TestDbJsonStringType.java create mode 100644 ebean-test/src/test/java/org/tests/model/json/EBasicJsonBString.java create mode 100644 ebean-test/src/test/java/org/tests/model/json/EBasicJsonString.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java index 020ba58ae..165d86c5a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java @@ -353,6 +353,9 @@ public final class DefaultTypeManager implements TypeManager { Type genericType = prop.getGenericType(); boolean hasJacksonAnnotations = objectMapperPresent && checkJacksonAnnotations(prop); + if (type.equals(String.class)) { + return ScalarTypeJsonString.typeFor(postgres, dbType); + } if (type.equals(List.class)) { DocPropertyType docType = getDocType(genericType); if (!hasJacksonAnnotations && isValueTypeSimple(genericType)) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonString.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonString.java new file mode 100644 index 000000000..51fb54d4b --- /dev/null +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonString.java @@ -0,0 +1,41 @@ +package io.ebeaninternal.server.type; + +import io.ebean.config.dbplatform.DbPlatformType; +import io.ebean.config.dbplatform.ExtraDbTypes; +import io.ebean.core.type.DataBinder; +import io.ebean.core.type.ScalarType; + +import java.sql.SQLException; + +final class ScalarTypeJsonString { + + static final Postgres JSONB = new Postgres(ExtraDbTypes.JSONB, PostgresHelper.JSONB_TYPE); + static final Postgres JSON = new Postgres(ExtraDbTypes.JSON, PostgresHelper.JSON_TYPE); + + static ScalarType typeFor(boolean postgres, int dbType) { + if (postgres) { + switch (dbType) { + case DbPlatformType.JSONB: + return JSONB; + case DbPlatformType.JSON: + return JSON; + } + } + return ScalarTypeString.INSTANCE; + } + + private static class Postgres extends ScalarTypeStringBase { + final String postgresType; + + Postgres(int jdbcType, String postgresType) { + super(true, jdbcType); + this.postgresType = postgresType; + } + + @Override + public void bind(DataBinder binder, String rawJson) throws SQLException { + binder.setObject(PostgresHelper.asObject(postgresType, rawJson)); + } + } + +} diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 4fb24555a..7ea9d8632 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -163,7 +163,8 @@ org.postgresql postgresql - 42.3.3 + + 42.2.9 org.checkerframework diff --git a/ebean-test/src/test/java/main/StartPostgres.java b/ebean-test/src/test/java/main/StartPostgres.java index b65aea1f2..0356ff25c 100644 --- a/ebean-test/src/test/java/main/StartPostgres.java +++ b/ebean-test/src/test/java/main/StartPostgres.java @@ -5,12 +5,12 @@ import io.ebean.test.containers.PostgresContainer; public class StartPostgres { public static void main(String[] args) { - PostgresContainer.builder("13") - .port(5432) + PostgresContainer.builder("14") .dbName("unit") - .user("unit") - .password("unit") - .containerName("pg13x") + //.port(6432) + //.user("unit") + //.password("test") + //.containerName("ut_postgres") .extensions("hstore,pgcrypto") .build() .startWithDropCreate(); diff --git a/ebean-test/src/test/java/org/tests/json/TestDbJsonBStringType.java b/ebean-test/src/test/java/org/tests/json/TestDbJsonBStringType.java new file mode 100644 index 000000000..f26235d68 --- /dev/null +++ b/ebean-test/src/test/java/org/tests/json/TestDbJsonBStringType.java @@ -0,0 +1,47 @@ +package org.tests.json; + +import io.ebean.DB; +import io.ebean.test.LoggedSql; +import org.junit.jupiter.api.Test; +import org.tests.model.json.EBasicJsonBString; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class TestDbJsonBStringType { + + @Test + void test() { + var bean = new EBasicJsonBString("hi").content("{\"mykey\": 42}"); // JsonB format with space + DB.save(bean); + + var found = DB.find(EBasicJsonBString.class, bean.id()); + // Note that Postgres JsonB will format the result + assertThat(found.content()).isEqualTo("{\"mykey\": 42}"); + + LoggedSql.start(); + + // change title only, expect content not in update + found.title("changeTitleOnly"); + DB.save(found); + List sql = LoggedSql.collect(); + // update does NOT contain our json content + assertThat(sql.get(0)).contains("update ebasic_json_bstring set title=?, version=? where id=? and version=?"); + + // change title and content + found.title("changeAgain"); + found.content("{\"mykey\": 92}"); + DB.save(found); + sql = LoggedSql.collect(); + assertThat(sql.get(0)).contains("update ebasic_json_bstring set title=?, content=?, version=? where id=? and version=?"); + + + // change content only + found.content("{\"mykey\": 95}"); + DB.save(found); + sql = LoggedSql.stop(); + assertThat(sql.get(0)).contains("update ebasic_json_bstring set content=?, version=? where id=? and version=?"); + + } +} diff --git a/ebean-test/src/test/java/org/tests/json/TestDbJsonStringType.java b/ebean-test/src/test/java/org/tests/json/TestDbJsonStringType.java new file mode 100644 index 000000000..307b0e561 --- /dev/null +++ b/ebean-test/src/test/java/org/tests/json/TestDbJsonStringType.java @@ -0,0 +1,47 @@ +package org.tests.json; + +import io.ebean.DB; +import io.ebean.test.LoggedSql; +import org.junit.jupiter.api.Test; +import org.tests.model.json.EBasicJsonString; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +class TestDbJsonStringType { + + @Test + void test() { + var bean = new EBasicJsonString("hi").content("{\"mykey\": 52}"); // JsonB format with space + DB.save(bean); + + var found = DB.find(EBasicJsonString.class, bean.id()); + // Note that Postgres JsonB will format the result + assertThat(found.content()).isEqualTo("{\"mykey\": 52}"); + + LoggedSql.start(); + + // change title only, expect content not in update + found.title("changeTitleOnly"); + DB.save(found); + List sql = LoggedSql.collect(); + // update does NOT contain our json content + assertThat(sql.get(0)).contains("update ebasic_json_string set title=?, version=? where id=? and version=?"); + + // change title and content + found.title("changeAgain"); + found.content("{\"mykey\": 92}"); + DB.save(found); + sql = LoggedSql.collect(); + assertThat(sql.get(0)).contains("update ebasic_json_string set title=?, content=?, version=? where id=? and version=?"); + + + // change content only + found.content("{\"mykey\": 95}"); + DB.save(found); + sql = LoggedSql.stop(); + assertThat(sql.get(0)).contains("update ebasic_json_string set content=?, version=? where id=? and version=?"); + + } +} diff --git a/ebean-test/src/test/java/org/tests/model/json/EBasicJsonBString.java b/ebean-test/src/test/java/org/tests/model/json/EBasicJsonBString.java new file mode 100644 index 000000000..ee4617c0e --- /dev/null +++ b/ebean-test/src/test/java/org/tests/model/json/EBasicJsonBString.java @@ -0,0 +1,62 @@ +package org.tests.model.json; + +import io.ebean.annotation.DbJsonB; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Version; + +@Entity +public class EBasicJsonBString { + + @Id + long id; + + String title; + + @DbJsonB + String content; + + @Version + long version; + + public EBasicJsonBString(String title) { + this.title = title; + } + + public long id() { + return id; + } + + public EBasicJsonBString id(long id) { + this.id = id; + return this; + } + + public String title() { + return title; + } + + public EBasicJsonBString title(String title) { + this.title = title; + return this; + } + + public String content() { + return content; + } + + public EBasicJsonBString content(String content) { + this.content = content; + return this; + } + + public long version() { + return version; + } + + public EBasicJsonBString version(long version) { + this.version = version; + return this; + } +} diff --git a/ebean-test/src/test/java/org/tests/model/json/EBasicJsonString.java b/ebean-test/src/test/java/org/tests/model/json/EBasicJsonString.java new file mode 100644 index 000000000..45af516dc --- /dev/null +++ b/ebean-test/src/test/java/org/tests/model/json/EBasicJsonString.java @@ -0,0 +1,62 @@ +package org.tests.model.json; + +import io.ebean.annotation.DbJson; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Version; + +@Entity +public class EBasicJsonString { + + @Id + long id; + + String title; + + @DbJson + String content; + + @Version + long version; + + public EBasicJsonString(String title) { + this.title = title; + } + + public long id() { + return id; + } + + public EBasicJsonString id(long id) { + this.id = id; + return this; + } + + public String title() { + return title; + } + + public EBasicJsonString title(String title) { + this.title = title; + return this; + } + + public String content() { + return content; + } + + public EBasicJsonString content(String content) { + this.content = content; + return this; + } + + public long version() { + return version; + } + + public EBasicJsonString version(long version) { + this.version = version; + return this; + } +} diff --git a/ebean-test/src/test/resources/ebean.properties b/ebean-test/src/test/resources/ebean.properties index 91c0d0c29..326ef0d42 100644 --- a/ebean-test/src/test/resources/ebean.properties +++ b/ebean-test/src/test/resources/ebean.properties @@ -22,7 +22,7 @@ ebean.ddl.generate=true ebean.ddl.run=true ebean.ddl.header=-- Generated by ebean ${version} at ${timestamp} ebean.packages=org.tests,org.etest -datasource.default=h2 +datasource.default=pg #datasource.default=sqlserver #datasource.h2.capturestacktrace=true diff --git a/ebean-test/src/test/resources/logback-test.xml b/ebean-test/src/test/resources/logback-test.xml index e95579b21..99d10dab3 100644 --- a/ebean-test/src/test/resources/logback-test.xml +++ b/ebean-test/src/test/resources/logback-test.xml @@ -80,9 +80,9 @@ - - - + + + From 8c3ed6996e8292b40b31a978f152c0bde28c2c5f Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 14 Jun 2022 14:59:39 +1200 Subject: [PATCH 08/21] Put postgresql jdbc back to 42.3.3 --- ebean-test/pom.xml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 7ea9d8632..4fb24555a 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -163,8 +163,7 @@ org.postgresql postgresql - - 42.2.9 + 42.3.3 org.checkerframework From 162b3449e8110278f74da900b449ec938159894f Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 14 Jun 2022 15:03:35 +1200 Subject: [PATCH 09/21] Put ebean.properties back to default to h2 --- ebean-test/src/test/resources/ebean.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebean-test/src/test/resources/ebean.properties b/ebean-test/src/test/resources/ebean.properties index 326ef0d42..91c0d0c29 100644 --- a/ebean-test/src/test/resources/ebean.properties +++ b/ebean-test/src/test/resources/ebean.properties @@ -22,7 +22,7 @@ ebean.ddl.generate=true ebean.ddl.run=true ebean.ddl.header=-- Generated by ebean ${version} at ${timestamp} ebean.packages=org.tests,org.etest -datasource.default=pg +datasource.default=h2 #datasource.default=sqlserver #datasource.h2.capturestacktrace=true From 06ad2edfc1294890f8460da6555571706e817967 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 14 Jun 2022 15:39:34 +1200 Subject: [PATCH 10/21] #2718 - [Yugabyte] Fix such that builtin table partition functions are included in DDL (when we use table partitioning) --- .../dbmigration/builtin-extra-ddl-partitioning.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ebean-ddl-generator/src/main/resources/io/ebeaninternal/dbmigration/builtin-extra-ddl-partitioning.xml b/ebean-ddl-generator/src/main/resources/io/ebeaninternal/dbmigration/builtin-extra-ddl-partitioning.xml index 0e3608090..b0a6accf3 100644 --- a/ebean-ddl-generator/src/main/resources/io/ebeaninternal/dbmigration/builtin-extra-ddl-partitioning.xml +++ b/ebean-ddl-generator/src/main/resources/io/ebeaninternal/dbmigration/builtin-extra-ddl-partitioning.xml @@ -1,7 +1,7 @@ - + -- partitioning helper functions (UTC based) ------------------------------------------------------------------------------------ From 403556d8b229edf44655bacdcaa4e9048405ba7f Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 14 Jun 2022 16:00:54 +1200 Subject: [PATCH 11/21] DDL - Refactor DDL for Postgres and YugabyteDB to just create a default partition table Removes the need and use of PostgresPlatform.tablePartitionsExist() and PostgresPlatform.tablePartitionInit() altogether. --- .../config/dbplatform/DatabasePlatform.java | 14 ------ .../dbmigration/DdlGenerator.java | 43 +------------------ .../ddlgeneration/platform/BaseTableDdl.java | 2 + .../ddlgeneration/platform/PlatformDdl.java | 6 ++- .../ddlgeneration/platform/PostgresDdl.java | 5 +++ .../dbmigration/PostgresPlatformTest.java | 5 +-- .../platform/postgres/PostgresPlatform.java | 36 ---------------- .../postgres/PostgresPlatformTest.java | 17 +------- 8 files changed, 16 insertions(+), 112 deletions(-) diff --git a/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java b/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java index 90c1a5bb0..20b7ccd00 100644 --- a/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java +++ b/ebean-api/src/main/java/io/ebean/config/dbplatform/DatabasePlatform.java @@ -802,20 +802,6 @@ public class DatabasePlatform { } } - /** - * Return true if partitions exist for the given table. - */ - public boolean tablePartitionsExist(Connection connection, String table) throws SQLException { - return true; - } - - /** - * Return the SQL to create an initial partition for the given table. - */ - public String tablePartitionInit(String tableName, PartitionMode mode) { - return null; - } - /** * Escapes the like string for this DB-Platform */ diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java index dee11bd71..74ae5a64c 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DdlGenerator.java @@ -10,19 +10,12 @@ import io.ebean.util.JdbcClose; import io.ebeaninternal.api.SpiDdlGenerator; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.dbmigration.model.CurrentModel; -import io.ebeaninternal.dbmigration.model.MTable; import io.ebeaninternal.extraddl.model.ExtraDdlXmlReader; -import io.ebeaninternal.server.deploy.PartitionMeta; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.persistence.PersistenceException; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.io.LineNumberReader; -import java.io.Reader; -import java.io.Writer; +import java.io.*; import java.sql.Connection; import java.sql.SQLException; @@ -205,7 +198,6 @@ public class DdlGenerator implements SpiDdlGenerator { createAllContent = readFile(getCreateFileName()); } runScript(connection, false, createAllContent, getCreateFileName()); - if (extraDdl && jaxbPresent) { if (currentModel().isTablePartitioning()) { String extraPartitioning = ExtraDdlXmlReader.buildPartitioning(platform); @@ -213,43 +205,10 @@ public class DdlGenerator implements SpiDdlGenerator { runScript(connection, false, extraPartitioning, "builtin-partitioning-ddl"); } } - String extraApply = ExtraDdlXmlReader.buildExtra(platform, false); if (extraApply != null) { runScript(connection, false, extraApply, "extra-ddl"); } - - if (currentModel().isTablePartitioning()) { - checkInitialTablePartitions(connection); - } - } - } - - /** - * Check if table partitions exist and if not create some. The expectation is that - * extra-ddl.xml should have some partition initialisation but this helps people get going. - */ - private void checkInitialTablePartitions(Connection connection) { - DatabasePlatform databasePlatform = server.databasePlatform(); - try { - StringBuilder sb = new StringBuilder(); - for (MTable table : currentModel.getPartitionedTables()) { - String tableName = table.getName(); - if (!databasePlatform.tablePartitionsExist(connection, tableName)) { - log.info("No table partitions for table {}", tableName); - PartitionMeta meta = table.getPartitionMeta(); - String initPart = databasePlatform.tablePartitionInit(tableName, meta.getMode()); - sb.append(initPart).append("\n"); - } - } - - String initialPartitionSql = sb.toString(); - if (!initialPartitionSql.isEmpty()) { - runScript(connection, false, initialPartitionSql, "initial table partitions"); - } - - } catch (SQLException e) { - log.error("Error checking initial table partitions", e); } } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java index 0e47e41e2..f7e803549 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/BaseTableDdl.java @@ -213,6 +213,8 @@ public class BaseTableDdl implements TableDdl { String partitionMode = createTable.getPartitionMode(); if (partitionMode != null) { platformDdl.addTablePartition(apply, partitionMode, createTable.getPartitionColumn()); + apply.endOfStatement().newLine(); + platformDdl.addDefaultTablePartition(apply, createTable.getName()); } apply.endOfStatement(); diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java index d9c7de750..f18b3c79e 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PlatformDdl.java @@ -733,7 +733,11 @@ public class PlatformDdl { } public void addTablePartition(DdlBuffer apply, String partitionMode, String partitionColumn) { - // only supported by postgres initially + // only supported by postgres and yugabyte + } + + public void addDefaultTablePartition(DdlBuffer apply, String tableName) { + // only supported by postgres and yugabyte } /** diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java index b5b21ab15..3054a73d9 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/ddlgeneration/platform/PostgresDdl.java @@ -45,6 +45,11 @@ public class PostgresDdl extends PlatformDdl { apply.append(" partition by range (").append(partitionColumn).append(")"); } + @Override + public void addDefaultTablePartition(DdlBuffer apply, String tableName) { + apply.append("create table ").append(tableName).append("_default partition of ").append(tableName).append(" default"); + } + @Override public String dropIndex(String indexName, String tableName, boolean concurrent) { return (concurrent ? dropIndexConcurrentlyIfExists : dropIndexIfExists) + maxConstraintName(indexName); 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 814580225..81546816a 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 @@ -7,11 +7,10 @@ import org.junit.jupiter.api.Test; import static org.assertj.core.api.Assertions.assertThat; -public class PostgresPlatformTest { +class PostgresPlatformTest { @Test - public void testTypeConversion() { - + void testTypeConversion() { PostgresPlatform platform = new PostgresPlatform(); PlatformDdl ddl = PlatformDdlBuilder.create(platform); diff --git a/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatform.java b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatform.java index 0c1b33053..6257153dc 100644 --- a/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatform.java +++ b/platforms/postgres/src/main/java/io/ebean/platform/postgres/PostgresPlatform.java @@ -147,40 +147,4 @@ public class PostgresPlatform extends DatabasePlatform { } return FOR_UPDATE; } - - @Override - public boolean tablePartitionsExist(Connection connection, String table) throws SQLException { - try (PreparedStatement statement = connection.prepareStatement("select count(*) from pg_inherits i WHERE i.inhparent = ?::regclass")) { - statement.setString(1, table); - try (ResultSet resultSet = statement.executeQuery()) { - return resultSet.next() && resultSet.getInt(1) > 0; - } - } - } - - /** - * Return SQL using built in partition helper functions to create some initial partitions. - *

- * Only use this if extra-ddl doesn't have some initial partitions defined (which it should). - */ - @Override - public String tablePartitionInit(String tableName, PartitionMode mode) { - // default partition required pg11 but this is only used for testing but bumped test docker container to pg14 by default - String[] schemaTable = SplitName.split(tableName); - - String baseTable; - String plusSchema; - if (schemaTable[0] == null) { - plusSchema = ""; - baseTable = tableName; - } else { - // table in an explicit schema - plusSchema = ",'" + schemaTable[0] + "'"; - baseTable = schemaTable[1]; - } - return - "create table " + tableName + "_default" + " partition of " + tableName + " default;\n" + - "select partition('" + mode.name().toLowerCase() + "','" + baseTable + "',1" + plusSchema + ");"; - } - } 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 index 747fbbcff..b52e3d216 100644 --- a/platforms/postgres/src/test/java/io/ebean/platform/postgres/PostgresPlatformTest.java +++ b/platforms/postgres/src/test/java/io/ebean/platform/postgres/PostgresPlatformTest.java @@ -1,6 +1,5 @@ package io.ebean.platform.postgres; -import io.ebean.annotation.PartitionMode; import io.ebean.annotation.Platform; import io.ebean.config.PlatformConfig; import io.ebean.config.dbplatform.DatabasePlatform; @@ -16,7 +15,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; class PostgresPlatformTest { @Test - void testUuidType() { + void testUuidType() { PostgresPlatform platform = new PostgresPlatform(); platform.configure(new PlatformConfig()); @@ -26,20 +25,6 @@ class PostgresPlatformTest { assertThat(columnDefn).isEqualTo("uuid"); } - @Test - void tablePartitionInit() { - String sql = new PostgresPlatform().tablePartitionInit("foo", PartitionMode.WEEK); - assertThat(sql).isEqualTo("create table foo_default partition of foo default;\n" + - "select partition('week','foo',1);"); - } - - @Test - void tablePartitionInit_withSchema() { - String sql = new PostgresPlatform().tablePartitionInit("bar.foo", PartitionMode.WEEK); - assertThat(sql).isEqualTo("create table bar.foo_default partition of bar.foo default;\n" + - "select partition('week','foo',1,'bar');"); - } - @Test void default_forUpdate_expect_noKeyUsed() { PostgresPlatform platform = new PostgresPlatform(); From c40ca2fad745f4c0abb07c3c529689ff86b38ba1 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 14 Jun 2022 16:09:13 +1200 Subject: [PATCH 12/21] Bump agent to 13.6.4 (no effective change) --- ebean-test/src/test/resources/logback-test.xml | 6 +++--- pom.xml | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/ebean-test/src/test/resources/logback-test.xml b/ebean-test/src/test/resources/logback-test.xml index 99d10dab3..e95579b21 100644 --- a/ebean-test/src/test/resources/logback-test.xml +++ b/ebean-test/src/test/resources/logback-test.xml @@ -80,9 +80,9 @@ - - - + + + diff --git a/pom.xml b/pom.xml index 56f1e40bb..6b596ca65 100644 --- a/pom.xml +++ b/pom.xml @@ -46,8 +46,8 @@ 13.6.0 6.1 8.0 - 13.6.3 - 13.6.3 + 13.6.4 + 13.6.4 false From fa11dac2b26c9141484cdf60d6b359f22b196d88 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 14 Jun 2022 16:14:18 +1200 Subject: [PATCH 13/21] [maven-release-plugin] prepare release ebean-parent-13.6.4 --- composites/ebean-clickhouse/pom.xml | 14 ++++++++----- composites/ebean-cockroach/pom.xml | 14 ++++++++----- composites/ebean-db2/pom.xml | 14 ++++++++----- composites/ebean-h2/pom.xml | 14 ++++++++----- composites/ebean-hana/pom.xml | 14 ++++++++----- composites/ebean-mariadb/pom.xml | 14 ++++++++----- composites/ebean-mysql/pom.xml | 14 ++++++++----- composites/ebean-nuodb/pom.xml | 14 ++++++++----- composites/ebean-oracle/pom.xml | 14 ++++++++----- composites/ebean-postgres/pom.xml | 14 ++++++++----- composites/ebean-sqlite/pom.xml | 14 ++++++++----- composites/ebean-sqlserver/pom.xml | 14 ++++++++----- composites/ebean-yugabyte/pom.xml | 14 ++++++++----- composites/ebean/pom.xml | 14 ++++++++----- composites/pom.xml | 2 +- ebean-api/pom.xml | 2 +- ebean-autotune/pom.xml | 8 ++++---- ebean-bom/pom.xml | 30 +++++++++++++-------------- ebean-core-type/pom.xml | 4 ++-- ebean-core/pom.xml | 16 +++++++-------- ebean-ddl-generator/pom.xml | 8 ++++---- ebean-externalmapping-api/pom.xml | 2 +- ebean-externalmapping-xml/pom.xml | 12 +++++------ ebean-postgis/pom.xml | 8 ++++---- ebean-querybean/pom.xml | 10 ++++----- ebean-redis/pom.xml | 12 +++++------ ebean-test/pom.xml | 10 ++++----- kotlin-querybean-generator/pom.xml | 10 ++++----- platforms/all/pom.xml | 32 ++++++++++++++++------------- platforms/clickhouse/pom.xml | 8 ++++++-- platforms/db2/pom.xml | 8 ++++++-- platforms/h2/pom.xml | 8 ++++++-- platforms/hana/pom.xml | 8 ++++++-- platforms/hsqldb/pom.xml | 8 ++++++-- platforms/mariadb/pom.xml | 10 ++++++--- platforms/mysql/pom.xml | 8 ++++++-- platforms/nuodb/pom.xml | 8 ++++++-- platforms/oracle/pom.xml | 8 ++++++-- platforms/pom.xml | 2 +- platforms/postgres/pom.xml | 8 ++++++-- platforms/sqlanywhere/pom.xml | 8 ++++++-- platforms/sqlite/pom.xml | 8 ++++++-- platforms/sqlserver/pom.xml | 8 ++++++-- pom.xml | 4 ++-- querybean-generator/pom.xml | 2 +- 45 files changed, 294 insertions(+), 182 deletions(-) diff --git a/composites/ebean-clickhouse/pom.xml b/composites/ebean-clickhouse/pom.xml index 8590c5ae8..4b575d167 100644 --- a/composites/ebean-clickhouse/pom.xml +++ b/composites/ebean-clickhouse/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-clickhouse @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-clickhouse - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-cockroach/pom.xml b/composites/ebean-cockroach/pom.xml index 977e121f5..4bfa7eb02 100644 --- a/composites/ebean-cockroach/pom.xml +++ b/composites/ebean-cockroach/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-cockroach @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-postgres - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-db2/pom.xml b/composites/ebean-db2/pom.xml index d66a8fe9a..9df65e8c7 100644 --- a/composites/ebean-db2/pom.xml +++ b/composites/ebean-db2/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-db2 @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-db2 - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-h2/pom.xml b/composites/ebean-h2/pom.xml index b6294b7fc..4d5b3a131 100644 --- a/composites/ebean-h2/pom.xml +++ b/composites/ebean-h2/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-h2 @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-h2 - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-hana/pom.xml b/composites/ebean-hana/pom.xml index b7e759488..f38dce161 100644 --- a/composites/ebean-hana/pom.xml +++ b/composites/ebean-hana/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-hana @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-hana - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-mariadb/pom.xml b/composites/ebean-mariadb/pom.xml index 5de2f50a5..3768d3487 100644 --- a/composites/ebean-mariadb/pom.xml +++ b/composites/ebean-mariadb/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-mariadb @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-mariadb - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-mysql/pom.xml b/composites/ebean-mysql/pom.xml index 3ad9636bf..d8e2b1d8d 100644 --- a/composites/ebean-mysql/pom.xml +++ b/composites/ebean-mysql/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-mysql @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-mysql - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-nuodb/pom.xml b/composites/ebean-nuodb/pom.xml index 4d222dc0f..7390b46b2 100644 --- a/composites/ebean-nuodb/pom.xml +++ b/composites/ebean-nuodb/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-nuodb @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-nuodb - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-oracle/pom.xml b/composites/ebean-oracle/pom.xml index 4d251b2b4..2c96d5d1f 100644 --- a/composites/ebean-oracle/pom.xml +++ b/composites/ebean-oracle/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-oracle @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-oracle - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-postgres/pom.xml b/composites/ebean-postgres/pom.xml index f6cd642cf..f2582958c 100644 --- a/composites/ebean-postgres/pom.xml +++ b/composites/ebean-postgres/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-postgres @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-postgres - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-sqlite/pom.xml b/composites/ebean-sqlite/pom.xml index a385e7f42..ec41c7f12 100644 --- a/composites/ebean-sqlite/pom.xml +++ b/composites/ebean-sqlite/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-sqlite @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-sqlite - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-sqlserver/pom.xml b/composites/ebean-sqlserver/pom.xml index 1a7c93fd5..0d00b1219 100644 --- a/composites/ebean-sqlserver/pom.xml +++ b/composites/ebean-sqlserver/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-sqlserver @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-sqlserver - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean-yugabyte/pom.xml b/composites/ebean-yugabyte/pom.xml index 599605b25..c4a4cd4b9 100644 --- a/composites/ebean-yugabyte/pom.xml +++ b/composites/ebean-yugabyte/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-yugabyte @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-postgres - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/ebean/pom.xml b/composites/ebean/pom.xml index 9b60d3589..718ffd7f8 100644 --- a/composites/ebean/pom.xml +++ b/composites/ebean/pom.xml @@ -4,7 +4,7 @@ composites io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean (all platforms) @@ -16,13 +16,13 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 @@ -35,14 +35,18 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-all - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/composites/pom.xml b/composites/pom.xml index 4ea2a1393..93a2a9abf 100644 --- a/composites/pom.xml +++ b/composites/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 composites diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml index 254dbb510..d61816397 100644 --- a/ebean-api/pom.xml +++ b/ebean-api/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean api diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml index 4bdfce532..dd3ae81e7 100644 --- a/ebean-autotune/pom.xml +++ b/ebean-autotune/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 @@ -14,7 +14,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - HEAD + ebean-parent-13.6.4 ebean autotune @@ -26,7 +26,7 @@ io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 provided @@ -55,7 +55,7 @@ io.ebean ebean-platform-h2 - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml index bbbbb4337..f1ea04aa1 100644 --- a/ebean-bom/pom.xml +++ b/ebean-bom/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean bom @@ -71,88 +71,88 @@ io.ebean ebean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core-type - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-ddl-generator - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-externalmapping-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-externalmapping-xml - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-autotune - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 io.ebean querybean-generator - 13.6.4-SNAPSHOT + 13.6.4 provided io.ebean kotlin-querybean-generator - 13.6.4-SNAPSHOT + 13.6.4 provided io.ebean ebean-test - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean ebean-postgis - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-redis - 13.6.4-SNAPSHOT + 13.6.4 diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml index e85a14a72..b7de956a6 100644 --- a/ebean-core-type/pom.xml +++ b/ebean-core-type/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-core-type @@ -16,7 +16,7 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml index 2a7a9aaa2..fe77c0dd8 100644 --- a/ebean-core/pom.xml +++ b/ebean-core/pom.xml @@ -3,7 +3,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-core @@ -15,7 +15,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - HEAD + ebean-parent-13.6.4 @@ -41,19 +41,19 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core-type - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-externalmapping-api - 13.6.4-SNAPSHOT + 13.6.4 @@ -144,21 +144,21 @@ io.ebean ebean-platform-h2 - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean ebean-platform-postgres - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean ebean-platform-sqlserver - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml index 11758457f..d55e798c1 100644 --- a/ebean-ddl-generator/pom.xml +++ b/ebean-ddl-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean ddl generation @@ -28,14 +28,14 @@ io.ebean ebean-core-type - 13.6.4-SNAPSHOT + 13.6.4 provided io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 provided @@ -58,7 +58,7 @@ io.ebean ebean-platform-all - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml index 9d5383763..f9bfb8f5c 100644 --- a/ebean-externalmapping-api/pom.xml +++ b/ebean-externalmapping-api/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean external mapping api diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml index 3f2c0e8ad..6997207ca 100644 --- a/ebean-externalmapping-xml/pom.xml +++ b/ebean-externalmapping-xml/pom.xml @@ -4,12 +4,12 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 scm:git:git@github.com:ebean-orm/ebean.git - HEAD + ebean-parent-13.6.4 ebean external mapping xml @@ -28,7 +28,7 @@ io.ebean ebean-externalmapping-api - 13.6.4-SNAPSHOT + 13.6.4 @@ -61,21 +61,21 @@ io.ebean ebean-platform-h2 - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean ebean-ddl-generator - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml index b406c3588..8b9db2c7b 100644 --- a/ebean-postgis/pom.xml +++ b/ebean-postgis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean postgis @@ -22,14 +22,14 @@ io.ebean ebean-platform-postgres - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 provided @@ -73,7 +73,7 @@ io.ebean ebean-test - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml index 32a937009..648eec66a 100644 --- a/ebean-querybean/pom.xml +++ b/ebean-querybean/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean querybean @@ -17,7 +17,7 @@ io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 provided @@ -63,21 +63,21 @@ io.ebean ebean-ddl-generator - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean querybean-generator - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean ebean-test - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml index 3aa9d2e97..f87fd1320 100644 --- a/ebean-redis/pom.xml +++ b/ebean-redis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-redis @@ -22,35 +22,35 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 provided io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 provided io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean querybean-generator - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean ebean-test - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 4fb24555a..3f4639ade 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean test @@ -29,20 +29,20 @@ io.ebean ebean-platform-h2 - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 provided io.ebean ebean-ddl-generator - 13.6.4-SNAPSHOT + 13.6.4 @@ -106,7 +106,7 @@ io.ebean ebean-platform-all - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml index 6ca5f520c..26b0cdf90 100644 --- a/kotlin-querybean-generator/pom.xml +++ b/kotlin-querybean-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4-SNAPSHOT + 13.6.4 kotlin querybean generator @@ -29,7 +29,7 @@ io.ebean ebean-querybean - 13.6.4-SNAPSHOT + 13.6.4 test @@ -43,7 +43,7 @@ io.ebean ebean-core - 13.6.4-SNAPSHOT + 13.6.4 test @@ -64,14 +64,14 @@ io.ebean ebean-platform-h2 - 13.6.4-SNAPSHOT + 13.6.4 test io.ebean ebean-ddl-generator - 13.6.4-SNAPSHOT + 13.6.4 test diff --git a/platforms/all/pom.xml b/platforms/all/pom.xml index 00e9e25e2..9b441eecb 100644 --- a/platforms/all/pom.xml +++ b/platforms/all/pom.xml @@ -4,7 +4,7 @@ platforms io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-platform-all @@ -14,68 +14,72 @@ io.ebean ebean-platform-h2 - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-clickhouse - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-db2 - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-hana - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-hsqldb - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-mysql - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-mariadb - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-nuodb - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-oracle - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-postgres - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-sqlanywhere - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-sqlite - 13.6.4-SNAPSHOT + 13.6.4 io.ebean ebean-platform-sqlserver - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/platforms/clickhouse/pom.xml b/platforms/clickhouse/pom.xml index a38e2221a..7b8469ac9 100644 --- a/platforms/clickhouse/pom.xml +++ b/platforms/clickhouse/pom.xml @@ -4,7 +4,7 @@ platforms io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-platform-clickhouse @@ -14,8 +14,12 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/platforms/db2/pom.xml b/platforms/db2/pom.xml index ed50c4389..922d35112 100644 --- a/platforms/db2/pom.xml +++ b/platforms/db2/pom.xml @@ -4,7 +4,7 @@ platforms io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-platform-db2 @@ -14,8 +14,12 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 + + + ebean-parent-13.6.4 + diff --git a/platforms/h2/pom.xml b/platforms/h2/pom.xml index cacedcdcd..7717f81d0 100644 --- a/platforms/h2/pom.xml +++ b/platforms/h2/pom.xml @@ -4,7 +4,7 @@ platforms io.ebean - 13.6.4-SNAPSHOT + 13.6.4 ebean-platform-h2 @@ -14,7 +14,7 @@ io.ebean ebean-api - 13.6.4-SNAPSHOT + 13.6.4 @@ -14,7 +14,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-13.6.4 + HEAD ebean autotune @@ -26,7 +26,7 @@ io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT provided @@ -55,7 +55,7 @@ io.ebean ebean-platform-h2 - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml index f1ea04aa1..ebdcea3a7 100644 --- a/ebean-bom/pom.xml +++ b/ebean-bom/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean bom @@ -71,88 +71,88 @@ io.ebean ebean - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-api - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-core-type - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-ddl-generator - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-externalmapping-api - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-externalmapping-xml - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-autotune - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-querybean - 13.6.4 + 13.6.5-SNAPSHOT io.ebean querybean-generator - 13.6.4 + 13.6.5-SNAPSHOT provided io.ebean kotlin-querybean-generator - 13.6.4 + 13.6.5-SNAPSHOT provided io.ebean ebean-test - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean ebean-postgis - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-redis - 13.6.4 + 13.6.5-SNAPSHOT diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml index b7de956a6..f7da6a256 100644 --- a/ebean-core-type/pom.xml +++ b/ebean-core-type/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean-core-type @@ -16,7 +16,7 @@ io.ebean ebean-api - 13.6.4 + 13.6.5-SNAPSHOT diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml index fe77c0dd8..20a71700a 100644 --- a/ebean-core/pom.xml +++ b/ebean-core/pom.xml @@ -3,7 +3,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean-core @@ -15,7 +15,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-13.6.4 + HEAD @@ -41,19 +41,19 @@ io.ebean ebean-api - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-core-type - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-externalmapping-api - 13.6.4 + 13.6.5-SNAPSHOT @@ -144,21 +144,21 @@ io.ebean ebean-platform-h2 - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean ebean-platform-postgres - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean ebean-platform-sqlserver - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml index d55e798c1..5745e1c16 100644 --- a/ebean-ddl-generator/pom.xml +++ b/ebean-ddl-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean ddl generation @@ -28,14 +28,14 @@ io.ebean ebean-core-type - 13.6.4 + 13.6.5-SNAPSHOT provided io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT provided @@ -58,7 +58,7 @@ io.ebean ebean-platform-all - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml index f9bfb8f5c..8c6017673 100644 --- a/ebean-externalmapping-api/pom.xml +++ b/ebean-externalmapping-api/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean external mapping api diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml index 6997207ca..dff67f11b 100644 --- a/ebean-externalmapping-xml/pom.xml +++ b/ebean-externalmapping-xml/pom.xml @@ -4,12 +4,12 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-13.6.4 + HEAD ebean external mapping xml @@ -28,7 +28,7 @@ io.ebean ebean-externalmapping-api - 13.6.4 + 13.6.5-SNAPSHOT @@ -61,21 +61,21 @@ io.ebean ebean-platform-h2 - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean ebean-ddl-generator - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml index 8b9db2c7b..0117b699a 100644 --- a/ebean-postgis/pom.xml +++ b/ebean-postgis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean postgis @@ -22,14 +22,14 @@ io.ebean ebean-platform-postgres - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT provided @@ -73,7 +73,7 @@ io.ebean ebean-test - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml index 648eec66a..9f531ac99 100644 --- a/ebean-querybean/pom.xml +++ b/ebean-querybean/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean querybean @@ -17,7 +17,7 @@ io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT provided @@ -63,21 +63,21 @@ io.ebean ebean-ddl-generator - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean querybean-generator - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean ebean-test - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml index f87fd1320..eb8a2f6c5 100644 --- a/ebean-redis/pom.xml +++ b/ebean-redis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean-redis @@ -22,35 +22,35 @@ io.ebean ebean-api - 13.6.4 + 13.6.5-SNAPSHOT provided io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT provided io.ebean ebean-querybean - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean querybean-generator - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean ebean-test - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 3f4639ade..8cafc2158 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean test @@ -29,20 +29,20 @@ io.ebean ebean-platform-h2 - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT provided io.ebean ebean-ddl-generator - 13.6.4 + 13.6.5-SNAPSHOT @@ -106,7 +106,7 @@ io.ebean ebean-platform-all - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml index 26b0cdf90..c36475b2e 100644 --- a/kotlin-querybean-generator/pom.xml +++ b/kotlin-querybean-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 13.6.4 + 13.6.5-SNAPSHOT kotlin querybean generator @@ -29,7 +29,7 @@ io.ebean ebean-querybean - 13.6.4 + 13.6.5-SNAPSHOT test @@ -43,7 +43,7 @@ io.ebean ebean-core - 13.6.4 + 13.6.5-SNAPSHOT test @@ -64,14 +64,14 @@ io.ebean ebean-platform-h2 - 13.6.4 + 13.6.5-SNAPSHOT test io.ebean ebean-ddl-generator - 13.6.4 + 13.6.5-SNAPSHOT test diff --git a/platforms/all/pom.xml b/platforms/all/pom.xml index 9b441eecb..96858a7b2 100644 --- a/platforms/all/pom.xml +++ b/platforms/all/pom.xml @@ -4,7 +4,7 @@ platforms io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean-platform-all @@ -14,72 +14,68 @@ io.ebean ebean-platform-h2 - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-clickhouse - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-db2 - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-hana - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-hsqldb - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-mysql - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-mariadb - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-nuodb - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-oracle - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-postgres - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-sqlanywhere - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-sqlite - 13.6.4 + 13.6.5-SNAPSHOT io.ebean ebean-platform-sqlserver - 13.6.4 + 13.6.5-SNAPSHOT - - - ebean-parent-13.6.4 - diff --git a/platforms/clickhouse/pom.xml b/platforms/clickhouse/pom.xml index 7b8469ac9..b0e35711e 100644 --- a/platforms/clickhouse/pom.xml +++ b/platforms/clickhouse/pom.xml @@ -4,7 +4,7 @@ platforms io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean-platform-clickhouse @@ -14,12 +14,8 @@ io.ebean ebean-api - 13.6.4 + 13.6.5-SNAPSHOT - - - ebean-parent-13.6.4 - diff --git a/platforms/db2/pom.xml b/platforms/db2/pom.xml index 922d35112..3be2c4055 100644 --- a/platforms/db2/pom.xml +++ b/platforms/db2/pom.xml @@ -4,7 +4,7 @@ platforms io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean-platform-db2 @@ -14,12 +14,8 @@ io.ebean ebean-api - 13.6.4 + 13.6.5-SNAPSHOT - - - ebean-parent-13.6.4 - diff --git a/platforms/h2/pom.xml b/platforms/h2/pom.xml index 7717f81d0..fe9b57fd2 100644 --- a/platforms/h2/pom.xml +++ b/platforms/h2/pom.xml @@ -4,7 +4,7 @@ platforms io.ebean - 13.6.4 + 13.6.5-SNAPSHOT ebean-platform-h2 @@ -14,7 +14,7 @@ io.ebean ebean-api - 13.6.4 + 13.6.5-SNAPSHOT