From dd6a473008be0ee2c14c08f2012cd687cf68fa25 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20P=C3=B6hler=20=28JPo=29?=
Date: Mon, 22 Mar 2021 15:59:59 +0100
Subject: [PATCH 01/87] ADD: Test and possible fix for (C)LOBs being handed out
of connnection-context
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Signed-off-by: Jonas Pöhler (JPo)
---
.../server/rawsql/DRawSqlService.java | 21 ++++++
.../server/rawsql/TestRawSqlBuilder.java | 64 +++++++++++++++++++
2 files changed, 85 insertions(+)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlService.java b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlService.java
index 0b5eb4ad6..7c27264a8 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlService.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlService.java
@@ -9,6 +9,7 @@ import io.ebeaninternal.server.query.DefaultSqlRow;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
+import java.sql.Types;
public class DRawSqlService implements SpiRawSqlService {
@@ -49,6 +50,26 @@ public class DRawSqlService implements SpiRawSqlService {
name = combine(meta.getSchemaName(i), meta.getTableName(i), name);
}
ret.put(name, resultSet.getObject(i));
+
+ // convert (C/B)LOBs to java objects.
+ // A java.sql.Clob depends on an open connection, so storing this object in a map
+ // that is accessed later, when the connection is closed, will result in a "connection is closed" exception.
+ // From the java.sql.Clob documentation: "... which means that a Clob object contains a logical pointer to the SQL CLOB
+ // data rather than the data itself."
+ switch (meta.getColumnType(i)) {
+ case Types.CLOB:
+ case Types.NCLOB:
+ ret.put(name, resultSet.getString(i));
+ break;
+
+ case Types.BLOB:
+ ret.put(name, resultSet.getBytes(i));
+ break;
+
+ default:
+ ret.put(name, resultSet.getObject(i));
+ break;
+ }
}
return ret;
}
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java b/ebean-core/src/test/java/io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java
index 4e0a32e24..0fa4c746e 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java
@@ -9,17 +9,26 @@ import io.ebean.RawSqlBuilder;
import io.ebean.SqlRow;
import io.ebean.annotation.ForPlatform;
import io.ebean.annotation.Platform;
+import io.ebean.datasource.DataSourceConfig;
+import io.ebeaninternal.server.core.DefaultServer;
import io.ebeaninternal.server.rawsql.SpiRawSql.Sql;
import org.junit.Test;
import org.tests.model.basic.Customer;
+import org.tests.model.basic.EBasicClob;
+import org.tests.model.basic.PersistentFileContent;
import org.tests.model.basic.ResetBasicData;
import org.tests.model.rawsql.ERawSqlAggBean;
import javax.sql.DataSource;
+import java.nio.charset.StandardCharsets;
+import java.sql.Blob;
import java.sql.Connection;
+import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.ArrayList;
+import java.util.List;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.assertEquals;
@@ -283,4 +292,59 @@ public class TestRawSqlBuilder extends BaseTestCase {
}
}
+ @Test
+ public void testCLobClosedConnection() throws Exception {
+ final EBasicClob eBasicClob = new EBasicClob();
+ eBasicClob.setName("eBasicClob");
+ final String description = "This is the CLob description";
+ eBasicClob.setDescription(description);
+ DB.save(eBasicClob);
+
+ final String sql = "select description from ebasic_clob where id = ?";
+
+ List rows = new ArrayList<>();
+ final DataSourceConfig config = ((DefaultServer) DB.getDefault()).getServerConfig().getDataSourceConfig();
+
+ try (Connection connection = DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword());
+ PreparedStatement stmt = connection.prepareStatement(sql)) {
+ stmt.setLong(1, eBasicClob.getId());
+
+ try (ResultSet resultSet = stmt.executeQuery()) {
+ while (resultSet.next()) {
+ rows.add(RawSqlBuilder.sqlRow(resultSet, "true", false));
+ }
+ }
+ }
+
+ assertThat(rows).hasSize(1);
+ assertThat(rows.get(0).getString("description")).isEqualTo(description);
+ }
+
+ @Test
+ public void testBLobClosedConnection() throws Exception {
+ final PersistentFileContent pfc = new PersistentFileContent();
+ final byte[] bytes = "This is the blob as String".getBytes(StandardCharsets.UTF_8);
+ pfc.setContent(bytes);
+ DB.save(pfc);
+
+ final String sql = "select content from persistent_file_content where id = ?";
+
+ List rows = new ArrayList<>();
+ final DataSourceConfig config = ((DefaultServer) DB.getDefault()).getServerConfig().getDataSourceConfig();
+
+ try (Connection connection = DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword());
+ PreparedStatement stmt = connection.prepareStatement(sql)) {
+ stmt.setLong(1, pfc.getId());
+
+ try (ResultSet resultSet = stmt.executeQuery()) {
+ while (resultSet.next()) {
+ rows.add(RawSqlBuilder.sqlRow(resultSet, "true", false));
+ }
+ }
+ }
+
+ assertThat(rows).hasSize(1);
+ assertThat(((Blob) rows.get(0).get("content")).getBytes(0, bytes.length)).isEqualTo(bytes);
+ }
+
}
From 7408483a43ce4e6b3ecef04534fb3c2103c25e5f Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 15 Jul 2021 17:14:22 +1200
Subject: [PATCH 02/87] #2264 - Use of default timezone for OffsetDateTime
offsets problematic for unit tests and presentation layer
---
.../server/type/DefaultTypeManager.java | 12 ++++-
.../server/type/ScalarTypeOffsetDateTime.java | 7 ++-
.../server/type/ScalarTypeZonedDateTime.java | 7 ++-
.../type/ScalarTypeOffsetDateTimeTest.java | 50 +++++++++++++++---
.../type/ScalarTypeZonedDateTimeTest.java | 51 ++++++++++++++++---
5 files changed, 109 insertions(+), 18 deletions(-)
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 82c3ff46a..befe46b20 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
@@ -750,12 +750,15 @@ public final class DefaultTypeManager implements TypeManager {
}
private void initialiseJavaTimeTypes(DatabaseConfig config) {
+
+ ZoneId zoneId = getZoneId(config);
+
typeMap.put(java.nio.file.Path.class, new ScalarTypePath());
addType(java.time.Period.class, new ScalarTypePeriod());
addType(java.time.LocalDate.class, new ScalarTypeLocalDate(jsonDate));
addType(java.time.LocalDateTime.class, new ScalarTypeLocalDateTime(jsonDateTime));
- addType(OffsetDateTime.class, new ScalarTypeOffsetDateTime(jsonDateTime));
- addType(ZonedDateTime.class, new ScalarTypeZonedDateTime(jsonDateTime));
+ addType(OffsetDateTime.class, new ScalarTypeOffsetDateTime(jsonDateTime, zoneId));
+ addType(ZonedDateTime.class, new ScalarTypeZonedDateTime(jsonDateTime, zoneId));
addType(Instant.class, new ScalarTypeInstant(jsonDateTime));
addType(DayOfWeek.class, new ScalarTypeDayOfWeek());
addType(Month.class, new ScalarTypeMonth());
@@ -771,6 +774,11 @@ public final class DefaultTypeManager implements TypeManager {
addType(Duration.class, (durationNanos) ? new ScalarTypeDurationWithNanos() : new ScalarTypeDuration());
}
+ private ZoneId getZoneId(DatabaseConfig config) {
+ final String dataTimeZone = config.getDataTimeZone();
+ return (dataTimeZone == null) ? ZoneOffset.systemDefault() : TimeZone.getTimeZone(dataTimeZone).toZoneId();
+ }
+
private void addType(Class> clazz, ScalarType> scalarType) {
typeMap.put(clazz, scalarType);
logicalMap.putIfAbsent(clazz.getSimpleName(), scalarType);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTime.java
index b62c693d3..b68f3eba9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTime.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeOffsetDateTime.java
@@ -15,8 +15,11 @@ import static io.ebeaninternal.server.type.IsoJsonDateTimeParser.formatIso;
*/
public class ScalarTypeOffsetDateTime extends ScalarTypeBaseDateTime {
- public ScalarTypeOffsetDateTime(JsonConfig.DateTime mode) {
+ private final ZoneId zoneId;
+
+ public ScalarTypeOffsetDateTime(JsonConfig.DateTime mode, ZoneId zoneId) {
super(mode, OffsetDateTime.class, false, Types.TIMESTAMP);
+ this.zoneId = zoneId;
}
@Override
@@ -46,7 +49,7 @@ public class ScalarTypeOffsetDateTime extends ScalarTypeBaseDateTime {
- public ScalarTypeZonedDateTime(JsonConfig.DateTime mode) {
+ private final ZoneId zoneId;
+
+ public ScalarTypeZonedDateTime(JsonConfig.DateTime mode, ZoneId zoneId) {
super(mode, ZonedDateTime.class, false, Types.TIMESTAMP);
+ this.zoneId = zoneId;
}
@Override
@@ -44,7 +47,7 @@ public class ScalarTypeZonedDateTime extends ScalarTypeBaseDateTime jsonTester = new JsonTester<>(type);
jsonTester.test(now);
- ScalarTypeOffsetDateTime typeNanos = new ScalarTypeOffsetDateTime(JsonConfig.DateTime.NANOS);
+ ScalarTypeOffsetDateTime typeNanos = new ScalarTypeOffsetDateTime(JsonConfig.DateTime.NANOS, ZoneOffset.systemDefault());
jsonTester = new JsonTester<>(typeNanos);
jsonTester.test(now);
- ScalarTypeOffsetDateTime typeIso = new ScalarTypeOffsetDateTime(JsonConfig.DateTime.ISO8601);
+ ScalarTypeOffsetDateTime typeIso = new ScalarTypeOffsetDateTime(JsonConfig.DateTime.ISO8601, ZoneOffset.systemDefault());
jsonTester = new JsonTester<>(typeIso);
jsonTester.test(now);
}
@@ -81,7 +119,7 @@ public class ScalarTypeOffsetDateTimeTest {
@Test
public void isoJsonFormatParse() {
- ScalarTypeOffsetDateTime typeIso = new ScalarTypeOffsetDateTime(JsonConfig.DateTime.ISO8601);
+ ScalarTypeOffsetDateTime typeIso = new ScalarTypeOffsetDateTime(JsonConfig.DateTime.ISO8601, ZoneOffset.systemDefault());
OffsetDateTime now = OffsetDateTime.now();
String asJson = typeIso.toJsonISO8601(now);
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java
index ea501b273..168041723 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeZonedDateTimeTest.java
@@ -4,7 +4,11 @@ import io.ebean.config.JsonConfig;
import org.junit.Test;
import java.sql.Timestamp;
+import java.time.OffsetDateTime;
+import java.time.ZoneId;
+import java.time.ZoneOffset;
import java.time.ZonedDateTime;
+import java.util.TimeZone;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.Assert.*;
@@ -12,12 +16,12 @@ import static org.junit.Assert.*;
public class ScalarTypeZonedDateTimeTest {
- ScalarTypeZonedDateTime type = new ScalarTypeZonedDateTime(JsonConfig.DateTime.MILLIS);
+ ScalarTypeZonedDateTime type = new ScalarTypeZonedDateTime(JsonConfig.DateTime.MILLIS, ZoneId.systemDefault());
ZonedDateTime warmUp = ZonedDateTime.now();
@Test
- public void testConvertToMillis() throws Exception {
+ public void testConvertToMillis() {
warmUp.hashCode();
@@ -29,7 +33,7 @@ public class ScalarTypeZonedDateTimeTest {
}
@Test
- public void testConvertFromTimestamp() throws Exception {
+ public void testConvertFromTimestamp() {
Timestamp now = new Timestamp(System.currentTimeMillis());
@@ -39,6 +43,41 @@ public class ScalarTypeZonedDateTimeTest {
assertEquals(now, timestamp);
}
+ @Test
+ public void convertFromInstant_with_UTC_expect_matchingZoneOffset() {
+ final TimeZone timeZoneToUse = TimeZone.getTimeZone("UTC");
+ final ZoneOffset expectedZoneOffset = ZoneOffset.UTC;
+
+ convertFromInstantWithConfiguredTimeZone(timeZoneToUse, expectedZoneOffset);
+ }
+
+ @Test
+ public void convertFromInstant_with_EST_expect_matchingZoneOffset() {
+ final TimeZone timeZoneToUse = TimeZone.getTimeZone("EST");
+ final ZoneOffset expectedOffset = OffsetDateTime.now(timeZoneToUse.toZoneId()).getOffset();
+
+ convertFromInstantWithConfiguredTimeZone(timeZoneToUse, expectedOffset);
+ }
+
+ private void convertFromInstantWithConfiguredTimeZone(TimeZone timeZoneToUse, ZoneOffset expectedZoneOffset) {
+ TimeZone previous = TimeZone.getDefault();
+ try {
+ OffsetDateTime dateTime = OffsetDateTime.parse("2021-01-01T00:00:00+11:00");
+
+ // test ScalarTypeOffsetDateTime with the configured timeZone to use
+ ScalarTypeZonedDateTime type = new ScalarTypeZonedDateTime(JsonConfig.DateTime.MILLIS, timeZoneToUse.toZoneId());
+
+ // effectively we desire to ignore the system timezone and use the configured one
+ TimeZone.setDefault(timeZoneToUse);
+
+ final ZonedDateTime zonedDateTime = type.convertFromInstant(dateTime.toInstant());
+
+ assertEquals(expectedZoneOffset, zonedDateTime.getOffset());
+
+ } finally {
+ TimeZone.setDefault(previous);
+ }
+ }
@Test
public void testToJdbcType() throws Exception {
@@ -68,11 +107,11 @@ public class ScalarTypeZonedDateTimeTest {
JsonTester jsonTester = new JsonTester<>(type);
jsonTester.test(now);
- ScalarTypeZonedDateTime typeNanos = new ScalarTypeZonedDateTime(JsonConfig.DateTime.NANOS);
+ ScalarTypeZonedDateTime typeNanos = new ScalarTypeZonedDateTime(JsonConfig.DateTime.NANOS, ZoneId.systemDefault());
jsonTester = new JsonTester<>(typeNanos);
jsonTester.test(now);
- ScalarTypeZonedDateTime typeIso = new ScalarTypeZonedDateTime(JsonConfig.DateTime.ISO8601);
+ ScalarTypeZonedDateTime typeIso = new ScalarTypeZonedDateTime(JsonConfig.DateTime.ISO8601, ZoneId.systemDefault());
jsonTester = new JsonTester<>(typeIso);
jsonTester.test(now);
}
@@ -80,7 +119,7 @@ public class ScalarTypeZonedDateTimeTest {
@Test
public void toJsonISO8601() {
- ScalarTypeZonedDateTime typeIso = new ScalarTypeZonedDateTime(JsonConfig.DateTime.ISO8601);
+ ScalarTypeZonedDateTime typeIso = new ScalarTypeZonedDateTime(JsonConfig.DateTime.ISO8601, ZoneId.systemDefault());
ZonedDateTime now = ZonedDateTime.now();
String asJson = typeIso.toJsonISO8601(now);
From 3d4de4dee5dec407187f2fa53daba6d9413a929a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20P=C3=B6hler?=
Date: Fri, 16 Jul 2021 15:17:04 +0200
Subject: [PATCH 03/87] FIX TestRawSqlService and TestRawSqlBuilder
---
.../java/io/ebeaninternal/server/rawsql/DRawSqlService.java | 1 -
.../io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java | 6 ++----
2 files changed, 2 insertions(+), 5 deletions(-)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlService.java b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlService.java
index 7c27264a8..5a405dbc4 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlService.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlService.java
@@ -49,7 +49,6 @@ public class DRawSqlService implements SpiRawSqlService {
if (ret.containsKey(name)) {
name = combine(meta.getSchemaName(i), meta.getTableName(i), name);
}
- ret.put(name, resultSet.getObject(i));
// convert (C/B)LOBs to java objects.
// A java.sql.Clob depends on an open connection, so storing this object in a map
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java b/ebean-core/src/test/java/io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java
index 0fa4c746e..8d4feeaf9 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/rawsql/TestRawSqlBuilder.java
@@ -21,7 +21,6 @@ import org.tests.model.rawsql.ERawSqlAggBean;
import javax.sql.DataSource;
import java.nio.charset.StandardCharsets;
-import java.sql.Blob;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
@@ -327,11 +326,10 @@ public class TestRawSqlBuilder extends BaseTestCase {
pfc.setContent(bytes);
DB.save(pfc);
- final String sql = "select content from persistent_file_content where id = ?";
-
List rows = new ArrayList<>();
final DataSourceConfig config = ((DefaultServer) DB.getDefault()).getServerConfig().getDataSourceConfig();
+ final String sql = "select content from persistent_file_content where id = ?";
try (Connection connection = DriverManager.getConnection(config.getUrl(), config.getUsername(), config.getPassword());
PreparedStatement stmt = connection.prepareStatement(sql)) {
stmt.setLong(1, pfc.getId());
@@ -344,7 +342,7 @@ public class TestRawSqlBuilder extends BaseTestCase {
}
assertThat(rows).hasSize(1);
- assertThat(((Blob) rows.get(0).get("content")).getBytes(0, bytes.length)).isEqualTo(bytes);
+ assertThat(rows.get(0).get("content")).isEqualTo(bytes);
}
}
From f26e4b5381265f4a3c76d762f6ac82bd8eb3c8cf Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 22 Jul 2021 12:37:42 +1200
Subject: [PATCH 04/87] Bump jedis to 3.6.3 (from 3.6.1)
---
ebean-redis/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml
index 13e5695b8..404e06e7c 100644
--- a/ebean-redis/pom.xml
+++ b/ebean-redis/pom.xml
@@ -16,7 +16,7 @@
redis.clientsjedis
- 3.6.1
+ 3.6.3
From 0baa3a0eacdd29a02ae4034b6901fbf23f3c39f5 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 22 Jul 2021 16:38:28 +1200
Subject: [PATCH 05/87] #2270 - ebean-agent enhancement NPE with
MappedSuperclass with no properties that uses named database
---
ebean-bom/pom.xml | 2 +-
ebean-core/pom.xml | 2 +-
.../ebeaninternal/server/deploy/TestNotEnhancedMappedSuper.java | 2 +-
ebean-ddl-generator/pom.xml | 2 +-
kotlin-querybean-generator/pom.xml | 2 +-
5 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index 446c823f2..b08eb172f 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -19,7 +19,7 @@
4.17.012.9.0
- 12.9.1
+ 12.10.0
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index 5febb1ea6..e5670c75b 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -302,7 +302,7 @@
io.ebeanebean-maven-plugin
- 12.9.1
+ 12.10.0test
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestNotEnhancedMappedSuper.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestNotEnhancedMappedSuper.java
index 012c13c39..014ddb4b6 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestNotEnhancedMappedSuper.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/TestNotEnhancedMappedSuper.java
@@ -33,7 +33,7 @@ public class TestNotEnhancedMappedSuper extends BaseTestCase {
NotEnhancedMappedSuper mappedSuper = new NotEnhancedMappedSuper();
boolean enhanced = (mappedSuper instanceof EntityBean);
- Assert.assertFalse(enhanced);
+ Assert.assertTrue(enhanced);
}
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index 2c7df7a5d..8641ae080 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -76,7 +76,7 @@
io.ebeanebean-maven-plugin
- 12.9.1
+ 12.10.0test
diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml
index a4b14ff53..2c872df20 100644
--- a/kotlin-querybean-generator/pom.xml
+++ b/kotlin-querybean-generator/pom.xml
@@ -145,7 +145,7 @@
io.ebeanebean-maven-plugin
- 12.9.1
+ 12.10.0test
From a8456f90db608a38c08d9638fc322d20381c9b79 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 22 Jul 2021 16:46:57 +1200
Subject: [PATCH 06/87] Bump ebean-agent version to 2.10.0
---
ebean-bom/pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index b08eb172f..096fe1a6b 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -18,7 +18,7 @@
12.4.04.17.0
- 12.9.0
+ 12.10.012.10.0
From 492bb98e0ef0054059e869badba20987b1786cbf Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 22 Jul 2021 17:12:06 +1200
Subject: [PATCH 07/87] #2269 - findSingleAttributeList does not filter
soft-deleted record
---
.../server/query/CQueryBuilder.java | 6 +++
.../tests/softdelete/TestSoftDeleteBasic.java | 46 +++++++++++++++++++
2 files changed, 52 insertions(+)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java
index 1162e914d..41439e4b6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java
@@ -189,6 +189,12 @@ class CQueryBuilder {
SpiQuery> query = request.getQuery();
query.setSingleAttribute();
+ if (!query.isIncludeSoftDeletes()) {
+ BeanDescriptor> desc = request.getBeanDescriptor();
+ if (desc.isSoftDelete()) {
+ query.addSoftDeletePredicate(desc.getSoftDeletePredicate(alias(query.getAlias())));
+ }
+ }
CQueryPredicates predicates = new CQueryPredicates(binder, request);
CQueryPlan queryPlan = request.getQueryPlan();
diff --git a/ebean-core/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java b/ebean-core/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java
index 1dfec06c4..3364417b9 100644
--- a/ebean-core/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java
+++ b/ebean-core/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java
@@ -58,6 +58,52 @@ public class TestSoftDeleteBasic extends BaseTestCase {
}
+ @Test
+ public void findSingleAttribute() {
+
+ EBasicSoftDelete bean = new EBasicSoftDelete();
+ bean.setName("findSingleAttribute");
+ DB.save(bean);
+
+ LoggedSqlCollector.start();
+
+ final String name0 = DB.find(EBasicSoftDelete.class)
+ .select("name")
+ .where().eq("name", "findSingleAttribute")
+ .findSingleAttribute();
+
+ List sql0 = LoggedSqlCollector.current();
+ assertThat(sql0.get(0)).contains("where t0.name = ? and t0.deleted =");
+ assertThat(name0).isEqualTo("findSingleAttribute");
+
+ // now soft delete the bean
+ DB.delete(bean);
+ List sqlUpdate = LoggedSqlCollector.current();
+ assertThat(sqlUpdate.get(0)).contains("update ebasic_sdchild set");
+
+ // use setIncludeSoftDeletes
+ final String name1 = DB.find(EBasicSoftDelete.class)
+ .select("name")
+ .where().eq("name", "findSingleAttribute")
+ .setIncludeSoftDeletes()
+ .findSingleAttribute();
+
+ List sql1 = LoggedSqlCollector.current();
+ assertThat(sql1.get(0)).doesNotContain(" and t0.deleted =");
+ assertThat(name1).isEqualTo("findSingleAttribute");
+
+
+ // not using setIncludeSoftDeletes, so don't find it
+ final String name2 = DB.find(EBasicSoftDelete.class)
+ .select("name")
+ .where().eq("name", "findSingleAttribute")
+ .findSingleAttribute();
+
+ List sql2 = LoggedSqlCollector.stop();
+ assertThat(sql2.get(0)).contains(" and t0.deleted =");
+ assertThat(name2).isNull();
+ }
+
@Test
public void testFindIdsWhenIncludeSoftDeletedChlld() {
From 1642833fdb9cfac3596e8fee3d04ddc3ec11949b Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 22 Jul 2021 18:56:02 +1200
Subject: [PATCH 08/87] Improve javadoc on TQRootBean and generated javadoc on
query bean forFetchGroup() method
---
.../java/io/ebean/typequery/TQRootBean.java | 36 ++++++++++++++-----
.../generator/SimpleQueryBeanWriter.java | 18 ++++++++++
2 files changed, 45 insertions(+), 9 deletions(-)
diff --git a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
index 728184cf4..9803da8b1 100644
--- a/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
+++ b/ebean-querybean/src/main/java/io/ebean/typequery/TQRootBean.java
@@ -213,20 +213,38 @@ public abstract class TQRootBean {
/**
* Set a FetchGroup to control what part of the object graph is loaded.
*
- * This is an alternative to using select() and fetch() providing a nice clean separation
- * between what a query should load and the query predicates.
- *
+ * FetchGroup is immutable and threadsafe. We expect to create and store
+ * FetchGroup to a static final field and reuse the instance.
+ *
+ * FetchGroup is an alternative to using select() and fetch() providing a nice
+ * clean separation between what a query should load and the query predicates.
*
*
{@code
+ *
+ * static final FetchGroup fetchGroup =
+ * FetchGroup.of(Customer.class)
+ * .select("name, status")
+ * .fetch("contacts", "firstName, lastName, email")
+ * .build();
+ *
+ * List customers = new QCustomer()
* .select(fetchGroup)
* .findList();
*
diff --git a/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleQueryBeanWriter.java b/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleQueryBeanWriter.java
index 78fd99779..3d55fd1ad 100644
--- a/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleQueryBeanWriter.java
+++ b/querybean-generator/src/main/java/io/ebean/querybean/generator/SimpleQueryBeanWriter.java
@@ -188,6 +188,24 @@ class SimpleQueryBeanWriter {
writer.eol();
writer.append(" /**").eol();
writer.append(" * Return a query bean used to build a FetchGroup.").eol();
+ writer.append(" *
").eol();
+ writer.append(" * FetchGroups are immutable and threadsafe and can be used by many").eol();
+ writer.append(" * concurrent queries. We typically stored FetchGroup as a static final field.").eol();
+ writer.append(" *
").eol();
+ writer.append(" * Example creating and using a FetchGroup.").eol();
+ writer.append(" *
+
+ compile
+ compile
+
+ compile
+
+
+
+ src/main/java
+ target/generated-sources/kapt/test
+ target/generated-sources/kaptKotlin/test
+
+
+ 1.8
-
@@ -133,6 +147,13 @@
testCompile
+
+ compile
+ compile
+
+ compile
+
+ 1.8
From 03004452ac7e0dc08c897e1807139e976bc5f9fe Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 30 Jul 2021 14:53:32 +1200
Subject: [PATCH 40/87] ebean.mf set back to synthetic: true
---
ebean-core/src/test/resources/ebean.mf | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/ebean-core/src/test/resources/ebean.mf b/ebean-core/src/test/resources/ebean.mf
index 7d34f1de5..fc2fd6902 100644
--- a/ebean-core/src/test/resources/ebean.mf
+++ b/ebean-core/src/test/resources/ebean.mf
@@ -3,5 +3,5 @@ profile-location: true
entity-packages: org,misc
transactional-packages: org
querybean-packages: none
-synthetic: false
+synthetic: true
From c43e2e695686d861f8d4982f52f28f73bd27d99f Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 30 Jul 2021 15:34:54 +1200
Subject: [PATCH 41/87] Update TestDbJson_Jackson3
---
.../org/tests/json/TestDbJson_Jackson3.java | 62 +++++++++++++++++++
.../tests/model/json/EBasicJsonJackson3.java | 21 ++++++-
2 files changed, 80 insertions(+), 3 deletions(-)
diff --git a/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java b/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
index 2f74be109..145790457 100644
--- a/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
+++ b/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
@@ -164,4 +164,66 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
BeanState state = DB.getBeanState(found);
assertThat(state.getChangedProps()).containsExactlyInAnyOrder("beanList");
}
+
+ @Test
+ public void update_with_differentDbJsonSettings() {
+ PlainBeanDirtyAware contentBean1 = new PlainBeanDirtyAware("x", 42);
+ PlainBeanDirtyAware contentBean2 = new PlainBeanDirtyAware("y", 43);
+ PlainBeanDirtyAware contentBean3 = new PlainBeanDirtyAware("z", 44);
+
+ EBasicJsonJackson3 bean = new EBasicJsonJackson3();
+ bean.setName("b1");
+ bean.setPlainValue(contentBean1);
+ bean.setPlainValue2(contentBean2);
+ bean.setPlainValue3(contentBean3);
+
+ BeanState state = DB.getBeanState(bean);
+ // a new bean is not considered as dirty (thus have no changed props)
+ assertThat(state.isDirty()).isFalse();
+ assertThat(state.isNewOrDirty()).isTrue();
+ assertThat(state.getChangedProps()).isEmpty();
+
+ bean.save();
+
+ bean = DB.find(EBasicJsonJackson3.class, bean.getId());
+ state = DB.getBeanState(bean);
+ // a fresh loaded bean is also not considered as dirty
+ assertThat(state.isDirty()).isFalse();
+ assertThat(state.isNewOrDirty()).isFalse();
+ assertThat(state.getChangedProps()).isEmpty();
+
+ bean.getPlainValue().setName("a"); // has keepSource=true
+
+ assertThat(state.isDirty()).isTrue();
+ assertThat(state.getChangedProps()).containsExactly("plainValue");
+
+ bean.getPlainValue2().setName("b");
+ assertThat(state.getChangedProps()).containsExactlyInAnyOrder("plainValue", "plainValue2");
+
+ bean.getPlainValue3().setName("c"); // has dirtyDetection = false
+
+ Map dirtyValues = state.getDirtyValues();
+ assertThat(dirtyValues).hasSize(2).containsKeys("plainValue", "plainValue2");
+
+ assertThat(dirtyValues.get("plainValue")).hasToString("name:a,name:x"); // SOURCE -> origValue present
+ assertThat(dirtyValues.get("plainValue2")).hasToString("name:b,null"); // without SOURCE no origValue present
+
+ LoggedSql.start();
+ bean.save();
+ List sql = LoggedSql.collect();
+ assertThat(sql.get(0)).contains("update ebasic_json_jackson3 set plain_value=?, plain_value2=?, version=? where id=?");
+
+ bean = DB.find(EBasicJsonJackson3.class, bean.getId());
+ LoggedSql.collect(); // ignore the select
+ assertThat(bean.getPlainValue().getName()).isEqualTo("a");
+ assertThat(bean.getPlainValue2().getName()).isEqualTo("b");
+ assertThat(bean.getPlainValue3().getName()).isEqualTo("z"); // value is not updated
+
+ bean.getPlainValue3().setName("c");
+ bean.getPlainValue3().setMarkedDirty(true); // This is ignored because it is MutationDetection.NONE
+ bean.save();
+ // no update as plainValue3 has MutationDetection.NONE (ModifyAwareType = NONE isn't an expected combination to me)
+ assertThat(LoggedSql.collect()).isEmpty();
+ LoggedSql.stop();
+ }
}
diff --git a/ebean-core/src/test/java/org/tests/model/json/EBasicJsonJackson3.java b/ebean-core/src/test/java/org/tests/model/json/EBasicJsonJackson3.java
index 45375b516..cee12d9e7 100644
--- a/ebean-core/src/test/java/org/tests/model/json/EBasicJsonJackson3.java
+++ b/ebean-core/src/test/java/org/tests/model/json/EBasicJsonJackson3.java
@@ -2,11 +2,15 @@ package org.tests.model.json;
import io.ebean.Model;
import io.ebean.annotation.DbJson;
+import io.ebean.annotation.MutationDetection;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Version;
+import static io.ebean.annotation.MutationDetection.NONE;
+import static io.ebean.annotation.MutationDetection.SOURCE;
+
@Entity
public class EBasicJsonJackson3 extends Model {
@@ -15,12 +19,15 @@ public class EBasicJsonJackson3 extends Model {
String name;
- @DbJson(length = 500)
+ @DbJson(length = 500, mutationDetection = SOURCE)
PlainBeanDirtyAware plainValue;
@DbJson(length = 500)
PlainBeanDirtyAware plainValue2;
-
+
+ @DbJson(length = 500, mutationDetection = NONE)
+ PlainBeanDirtyAware plainValue3;
+
@Version
long version;
@@ -55,7 +62,15 @@ public class EBasicJsonJackson3 extends Model {
public void setPlainValue2(PlainBeanDirtyAware plainValue2) {
this.plainValue2 = plainValue2;
}
-
+
+ public PlainBeanDirtyAware getPlainValue3() {
+ return plainValue3;
+ }
+
+ public void setPlainValue3(PlainBeanDirtyAware plainValue3) {
+ this.plainValue3 = plainValue3;
+ }
+
public long getVersion() {
return version;
}
From ea741d01699d107f7f88fed1057c91abe2d578c4 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 30 Jul 2021 15:41:52 +1200
Subject: [PATCH 42/87] Update TestDbJson_Jackson3 with comments
---
.../src/test/java/org/tests/json/TestDbJson_Jackson3.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java b/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
index 145790457..ac10f2a16 100644
--- a/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
+++ b/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
@@ -66,7 +66,7 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
found.setName("b1-mod2");
found.getPlainValue().setName("b");
- found.getPlainValue().setMarkedDirty(true);
+ // found.getPlainValue().setMarkedDirty(true); // Irrelevant for SOURCE or HASH based mutation detection
found.save();
@@ -192,7 +192,7 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
assertThat(state.isNewOrDirty()).isFalse();
assertThat(state.getChangedProps()).isEmpty();
- bean.getPlainValue().setName("a"); // has keepSource=true
+ bean.getPlainValue().setName("a"); // has SOURCE
assertThat(state.isDirty()).isTrue();
assertThat(state.getChangedProps()).containsExactly("plainValue");
@@ -200,7 +200,7 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
bean.getPlainValue2().setName("b");
assertThat(state.getChangedProps()).containsExactlyInAnyOrder("plainValue", "plainValue2");
- bean.getPlainValue3().setName("c"); // has dirtyDetection = false
+ bean.getPlainValue3().setName("c"); // has mutationDetection = NONE
Map dirtyValues = state.getDirtyValues();
assertThat(dirtyValues).hasSize(2).containsKeys("plainValue", "plainValue2");
From ca1636ff9edb0c22177875af8d5f26643ccba83c Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 30 Jul 2021 17:16:05 +1200
Subject: [PATCH 43/87] Fix when json/jackson bean inserted as null and not
changed
Expectation is that it is not included in update (still null, no change)
---
.../server/deploy/BeanPropertyJsonMapper.java | 3 +++
.../model/json/TestJacksonPlainBean.java | 25 +++++++++++++++++++
2 files changed, 28 insertions(+)
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyJsonMapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyJsonMapper.java
index c9280c8c0..bc7392287 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyJsonMapper.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyJsonMapper.java
@@ -57,6 +57,9 @@ public class BeanPropertyJsonMapper extends BeanProperty {
final String json = scalarType.format(value);
final MutableValueInfo oldHash = ebi.mutableInfo(propertyIndex);
if (oldHash == null) {
+ if (value == null) {
+ return false; // no change, still null
+ }
ebi.mutableNext(propertyIndex, next(json));
return true;
}
diff --git a/ebean-core/src/test/java/org/tests/model/json/TestJacksonPlainBean.java b/ebean-core/src/test/java/org/tests/model/json/TestJacksonPlainBean.java
index c0fe82b26..24f0a35f8 100644
--- a/ebean-core/src/test/java/org/tests/model/json/TestJacksonPlainBean.java
+++ b/ebean-core/src/test/java/org/tests/model/json/TestJacksonPlainBean.java
@@ -10,6 +10,31 @@ import static org.assertj.core.api.Assertions.assertThat;
public class TestJacksonPlainBean {
+ @Test
+ public void insertNullStayNull() {
+
+ // insert with jackson beans as null
+ EBasicPlain bean = new EBasicPlain();
+ bean.setAttr("n0");
+ DB.save(bean);
+
+ LoggedSqlCollector.start();
+ bean.setAttr("n1");
+ DB.save(bean);
+ expectedSql(0, "update ebasic_plain set attr=?, version=? where id=? and version=?");
+
+ bean.setPlainBean(new PlainBean("x", 1));
+ DB.save(bean);
+ expectedSql(0, "update ebasic_plain set plain_bean=?, version=? where id=? and version=?");
+
+ final EBasicPlain found = DB.find(EBasicPlain.class, bean.getId());
+ found.setAttr("n2");
+ DB.save(found);
+ expectedSql(1, "update ebasic_plain set attr=?, version=? where id=? and version=?");
+
+ LoggedSqlCollector.stop();
+ }
+
@Test
public void insertUpdate() {
From 7bd7640c631e586c953439ec60104e66baa52330 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 30 Jul 2021 17:18:28 +1200
Subject: [PATCH 44/87] Update test TestDbJson_Jackson3 showing HASH mode is
used even on ModifyAwareType
---
.../src/test/java/org/tests/json/TestDbJson_Jackson3.java | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java b/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
index ac10f2a16..bc89a0eb5 100644
--- a/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
+++ b/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
@@ -224,6 +224,12 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
bean.save();
// no update as plainValue3 has MutationDetection.NONE (ModifyAwareType = NONE isn't an expected combination to me)
assertThat(LoggedSql.collect()).isEmpty();
+
+ bean.getPlainValue2().setName("b2"); // effectively HASH mode mutation detection
+ bean.save();
+ sql = LoggedSql.collect();
+ assertThat(sql.get(0)).contains("update ebasic_json_jackson3 set plain_value2=?, version=? where id=? and version=?");
+
LoggedSql.stop();
}
}
From d9f7531e81ee29459aab29386cfb6eb34baf637d Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 30 Jul 2021 17:26:46 +1200
Subject: [PATCH 45/87] Tidy tests only - TestDbJson_Jackson3
TestJacksonPlainBean
---
.../org/tests/json/TestDbJson_Jackson3.java | 33 ++++++++-----------
.../model/json/TestJacksonPlainBean.java | 14 ++++----
2 files changed, 19 insertions(+), 28 deletions(-)
diff --git a/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java b/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
index bc89a0eb5..c1cc3c40d 100644
--- a/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
+++ b/ebean-core/src/test/java/org/tests/json/TestDbJson_Jackson3.java
@@ -59,20 +59,15 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
LoggedSql.start();
found.save();
-
- List sql = LoggedSql.collect();
- assertThat(sql).hasSize(1);
- assertThat(sql.get(0)).contains("update ebasic_json_jackson3 set name=?, version=? where id=? and version=?");
+ expectedSql(0, "update ebasic_json_jackson3 set name=?, version=? where id=? and version=?");
found.setName("b1-mod2");
found.getPlainValue().setName("b");
// found.getPlainValue().setMarkedDirty(true); // Irrelevant for SOURCE or HASH based mutation detection
found.save();
-
- sql = LoggedSql.stop();
- assertThat(sql).hasSize(1);
- assertThat(sql.get(0)).contains("update ebasic_json_jackson3 set name=?, plain_value=?, version=? where id=? and version=?");
+ expectedSql(0, "update ebasic_json_jackson3 set name=?, plain_value=?, version=? where id=? and version=?");
+ LoggedSql.stop();
final EBasicJsonJackson3 found2 = DB.find(EBasicJsonJackson3.class, bean.getId());
@@ -112,20 +107,16 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
LoggedSql.start();
DB.save(found);
- List sql = LoggedSql.stop();
- assertThat(sql).hasSize(1);
// plain_bean=?, no longer included with MD5 dirty detection
- assertThat(sql.get(0)).contains("update ebasic_json_list set name=?, bean_list=?, version=? where id=?");
+ expectedSql(0, "update ebasic_json_list set name=?, bean_list=?, version=? where id=?");
assertThat(EBasicJsonListPersistController.updatedValues.entrySet())
.extracting(Map.Entry::toString)
.containsExactlyInAnyOrder("beanList=null,[name:a]","name=p1-mod,p1","version=2,1");
-
assertThat(DB.getBeanState(found).isDirty()).isFalse();
found.getPlainBean().setName("b");
-
assertThat(DB.getBeanState(found).isDirty()).isTrue();
state = DB.getBeanState(found);
@@ -138,14 +129,14 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
LoggedSql.start();
DB.save(found);
- sql = LoggedSql.stop();
- assertThat(sql).hasSize(1);
// plain_bean=?, no longer included with MD5 dirty detection
- assertThat(sql.get(0)).contains("update ebasic_json_list set plain_bean=?, version=? where id=?");
+ expectedSql(0, "update ebasic_json_list set plain_bean=?, version=? where id=?");
assertThat(EBasicJsonListPersistController.updatedValues.entrySet())
.extracting(Map.Entry::toString)
.containsExactlyInAnyOrder("plainBean=name:b,name:a", "version=3,2");
+
+ LoggedSql.stop();
}
@Test
@@ -210,8 +201,7 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
LoggedSql.start();
bean.save();
- List sql = LoggedSql.collect();
- assertThat(sql.get(0)).contains("update ebasic_json_jackson3 set plain_value=?, plain_value2=?, version=? where id=?");
+ expectedSql(0, "update ebasic_json_jackson3 set plain_value=?, plain_value2=?, version=? where id=?");
bean = DB.find(EBasicJsonJackson3.class, bean.getId());
LoggedSql.collect(); // ignore the select
@@ -227,9 +217,12 @@ public class TestDbJson_Jackson3 extends BaseTestCase {
bean.getPlainValue2().setName("b2"); // effectively HASH mode mutation detection
bean.save();
- sql = LoggedSql.collect();
- assertThat(sql.get(0)).contains("update ebasic_json_jackson3 set plain_value2=?, version=? where id=? and version=?");
+ expectedSql(0, "update ebasic_json_jackson3 set plain_value2=?, version=? where id=? and version=?");
LoggedSql.stop();
}
+
+ private void expectedSql(int i, String s) {
+ assertThat(LoggedSql.collect().get(i)).contains(s);
+ }
}
diff --git a/ebean-core/src/test/java/org/tests/model/json/TestJacksonPlainBean.java b/ebean-core/src/test/java/org/tests/model/json/TestJacksonPlainBean.java
index 24f0a35f8..b2237731d 100644
--- a/ebean-core/src/test/java/org/tests/model/json/TestJacksonPlainBean.java
+++ b/ebean-core/src/test/java/org/tests/model/json/TestJacksonPlainBean.java
@@ -1,11 +1,9 @@
package org.tests.model.json;
import io.ebean.DB;
-import org.ebeantest.LoggedSqlCollector;
+import io.ebeantest.LoggedSql;
import org.junit.Test;
-import java.util.List;
-
import static org.assertj.core.api.Assertions.assertThat;
public class TestJacksonPlainBean {
@@ -18,7 +16,7 @@ public class TestJacksonPlainBean {
bean.setAttr("n0");
DB.save(bean);
- LoggedSqlCollector.start();
+ LoggedSql.start();
bean.setAttr("n1");
DB.save(bean);
expectedSql(0, "update ebasic_plain set attr=?, version=? where id=? and version=?");
@@ -32,14 +30,14 @@ public class TestJacksonPlainBean {
DB.save(found);
expectedSql(1, "update ebasic_plain set attr=?, version=? where id=? and version=?");
- LoggedSqlCollector.stop();
+ LoggedSql.stop();
}
@Test
public void insertUpdate() {
DB.getDefault();
- LoggedSqlCollector.start();
+ LoggedSql.start();
PlainBean content = new PlainBean("foo", 42);
EBasicPlain bean = new EBasicPlain();
@@ -87,11 +85,11 @@ public class TestJacksonPlainBean {
DB.save(found);
expectedSql(0, "update ebasic_plain set plain_bean2=?, version=? where id=? and version=?");
- LoggedSqlCollector.stop();
+ LoggedSql.stop();
}
private void expectedSql(int i, String s) {
- assertThat(LoggedSqlCollector.current().get(i)).contains(s);
+ assertThat(LoggedSql.collect().get(i)).contains(s);
}
}
From ceea705a76a8eb72132c6ec1019e2eb833f2e166 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 30 Jul 2021 20:20:03 +1200
Subject: [PATCH 46/87] Treat json Jackson collections the same wrt mutation
detection
---
.../java/io/ebean/config/DatabaseConfig.java | 27 -----
.../server/type/DefaultTypeManager.java | 6 +-
.../server/type/InitObjectMapper.java | 22 ++++
.../type/ScalarTypeJsonObjectMapper.java | 102 ++----------------
.../server/type/TypeJsonManager.java | 46 +-------
.../io/ebean/config/ServerConfigTest.java | 4 -
.../java/org/tests/json/TestDbJson_List.java | 14 +--
.../org/tests/model/json/EBasicJsonList.java | 1 +
8 files changed, 41 insertions(+), 181 deletions(-)
create mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/type/InitObjectMapper.java
diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
index bc3ae587f..476007ebe 100644
--- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
@@ -193,12 +193,6 @@ public class DatabaseConfig {
*/
private JsonConfig.Include jsonInclude = JsonConfig.Include.ALL;
- /**
- * When true then by default DbJson beans are assumed to be dirty.
- * I believe we want to change this default to false in the future.
- */
- private boolean jsonDirtyByDefault = true;
-
/**
* The database platform name. Used to imply a DatabasePlatform to use.
*/
@@ -743,26 +737,6 @@ public class DatabaseConfig {
this.jsonInclude = jsonInclude;
}
- /**
- * Return true if DbJson beans are assumed dirty by default.
- *
- * That is, when true beans that do not implement ModifyAwareType are by
- * default assumed to be dirty and included in updates.
- */
- public boolean isJsonDirtyByDefault() {
- return jsonDirtyByDefault;
- }
-
- /**
- * Set to false if we want DbJson beans to not be assumed to be dirty.
- *
- * That is, when true beans that do not implement ModifyAwareType are by
- * default assumed to be dirty and included in updates.
- */
- public void setJsonDirtyByDefault(boolean jsonDirtyByDefault) {
- this.jsonDirtyByDefault = jsonDirtyByDefault;
- }
-
/**
* Return the name of the Database.
*/
@@ -2935,7 +2909,6 @@ public class DatabaseConfig {
jsonInclude = p.getEnum(JsonConfig.Include.class, "jsonInclude", jsonInclude);
jsonDateTime = p.getEnum(JsonConfig.DateTime.class, "jsonDateTime", jsonDateTime);
jsonDate = p.getEnum(JsonConfig.Date.class, "jsonDate", jsonDate);
- jsonDirtyByDefault = p.getBoolean("jsonDirtyByDefault", jsonDirtyByDefault);
runMigration = p.getBoolean("migration.run", runMigration);
ddlGenerate = p.getBoolean("ddl.generate", ddlGenerate);
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 28999e838..8ffb15372 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
@@ -134,7 +134,7 @@ public final class DefaultTypeManager implements TypeManager {
this.postgres = isPostgres(config.getDatabasePlatform());
this.objectMapperPresent = config.getClassLoadConfig().isJacksonObjectMapperPresent();
this.objectMapper = (objectMapperPresent) ? initObjectMapper(config) : null;
- this.jsonManager = (objectMapperPresent) ? new TypeJsonManager(postgres, objectMapper, config.isJsonDirtyByDefault()) : null;
+ this.jsonManager = (objectMapperPresent) ? new TypeJsonManager(postgres, objectMapper) : null;
this.extraTypeFactory = new DefaultTypeFactory(config);
this.arrayTypeListFactory = arrayTypeListFactory(config.getDatabasePlatform());
this.arrayTypeSetFactory = arrayTypeSetFactory(config.getDatabasePlatform());
@@ -556,7 +556,7 @@ public final class DefaultTypeManager implements TypeManager {
// no override or further mapping required
return scalarType;
}
- ScalarTypeEnum> scalarEnum = (ScalarTypeEnum>)scalarType;
+ ScalarTypeEnum> scalarEnum = (ScalarTypeEnum>) scalarType;
if (scalarEnum != null && !scalarEnum.isOverrideBy(type)) {
if (type != null && !scalarEnum.isCompatible(type)) {
throw new IllegalStateException("Error mapping Enum type:" + enumType + " It is mapped using 2 different modes when only one is supported (ORDINAL, STRING or an Ebean mapping)");
@@ -673,7 +673,7 @@ public final class DefaultTypeManager implements TypeManager {
private Object initObjectMapper(DatabaseConfig config) {
Object objectMapper = config.getObjectMapper();
if (objectMapper == null) {
- objectMapper = new ObjectMapper();
+ objectMapper = InitObjectMapper.init();
config.setObjectMapper(objectMapper);
}
return objectMapper;
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/InitObjectMapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/InitObjectMapper.java
new file mode 100644
index 000000000..90a86ec79
--- /dev/null
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/InitObjectMapper.java
@@ -0,0 +1,22 @@
+package io.ebeaninternal.server.type;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.databind.module.SimpleModule;
+
+import java.util.LinkedHashSet;
+import java.util.Set;
+
+/**
+ * Initialise the Jackson ObjectMapper.
+ */
+class InitObjectMapper {
+
+ /**
+ * Create and return the default ObjectMapper.
+ */
+ static Object init() {
+ SimpleModule module = new SimpleModule();
+ module.addAbstractTypeMapping(Set.class, LinkedHashSet.class);
+ return new ObjectMapper().registerModule(module);
+ }
+}
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 7fb3aa4b4..334f4b232 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
@@ -13,9 +13,6 @@ import io.ebean.core.type.DataReader;
import io.ebean.core.type.DocPropertyType;
import io.ebean.core.type.ScalarType;
import io.ebean.text.TextException;
-import io.ebeaninternal.json.ModifyAwareList;
-import io.ebeaninternal.json.ModifyAwareMap;
-import io.ebeaninternal.json.ModifyAwareSet;
import io.ebeaninternal.server.deploy.meta.DeployBeanProperty;
import javax.persistence.PersistenceException;
@@ -24,9 +21,6 @@ import java.io.DataOutput;
import java.io.IOException;
import java.sql.SQLException;
import java.sql.Types;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
/**
* Supports @DbJson properties using Jackson ObjectMapper.
@@ -38,25 +32,14 @@ class ScalarTypeJsonObjectMapper {
*/
static ScalarType> createTypeFor(TypeJsonManager jsonManager, DeployBeanProperty prop, int dbType, DocPropertyType docType) {
AnnotatedField field = (AnnotatedField) prop.getJacksonField();
- Class> type = field.getRawType();
-
MutationDetection mode = prop.getMutationDetection();
if (mode == MutationDetection.NONE) {
- return new NoMutationDetection(jsonManager, field, dbType, type);
+ return new NoMutationDetection(jsonManager, field, dbType, docType);
} else if (mode != MutationDetection.DEFAULT) {
- return new GenericObject(jsonManager, field, dbType, type);
- }
- if (Set.class.equals(type)) {
- return new OmSet(jsonManager, field, dbType, docType);
- }
- if (List.class.equals(type)) {
- return new OmList(jsonManager, field, dbType, docType);
- }
- if (Map.class.equals(type)) {
- return new OmMap(jsonManager, field, dbType);
+ return new GenericObject(jsonManager, field, dbType, docType);
}
prop.setMutationDetection(MutationDetection.HASH);
- return new GenericObject(jsonManager, field, dbType, type);
+ return new GenericObject(jsonManager, field, dbType, docType);
}
/**
@@ -64,8 +47,8 @@ class ScalarTypeJsonObjectMapper {
*/
private static class NoMutationDetection extends Base {
- NoMutationDetection(TypeJsonManager jsonManager, AnnotatedField field, int dbType, Class> rawType) {
- super(Object.class, jsonManager, field, dbType, DocPropertyType.OBJECT, rawType);
+ NoMutationDetection(TypeJsonManager jsonManager, AnnotatedField field, int dbType, DocPropertyType docType) {
+ super(Object.class, jsonManager, field, dbType, docType);
}
@Override
@@ -84,8 +67,8 @@ class ScalarTypeJsonObjectMapper {
*/
private static class GenericObject extends Base {
- GenericObject(TypeJsonManager jsonManager, AnnotatedField field, int dbType, Class> rawType) {
- super(Object.class, jsonManager, field, dbType, DocPropertyType.OBJECT, rawType);
+ GenericObject(TypeJsonManager jsonManager, AnnotatedField field, int dbType, DocPropertyType docType) {
+ super(Object.class, jsonManager, field, dbType, docType);
}
@Override
@@ -128,60 +111,6 @@ class ScalarTypeJsonObjectMapper {
}
}
- /**
- * Type for Sets wrapping the ObjectMapper Set as a ModifyAwareSet.
- */
- @SuppressWarnings("rawtypes")
- private static class OmSet extends Base {
-
- OmSet(TypeJsonManager jsonManager, AnnotatedField field, int dbType, DocPropertyType docType) {
- super(Set.class, jsonManager, field, dbType, docType);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public Set read(DataReader reader) throws SQLException {
- Set value = super.read(reader);
- return value == null ? null : new ModifyAwareSet(value);
- }
- }
-
- /**
- * Type for Lists wrapping the ObjectMapper List as a ModifyAwareList.
- */
- @SuppressWarnings("rawtypes")
- private static class OmList extends Base {
-
- OmList(TypeJsonManager jsonManager, AnnotatedField field, int dbType, DocPropertyType docType) {
- super(List.class, jsonManager, field, dbType, docType);
- }
-
- @Override
- @SuppressWarnings("unchecked")
- public List read(DataReader reader) throws SQLException {
- List value = super.read(reader);
- return value == null ? null : new ModifyAwareList(value);
- }
- }
-
- /**
- * Type for Map wrapping the ObjectMapper Map as a ModifyAwareMap.
- */
- @SuppressWarnings("rawtypes")
- private static class OmMap extends Base
*/
public void apply(Configuration configuration) {
-
DefaultTablespace defaultTablespace = configuration.getDefaultTablespace();
if (defaultTablespace != null) {
String tables = defaultTablespace.getTables();
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MIndex.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MIndex.java
index 976bde5f3..710241a69 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MIndex.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MIndex.java
@@ -13,8 +13,8 @@ import java.util.Objects;
*/
public class MIndex {
- private String tableName;
- private String indexName;
+ private final String tableName;
+ private final String indexName;
private String platforms;
private List columns = new ArrayList<>();
private boolean unique;
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java
index 82a687eb7..71faa1c44 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTable.java
@@ -48,67 +48,32 @@ public class MTable {
private static final Logger logger = LoggerFactory.getLogger(MTable.class);
- /**
- * Table name.
- */
private final String name;
-
- /**
- * The associated draft table.
- */
private MTable draftTable;
-
/**
* Marked true for draft tables. These need to have their FK references adjusted
* after all the draft tables have been identified.
*/
private boolean draft;
-
private PartitionMeta partitionMeta;
-
- /**
- * Primary key name.
- */
private String pkName;
-
- /**
- * Table comment.
- */
private String comment;
-
- /**
- * Tablespace to use.
- */
private String tablespace;
-
private String storageEngine;
-
- /**
- * Tablespace to use for indexes on this table.
- */
private String indexTablespace;
-
private IdentityMode identityMode;
-
- /**
- * If set to true this table should has history support.
- */
private boolean withHistory;
-
- /**
- * The columns on the table.
- */
- private Map columns = new LinkedHashMap<>();
+ private final Map columns = new LinkedHashMap<>();
/**
* Compound unique constraints.
*/
- private List uniqueConstraints = new ArrayList<>();
+ private final List uniqueConstraints = new ArrayList<>();
/**
* Compound foreign keys.
*/
- private List compoundKeys = new ArrayList<>();
+ private final List compoundKeys = new ArrayList<>();
/**
* Column name for the 'When created' column. This can be used for the initial effective start date when adding
@@ -121,7 +86,7 @@ public class MTable {
*/
private AddColumn addColumn;
- private List droppedColumns = new ArrayList<>();
+ private final List droppedColumns = new ArrayList<>();
public MTable(BeanDescriptor> descriptor) {
this.name = descriptor.getBaseTable();
@@ -153,18 +118,15 @@ public class MTable {
* later when creating the CreateTable object.
*/
public MTable createDraftTable() {
-
draftTable = new MTable(name + "_draft");
draftTable.draft = true;
draftTable.whenCreatedColumn = whenCreatedColumn;
// compoundKeys
// compoundUniqueConstraints
draftTable.identityMode = identityMode;
-
for (MColumn col : allColumns()) {
draftTable.addColumn(col.copyForDraft());
}
-
return draftTable;
}
@@ -239,7 +201,6 @@ public class MTable {
* Return the CreateTable migration for this table.
*/
public CreateTable createTable() {
-
CreateTable createTable = new CreateTable();
createTable.setName(name);
createTable.setPkName(pkName);
@@ -258,22 +219,18 @@ public class MTable {
if (draft) {
createTable.setDraft(Boolean.TRUE);
}
-
for (MColumn column : allColumns()) {
// filter out draftOnly columns from the base table
if (draft || !column.isDraftOnly()) {
createTable.getColumn().add(column.createColumn());
}
}
-
for (MCompoundForeignKey compoundKey : compoundKeys) {
createTable.getForeignKey().add(compoundKey.createForeignKey());
}
-
for (MCompoundUniqueConstraint constraint : uniqueConstraints) {
createTable.getUniqueConstraint().add(constraint.getUniqueConstraint());
}
-
return createTable;
}
@@ -281,7 +238,6 @@ public class MTable {
* Compare to another version of the same table to perform a diff.
*/
public void compare(ModelDiff modelDiff, MTable newTable) {
-
if (withHistory != newTable.withHistory) {
if (withHistory) {
DropHistoryTable dropHistoryTable = new DropHistoryTable();
@@ -308,14 +264,12 @@ public class MTable {
modelDiff.addTableComment(addTableComment);
}
-
compareCompoundKeys(modelDiff, newTable);
compareUniqueKeys(modelDiff, newTable);
}
private void compareColumns(ModelDiff modelDiff, MTable newTable) {
addColumn = null;
-
Map newColumnMap = newTable.getColumns();
// compare newColumns to existing columns (look for new and diff columns)
@@ -374,10 +328,10 @@ public class MTable {
currentKeys.removeAll(newTable.getUniqueConstraints());
newKeys.removeAll(getUniqueConstraints());
- for (MCompoundUniqueConstraint currentKey: currentKeys) {
+ for (MCompoundUniqueConstraint currentKey : currentKeys) {
modelDiff.addUniqueConstraint(currentKey.dropUniqueConstraint(name));
}
- for (MCompoundUniqueConstraint newKey: newKeys) {
+ for (MCompoundUniqueConstraint newKey : newKeys) {
modelDiff.addUniqueConstraint(newKey.addUniqueConstraint(name));
}
}
@@ -489,7 +443,6 @@ public class MTable {
}
public List allHistoryColumns(boolean includeDropped) {
-
List columnNames = new ArrayList<>(columns.size());
for (MColumn column : columns.values()) {
if (column.isIncludeInHistory()) {
@@ -595,7 +548,6 @@ public class MTable {
* Sometimes the case for a primaryKey that is also a foreign key.
*/
public MColumn addColumn(String dbCol, String columnDefn, boolean notnull) {
-
MColumn existingColumn = getColumn(dbCol);
if (existingColumn != null) {
if (notnull) {
@@ -613,7 +565,6 @@ public class MTable {
* Add a 'new column' to the AddColumn migration object.
*/
private void diffNewColumn(MColumn newColumn) {
-
if (addColumn == null) {
addColumn = new AddColumn();
addColumn.setTableName(name);
@@ -631,7 +582,6 @@ public class MTable {
* Add a 'drop column' to the diff.
*/
private void diffDropColumn(ModelDiff modelDiff, MColumn existingColumn) {
-
DropColumn dropColumn = new DropColumn();
dropColumn.setTableName(name);
dropColumn.setColumnName(existingColumn.getName());
@@ -640,7 +590,6 @@ public class MTable {
// table as well as the base table
dropColumn.setWithHistory(Boolean.TRUE);
}
-
modelDiff.addDropColumn(dropColumn);
}
@@ -661,7 +610,6 @@ public class MTable {
*
*/
public void checkDuplicateForeignKeys() {
-
if (hasDuplicateForeignKeys()) {
int counter = 1;
for (MCompoundForeignKey fk : compoundKeys) {
@@ -687,7 +635,6 @@ public class MTable {
* Adjust the references (FK) if it should relate to a draft table.
*/
public void adjustReferences(ModelContainer modelContainer) {
-
Collection cols = allColumns();
for (MColumn col : cols) {
String references = col.getReferences();
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTableIdentity.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTableIdentity.java
index 5e4bb2306..f226ebaec 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTableIdentity.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MTableIdentity.java
@@ -17,7 +17,6 @@ public class MTableIdentity {
* Return the IdentityMode from CreateTable.
*/
public static IdentityMode fromCreateTable(CreateTable createTable) {
-
IdType type = fromType(createTable.getIdentityType());
IdentityGenerated generated = fromGenerated(createTable.getIdentityGenerated());
int start = toInt(createTable.getIdentityStart(), createTable.getSequenceInitial());
@@ -39,7 +38,6 @@ public class MTableIdentity {
* Set the IdentityMode to the CreateTable model.
*/
public static void toCreateTable(IdentityMode identityMode, CreateTable createTable) {
-
if (!identityMode.isPlatformDefault()) {
createTable.setIdentityType(toType(identityMode.getIdType()));
}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MigrationModel.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MigrationModel.java
index 2ad1001bb..9c49ad0aa 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MigrationModel.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MigrationModel.java
@@ -18,13 +18,9 @@ public class MigrationModel {
private static final Logger logger = LoggerFactory.getLogger(MigrationModel.class);
private final ModelContainer model = new ModelContainer();
-
private final File modelDirectory;
-
private final String modelSuffix;
- private MigrationVersion lastVersion;
-
public MigrationModel(File modelDirectory, String modelSuffix) {
this.modelDirectory = modelDirectory;
this.modelSuffix = modelSuffix;
@@ -58,14 +54,9 @@ public class MigrationModel {
if (!initMigration) {
for (MigrationResource migrationResource : resources) {
logger.debug("read {}", migrationResource);
- model.apply(migrationResource.read(), migrationResource.getVersion());
+ model.apply(migrationResource.read(), migrationResource.version());
}
}
-
- // remember the last version
- if (!resources.isEmpty()) {
- lastVersion = resources.get(resources.size() - 1).getVersion();
- }
}
private MigrationVersion createVersion(File xmlFile) {
@@ -73,9 +64,4 @@ public class MigrationModel {
String versionName = fileName.substring(0, fileName.length() - modelSuffix.length());
return MigrationVersion.parse(versionName);
}
-
- public String getNextVersion(String initialVersion) {
-
- return lastVersion == null ? initialVersion : lastVersion.nextVersion();
- }
}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MigrationResource.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MigrationResource.java
index eff454813..ae4950a4e 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MigrationResource.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/MigrationResource.java
@@ -31,7 +31,7 @@ public class MigrationResource implements Comparable {
/**
* Return the version associated with this resource.
*/
- public MigrationVersion getVersion() {
+ public MigrationVersion version() {
return version;
}
@@ -39,7 +39,6 @@ public class MigrationResource implements Comparable {
* Read and return the migration from the resource.
*/
public Migration read() {
-
return MigrationXmlReader.read(migrationFile);
}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java
index 3f75064d2..dc19ef137 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelContainer.java
@@ -37,19 +37,16 @@ import java.util.TreeSet;
public class ModelContainer {
private final Set schemas = new TreeSet<>();
-
/**
* All the tables in the model.
*/
private final Map tables = new LinkedHashMap<>();
/**
- * All the non unique non foreign key indexes.
+ * All the non-unique non-foreign key indexes.
*/
private final Map indexes = new LinkedHashMap<>();
-
private final PendingDrops pendingDrops = new PendingDrops();
-
private final List partitionedTables = new ArrayList<>();
public ModelContainer() {
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelDiff.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelDiff.java
index 2babc7c6c..367c13ca5 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelDiff.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/ModelDiff.java
@@ -53,29 +53,24 @@ public class ModelDiff {
this.baseModel = new ModelContainer();
}
-
/**
- * Return true if the apply and drop changes are both empty.
- * This means there are no migration changes.
+ * Return true if apply and drop changes are both empty. This means there are no migration changes.
*/
public boolean isEmpty() {
return applyChanges.isEmpty() && dropChanges.isEmpty();
}
/**
- * Return the diff as a migration potentially containing
- * an apply changeSet and a drop changeSet.
+ * Return the diff as a migration potentially containing an apply changeSet and a drop changeSet.
*/
public Migration getMigration() {
-
Migration migration = new Migration();
if (!applyChanges.isEmpty()) {
- // add a non empty apply changeSet
+ // add a non-empty apply changeSet
migration.getChangeSet().add(getApplyChangeSet());
}
-
if (!dropChanges.isEmpty()) {
- // add a non empty drop changeSet
+ // add a non-empty drop changeSet
migration.getChangeSet().add(getDropChangeSet());
}
return migration;
@@ -121,7 +116,6 @@ public class ModelDiff {
* Compare to a 'newer' model and collect the differences.
*/
public void compareTo(ModelContainer newModel) {
-
Map newTables = newModel.getTables();
for (MTable newTable : newTables.values()) {
@@ -179,7 +173,6 @@ public class ModelDiff {
* Compare tables looking for add/drop/modify columns etc.
*/
protected void compareTables(MTable currentTable, MTable newTable) {
-
currentTable.compare(this, newTable);
}
@@ -187,7 +180,6 @@ public class ModelDiff {
* Compare tables looking for add/drop/modify columns etc.
*/
protected void compareIndexes(MIndex currentIndex, MIndex newIndex) {
-
currentIndex.compare(this, newIndex);
}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/PendingDrops.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/PendingDrops.java
index 9a0bdd242..bd7e7c96b 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/PendingDrops.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/PendingDrops.java
@@ -24,7 +24,6 @@ public class PendingDrops {
* Add a 'pending drops' changeSet for the given version.
*/
public void add(MigrationVersion version, ChangeSet changeSet) {
-
Entry entry = map.computeIfAbsent(version.normalised(), k -> new Entry(version));
entry.add(changeSet);
}
@@ -33,7 +32,6 @@ public class PendingDrops {
* Return the list of versions with pending drops.
*/
public List pendingDrops() {
-
List versions = new ArrayList<>();
for (Entry value : map.values()) {
if (value.hasPendingDrops()) {
@@ -48,7 +46,6 @@ public class PendingDrops {
* to remove the (unsuppressed) pending drops for this version.
*/
public boolean appliedDropsFor(ChangeSet changeSet) {
-
MigrationVersion version = MigrationVersion.parse(changeSet.getDropsFor());
Entry entry = map.get(version.normalised());
@@ -68,7 +65,6 @@ public class PendingDrops {
*
*/
public Migration migrationForVersion(String pendingVersion) {
-
Entry entry = getEntry(pendingVersion);
Migration migration = new Migration();
@@ -96,7 +92,6 @@ public class PendingDrops {
}
private Entry getEntry(String pendingVersion) {
-
if ("next".equalsIgnoreCase(pendingVersion)) {
Iterator it = map.values().iterator();
if (it.hasNext()) {
@@ -115,7 +110,6 @@ public class PendingDrops {
* Register pending drop columns on history tables to the new model.
*/
public void registerPendingHistoryDropColumns(ModelContainer newModel) {
-
for (Entry entry : map.values()) {
for (ChangeSet changeSet : entry.list) {
newModel.registerPendingHistoryDropColumns(changeSet);
@@ -140,7 +134,6 @@ public class PendingDrops {
static class Entry {
final MigrationVersion version;
-
final List list = new ArrayList<>();
Entry(MigrationVersion version) {
@@ -180,7 +173,6 @@ public class PendingDrops {
* removed all the changeSets (and there are no suppressForever ones).
*/
boolean removeDrops(ChangeSet appliedDrops) {
-
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
ChangeSet next = iterator.next();
@@ -199,20 +191,16 @@ public class PendingDrops {
* Remove the applied drops from the pending ones matching by table name and column name.
*/
private void removeMatchingChanges(ChangeSet pendingDrops, ChangeSet appliedDrops) {
-
List pending = pendingDrops.getChangeSetChildren();
Iterator iterator = pending.iterator();
while (iterator.hasNext()) {
Object pendingDrop = iterator.next();
if (pendingDrop instanceof DropColumn && dropColumnIn((DropColumn) pendingDrop, appliedDrops)) {
iterator.remove();
-
} else if (pendingDrop instanceof DropTable && dropTableIn((DropTable) pendingDrop, appliedDrops)) {
iterator.remove();
-
} else if (pendingDrop instanceof DropHistoryTable && dropHistoryTableIn((DropHistoryTable) pendingDrop, appliedDrops)) {
iterator.remove();
-
}
}
}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/PlatformDdlWriter.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/PlatformDdlWriter.java
index f56384477..59da934e4 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/PlatformDdlWriter.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/PlatformDdlWriter.java
@@ -27,9 +27,7 @@ public class PlatformDdlWriter {
private static final Logger logger = LoggerFactory.getLogger(PlatformDdlWriter.class);
private final DatabaseConfig databaseConfig;
-
private final PlatformDdl platformDdl;
-
private final int lockTimeoutSeconds;
public PlatformDdlWriter(DatabasePlatform platform, DatabaseConfig dbConfig, int lockTimeoutSeconds) {
@@ -42,7 +40,6 @@ public class PlatformDdlWriter {
* Write the migration as platform specific ddl.
*/
public void processMigration(Migration dbMigration, DdlWrite write, File writePath, String fullVersion) throws IOException {
-
DdlHandler handler = handler();
handler.generateProlog(write);
if (lockTimeoutSeconds > 0) {
@@ -51,7 +48,6 @@ public class PlatformDdlWriter {
write.apply().append(lockSql).endOfStatement().newLine();
}
}
-
List changeSets = dbMigration.getChangeSet();
for (ChangeSet changeSet : changeSets) {
if (isApply(changeSet)) {
@@ -59,7 +55,6 @@ public class PlatformDdlWriter {
}
}
handler.generateEpilog(write);
-
writePlatformDdl(write, writePath, fullVersion);
}
From 4ba26ee7b761faf69819ee3ed76f622204784d72 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Mon, 2 Aug 2021 20:49:30 +1200
Subject: [PATCH 52/87] #2283 - ddl-generator - Refactor tidy
DefaultDbMigration etc
---
.../dbmigration/DefaultDbMigration.java | 89 +++++--------------
.../dbmigration/LastMigration.java | 2 +-
.../DbMigrationDropHistoryTest.java | 4 +-
.../dbmigration/DbMigrationGenerateTest.java | 4 +-
4 files changed, 25 insertions(+), 74 deletions(-)
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
index 0a7b0edee..7643eeec2 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
@@ -2,7 +2,6 @@ package io.ebeaninternal.dbmigration;
import io.ebean.DB;
import io.ebean.Database;
-import io.ebean.EbeanServer;
import io.ebean.annotation.Platform;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.DbConstraintNaming;
@@ -79,20 +78,12 @@ import static io.ebeaninternal.api.PlatformMatch.matchPlatform;
public class DefaultDbMigration implements DbMigration {
protected static final Logger logger = LoggerFactory.getLogger("io.ebean.GenerateMigration");
-
private static final String initialVersion = "1.0";
-
private static final String GENERATED_COMMENT = "THIS IS A GENERATED FILE - DO NOT MODIFY";
- private boolean logToSystemOut = true;
-
- /**
- * Set to true if DefaultDbMigration run with online EbeanServer instance.
- */
protected final boolean online;
-
+ private boolean logToSystemOut = true;
protected SpiEbeanServer server;
-
protected String pathToResources = "src/main/resources";
protected String migrationPath = "dbmigration";
@@ -101,15 +92,10 @@ public class DefaultDbMigration implements DbMigration {
protected String modelSuffix = ".model.xml";
protected DatabasePlatform databasePlatform;
-
private boolean vanillaPlatform;
-
protected List platforms = new ArrayList<>();
-
protected DatabaseConfig databaseConfig;
-
protected DbConstraintNaming constraintNaming;
-
protected Boolean strictMode;
protected Boolean includeGeneratedFileComment;
protected String header;
@@ -119,7 +105,6 @@ public class DefaultDbMigration implements DbMigration {
protected String generatePendingDrop;
private boolean addForeignKeySkipCheck;
private int lockTimeoutSeconds;
-
protected boolean includeBuiltInPartitioning = true;
/**
@@ -129,19 +114,6 @@ public class DefaultDbMigration implements DbMigration {
this.online = false;
}
- /**
- * Create using online EbeanServer.
- */
- public DefaultDbMigration(EbeanServer server) {
- this.online = true;
- setServer(server);
- }
-
- /**
- * Set the path from the current working directory to the application resources.
- *
- * This defaults to maven style 'src/main/resources'.
- */
@Override
public void setPathToResources(String pathToResources) {
this.pathToResources = pathToResources;
@@ -152,19 +124,12 @@ public class DefaultDbMigration implements DbMigration {
this.migrationPath = migrationPath;
}
- /**
- * Set the server to use to determine the current model.
- * Typically this is not called explicitly.
- */
@Override
public void setServer(Database database) {
this.server = (SpiEbeanServer) database;
setServerConfig(server.getServerConfig());
}
- /**
- * Set the DatabaseConfig to use. Typically this is not called explicitly.
- */
@Override
public void setServerConfig(DatabaseConfig config) {
if (this.databaseConfig == null) {
@@ -173,7 +138,6 @@ public class DefaultDbMigration implements DbMigration {
if (constraintNaming == null) {
this.constraintNaming = databaseConfig.getConstraintNaming();
}
-
Properties properties = config.getProperties();
if (properties != null) {
PropertiesWrapper props = new PropertiesWrapper("ebean", config.getName(), properties, null);
@@ -242,7 +206,7 @@ public class DefaultDbMigration implements DbMigration {
@Override
public void setPlatform(Platform platform) {
vanillaPlatform = true;
- setPlatform(getPlatform(platform));
+ setPlatform(platform(platform));
}
/**
@@ -267,7 +231,7 @@ public class DefaultDbMigration implements DbMigration {
@Override
public void addPlatform(Platform platform, String prefix) {
- platforms.add(new Pair(getPlatform(platform), prefix));
+ platforms.add(new Pair(platform(platform), prefix));
}
@Override
@@ -402,7 +366,6 @@ public class DefaultDbMigration implements DbMigration {
*
*/
private void generateExtraDdl(File migrationDir, DatabasePlatform dbPlatform, boolean tablePartitioning) throws IOException {
-
if (dbPlatform != null) {
if (tablePartitioning && includeBuiltInPartitioning) {
generateExtraDdlFor(migrationDir, dbPlatform, ExtraDdlXmlReader.readBuiltinTablePartitioning());
@@ -427,10 +390,8 @@ public class DefaultDbMigration implements DbMigration {
* Write (or override) the "repeatable" migration script.
*/
private void writeExtraDdl(File migrationDir, DdlScript script) throws IOException {
-
String fullName = repeatableMigrationName(script.isInit(), script.getName());
logger.debug("writing repeatable script {}", fullName);
-
File file = new File(migrationDir, fullName);
try (FileWriter writer = new FileWriter(file)) {
writer.write(script.getValue());
@@ -478,12 +439,10 @@ public class DefaultDbMigration implements DbMigration {
* Generate the diff migration.
*/
private String generateDiff(Request request) throws IOException {
-
List pendingDrops = request.getPendingDrops();
if (!pendingDrops.isEmpty()) {
logInfo("Pending un-applied drops in versions %s", pendingDrops);
}
-
Migration migration = request.createDiffMigration();
if (migration == null) {
logInfo("no changes detected - no migration written", null);
@@ -498,11 +457,8 @@ public class DefaultDbMigration implements DbMigration {
* Generate the migration based on the pendingDrops from a prior version.
*/
private String generatePendingDrop(Request request, String pendingVersion) throws IOException {
-
Migration migration = request.migrationForPendingDrop(pendingVersion);
-
String version = generateMigration(request, migration, pendingVersion);
-
List pendingDrops = request.getPendingDrops();
if (!pendingDrops.isEmpty()) {
logInfo("... remaining pending un-applied drops in versions %s", pendingDrops);
@@ -527,12 +483,12 @@ public class DefaultDbMigration implements DbMigration {
this.initMigration = initMigration;
this.currentModel = new CurrentModel(server, constraintNaming);
this.current = currentModel.read();
- this.migrationDir = getMigrationDirectory(initMigration);
+ this.migrationDir = migrationDirectory(initMigration);
if (initMigration) {
this.modelDir = null;
this.migrated = new ModelContainer();
} else {
- this.modelDir = getModelDirectory(migrationDir);
+ this.modelDir = modelDirectory(migrationDir);
MigrationModel migrationModel = new MigrationModel(modelDir, modelSuffix);
this.migrated = migrationModel.read(false);
}
@@ -547,8 +503,8 @@ public class DefaultDbMigration implements DbMigration {
*/
String nextVersion() {
// always read the next version using the main migration directory (not dbinit)
- File migDirectory = getMigrationDirectory(false);
- File modelDir = getModelDirectory(migDirectory);
+ File migDirectory = migrationDirectory(false);
+ File modelDir = modelDirectory(migDirectory);
return LastMigration.nextVersion(migDirectory, modelDir, initMigration);
}
@@ -556,9 +512,7 @@ public class DefaultDbMigration implements DbMigration {
* Return the migration for the pending drops for a given version.
*/
Migration migrationForPendingDrop(String pendingVersion) {
-
Migration migration = migrated.migrationForPendingDrop(pendingVersion);
-
// register any remaining pending drops
migrated.registerPendingHistoryDropColumns(current);
return migration;
@@ -582,9 +536,7 @@ public class DefaultDbMigration implements DbMigration {
}
private String generateMigration(Request request, Migration dbMigration, String dropsFor) throws IOException {
-
- String fullVersion = getFullVersion(request.nextVersion(), dropsFor);
-
+ String fullVersion = fullVersion(request.nextVersion(), dropsFor);
logInfo("generating migration:%s", fullVersion);
if (!request.initMigration && !writeMigrationXml(dbMigration, request.modelDir, fullVersion)) {
logError("migration already exists, not generating DDL");
@@ -621,15 +573,14 @@ public class DefaultDbMigration implements DbMigration {
*
* The full version can contain a comment suffix after a "__" double underscore.
*/
- private String getFullVersion(String nextVersion, String dropsFor) {
-
- String version = getVersion();
+ private String fullVersion(String nextVersion, String dropsFor) {
+ String version = version();
if (version == null) {
version = (nextVersion != null) ? nextVersion : initialVersion;
}
String fullVersion = applyPrefix + version;
- String name = getName();
+ String name = name();
if (name != null) {
fullVersion += "__" + toUnderScore(name);
@@ -724,7 +675,7 @@ public class DefaultDbMigration implements DbMigration {
* FlywayDb so each developer sets a unique version so that the migration script
* generated is unique (typically just prior to being submitted as a merge request).
*/
- private String getVersion() {
+ private String version() {
String envVersion = readEnvironment("ddl.migration.version");
if (!isEmpty(envVersion)) {
return envVersion.trim();
@@ -744,7 +695,7 @@ public class DefaultDbMigration implements DbMigration {
* is a short description of the feature.
*
*/
- private String getName() {
+ private String name() {
String envName = readEnvironment("ddl.migration.name");
if (!isEmpty(envName)) {
return envName.trim();
@@ -773,21 +724,21 @@ public class DefaultDbMigration implements DbMigration {
/**
* Return the main migration directory.
*/
- File getMigrationDirectory() {
- return getMigrationDirectory(false);
+ File migrationDirectory() {
+ return migrationDirectory(false);
}
/**
* Return the file path to write the xml and sql to.
*/
- File getMigrationDirectory(boolean initMigration) {
+ File migrationDirectory(boolean initMigration) {
// path to src/main/resources in typical maven project
File resourceRootDir = new File(pathToResources);
if (!resourceRootDir.exists()) {
String msg = String.format("Error - path to resources %s does not exist. Absolute path is %s", pathToResources, resourceRootDir.getAbsolutePath());
throw new UnknownResourcePathException(msg);
}
- String resourcePath = getMigrationPath(initMigration);
+ String resourcePath = migrationPath(initMigration);
// expect to be a path to something like - src/main/resources/dbmigration
File path = new File(resourceRootDir, resourcePath);
if (!path.exists()) {
@@ -798,14 +749,14 @@ public class DefaultDbMigration implements DbMigration {
return path;
}
- private String getMigrationPath(boolean initMigration) {
+ private String migrationPath(boolean initMigration) {
return initMigration ? migrationInitPath : migrationPath;
}
/**
* Return the model directory (relative to the migration directory).
*/
- private File getModelDirectory(File migrationDirectory) {
+ private File modelDirectory(File migrationDirectory) {
if (modelPath == null || modelPath.isEmpty()) {
return migrationDirectory;
}
@@ -819,7 +770,7 @@ public class DefaultDbMigration implements DbMigration {
/**
* Return the DatabasePlatform given the platform key.
*/
- protected DatabasePlatform getPlatform(Platform platform) {
+ protected DatabasePlatform platform(Platform platform) {
switch (platform) {
case H2:
return new H2Platform();
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/LastMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/LastMigration.java
index 07a80add9..17ac65aa9 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/LastMigration.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/LastMigration.java
@@ -18,7 +18,7 @@ class LastMigration {
private static final String MODEL_XML = ".model.xml";
/**
- * Return the next migation version given the migration directory.
+ * Return the next migration version given the migration directory.
*/
static String nextVersion(File migDir, File modelDir, boolean initMigration) {
String last = lastVersion(migDir, modelDir);
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationDropHistoryTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationDropHistoryTest.java
index db91e14c9..320406a7c 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationDropHistoryTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationDropHistoryTest.java
@@ -54,8 +54,8 @@ public class DbMigrationDropHistoryTest {
migration.setServer(server);
// First, we clean up the output-directory
- assertThat(migration.getMigrationDirectory().getAbsolutePath()).contains("migrationtest-history");
- Files.walk(migration.getMigrationDirectory().toPath())
+ assertThat(migration.migrationDirectory().getAbsolutePath()).contains("migrationtest-history");
+ Files.walk(migration.migrationDirectory().toPath())
.filter(Files::isRegularFile).map(Path::toFile).forEach(File::delete);
// then we generate migration scripts for v1_0
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
index 0063a75cf..befead534 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
@@ -70,8 +70,8 @@ public class DbMigrationGenerateTest {
migration.setServer(server);
// First, we clean up the output-directory
- assertThat(migration.getMigrationDirectory().getAbsolutePath()).contains("migrationtest");
- Files.walk(migration.getMigrationDirectory().toPath())
+ assertThat(migration.migrationDirectory().getAbsolutePath()).contains("migrationtest");
+ Files.walk(migration.migrationDirectory().toPath())
.filter(Files::isRegularFile).map(Path::toFile).forEach(File::delete);
// then we generate migration scripts for v1_0
From 589ee7a5ea6baee0a011a4a97c0440097297b31d Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Mon, 2 Aug 2021 23:59:49 +1200
Subject: [PATCH 53/87] #2284 - ENH: ddl-generator - add optional generation of
idx_.migrations file
---
.../io/ebean/dbmigration/DbMigration.java | 8 ++
.../dbmigration/DefaultDbMigration.java | 27 +++-
.../dbmigration/IndexMigration.java | 125 ++++++++++++++++++
.../ebeaninternal/dbmigration/MChecksum.java | 29 ++++
.../dbmigration/DbMigrationGenerateTest.java | 18 +--
.../dbmigration/IndexMigrationTest.java | 67 ++++++++++
.../dbmigration/MChecksumTest.java | 18 +++
.../dbmigration/index/1.0__hello.sql | 1 +
.../resources/dbmigration/index/1.1__foo.sql | 1 +
.../resources/dbmigration/index/I__init_1.sql | 1 +
.../resources/dbmigration/index/R__view_1.sql | 1 +
.../dbmigration/index2/I__init_1.sql | 1 +
.../dbmigration/index2/R__view_1.sql | 1 +
.../dbmigration/index2/g1/1.0__a.sql | 1 +
.../dbmigration/index2/g1/1.1__b.sql | 1 +
.../dbmigration/index2/g2/2.0__a.sql | 1 +
.../dbmigration/index2/g2/2.1__2b.sql | 1 +
17 files changed, 293 insertions(+), 9 deletions(-)
create mode 100644 ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/IndexMigration.java
create mode 100644 ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/MChecksum.java
create mode 100644 ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
create mode 100644 ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/MChecksumTest.java
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index/1.0__hello.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index/1.1__foo.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index/I__init_1.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index/R__view_1.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index2/I__init_1.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index2/R__view_1.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index2/g1/1.0__a.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index2/g1/1.1__b.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index2/g2/2.0__a.sql
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index2/g2/2.1__2b.sql
diff --git a/ebean-ddl-generator/src/main/java/io/ebean/dbmigration/DbMigration.java b/ebean-ddl-generator/src/main/java/io/ebean/dbmigration/DbMigration.java
index 55753f4a2..ec6db4597 100644
--- a/ebean-ddl-generator/src/main/java/io/ebean/dbmigration/DbMigration.java
+++ b/ebean-ddl-generator/src/main/java/io/ebean/dbmigration/DbMigration.java
@@ -133,6 +133,14 @@ public interface DbMigration {
*/
void setStrictMode(boolean strictMode);
+ /**
+ * Set to include generation of the index migration file.
+ *
+ * When true this generates a {@code idx_.migrations} file. This can be used by the migration
+ * runner to improve performance of running migrations, especially when no migration changes have occurred.
+ */
+ void setIncludeIndex(boolean generateIndexFile);
+
/**
* Set to true to include a generated header comment in the DDL script.
*/
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
index 7643eeec2..7f2a90558 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
@@ -106,6 +106,7 @@ public class DefaultDbMigration implements DbMigration {
private boolean addForeignKeySkipCheck;
private int lockTimeoutSeconds;
protected boolean includeBuiltInPartitioning = true;
+ protected boolean includeIndex;
/**
* Create for offline migration generation.
@@ -182,6 +183,11 @@ public class DefaultDbMigration implements DbMigration {
this.generatePendingDrop = generatePendingDrop;
}
+ @Override
+ public void setIncludeIndex(boolean includeIndex) {
+ this.includeIndex = includeIndex;
+ }
+
@Override
public void setIncludeGeneratedFileComment(boolean includeGeneratedFileComment) {
this.includeGeneratedFileComment = includeGeneratedFileComment;
@@ -273,7 +279,26 @@ public class DefaultDbMigration implements DbMigration {
*/
@Override
public String generateMigration() throws IOException {
- return generateMigrationFor(false);
+ final String version = generateMigrationFor(false);
+ if (includeIndex) {
+ generateIndex(version);
+ }
+ return version;
+ }
+
+ /**
+ * Generate the {@code idx_platform.migrations} file.
+ */
+ private void generateIndex(String version) throws IOException {
+ final boolean overwrite = version != null;
+ final File topDir = migrationDirectory(false);
+ if (!platforms.isEmpty()) {
+ for (Pair pair : platforms) {
+ new IndexMigration(topDir, pair).generate(overwrite);
+ }
+ } else {
+ new IndexMigration(topDir, databasePlatform).generate(overwrite);
+ }
}
@Override
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/IndexMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/IndexMigration.java
new file mode 100644
index 000000000..215c18e72
--- /dev/null
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/IndexMigration.java
@@ -0,0 +1,125 @@
+package io.ebeaninternal.dbmigration;
+
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.migration.MigrationVersion;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+import java.util.Stack;
+
+/**
+ * Generate a migration index file.
+ *
+ * This is a file that has all the migrations listed in order with checksum of the file content.
+ */
+class IndexMigration {
+
+ private static final String eol = "\n";
+ private final List all = new ArrayList<>();
+ private final File topDir;
+ private final DatabasePlatform databasePlatform;
+ private final File indexFile;
+ private final Stack pathStack = new Stack<>();
+
+ IndexMigration(File topDir, DatabasePlatform databasePlatform) {
+ this.topDir = topDir;
+ this.databasePlatform = databasePlatform;
+ this.indexFile = init();
+ }
+
+ IndexMigration(File topDir, DefaultDbMigration.Pair pair) {
+ this.topDir = new File(topDir, pair.prefix);
+ this.databasePlatform = pair.platform;
+ this.indexFile = init();
+ }
+
+ File init() {
+ pathStack.push("");
+ String name = "idx_" + databasePlatform.getPlatform().base().name().toLowerCase() + ".migrations";
+ return new File(topDir, name);
+ }
+
+ void generate(boolean overwrite) throws IOException {
+ if (!overwrite && indexFile.exists()) {
+ return;
+ }
+ readSqlFiles(topDir);
+ generateIndex();
+ }
+
+ private void generateIndex() throws IOException {
+ Collections.sort(all);
+ FileWriter writer = new FileWriter(indexFile);
+ for (Entry entry : all) {
+ writeChecksumPadded(writer, entry.checksum);
+ writer.write(entry.fileName);
+ writer.write(eol);
+ }
+ writer.write(eol);
+ writer.close();
+ }
+
+ private void writeChecksumPadded(FileWriter writer, int checksum) throws IOException {
+ final String asStr = String.valueOf(checksum);
+ writer.write(asStr);
+ writer.write(',');
+ int max = 15 - asStr.length();
+ for (int i = 0; i < max; i++) {
+ writer.write(' ');
+ }
+ }
+
+ private void readSqlFiles(File dir) {
+ final File[] files = dir.listFiles();
+ if (files != null && files.length > 0) {
+ for (File file : files) {
+ if (file.isDirectory()) {
+ readDirectory(file);
+ }
+ final String lowerName = file.getName().toLowerCase();
+ if (lowerName.endsWith(".sql")) {
+ addEntry(file);
+ }
+ }
+ }
+ }
+
+ private void readDirectory(File dir) {
+ final String current = pathStack.peek();
+ pathStack.push(current + dir.getName() + "/");
+ readSqlFiles(dir);
+ pathStack.pop();
+ }
+
+ private void addEntry(File sqlFile) {
+ final String relativePath = pathStack.peek();
+ final String fileName = sqlFile.getName();
+ final String name = fileName.substring(0, fileName.length() - 4);
+ final MigrationVersion version = MigrationVersion.parse(name);
+ final int checksum = MChecksum.calculate(sqlFile);
+ all.add(new Entry(checksum, version, relativePath + fileName));
+ }
+
+ static class Entry implements Comparable {
+
+ private final int checksum;
+ private final String fileName;
+ private final MigrationVersion version;
+
+ Entry(int checksum, MigrationVersion version, String fileName) {
+ this.checksum = checksum;
+ this.version = version;
+ this.fileName = fileName;
+ }
+
+ @Override
+ public int compareTo(Entry other) {
+ return version.compareTo(other.version);
+ }
+ }
+
+}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/MChecksum.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/MChecksum.java
new file mode 100644
index 000000000..9c533992e
--- /dev/null
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/MChecksum.java
@@ -0,0 +1,29 @@
+package io.ebeaninternal.dbmigration;
+
+import java.io.*;
+import java.nio.charset.StandardCharsets;
+import java.util.zip.CRC32;
+
+/**
+ * Calculates the checksum for the given file content.
+ */
+class MChecksum {
+
+ /**
+ * Returns the checksum of the file. Agnostic of encoding and new line character.
+ */
+ static int calculate(File file) {
+ try {
+ final CRC32 crc32 = new CRC32();
+ BufferedReader bufferedReader = new BufferedReader(new FileReader(file));
+ String line;
+ while ((line = bufferedReader.readLine()) != null) {
+ final byte[] lineBytes = line.getBytes(StandardCharsets.UTF_8);
+ crc32.update(lineBytes, 0, lineBytes.length);
+ }
+ return (int) crc32.getValue();
+ } catch (IOException e) {
+ throw new UncheckedIOException("Failed to calculate checksum", e);
+ }
+ }
+}
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
index befead534..f5bf01a56 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/DbMigrationGenerateTest.java
@@ -27,20 +27,22 @@ public class DbMigrationGenerateTest {
private static final Logger logger = LoggerFactory.getLogger(DbMigrationGenerateTest.class);
- @Test
- public void invokeTest() throws IOException {
- main(null);
+ public static void main(String[] args) throws IOException {
+ run("ebean-ddl-generator/src/test/resources");
}
- public static void main(String[] args) throws IOException {
+ @Test
+ public void invokeTest() throws IOException {
+ run("src/test/resources");
+ }
- logger.info("start");
+ public static void run(String pathToResources) throws IOException {
+ logger.info("start current directory: " + new File(".").getAbsolutePath());
DefaultDbMigration migration = new DefaultDbMigration();
-
+ migration.setIncludeIndex(true);
// We use src/test/resources as output directory (so we see in GIT if files will change)
-
- migration.setPathToResources("src/test/resources");
+ migration.setPathToResources(pathToResources);
migration.setMigrationPath("db/migration");
migration.setMigrationPath(null); // use the default for this test
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
new file mode 100644
index 000000000..5a04d8917
--- /dev/null
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
@@ -0,0 +1,67 @@
+package io.ebeaninternal.dbmigration;
+
+import io.ebean.config.dbplatform.DatabasePlatform;
+import io.ebean.config.dbplatform.h2.H2Platform;
+import io.ebean.config.dbplatform.postgres.PostgresPlatform;
+import org.junit.Test;
+
+import java.io.File;
+import java.io.IOException;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.util.Arrays;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class IndexMigrationTest {
+
+ @Test
+ public void index() throws IOException {
+ File topDir = new File("src/test/resources/dbmigration/index");
+ if (!topDir.exists()) {
+ throw new IllegalStateException("Not expected - dir does not exist " + topDir.getAbsolutePath());
+ }
+ DatabasePlatform pg = new PostgresPlatform();
+ IndexMigration indexMigration = new IndexMigration(topDir, pg);
+ indexMigration.generate(true);
+
+
+ File expected = new File(topDir, "idx_postgres.migrations");
+ assertThat(expected).exists();
+
+ final List expectedLines = Arrays.asList(
+ "-965417868, I__init_1.sql",
+ "907060870, 1.0__hello.sql",
+ "-1938594527, 1.1__foo.sql",
+ "-1960070312, R__view_1.sql");
+
+ final List lines = Files.readAllLines(expected.toPath(), StandardCharsets.UTF_8);
+ assertThat(lines).containsAll(expectedLines);
+ }
+
+ @Test
+ public void index2_withSubDirectories() throws IOException {
+ File topDir = new File("src/test/resources/dbmigration/index2");
+ if (!topDir.exists()) {
+ throw new IllegalStateException("Not expected - dir does not exist " + topDir.getAbsolutePath());
+ }
+ DatabasePlatform pg = new H2Platform();
+ IndexMigration indexMigration = new IndexMigration(topDir, pg);
+ indexMigration.generate(true);
+
+ File expected = new File(topDir, "idx_h2.migrations");
+ assertThat(expected).exists();
+
+ final List expectedLines = Arrays.asList(
+ "-965417868, I__init_1.sql",
+ "-390611389, g1/1.0__a.sql",
+ "1908338681, g1/1.1__b.sql",
+ "-1776543936, g2/2.0__a.sql",
+ "253052666, g2/2.1__2b.sql",
+ "-1960070312, R__view_1.sql");
+
+ final List lines = Files.readAllLines(expected.toPath(), StandardCharsets.UTF_8);
+ assertThat(lines).containsAll(expectedLines);
+ }
+}
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/MChecksumTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/MChecksumTest.java
new file mode 100644
index 000000000..e52c43755
--- /dev/null
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/MChecksumTest.java
@@ -0,0 +1,18 @@
+package io.ebeaninternal.dbmigration;
+
+import org.junit.Test;
+
+import java.io.File;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class MChecksumTest {
+
+ @Test
+ public void calculate() {
+ File file = new File("src/test/resources/dbmigration/index/1.0__hello.sql");
+ assertThat(file).exists();
+
+ assertThat(MChecksum.calculate(file)).isEqualTo(907060870);
+ }
+}
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index/1.0__hello.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index/1.0__hello.sql
new file mode 100644
index 000000000..ce0136250
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index/1.0__hello.sql
@@ -0,0 +1 @@
+hello
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index/1.1__foo.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index/1.1__foo.sql
new file mode 100644
index 000000000..257cc5642
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index/1.1__foo.sql
@@ -0,0 +1 @@
+foo
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index/I__init_1.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index/I__init_1.sql
new file mode 100644
index 000000000..b1b716105
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index/I__init_1.sql
@@ -0,0 +1 @@
+init
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index/R__view_1.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index/R__view_1.sql
new file mode 100644
index 000000000..0f2416ebf
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index/R__view_1.sql
@@ -0,0 +1 @@
+Something
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index2/I__init_1.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index2/I__init_1.sql
new file mode 100644
index 000000000..b1b716105
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index2/I__init_1.sql
@@ -0,0 +1 @@
+init
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index2/R__view_1.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index2/R__view_1.sql
new file mode 100644
index 000000000..0f2416ebf
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index2/R__view_1.sql
@@ -0,0 +1 @@
+Something
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index2/g1/1.0__a.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index2/g1/1.0__a.sql
new file mode 100644
index 000000000..789819226
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index2/g1/1.0__a.sql
@@ -0,0 +1 @@
+a
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index2/g1/1.1__b.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index2/g1/1.1__b.sql
new file mode 100644
index 000000000..617807982
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index2/g1/1.1__b.sql
@@ -0,0 +1 @@
+b
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index2/g2/2.0__a.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index2/g2/2.0__a.sql
new file mode 100644
index 000000000..94226dabb
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index2/g2/2.0__a.sql
@@ -0,0 +1 @@
+2a
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index2/g2/2.1__2b.sql b/ebean-ddl-generator/src/test/resources/dbmigration/index2/g2/2.1__2b.sql
new file mode 100644
index 000000000..b8a4cf4af
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index2/g2/2.1__2b.sql
@@ -0,0 +1 @@
+2b
From db34afe867af3e2df20d3546c2e039c412a50bd4 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Tue, 3 Aug 2021 00:03:02 +1200
Subject: [PATCH 54/87] #2284 - ENH: ddl-generator - add optional generation of
idx_.migrations file
---
.../resources/dbmigration/index/idx_postgres.migrations | 5 +++++
.../test/resources/dbmigration/index2/idx_h2.migrations | 7 +++++++
.../dbmigration/migrationtest/db2/idx_db2.migrations | 6 ++++++
.../dbmigration/migrationtest/h2/idx_h2.migrations | 6 ++++++
.../dbmigration/migrationtest/hana/idx_hana.migrations | 6 ++++++
.../dbmigration/migrationtest/hsqldb/idx_hsqldb.migrations | 6 ++++++
.../dbmigration/migrationtest/mysql/idx_mysql.migrations | 6 ++++++
.../dbmigration/migrationtest/mysql55/idx_mysql.migrations | 6 ++++++
.../dbmigration/migrationtest/oracle/idx_oracle.migrations | 6 ++++++
.../migrationtest/postgres/idx_postgres.migrations | 6 ++++++
.../dbmigration/migrationtest/sqlite/idx_sqlite.migrations | 6 ++++++
.../migrationtest/sqlserver17/idx_sqlserver.migrations | 7 +++++++
12 files changed, 73 insertions(+)
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index/idx_postgres.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/index2/idx_h2.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/db2/idx_db2.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/h2/idx_h2.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/hana/idx_hana.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/hsqldb/idx_hsqldb.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/mysql/idx_mysql.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/mysql55/idx_mysql.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/oracle/idx_oracle.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/postgres/idx_postgres.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/sqlite/idx_sqlite.migrations
create mode 100644 ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/sqlserver17/idx_sqlserver.migrations
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index/idx_postgres.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/index/idx_postgres.migrations
new file mode 100644
index 000000000..2ccea54d7
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index/idx_postgres.migrations
@@ -0,0 +1,5 @@
+-965417868, I__init_1.sql
+907060870, 1.0__hello.sql
+-1938594527, 1.1__foo.sql
+-1960070312, R__view_1.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/index2/idx_h2.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/index2/idx_h2.migrations
new file mode 100644
index 000000000..ef6e14321
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/index2/idx_h2.migrations
@@ -0,0 +1,7 @@
+-965417868, I__init_1.sql
+-390611389, g1/1.0__a.sql
+1908338681, g1/1.1__b.sql
+-1776543936, g2/2.0__a.sql
+253052666, g2/2.1__2b.sql
+-1960070312, R__view_1.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/db2/idx_db2.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/db2/idx_db2.migrations
new file mode 100644
index 000000000..ec4208068
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/db2/idx_db2.migrations
@@ -0,0 +1,6 @@
+441570368, 1.0__initial.sql
+-94595879, 1.1.sql
+578073685, 1.2__dropsFor_1.1.sql
+-509420890, 1.3.sql
+-1475628451, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/h2/idx_h2.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/h2/idx_h2.migrations
new file mode 100644
index 000000000..fb21ce854
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/h2/idx_h2.migrations
@@ -0,0 +1,6 @@
+-745768926, 1.0__initial.sql
+39858255, 1.1.sql
+1616986842, 1.2__dropsFor_1.1.sql
+-1513154593, 1.3.sql
+374569329, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/hana/idx_hana.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/hana/idx_hana.migrations
new file mode 100644
index 000000000..984c4bb50
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/hana/idx_hana.migrations
@@ -0,0 +1,6 @@
+-1536923954, 1.0__initial.sql
+1039838314, 1.1.sql
+562867593, 1.2__dropsFor_1.1.sql
+1566488731, 1.3.sql
+1030652294, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/hsqldb/idx_hsqldb.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/hsqldb/idx_hsqldb.migrations
new file mode 100644
index 000000000..ee5e2bd41
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/hsqldb/idx_hsqldb.migrations
@@ -0,0 +1,6 @@
+2097980375, 1.0__initial.sql
+2086418403, 1.1.sql
+-1462014216, 1.2__dropsFor_1.1.sql
+-2039573992, 1.3.sql
+2106151405, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/mysql/idx_mysql.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/mysql/idx_mysql.migrations
new file mode 100644
index 000000000..2ce271cdc
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/mysql/idx_mysql.migrations
@@ -0,0 +1,6 @@
+1075178692, 1.0__initial.sql
+880212944, 1.1.sql
+1029390755, 1.2__dropsFor_1.1.sql
+-380371830, 1.3.sql
+1085680731, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/mysql55/idx_mysql.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/mysql55/idx_mysql.migrations
new file mode 100644
index 000000000..9bf86f51e
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/mysql55/idx_mysql.migrations
@@ -0,0 +1,6 @@
+-1087663151, 1.0__initial.sql
+880212944, 1.1.sql
+1029390755, 1.2__dropsFor_1.1.sql
+-380371830, 1.3.sql
+1085680731, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/oracle/idx_oracle.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/oracle/idx_oracle.migrations
new file mode 100644
index 000000000..533b50b15
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/oracle/idx_oracle.migrations
@@ -0,0 +1,6 @@
+1164675950, 1.0__initial.sql
+-1916315387, 1.1.sql
+238598298, 1.2__dropsFor_1.1.sql
+483114276, 1.3.sql
+1213528478, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/postgres/idx_postgres.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/postgres/idx_postgres.migrations
new file mode 100644
index 000000000..7e74e6b50
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/postgres/idx_postgres.migrations
@@ -0,0 +1,6 @@
+1329543701, 1.0__initial.sql
+-1877647184, 1.1.sql
+-1861367028, 1.2__dropsFor_1.1.sql
+-1798982281, 1.3.sql
+1959776888, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/sqlite/idx_sqlite.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/sqlite/idx_sqlite.migrations
new file mode 100644
index 000000000..919841fde
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/sqlite/idx_sqlite.migrations
@@ -0,0 +1,6 @@
+1429491518, 1.0__initial.sql
+-347121868, 1.1.sql
+1359055889, 1.2__dropsFor_1.1.sql
+-1764531063, 1.3.sql
+-1070218324, 1.4__dropsFor_1.3.sql
+
diff --git a/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/sqlserver17/idx_sqlserver.migrations b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/sqlserver17/idx_sqlserver.migrations
new file mode 100644
index 000000000..f7cd1c04a
--- /dev/null
+++ b/ebean-ddl-generator/src/test/resources/dbmigration/migrationtest/sqlserver17/idx_sqlserver.migrations
@@ -0,0 +1,7 @@
+-2122378240, I__create_procs.sql
+-1048913407, 1.0__initial.sql
+615613536, 1.1.sql
+-1805601919, 1.2__dropsFor_1.1.sql
+-1791137342, 1.3.sql
+460536923, 1.4__dropsFor_1.3.sql
+
From a06f7bea41f53a4b77763b602730dbf0bd413d78 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 5 Aug 2021 12:55:42 +1200
Subject: [PATCH 55/87] Tidy javadoc for MutableValueInfo
---
ebean-api/src/main/java/io/ebean/bean/MutableValueInfo.java | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/bean/MutableValueInfo.java b/ebean-api/src/main/java/io/ebean/bean/MutableValueInfo.java
index 0f9c223aa..27716b13c 100644
--- a/ebean-api/src/main/java/io/ebean/bean/MutableValueInfo.java
+++ b/ebean-api/src/main/java/io/ebean/bean/MutableValueInfo.java
@@ -4,10 +4,10 @@ package io.ebean.bean;
* Holds information on mutable values (like plain beans stored as json).
*
* Used internally in EntityBeanIntercept for dirty detection on mutable values.
- * Typically dirty detection is based on a hash/checksum of json content or the
+ * Typically, mutation detection is based on a hash/checksum of json content or the
* original json content itself.
*
- * Refer to the mapping options {@code @DbJson(dirtyDetection)} and {@code @DbJson(keepSource)}.
+ * Refer to the mapping options {@code @DbJson(mutationDetection)}.
*/
public interface MutableValueInfo {
From 2043fdf7e1a8b845b383c5287a965cb2fe8ba9e7 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 5 Aug 2021 13:12:18 +1200
Subject: [PATCH 56/87] #2274 Add DatabaseConfig jsonMutationDetection property
setting the global default mode
---
.../java/io/ebean/config/DatabaseConfig.java | 28 +++++++++++++++++--
.../server/type/DefaultTypeManager.java | 2 +-
.../type/ScalarTypeJsonObjectMapper.java | 3 +-
.../server/type/TypeJsonManager.java | 9 +++++-
.../io/ebean/config/ServerConfigTest.java | 7 ++++-
5 files changed, 42 insertions(+), 7 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
index 476007ebe..d1f0346b5 100644
--- a/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
+++ b/ebean-api/src/main/java/io/ebean/config/DatabaseConfig.java
@@ -7,9 +7,7 @@ import io.ebean.EbeanVersion;
import io.ebean.PersistenceContextScope;
import io.ebean.Query;
import io.ebean.Transaction;
-import io.ebean.annotation.Encrypted;
-import io.ebean.annotation.PersistBatch;
-import io.ebean.annotation.Platform;
+import io.ebean.annotation.*;
import io.ebean.cache.ServerCachePlugin;
import io.ebean.config.dbplatform.DatabasePlatform;
import io.ebean.config.dbplatform.DbEncrypt;
@@ -193,6 +191,11 @@ public class DatabaseConfig {
*/
private JsonConfig.Include jsonInclude = JsonConfig.Include.ALL;
+ /**
+ * The default mode used for {@code @DbJson} with Jackson ObjectMapper.
+ */
+ private MutationDetection jsonMutationDetection = MutationDetection.HASH;
+
/**
* The database platform name. Used to imply a DatabasePlatform to use.
*/
@@ -737,6 +740,24 @@ public class DatabaseConfig {
this.jsonInclude = jsonInclude;
}
+ /**
+ * Return the default MutableDetection to use with {@code @DbJson} using Jackson.
+ *
+ * @see DbJson#mutationDetection()
+ */
+ public MutationDetection getJsonMutationDetection() {
+ return jsonMutationDetection;
+ }
+
+ /**
+ * Set the default MutableDetection to use with {@code @DbJson} using Jackson.
+ *
+ * @see DbJson#mutationDetection()
+ */
+ public void setJsonMutationDetection(MutationDetection jsonMutationDetection) {
+ this.jsonMutationDetection = jsonMutationDetection;
+ }
+
/**
* Return the name of the Database.
*/
@@ -2909,6 +2930,7 @@ public class DatabaseConfig {
jsonInclude = p.getEnum(JsonConfig.Include.class, "jsonInclude", jsonInclude);
jsonDateTime = p.getEnum(JsonConfig.DateTime.class, "jsonDateTime", jsonDateTime);
jsonDate = p.getEnum(JsonConfig.Date.class, "jsonDate", jsonDate);
+ jsonMutationDetection = p.getEnum(MutationDetection.class, "jsonMutationDetection", jsonMutationDetection);
runMigration = p.getBoolean("migration.run", runMigration);
ddlGenerate = p.getBoolean("ddl.generate", ddlGenerate);
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 8ffb15372..1400b2180 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
@@ -134,7 +134,7 @@ public final class DefaultTypeManager implements TypeManager {
this.postgres = isPostgres(config.getDatabasePlatform());
this.objectMapperPresent = config.getClassLoadConfig().isJacksonObjectMapperPresent();
this.objectMapper = (objectMapperPresent) ? initObjectMapper(config) : null;
- this.jsonManager = (objectMapperPresent) ? new TypeJsonManager(postgres, objectMapper) : null;
+ this.jsonManager = (objectMapperPresent) ? new TypeJsonManager(postgres, objectMapper, config.getJsonMutationDetection()) : null;
this.extraTypeFactory = new DefaultTypeFactory(config);
this.arrayTypeListFactory = arrayTypeListFactory(config.getDatabasePlatform());
this.arrayTypeSetFactory = arrayTypeSetFactory(config.getDatabasePlatform());
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 334f4b232..7ae24420f 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
@@ -38,7 +38,8 @@ class ScalarTypeJsonObjectMapper {
} else if (mode != MutationDetection.DEFAULT) {
return new GenericObject(jsonManager, field, dbType, docType);
}
- prop.setMutationDetection(MutationDetection.HASH);
+ // using the global default MutationDetection mode (defaults to HASH)
+ prop.setMutationDetection(jsonManager.mutationDetection());
return new GenericObject(jsonManager, field, dbType, docType);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/TypeJsonManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/TypeJsonManager.java
index 9cc0b5f0d..989ba2729 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/type/TypeJsonManager.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/TypeJsonManager.java
@@ -2,16 +2,23 @@ package io.ebeaninternal.server.type;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.ebean.ModifyAwareType;
+import io.ebean.annotation.MutationDetection;
import io.ebean.config.dbplatform.DbPlatformType;
class TypeJsonManager {
private final boolean postgres;
private final ObjectMapper objectMapper;
+ private final MutationDetection mutationDetection;
- TypeJsonManager(boolean postgres, Object objectMapper) {
+ TypeJsonManager(boolean postgres, Object objectMapper, MutationDetection mutationDetection) {
this.postgres = postgres;
this.objectMapper = (ObjectMapper) objectMapper;
+ this.mutationDetection = mutationDetection;
+ }
+
+ MutationDetection mutationDetection() {
+ return mutationDetection;
}
ObjectMapper objectMapper() {
diff --git a/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java b/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java
index 55eb1f06e..46f283e55 100644
--- a/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java
+++ b/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java
@@ -1,6 +1,7 @@
package io.ebean.config;
import com.fasterxml.jackson.databind.ObjectMapper;
+import io.ebean.annotation.MutationDetection;
import io.ebean.annotation.PersistBatch;
import io.ebean.config.dbplatform.IdType;
import io.ebean.datasource.DataSourceConfig;
@@ -62,7 +63,7 @@ public class ServerConfigTest {
props.setProperty("dbOffline", "true");
props.setProperty("jsonDateTime", "MILLIS");
props.setProperty("jsonDate", "MILLIS");
- props.setProperty("jsonDirtyByDefault", "false");
+ props.setProperty("jsonMutationDetection", "NONE");
props.setProperty("autoReadOnlyDataSource", "true");
props.setProperty("disableL2Cache", "true");
props.setProperty("notifyL2CacheInForeground", "true");
@@ -98,6 +99,9 @@ public class ServerConfigTest {
assertThat(serverConfig.getNamingConvention()).isInstanceOf(MatchingNamingConvention.class);
+ assertEquals(MutationDetection.NONE, serverConfig.getJsonMutationDetection());
+ serverConfig.setJsonMutationDetection(MutationDetection.SOURCE);
+ assertEquals(MutationDetection.SOURCE, serverConfig.getJsonMutationDetection());
assertEquals(IdType.SEQUENCE, serverConfig.getIdType());
assertEquals(PersistBatch.ALL, serverConfig.getPersistBatch());
assertEquals(PersistBatch.ALL, serverConfig.getPersistBatchOnCascade());
@@ -156,6 +160,7 @@ public class ServerConfigTest {
assertFalse(serverConfig.isIdGeneratorAutomatic());
assertEquals(JsonConfig.DateTime.ISO8601, serverConfig.getJsonDateTime());
assertEquals(JsonConfig.Date.ISO8601, serverConfig.getJsonDate());
+ assertEquals(MutationDetection.HASH, serverConfig.getJsonMutationDetection());
assertTrue(serverConfig.getPlatformConfig().isCaseSensitiveCollation());
assertTrue(serverConfig.isAutoLoadModuleInfo());
From a76442641b5eff698a0c36312ab9da3d35549e9d Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 5 Aug 2021 13:14:00 +1200
Subject: [PATCH 57/87] Tidy test only - rename ServerConfigTest to
DatabaseConfigTest and tidy
---
.../io/ebean/config/DatabaseConfigTest.java | 194 ++++++++++++++++++
.../io/ebean/config/ServerConfigTest.java | 194 ------------------
2 files changed, 194 insertions(+), 194 deletions(-)
create mode 100644 ebean-core/src/test/java/io/ebean/config/DatabaseConfigTest.java
delete mode 100644 ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java
diff --git a/ebean-core/src/test/java/io/ebean/config/DatabaseConfigTest.java b/ebean-core/src/test/java/io/ebean/config/DatabaseConfigTest.java
new file mode 100644
index 000000000..dd132a8e3
--- /dev/null
+++ b/ebean-core/src/test/java/io/ebean/config/DatabaseConfigTest.java
@@ -0,0 +1,194 @@
+package io.ebean.config;
+
+import com.fasterxml.jackson.databind.ObjectMapper;
+import io.ebean.annotation.MutationDetection;
+import io.ebean.annotation.PersistBatch;
+import io.ebean.config.dbplatform.IdType;
+import io.ebean.datasource.DataSourceConfig;
+import org.junit.Test;
+
+import java.util.Properties;
+
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
+
+public class DatabaseConfigTest {
+
+ @Test
+ public void testLoadFromEbeanProperties() {
+
+ DatabaseConfig config = new DatabaseConfig();
+ config.loadFromProperties();
+
+ assertEquals(PersistBatch.NONE, config.getPersistBatch());
+ assertNotNull(config.getProperties());
+ }
+
+ @Test
+ public void evalPropertiesInput() {
+
+ String home = System.getenv("HOME");
+
+ Properties props = new Properties();
+ props.setProperty("ddl.initSql", "${HOME}/initSql");
+
+ DatabaseConfig config = new DatabaseConfig();
+ config.loadFromProperties(props);
+
+ String ddlInitSql = config.getDdlInitSql();
+ assertThat(ddlInitSql).isEqualTo(home+"/initSql");
+ }
+
+ @Test
+ public void testLoadWithProperties() {
+
+ DatabaseConfig config = new DatabaseConfig();
+ config.setPersistBatch(PersistBatch.NONE);
+ config.setPersistBatchOnCascade(PersistBatch.NONE);
+ config.setAutoReadOnlyDataSource(false);
+ config.setReadOnlyDataSource(null);
+ config.setReadOnlyDataSourceConfig(new DataSourceConfig());
+
+ Properties props = new Properties();
+ props.setProperty("persistBatch", "ALL");
+ props.setProperty("persistBatchOnCascade", "ALL");
+ props.setProperty("dbuuid", "binary");
+ props.setProperty("jdbcFetchSizeFindEach", "42");
+ props.setProperty("jdbcFetchSizeFindList", "43");
+ props.setProperty("backgroundExecutorShutdownSecs", "98");
+ props.setProperty("backgroundExecutorSchedulePoolSize", "4");
+ props.setProperty("dbOffline", "true");
+ props.setProperty("jsonDateTime", "MILLIS");
+ props.setProperty("jsonDate", "MILLIS");
+ props.setProperty("jsonMutationDetection", "NONE");
+ props.setProperty("autoReadOnlyDataSource", "true");
+ props.setProperty("disableL2Cache", "true");
+ props.setProperty("notifyL2CacheInForeground", "true");
+ props.setProperty("idType", "SEQUENCE");
+ props.setProperty("mappingLocations", "classpath:/foo;bar");
+ props.setProperty("namingConvention", "io.ebean.config.MatchingNamingConvention");
+ props.setProperty("idGeneratorAutomatic", "true");
+ props.setProperty("enabledL2Regions", "r0,users,orgs");
+ props.setProperty("caseSensitiveCollation", "false");
+ props.setProperty("loadModuleInfo", "true");
+ props.setProperty("forUpdateNoKey", "true");
+ props.setProperty("defaultServer", "false");
+
+ props.setProperty("queryPlan.enable", "true");
+ props.setProperty("queryPlan.thresholdMicros", "10000");
+ props.setProperty("queryPlan.capture", "true");
+ props.setProperty("queryPlan.capturePeriodSecs", "42");
+ props.setProperty("queryPlan.captureMaxTimeMillis", "560");
+ props.setProperty("queryPlan.captureMaxCount", "7");
+
+ config.loadFromProperties(props);
+
+ assertFalse(config.isDefaultServer());
+ assertTrue(config.isDisableL2Cache());
+ assertTrue(config.isNotifyL2CacheInForeground());
+ assertTrue(config.isDbOffline());
+ assertTrue(config.isAutoReadOnlyDataSource());
+ assertTrue(config.isAutoLoadModuleInfo());
+
+ assertTrue(config.isIdGeneratorAutomatic());
+ assertFalse(config.getPlatformConfig().isCaseSensitiveCollation());
+ assertTrue(config.getPlatformConfig().isForUpdateNoKey());
+
+ assertThat(config.getNamingConvention()).isInstanceOf(MatchingNamingConvention.class);
+
+ assertEquals(MutationDetection.NONE, config.getJsonMutationDetection());
+ config.setJsonMutationDetection(MutationDetection.SOURCE);
+ assertEquals(MutationDetection.SOURCE, config.getJsonMutationDetection());
+ assertEquals(IdType.SEQUENCE, config.getIdType());
+ assertEquals(PersistBatch.ALL, config.getPersistBatch());
+ assertEquals(PersistBatch.ALL, config.getPersistBatchOnCascade());
+ assertEquals(PlatformConfig.DbUuid.BINARY, config.getPlatformConfig().getDbUuid());
+ assertEquals(JsonConfig.DateTime.MILLIS, config.getJsonDateTime());
+ assertEquals(JsonConfig.Date.MILLIS, config.getJsonDate());
+
+ assertEquals("r0,users,orgs", config.getEnabledL2Regions());
+
+ assertEquals(42, config.getJdbcFetchSizeFindEach());
+ assertEquals(43, config.getJdbcFetchSizeFindList());
+ assertEquals(4, config.getBackgroundExecutorSchedulePoolSize());
+ assertEquals(98, config.getBackgroundExecutorShutdownSecs());
+
+ assertTrue(config.isQueryPlanEnable());
+ assertEquals(10000, config.getQueryPlanThresholdMicros());
+ assertTrue(config.isQueryPlanCapture());
+ assertEquals(42, config.getQueryPlanCapturePeriodSecs());
+ assertEquals(560, config.getQueryPlanCaptureMaxTimeMillis());
+ assertEquals(7, config.getQueryPlanCaptureMaxCount());
+
+ assertThat(config.getMappingLocations()).containsExactly("classpath:/foo","bar");
+
+ config.setPersistBatch(PersistBatch.NONE);
+ config.setPersistBatchOnCascade(PersistBatch.NONE);
+
+ Properties props1 = new Properties();
+ props1.setProperty("ebean.persistBatch", "ALL");
+ props1.setProperty("ebean.persistBatchOnCascade", "ALL");
+
+ config.setNotifyL2CacheInForeground(true);
+ config.setDisableL2Cache(true);
+ props1.setProperty("ebean.disableL2Cache", "false");
+ props1.setProperty("ebean.notifyL2CacheInForeground", "false");
+
+ config.loadFromProperties(props1);
+ assertFalse(config.isDisableL2Cache());
+ assertFalse(config.isNotifyL2CacheInForeground());
+
+ assertEquals(PersistBatch.ALL, config.getPersistBatch());
+ assertEquals(PersistBatch.ALL, config.getPersistBatchOnCascade());
+
+ config.setEnabledL2Regions("r0,orgs");
+ assertEquals("r0,orgs", config.getEnabledL2Regions());
+ }
+
+ @Test
+ public void test_defaults() {
+
+ DatabaseConfig config = new DatabaseConfig();
+ assertTrue(config.isIdGeneratorAutomatic());
+ assertTrue(config.isDefaultServer());
+ assertFalse(config.isAutoPersistUpdates());
+
+ config.setIdGeneratorAutomatic(false);
+ assertFalse(config.isIdGeneratorAutomatic());
+ assertEquals(JsonConfig.DateTime.ISO8601, config.getJsonDateTime());
+ assertEquals(JsonConfig.Date.ISO8601, config.getJsonDate());
+ assertEquals(MutationDetection.HASH, config.getJsonMutationDetection());
+ assertTrue(config.getPlatformConfig().isCaseSensitiveCollation());
+ assertTrue(config.isAutoLoadModuleInfo());
+
+ assertFalse(config.isQueryPlanEnable());
+ assertEquals(Long.MAX_VALUE, config.getQueryPlanThresholdMicros());
+ assertFalse(config.isQueryPlanCapture());
+ assertEquals(600, config.getQueryPlanCapturePeriodSecs());
+ assertEquals(10000L, config.getQueryPlanCaptureMaxTimeMillis());
+ assertEquals(10, config.getQueryPlanCaptureMaxCount());
+
+ config.setLoadModuleInfo(false);
+ assertFalse(config.isAutoLoadModuleInfo());
+ config.setAutoPersistUpdates(true);
+ assertTrue(config.isAutoPersistUpdates());
+ }
+
+ @Test
+ public void test_putServiceObject() {
+
+ ObjectMapper objectMapper = new ObjectMapper();
+
+ DatabaseConfig config = new DatabaseConfig();
+ config.putServiceObject(objectMapper);
+
+ ObjectMapper mapper0 = config.getServiceObject(ObjectMapper.class);
+ ObjectMapper mapper1 = (ObjectMapper)config.getServiceObject("objectMapper");
+
+ assertThat(objectMapper).isSameAs(mapper0);
+ assertThat(objectMapper).isSameAs(mapper1);
+ }
+}
diff --git a/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java b/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java
deleted file mode 100644
index 46f283e55..000000000
--- a/ebean-core/src/test/java/io/ebean/config/ServerConfigTest.java
+++ /dev/null
@@ -1,194 +0,0 @@
-package io.ebean.config;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import io.ebean.annotation.MutationDetection;
-import io.ebean.annotation.PersistBatch;
-import io.ebean.config.dbplatform.IdType;
-import io.ebean.datasource.DataSourceConfig;
-import org.junit.Test;
-
-import java.util.Properties;
-
-import static org.assertj.core.api.Assertions.assertThat;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertFalse;
-import static org.junit.Assert.assertNotNull;
-import static org.junit.Assert.assertTrue;
-
-public class ServerConfigTest {
-
- @Test
- public void testLoadFromEbeanProperties() {
-
- ServerConfig serverConfig = new ServerConfig();
- serverConfig.loadFromProperties();
-
- assertEquals(PersistBatch.NONE, serverConfig.getPersistBatch());
- assertNotNull(serverConfig.getProperties());
- }
-
- @Test
- public void evalPropertiesInput() {
-
- String home = System.getenv("HOME");
-
- Properties props = new Properties();
- props.setProperty("ddl.initSql", "${HOME}/initSql");
-
- ServerConfig serverConfig = new ServerConfig();
- serverConfig.loadFromProperties(props);
-
- String ddlInitSql = serverConfig.getDdlInitSql();
- assertThat(ddlInitSql).isEqualTo(home+"/initSql");
- }
-
- @Test
- public void testLoadWithProperties() {
-
- ServerConfig serverConfig = new ServerConfig();
- serverConfig.setPersistBatch(PersistBatch.NONE);
- serverConfig.setPersistBatchOnCascade(PersistBatch.NONE);
- serverConfig.setAutoReadOnlyDataSource(false);
- serverConfig.setReadOnlyDataSource(null);
- serverConfig.setReadOnlyDataSourceConfig(new DataSourceConfig());
-
- Properties props = new Properties();
- props.setProperty("persistBatch", "ALL");
- props.setProperty("persistBatchOnCascade", "ALL");
- props.setProperty("dbuuid", "binary");
- props.setProperty("jdbcFetchSizeFindEach", "42");
- props.setProperty("jdbcFetchSizeFindList", "43");
- props.setProperty("backgroundExecutorShutdownSecs", "98");
- props.setProperty("backgroundExecutorSchedulePoolSize", "4");
- props.setProperty("dbOffline", "true");
- props.setProperty("jsonDateTime", "MILLIS");
- props.setProperty("jsonDate", "MILLIS");
- props.setProperty("jsonMutationDetection", "NONE");
- props.setProperty("autoReadOnlyDataSource", "true");
- props.setProperty("disableL2Cache", "true");
- props.setProperty("notifyL2CacheInForeground", "true");
- props.setProperty("idType", "SEQUENCE");
- props.setProperty("mappingLocations", "classpath:/foo;bar");
- props.setProperty("namingConvention", "io.ebean.config.MatchingNamingConvention");
- props.setProperty("idGeneratorAutomatic", "true");
- props.setProperty("enabledL2Regions", "r0,users,orgs");
- props.setProperty("caseSensitiveCollation", "false");
- props.setProperty("loadModuleInfo", "true");
- props.setProperty("forUpdateNoKey", "true");
- props.setProperty("defaultServer", "false");
-
- props.setProperty("queryPlan.enable", "true");
- props.setProperty("queryPlan.thresholdMicros", "10000");
- props.setProperty("queryPlan.capture", "true");
- props.setProperty("queryPlan.capturePeriodSecs", "42");
- props.setProperty("queryPlan.captureMaxTimeMillis", "560");
- props.setProperty("queryPlan.captureMaxCount", "7");
-
- serverConfig.loadFromProperties(props);
-
- assertFalse(serverConfig.isDefaultServer());
- assertTrue(serverConfig.isDisableL2Cache());
- assertTrue(serverConfig.isNotifyL2CacheInForeground());
- assertTrue(serverConfig.isDbOffline());
- assertTrue(serverConfig.isAutoReadOnlyDataSource());
- assertTrue(serverConfig.isAutoLoadModuleInfo());
-
- assertTrue(serverConfig.isIdGeneratorAutomatic());
- assertFalse(serverConfig.getPlatformConfig().isCaseSensitiveCollation());
- assertTrue(serverConfig.getPlatformConfig().isForUpdateNoKey());
-
- assertThat(serverConfig.getNamingConvention()).isInstanceOf(MatchingNamingConvention.class);
-
- assertEquals(MutationDetection.NONE, serverConfig.getJsonMutationDetection());
- serverConfig.setJsonMutationDetection(MutationDetection.SOURCE);
- assertEquals(MutationDetection.SOURCE, serverConfig.getJsonMutationDetection());
- assertEquals(IdType.SEQUENCE, serverConfig.getIdType());
- assertEquals(PersistBatch.ALL, serverConfig.getPersistBatch());
- assertEquals(PersistBatch.ALL, serverConfig.getPersistBatchOnCascade());
- assertEquals(PlatformConfig.DbUuid.BINARY, serverConfig.getPlatformConfig().getDbUuid());
- assertEquals(JsonConfig.DateTime.MILLIS, serverConfig.getJsonDateTime());
- assertEquals(JsonConfig.Date.MILLIS, serverConfig.getJsonDate());
-
- assertEquals("r0,users,orgs", serverConfig.getEnabledL2Regions());
-
- assertEquals(42, serverConfig.getJdbcFetchSizeFindEach());
- assertEquals(43, serverConfig.getJdbcFetchSizeFindList());
- assertEquals(4, serverConfig.getBackgroundExecutorSchedulePoolSize());
- assertEquals(98, serverConfig.getBackgroundExecutorShutdownSecs());
-
- assertTrue(serverConfig.isQueryPlanEnable());
- assertEquals(10000, serverConfig.getQueryPlanThresholdMicros());
- assertTrue(serverConfig.isQueryPlanCapture());
- assertEquals(42, serverConfig.getQueryPlanCapturePeriodSecs());
- assertEquals(560, serverConfig.getQueryPlanCaptureMaxTimeMillis());
- assertEquals(7, serverConfig.getQueryPlanCaptureMaxCount());
-
- assertThat(serverConfig.getMappingLocations()).containsExactly("classpath:/foo","bar");
-
- serverConfig.setPersistBatch(PersistBatch.NONE);
- serverConfig.setPersistBatchOnCascade(PersistBatch.NONE);
-
- Properties props1 = new Properties();
- props1.setProperty("ebean.persistBatch", "ALL");
- props1.setProperty("ebean.persistBatchOnCascade", "ALL");
-
- serverConfig.setNotifyL2CacheInForeground(true);
- serverConfig.setDisableL2Cache(true);
- props1.setProperty("ebean.disableL2Cache", "false");
- props1.setProperty("ebean.notifyL2CacheInForeground", "false");
-
- serverConfig.loadFromProperties(props1);
- assertFalse(serverConfig.isDisableL2Cache());
- assertFalse(serverConfig.isNotifyL2CacheInForeground());
-
- assertEquals(PersistBatch.ALL, serverConfig.getPersistBatch());
- assertEquals(PersistBatch.ALL, serverConfig.getPersistBatchOnCascade());
-
- serverConfig.setEnabledL2Regions("r0,orgs");
- assertEquals("r0,orgs", serverConfig.getEnabledL2Regions());
- }
-
- @Test
- public void test_defaults() {
-
- ServerConfig serverConfig = new ServerConfig();
- assertTrue(serverConfig.isIdGeneratorAutomatic());
- assertTrue(serverConfig.isDefaultServer());
- assertFalse(serverConfig.isAutoPersistUpdates());
-
- serverConfig.setIdGeneratorAutomatic(false);
- assertFalse(serverConfig.isIdGeneratorAutomatic());
- assertEquals(JsonConfig.DateTime.ISO8601, serverConfig.getJsonDateTime());
- assertEquals(JsonConfig.Date.ISO8601, serverConfig.getJsonDate());
- assertEquals(MutationDetection.HASH, serverConfig.getJsonMutationDetection());
- assertTrue(serverConfig.getPlatformConfig().isCaseSensitiveCollation());
- assertTrue(serverConfig.isAutoLoadModuleInfo());
-
- assertFalse(serverConfig.isQueryPlanEnable());
- assertEquals(Long.MAX_VALUE, serverConfig.getQueryPlanThresholdMicros());
- assertFalse(serverConfig.isQueryPlanCapture());
- assertEquals(600, serverConfig.getQueryPlanCapturePeriodSecs());
- assertEquals(10000L, serverConfig.getQueryPlanCaptureMaxTimeMillis());
- assertEquals(10, serverConfig.getQueryPlanCaptureMaxCount());
-
- serverConfig.setLoadModuleInfo(false);
- assertFalse(serverConfig.isAutoLoadModuleInfo());
- serverConfig.setAutoPersistUpdates(true);
- assertTrue(serverConfig.isAutoPersistUpdates());
- }
-
- @Test
- public void test_putServiceObject() {
-
- ObjectMapper objectMapper = new ObjectMapper();
-
- ServerConfig config = new ServerConfig();
- config.putServiceObject(objectMapper);
-
- ObjectMapper mapper0 = config.getServiceObject(ObjectMapper.class);
- ObjectMapper mapper1 = (ObjectMapper)config.getServiceObject("objectMapper");
-
- assertThat(objectMapper).isSameAs(mapper0);
- assertThat(objectMapper).isSameAs(mapper1);
- }
-}
From 9a82dbb3e6e22bfac5799cdb0ea405eb354e05aa Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 5 Aug 2021 13:17:32 +1200
Subject: [PATCH 58/87] Bump parent to java8-oss 3.2 with GPG maven plugin
active only with "release" profile
The GPG maven plugin is now only active with the "release" profile
use -P release when we want to release with GPG signing
---
pom.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/pom.xml b/pom.xml
index 0328ea5b6..465b49402 100644
--- a/pom.xml
+++ b/pom.xml
@@ -4,7 +4,7 @@
org.avajejava8-oss
- 3.1
+ 3.2io.ebean
From d98a31fa6b64f9dbf0cb57b018c4a6fb38561beb Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 5 Aug 2021 16:53:51 +1200
Subject: [PATCH 59/87] Bump to 12.11.0-SNAPSHOT
---
ebean-api/pom.xml | 2 +-
ebean-autotune/pom.xml | 4 ++--
ebean-bom/pom.xml | 30 +++++++++++++++---------------
ebean-core-type/pom.xml | 4 ++--
ebean-core/pom.xml | 8 ++++----
ebean-ddl-generator/pom.xml | 6 +++---
ebean-externalmapping-api/pom.xml | 2 +-
ebean-externalmapping-xml/pom.xml | 8 ++++----
ebean-postgis/pom.xml | 6 +++---
ebean-querybean/pom.xml | 10 +++++-----
ebean-redis/pom.xml | 12 ++++++------
ebean-test/pom.xml | 6 +++---
ebean/pom.xml | 8 ++++----
kotlin-querybean-generator/pom.xml | 8 ++++----
pom.xml | 2 +-
querybean-generator/pom.xml | 2 +-
16 files changed, 59 insertions(+), 59 deletions(-)
diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml
index 503c2f2c5..9afbb6446 100644
--- a/ebean-api/pom.xml
+++ b/ebean-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean api
diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml
index 1534f122b..0b0355981 100644
--- a/ebean-autotune/pom.xml
+++ b/ebean-autotune/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOT
@@ -26,7 +26,7 @@
io.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovided
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index 0e6ebde4d..9f79cc9c2 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean bom
@@ -81,88 +81,88 @@
io.ebeanebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-api
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-core-type
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-ddl-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-externalmapping-api
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-externalmapping-xml
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-autotune
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-querybean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanquerybean-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovidedio.ebeankotlin-querybean-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovidedio.ebeanebean-test
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtestio.ebeanebean-postgis
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-redis
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOT
diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml
index ad1d7c207..35a29a677 100644
--- a/ebean-core-type/pom.xml
+++ b/ebean-core-type/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean-core-type
@@ -16,7 +16,7 @@
io.ebeanebean-api
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOT
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index 8303c519d..cfac597fa 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -3,7 +3,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean-core
@@ -87,19 +87,19 @@
io.ebeanebean-api
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-core-type
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-externalmapping-api
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOT
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index dec77c4b0..d7267945e 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean ddl generation
@@ -28,14 +28,14 @@
io.ebeanebean-core-type
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovidedio.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovided
diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml
index 5cb459f61..a9b9968b9 100644
--- a/ebean-externalmapping-api/pom.xml
+++ b/ebean-externalmapping-api/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean external mapping api
diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml
index 8275fc989..0ce9ce6ca 100644
--- a/ebean-externalmapping-xml/pom.xml
+++ b/ebean-externalmapping-xml/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOT
@@ -33,7 +33,7 @@
io.ebeanebean-externalmapping-api
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOT
@@ -59,14 +59,14 @@
io.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtestio.ebeanebean-ddl-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtest
diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml
index ff1beee77..a6bfe2ed0 100644
--- a/ebean-postgis/pom.xml
+++ b/ebean-postgis/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean postgis
@@ -23,7 +23,7 @@
io.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovided
@@ -74,7 +74,7 @@
io.ebeanebean-test
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtest
diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml
index d9a2cdd6e..b3ffadfc0 100644
--- a/ebean-querybean/pom.xml
+++ b/ebean-querybean/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean querybean
@@ -17,7 +17,7 @@
io.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovided
@@ -57,21 +57,21 @@
io.ebeanebean-ddl-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtestio.ebeanquerybean-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtestio.ebeanebean-test
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtest
diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml
index 097cd9318..d0d5f8ee2 100644
--- a/ebean-redis/pom.xml
+++ b/ebean-redis/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean-redis
@@ -22,35 +22,35 @@
io.ebeanebean-api
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovidedio.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovidedio.ebeanebean-querybean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtestio.ebeanquerybean-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtestio.ebeanebean-test
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtest
diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml
index e889b6204..43b5ee6f3 100644
--- a/ebean-test/pom.xml
+++ b/ebean-test/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean test
@@ -29,14 +29,14 @@
io.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTprovidedio.ebeanebean-ddl-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOT
diff --git a/ebean/pom.xml b/ebean/pom.xml
index ddd60d284..819328290 100644
--- a/ebean/pom.xml
+++ b/ebean/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTebean composite
@@ -22,20 +22,20 @@
io.ebeanebean-api
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTio.ebeanebean-querybean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOT
diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml
index c3a487ecf..8f3cafa8a 100644
--- a/kotlin-querybean-generator/pom.xml
+++ b/kotlin-querybean-generator/pom.xml
@@ -5,7 +5,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTkotlin querybean generator
@@ -30,7 +30,7 @@
io.ebeanebean-querybean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtest
@@ -44,7 +44,7 @@
io.ebeanebean-core
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtest
@@ -65,7 +65,7 @@
io.ebeanebean-ddl-generator
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTtest
diff --git a/pom.xml b/pom.xml
index 465b49402..b86928387 100644
--- a/pom.xml
+++ b/pom.xml
@@ -9,7 +9,7 @@
io.ebeanebean-parent
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTpomebean parent
diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml
index 27e5d0399..956e39cb5 100644
--- a/querybean-generator/pom.xml
+++ b/querybean-generator/pom.xml
@@ -4,7 +4,7 @@
ebean-parentio.ebean
- 12.10.1-SNAPSHOT
+ 12.11.0-SNAPSHOTquerybean generator
From f34e0f5f2b8536f8d452818b0f04582f89c3bf72 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Thu, 5 Aug 2021 23:03:02 +1200
Subject: [PATCH 60/87] #2287 - ebean-migration: For multiple platforms
automatically run the correct migrations
---
ebean-bom/pom.xml | 8 +++---
ebean-core/pom.xml | 4 +--
.../server/core/DefaultServer.java | 1 +
.../server/core/bootup/BootupClasses.java | 27 +++----------------
ebean-ddl-generator/pom.xml | 2 +-
.../dbmigration/DefaultDbMigration.java | 9 +++----
.../dbmigration/IndexMigration.java | 5 +---
.../dbmigration/IndexMigrationTest.java | 4 +--
ebean-externalmapping-xml/pom.xml | 2 +-
.../xmlmapping/XmlMappingReader.java | 3 +--
10 files changed, 21 insertions(+), 44 deletions(-)
diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml
index 9f79cc9c2..35ed6d6a0 100644
--- a/ebean-bom/pom.xml
+++ b/ebean-bom/pom.xml
@@ -14,12 +14,12 @@
1.0
- 1.0
- 12.4.0
+ 1.1
+ 12.11.04.17.0
- 12.10.0
- 12.10.0
+ 12.11.0
+ 12.11.0
diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index cfac597fa..3426582d3 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -52,13 +52,13 @@
io.avajeclasspath-scanner
- 4.2
+ 6.0io.ebeanebean-migration-auto
- 1.0
+ 1.1
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index 4aa90ad13..d21f9967f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -397,6 +397,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
if (dbSchema != null) {
migrationRunner.setDefaultDbSchema(dbSchema);
}
+ migrationRunner.setPlatform(config.getDatabasePlatform().getPlatform().base().name().toLowerCase());
migrationRunner.loadProperties(config.getProperties());
migrationRunner.run(config.getDataSource());
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClasses.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClasses.java
index f7c1a5fea..aba5533e0 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClasses.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/bootup/BootupClasses.java
@@ -1,6 +1,5 @@
package io.ebeaninternal.server.core.bootup;
-import io.avaje.classpath.scanner.ClassFilter;
import io.ebean.annotation.DocStore;
import io.ebean.config.DatabaseConfig;
import io.ebean.config.IdGenerator;
@@ -27,27 +26,23 @@ import javax.persistence.Embeddable;
import javax.persistence.Entity;
import javax.persistence.Table;
import java.lang.annotation.Annotation;
-import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.List;
+import java.util.function.Predicate;
/**
* Interesting classes for a EbeanServer such as Embeddable, Entity,
* ScalarTypes, Finders, Listeners and Controllers.
*/
-public class BootupClasses implements ClassFilter {
+public class BootupClasses implements Predicate> {
private static final Logger logger = LoggerFactory.getLogger(BootupClasses.class);
private final List> embeddableList = new ArrayList<>();
-
private final List> entityList = new ArrayList<>();
-
private final List>> scalarTypeList = new ArrayList<>();
-
private final List>> scalarConverterList = new ArrayList<>();
-
private final List>> attributeConverterList = new ArrayList<>();
// The following objects are instantiated on first request
@@ -55,19 +50,12 @@ public class BootupClasses implements ClassFilter {
// instance list, that holds the instance. Once a class is instantiated
// (or added) it will get removed from the candidate list
private final List> idGeneratorCandidates = new ArrayList<>();
-
private final List> beanPersistControllerCandidates = new ArrayList<>();
-
private final List> beanPostLoadCandidates = new ArrayList<>();
-
private final List> beanPostConstructListenerCandidates = new ArrayList<>();
-
private final List> beanFindControllerCandidates = new ArrayList<>();
-
private final List> beanPersistListenerCandidates = new ArrayList<>();
-
private final List> beanQueryAdapterCandidates = new ArrayList<>();
-
private final List> serverConfigStartupCandidates = new ArrayList<>();
private final List idGeneratorInstances = new ArrayList<>();
@@ -98,7 +86,7 @@ public class BootupClasses implements ClassFilter {
public BootupClasses(List> list) {
if (list != null) {
for (Class> cls : list) {
- isMatch(cls);
+ test(cls);
}
}
}
@@ -188,13 +176,11 @@ public class BootupClasses implements ClassFilter {
}
public void addChangeLogInstances(DatabaseConfig config) {
-
readAuditPrepare = config.getReadAuditPrepare();
readAuditLogger = config.getReadAuditLogger();
changeLogPrepare = config.getChangeLogPrepare();
changeLogListener = config.getChangeLogListener();
changeLogRegister = config.getChangeLogRegister();
-
// if not already set create the implementations found
// via classpath scanning
if (readAuditPrepare == null && readAuditPrepareClass != null) {
@@ -341,18 +327,14 @@ public class BootupClasses implements ClassFilter {
}
@Override
- public boolean isMatch(Class> cls) {
-
+ public boolean test(Class> cls) {
if (isEmbeddable(cls)) {
embeddableList.add(cls);
-
} else if (isEntity(cls)) {
entityList.add(cls);
-
} else {
return isInterestingInterface(cls);
}
-
return true;
}
@@ -364,7 +346,6 @@ public class BootupClasses implements ClassFilter {
*/
@SuppressWarnings("unchecked")
private boolean isInterestingInterface(Class> cls) {
-
if (Modifier.isAbstract(cls.getModifiers())) {
// do not include abstract classes as we can
// not instantiate them
diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml
index d7267945e..4035af5f2 100644
--- a/ebean-ddl-generator/pom.xml
+++ b/ebean-ddl-generator/pom.xml
@@ -22,7 +22,7 @@
io.ebeanebean-migration
- 12.4.0
+ 12.11.0
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
index 7f2a90558..5bb40fa08 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/DefaultDbMigration.java
@@ -281,7 +281,7 @@ public class DefaultDbMigration implements DbMigration {
public String generateMigration() throws IOException {
final String version = generateMigrationFor(false);
if (includeIndex) {
- generateIndex(version);
+ generateIndex();
}
return version;
}
@@ -289,15 +289,14 @@ public class DefaultDbMigration implements DbMigration {
/**
* Generate the {@code idx_platform.migrations} file.
*/
- private void generateIndex(String version) throws IOException {
- final boolean overwrite = version != null;
+ private void generateIndex() throws IOException {
final File topDir = migrationDirectory(false);
if (!platforms.isEmpty()) {
for (Pair pair : platforms) {
- new IndexMigration(topDir, pair).generate(overwrite);
+ new IndexMigration(topDir, pair).generate();
}
} else {
- new IndexMigration(topDir, databasePlatform).generate(overwrite);
+ new IndexMigration(topDir, databasePlatform).generate();
}
}
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/IndexMigration.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/IndexMigration.java
index 215c18e72..baedb77b9 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/IndexMigration.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/IndexMigration.java
@@ -43,10 +43,7 @@ class IndexMigration {
return new File(topDir, name);
}
- void generate(boolean overwrite) throws IOException {
- if (!overwrite && indexFile.exists()) {
- return;
- }
+ void generate() throws IOException {
readSqlFiles(topDir);
generateIndex();
}
diff --git a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
index 5a04d8917..a22a42ec7 100644
--- a/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
+++ b/ebean-ddl-generator/src/test/java/io/ebeaninternal/dbmigration/IndexMigrationTest.java
@@ -24,7 +24,7 @@ public class IndexMigrationTest {
}
DatabasePlatform pg = new PostgresPlatform();
IndexMigration indexMigration = new IndexMigration(topDir, pg);
- indexMigration.generate(true);
+ indexMigration.generate();
File expected = new File(topDir, "idx_postgres.migrations");
@@ -48,7 +48,7 @@ public class IndexMigrationTest {
}
DatabasePlatform pg = new H2Platform();
IndexMigration indexMigration = new IndexMigration(topDir, pg);
- indexMigration.generate(true);
+ indexMigration.generate();
File expected = new File(topDir, "idx_h2.migrations");
assertThat(expected).exists();
diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml
index 0ce9ce6ca..3f0b71546 100644
--- a/ebean-externalmapping-xml/pom.xml
+++ b/ebean-externalmapping-xml/pom.xml
@@ -45,7 +45,7 @@
io.avajeclasspath-scanner
- 4.2
+ 6.0
diff --git a/ebean-externalmapping-xml/src/main/java/io/ebeaninternal/xmlmapping/XmlMappingReader.java b/ebean-externalmapping-xml/src/main/java/io/ebeaninternal/xmlmapping/XmlMappingReader.java
index 2519ef8f1..8b28975ef 100644
--- a/ebean-externalmapping-xml/src/main/java/io/ebeaninternal/xmlmapping/XmlMappingReader.java
+++ b/ebean-externalmapping-xml/src/main/java/io/ebeaninternal/xmlmapping/XmlMappingReader.java
@@ -6,7 +6,6 @@ import io.ebeaninternal.xmlmapping.model.XmEbean;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Unmarshaller;
-import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
@@ -59,7 +58,7 @@ public class XmlMappingReader {
try {
List mappings = new ArrayList<>();
for (Resource xmlMappingRes : resourceList) {
- try (InputStream is = new FileInputStream(xmlMappingRes.getLocationOnDisk())) {
+ try (InputStream is = xmlMappingRes.inputStream()) {
mappings.add(XmlMappingReader.read(is));
}
}
From 7ca72a39b1c2cce8a35b2e79871145e4c5970498 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 6 Aug 2021 11:52:38 +1200
Subject: [PATCH 61/87] Change query metric hash from MD5 of sql + name + loc
to Checksum of sql
---
.../java/io/ebean/meta/MetaQueryMetric.java | 2 +-
.../java/io/ebean/meta/MetaQueryPlan.java | 2 +-
.../main/java/io/ebean/meta/MetricData.java | 6 ++--
.../java/io/ebean/meta/QueryPlanInit.java | 10 +++---
.../io/ebeaninternal/api/SpiQueryPlan.java | 2 +-
.../server/core/DumpMetricsJson.java | 19 ++++++------
.../server/profile/DQueryPlanMeta.java | 16 +++-------
.../server/profile/DQueryPlanMetric.java | 2 +-
.../server/query/CQueryPlan.java | 25 +++------------
.../server/query/CQueryPlanStats.java | 2 +-
.../server/query/DQueryPlanOutput.java | 7 ++---
.../io/ebeaninternal/server/util/Md5.java | 31 -------------------
.../io/ebeaninternal/server/util/Md5Test.java | 18 -----------
.../query/finder/TestCustomerFinder.java | 2 +-
14 files changed, 36 insertions(+), 108 deletions(-)
delete mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/util/Md5.java
delete mode 100644 ebean-core/src/test/java/io/ebeaninternal/server/util/Md5Test.java
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
index 514b700dc..edfe978e5 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
@@ -23,6 +23,6 @@ public interface MetaQueryMetric extends MetaTimedMetric {
/**
* Return the hash of the plan.
*/
- String getHash();
+ long getHash();
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
index fb2b6d095..4f9667bd0 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
@@ -30,7 +30,7 @@ public interface MetaQueryPlan {
/**
* Return the hash of the plan.
*/
- String getHash();
+ long getHash();
/**
* Return a description of the bind values.
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetricData.java b/ebean-api/src/main/java/io/ebean/meta/MetricData.java
index b4606b1d7..9a24aa9f2 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetricData.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetricData.java
@@ -6,7 +6,7 @@ package io.ebean.meta;
public class MetricData {
private String name;
- private String hash;
+ private long hash;
private String loc;
private String sql;
@@ -30,11 +30,11 @@ public class MetricData {
this.name = name;
}
- public String getHash() {
+ public long getHash() {
return hash;
}
- public void setHash(String hash) {
+ public void setHash(long hash) {
this.hash = hash;
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/QueryPlanInit.java b/ebean-api/src/main/java/io/ebean/meta/QueryPlanInit.java
index 3c19caa39..9b785ec62 100644
--- a/ebean-api/src/main/java/io/ebean/meta/QueryPlanInit.java
+++ b/ebean-api/src/main/java/io/ebean/meta/QueryPlanInit.java
@@ -10,7 +10,7 @@ public class QueryPlanInit {
private boolean all;
- private Set hashes = new HashSet<>();
+ private Set hashes = new HashSet<>();
private long thresholdMicros;
@@ -47,21 +47,21 @@ public class QueryPlanInit {
/**
* Return true if the query plan should be initiated based on it's hash.
*/
- public boolean includeHash(String hash) {
- return all || hashes.contains(hash);
+ public boolean includeHash(long sqlHash) {
+ return all || hashes.contains(sqlHash);
}
/**
* Return the specific hashes that we want to collect query plans on.
*/
- public Set getHashes() {
+ public Set getHashes() {
return hashes;
}
/**
* Set the specific hashes that we want to collect query plans on.
*/
- public void setHashes(Set hashes) {
+ public void setHashes(Set hashes) {
this.hashes = hashes;
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
index 96a1eade7..cd6c83114 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
@@ -20,7 +20,7 @@ public interface SpiQueryPlan {
/**
* The hash for the query plan.
*/
- String getHash();
+ long getHash();
/**
* The SQL for the query plan.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
index ed13151c4..240d050f3 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
@@ -197,7 +197,7 @@ class DumpMetricsJson implements ServerMetricsAsJson {
metricStart(metric);
appendTiming(metric);
if (withHash) {
- appendExtra("hash", metric.getHash());
+ keyVal("hash", metric.getHash());
}
if (isIncludeDetail(metric)) {
appendExtra("loc", metric.getLocation());
@@ -218,13 +218,14 @@ class DumpMetricsJson implements ServerMetricsAsJson {
}
private void appendTiming(MetaTimedMetric timedMetric) throws IOException {
- key("count");
- val(timedMetric.getCount());
- key("total");
- val(timedMetric.getTotal());
- key("mean");
- val(timedMetric.getMean());
- key("max");
- val(timedMetric.getMax());
+ keyVal("count", timedMetric.getCount());
+ keyVal("total", timedMetric.getTotal());
+ keyVal("mean", timedMetric.getMean());
+ keyVal("max", timedMetric.getMax());
+ }
+
+ private void keyVal(String key, long value) throws IOException {
+ key(key);
+ val(value);
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMeta.java
index 0690b5fdd..0f25f0d9c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMeta.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMeta.java
@@ -1,7 +1,7 @@
package io.ebeaninternal.server.profile;
import io.ebean.ProfileLocation;
-import io.ebeaninternal.server.util.Md5;
+import io.ebeaninternal.server.util.Checksum;
class DQueryPlanMeta {
@@ -10,7 +10,7 @@ class DQueryPlanMeta {
private final ProfileLocation profileLocation;
private final String name;
private final String sql;
- private final String hash;
+ private final long hash;
DQueryPlanMeta(Class> type, String label, ProfileLocation profileLocation, String sql) {
this.type = type;
@@ -22,22 +22,14 @@ class DQueryPlanMeta {
name += "_" + label;
}
this.name = name;
- this.hash = initHash();
- }
-
- private String initHash() {
- StringBuilder sb = new StringBuilder(sql).append("|").append(name);
- if (profileLocation != null) {
- sb.append("|").append(profileLocation.location());
- }
- return Md5.hash(sb.toString());
+ this.hash = Checksum.checksum(sql);
}
public Class> getType() {
return type;
}
- public String getHash() {
+ public long getHash() {
return hash;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
index 21559a152..765679404 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
@@ -59,7 +59,7 @@ class DQueryPlanMetric implements QueryPlanMetric {
}
@Override
- public String getHash() {
+ public long getHash() {
return meta.getHash();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlan.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlan.java
index 295cbe7c2..3c322190f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlan.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlan.java
@@ -13,12 +13,12 @@ import io.ebeaninternal.api.SpiQueryBindCapture;
import io.ebeaninternal.api.SpiQueryPlan;
import io.ebeaninternal.server.core.OrmQueryRequest;
import io.ebeaninternal.server.core.timezone.DataTimeZone;
+import io.ebeaninternal.server.util.Checksum;
import io.ebeaninternal.server.util.Str;
import io.ebeaninternal.server.query.CQueryPlanStats.Snapshot;
import io.ebeaninternal.server.type.DataBind;
import io.ebeaninternal.server.type.DataBindCapture;
import io.ebeaninternal.server.type.RsetDataReader;
-import io.ebeaninternal.server.util.Md5;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -68,7 +68,7 @@ public class CQueryPlan implements SpiQueryPlan {
private final boolean rawSql;
private final String sql;
- private final String hash;
+ private final long hash;
private final String logWhereSql;
@@ -118,7 +118,7 @@ public class CQueryPlan implements SpiQueryPlan {
this.stats = new CQueryPlanStats(this);
this.dependentTables = sqlTree.dependentTables();
this.bindCapture = initBindCapture(query);
- this.hash = md5Hash();
+ this.hash = Checksum.checksum(sql);
}
/**
@@ -143,7 +143,7 @@ public class CQueryPlan implements SpiQueryPlan {
this.stats = new CQueryPlanStats(this);
this.dependentTables = sqlTree.dependentTables();
this.bindCapture = initBindCaptureRaw(sql, query);
- this.hash = md5Hash();
+ this.hash = Checksum.checksum(sql);
}
private String deriveName(String label, SpiQuery.Type type, String simpleName) {
@@ -193,7 +193,7 @@ public class CQueryPlan implements SpiQueryPlan {
}
@Override
- public String getHash() {
+ public long getHash() {
return hash;
}
@@ -276,21 +276,6 @@ public class CQueryPlan implements SpiQueryPlan {
return rawSql ? planKey.getPartialKey() + "_" + hash : planKey.getPartialKey();
}
- /**
- * Return the MD5 hash of the sql.
- */
- private String md5Hash() {
- StringBuilder sb = new StringBuilder(sql)
- .append("|").append(name)
- .append("|").append(location);
- try {
- return Md5.hash(sb.toString());
- } catch (Exception e) {
- logger.error("Failed to MD5 hash the query", e);
- return "error";
- }
- }
-
SqlTree getSqlTree() {
return sqlTree;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
index 23de6de5c..3f7f61070 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
@@ -127,7 +127,7 @@ public final class CQueryPlanStats {
}
@Override
- public String getHash() {
+ public long getHash() {
return queryPlan.getHash();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DQueryPlanOutput.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DQueryPlanOutput.java
index 8065a62dc..3d8c7aaac 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DQueryPlanOutput.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DQueryPlanOutput.java
@@ -16,12 +16,11 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
private final String sql;
private final String bind;
private final String plan;
-
- private String hash;
+ private final long hash;
private long queryTimeMicros;
private long captureCount;
- DQueryPlanOutput(Class> beanType, String label, String hash, String sql, ProfileLocation profileLocation, String bind, String plan) {
+ DQueryPlanOutput(Class> beanType, String label, long hash, String sql, ProfileLocation profileLocation, String bind, String plan) {
this.beanType = beanType;
this.label = label;
this.hash = hash;
@@ -32,7 +31,7 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
}
@Override
- public String getHash() {
+ public long getHash() {
return hash;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/util/Md5.java b/ebean-core/src/main/java/io/ebeaninternal/server/util/Md5.java
deleted file mode 100644
index 7329d3f25..000000000
--- a/ebean-core/src/main/java/io/ebeaninternal/server/util/Md5.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package io.ebeaninternal.server.util;
-
-import java.nio.charset.StandardCharsets;
-import java.security.MessageDigest;
-
-public final class Md5 {
-
- /**
- * Return the MD5 hash of the underlying sql.
- */
- public static String hash(String content) {
- try {
- MessageDigest md = MessageDigest.getInstance("MD5");
- return digestToHex(md.digest(content.getBytes(StandardCharsets.UTF_8)));
- } catch (Exception e) {
- throw new RuntimeException("MD5 hashing failed", e);
- }
- }
-
- /**
- * Convert the digest into a hex value.
- */
- private static String digestToHex(byte[] digest) {
- StringBuilder sb = new StringBuilder();
- for (byte aDigest : digest) {
- sb.append(Integer.toString((aDigest & 0xff) + 0x100, 16).substring(1));
- }
- return sb.toString();
- }
-
-}
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/util/Md5Test.java b/ebean-core/src/test/java/io/ebeaninternal/server/util/Md5Test.java
deleted file mode 100644
index d9db27d3d..000000000
--- a/ebean-core/src/test/java/io/ebeaninternal/server/util/Md5Test.java
+++ /dev/null
@@ -1,18 +0,0 @@
-package io.ebeaninternal.server.util;
-
-import org.junit.Test;
-
-import static org.junit.Assert.assertEquals;
-
-public class Md5Test {
-
- @Test
- public void hash() throws Exception {
-
- String content = "some random content we wish to hash";
- String hash1 = Md5.hash(content);
- String hash2 = Md5.hash(content);
- assertEquals(hash1, hash2);
- }
-
-}
diff --git a/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java b/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
index eeefe42c2..8e8c5a288 100644
--- a/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
+++ b/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
@@ -244,7 +244,7 @@ public class TestCustomerFinder extends BaseTestCase {
assertThat(metricsJson).contains("\"name\":\"orm.Customer.findList\"");
assertThat(metricsJson).contains("\"loc\":\"CustomerFinder.byNameStatus(CustomerFinder.java:44)\"");
if (isH2() || isPostgres()) {
- assertThat(metricsJson).contains("\"hash\":\"cc20eb930403cfd418db2d0475c6e26a\"");
+ assertThat(metricsJson).contains("\"hash\":3634991469");
assertThat(metricsJson).contains("\"sql\":\"select t0.id, t0.status,");
}
}
From 202d78571012058ec55ace72a453edcc4d9f00d8 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 6 Aug 2021 12:06:43 +1200
Subject: [PATCH 62/87] Rename hash to sqlHash to better reflect what it is
(CRC32 checksum of the sql)
---
.../main/java/io/ebean/meta/MetaQueryMetric.java | 4 ++--
.../src/main/java/io/ebean/meta/MetricData.java | 10 +++++-----
.../java/io/ebeaninternal/api/SpiQueryPlan.java | 4 ++--
.../io/ebeaninternal/server/core/DumpMetrics.java | 2 +-
.../ebeaninternal/server/core/DumpMetricsData.java | 2 +-
.../ebeaninternal/server/core/DumpMetricsJson.java | 2 +-
.../server/deploy/BeanDescriptor.java | 2 +-
.../server/profile/DQueryPlanMeta.java | 8 ++++----
.../server/profile/DQueryPlanMetric.java | 4 ++--
.../io/ebeaninternal/server/query/CQueryPlan.java | 14 +++++++-------
.../server/query/CQueryPlanStats.java | 4 ++--
.../org/tests/query/finder/TestCustomerFinder.java | 6 +++---
12 files changed, 31 insertions(+), 31 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
index edfe978e5..e3907c69c 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
@@ -21,8 +21,8 @@ public interface MetaQueryMetric extends MetaTimedMetric {
String getSql();
/**
- * Return the hash of the plan.
+ * Return the hash of the sql.
*/
- long getHash();
+ long getSqlHash();
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetricData.java b/ebean-api/src/main/java/io/ebean/meta/MetricData.java
index 9a24aa9f2..d8f80a0a9 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetricData.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetricData.java
@@ -6,7 +6,7 @@ package io.ebean.meta;
public class MetricData {
private String name;
- private long hash;
+ private long sqlHash;
private String loc;
private String sql;
@@ -30,12 +30,12 @@ public class MetricData {
this.name = name;
}
- public long getHash() {
- return hash;
+ public long getSqlHash() {
+ return sqlHash;
}
- public void setHash(long hash) {
- this.hash = hash;
+ public void setSqlHash(long sqlHash) {
+ this.sqlHash = sqlHash;
}
public String getLoc() {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
index cd6c83114..878dcc716 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQueryPlan.java
@@ -18,9 +18,9 @@ public interface SpiQueryPlan {
String getName();
/**
- * The hash for the query plan.
+ * The hash of the sql.
*/
- long getHash();
+ long getSqlHash();
/**
* The SQL for the query plan.
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
index 972ee2754..4c42c4b11 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
@@ -120,7 +120,7 @@ class DumpMetrics {
appendQueryName(metric, sb);
appendCounters(metric, sb);
if (dumpHash) {
- sb.append("\n hash:").append(metric.getHash());
+ sb.append("\n sqlHash:").append(metric.getSqlHash());
}
appendProfileAndSql(metric, sb);
out(sb.toString());
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
index 9854cafea..7458d0468 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
@@ -67,7 +67,7 @@ class DumpMetricsData {
final MetricData data = create(metric);
appendCounters(data, metric);
appendLocationAndSql(data, metric);
- data.setHash(metric.getHash());
+ data.setSqlHash(metric.getSqlHash());
}
private void appendLocationAndSql(MetricData data, MetaQueryMetric metric) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
index 240d050f3..6f74dac97 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
@@ -197,7 +197,7 @@ class DumpMetricsJson implements ServerMetricsAsJson {
metricStart(metric);
appendTiming(metric);
if (withHash) {
- keyVal("hash", metric.getHash());
+ keyVal("sqlHash", metric.getSqlHash());
}
if (isIncludeDetail(metric)) {
appendExtra("loc", metric.getLocation());
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 8f0fea0f2..e08b37d1d 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
@@ -1558,7 +1558,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
void queryPlanInit(QueryPlanInit request, List list) {
for (CQueryPlan queryPlan : queryPlanCache.values()) {
- if (request.includeHash(queryPlan.getHash())) {
+ if (request.includeHash(queryPlan.getSqlHash())) {
queryPlan.queryPlanInit(request.getThresholdMicros());
list.add(queryPlan.createMeta(null, null));
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMeta.java
index 0f25f0d9c..5359d96ed 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMeta.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMeta.java
@@ -10,7 +10,7 @@ class DQueryPlanMeta {
private final ProfileLocation profileLocation;
private final String name;
private final String sql;
- private final long hash;
+ private final long sqlHash;
DQueryPlanMeta(Class> type, String label, ProfileLocation profileLocation, String sql) {
this.type = type;
@@ -22,15 +22,15 @@ class DQueryPlanMeta {
name += "_" + label;
}
this.name = name;
- this.hash = Checksum.checksum(sql);
+ this.sqlHash = Checksum.checksum(sql);
}
public Class> getType() {
return type;
}
- public long getHash() {
- return hash;
+ public long getSqlHash() {
+ return sqlHash;
}
public String getName() {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
index 765679404..fda2b62b8 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
@@ -59,8 +59,8 @@ class DQueryPlanMetric implements QueryPlanMetric {
}
@Override
- public long getHash() {
- return meta.getHash();
+ public long getSqlHash() {
+ return meta.getSqlHash();
}
@Override
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlan.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlan.java
index 3c322190f..796290808 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlan.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlan.java
@@ -68,7 +68,7 @@ public class CQueryPlan implements SpiQueryPlan {
private final boolean rawSql;
private final String sql;
- private final long hash;
+ private final long sqlHash;
private final String logWhereSql;
@@ -118,7 +118,7 @@ public class CQueryPlan implements SpiQueryPlan {
this.stats = new CQueryPlanStats(this);
this.dependentTables = sqlTree.dependentTables();
this.bindCapture = initBindCapture(query);
- this.hash = Checksum.checksum(sql);
+ this.sqlHash = Checksum.checksum(sql);
}
/**
@@ -143,7 +143,7 @@ public class CQueryPlan implements SpiQueryPlan {
this.stats = new CQueryPlanStats(this);
this.dependentTables = sqlTree.dependentTables();
this.bindCapture = initBindCaptureRaw(sql, query);
- this.hash = Checksum.checksum(sql);
+ this.sqlHash = Checksum.checksum(sql);
}
private String deriveName(String label, SpiQuery.Type type, String simpleName) {
@@ -193,8 +193,8 @@ public class CQueryPlan implements SpiQueryPlan {
}
@Override
- public long getHash() {
- return hash;
+ public long getSqlHash() {
+ return sqlHash;
}
@Override
@@ -226,7 +226,7 @@ public class CQueryPlan implements SpiQueryPlan {
@Override
public DQueryPlanOutput createMeta(String bind, String planString) {
- return new DQueryPlanOutput(getBeanType(), name, hash, sql, profileLocation, bind, planString);
+ return new DQueryPlanOutput(getBeanType(), name, sqlHash, sql, profileLocation, bind, planString);
}
public DataReader createDataReader(ResultSet rset) {
@@ -273,7 +273,7 @@ public class CQueryPlan implements SpiQueryPlan {
private String calcAuditQueryKey() {
// rawSql needs to include the MD5 hash of the sql
- return rawSql ? planKey.getPartialKey() + "_" + hash : planKey.getPartialKey();
+ return rawSql ? planKey.getPartialKey() + "_" + sqlHash : planKey.getPartialKey();
}
SqlTree getSqlTree() {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
index 3f7f61070..bbcfea2b9 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
@@ -127,8 +127,8 @@ public final class CQueryPlanStats {
}
@Override
- public long getHash() {
- return queryPlan.getHash();
+ public long getSqlHash() {
+ return queryPlan.getSqlHash();
}
@Override
diff --git a/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java b/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
index 8e8c5a288..b6a40903f 100644
--- a/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
+++ b/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
@@ -216,7 +216,7 @@ public class TestCustomerFinder extends BaseTestCase {
assertThat(plans0).isNotEmpty();
for (MetaQueryPlan plan : plans) {
- logger.info("queryplan label:{}, queryTimeMicros:{} loc:{} sql:{} bind:{} plan:{}",
+ logger.info("queryPlan label:{}, queryTimeMicros:{} loc:{} sql:{} bind:{} plan:{}",
plan.getLabel(), plan.getQueryTimeMicros(), plan.getProfileLocation(),
plan.getSql(), plan.getBind(), plan.getPlan());
System.out.println(plan);
@@ -244,7 +244,7 @@ public class TestCustomerFinder extends BaseTestCase {
assertThat(metricsJson).contains("\"name\":\"orm.Customer.findList\"");
assertThat(metricsJson).contains("\"loc\":\"CustomerFinder.byNameStatus(CustomerFinder.java:44)\"");
if (isH2() || isPostgres()) {
- assertThat(metricsJson).contains("\"hash\":3634991469");
+ assertThat(metricsJson).contains("\"sqlHash\":3634991469");
assertThat(metricsJson).contains("\"sql\":\"select t0.id, t0.status,");
}
}
@@ -267,7 +267,7 @@ public class TestCustomerFinder extends BaseTestCase {
assertThat(metricsJson).contains("\"name\":\"txn.main\"");
assertThat(metricsJson).contains("\"name\":\"orm.Customer.findList\"");
assertThat(metricsJson).doesNotContain("\"loc\":");
- assertThat(metricsJson).doesNotContain("\"hash\":");
+ assertThat(metricsJson).doesNotContain("\"sqlHash\":");
assertThat(metricsJson).doesNotContain("\"sql\":");
}
From 801d419f51b4cc56c6804d99da7acba07419e279 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 6 Aug 2021 13:14:29 +1200
Subject: [PATCH 63/87] Refactor io.ebean.meta API, method rename with
deprecation
---
.../io/ebean/meta/AbstractMetricVisitor.java | 8 +--
.../io/ebean/meta/BasicMetricVisitor.java | 6 +--
.../java/io/ebean/meta/MetaCountMetric.java | 9 +++-
.../main/java/io/ebean/meta/MetaMetric.java | 9 +++-
.../java/io/ebean/meta/MetaQueryMetric.java | 39 ++++++++++++--
.../java/io/ebean/meta/MetaQueryPlan.java | 18 +++----
.../java/io/ebean/meta/MetaTimedMetric.java | 51 +++++++++++++++++--
.../java/io/ebean/meta/MetricVisitor.java | 8 +--
.../java/io/ebean/meta/QueryPlanInit.java | 8 +--
.../java/io/ebean/meta/QueryPlanRequest.java | 12 ++---
.../java/io/ebean/meta/ServerMetrics.java | 29 +++++++++--
.../io/ebean/meta/ServerMetricsAsJson.java | 4 +-
.../main/java/io/ebean/meta/SortMetric.java | 14 ++---
.../server/core/DefaultQueryPlanListener.java | 4 +-
.../server/core/DefaultServer.java | 12 ++---
.../server/core/DumpMetrics.java | 28 +++++-----
.../server/core/DumpMetricsData.java | 26 +++++-----
.../server/core/DumpMetricsJson.java | 26 +++++-----
.../server/deploy/BeanDescriptor.java | 4 +-
.../server/profile/DCountMetric.java | 6 +--
.../server/profile/DQueryPlanMetric.java | 32 ++++++------
.../server/profile/DTimeMetricStats.java | 12 ++---
.../server/profile/DTimedMetric.java | 2 +-
.../server/profile/DTimedProfileLocation.java | 2 +-
.../server/query/CQueryPlanRequest.java | 6 +--
.../server/query/CQueryPlanStats.java | 30 +++++------
.../server/query/DQueryPlanOutput.java | 28 +++++-----
.../src/test/java/io/ebean/BaseTestCase.java | 4 +-
.../src/test/java/io/ebean/DtoQuery2Test.java | 10 ++--
.../java/io/ebean/DtoQueryFromOrmTest.java | 12 ++---
.../src/test/java/io/ebean/DtoQueryTest.java | 16 +++---
.../test/java/io/ebean/UpdateQueryTest.java | 12 ++---
.../server/deploy/BeanIudMetricsTest.java | 34 ++++++-------
.../server/profile/DTimedMetricMapTest.java | 12 ++---
.../server/profile/DTimedMetricTest.java | 26 +++++-----
.../server/profile/SortMetricTest.java | 2 +-
.../batchinsert/TestBatchInsertFlush.java | 10 ++--
.../org/tests/m2m/TestM2mDeleteObject.java | 2 +-
.../query/finder/TestCustomerFinder.java | 16 +++---
.../tests/query/sqlquery/SqlQueryTests.java | 2 +-
.../transaction/TestNestedMandatory.java | 2 +-
.../TestTransactionalReadOnly.java | 10 ++--
.../org/tests/update/TestSqlUpdateInTxn.java | 4 +-
.../src/test/java/io/ebean/BaseTestCase.java | 6 +--
.../main/java/io/ebean/redis/RedisCache.java | 7 ++-
45 files changed, 363 insertions(+), 257 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/meta/AbstractMetricVisitor.java b/ebean-api/src/main/java/io/ebean/meta/AbstractMetricVisitor.java
index 323b572ec..51df586d9 100644
--- a/ebean-api/src/main/java/io/ebean/meta/AbstractMetricVisitor.java
+++ b/ebean-api/src/main/java/io/ebean/meta/AbstractMetricVisitor.java
@@ -18,22 +18,22 @@ public abstract class AbstractMetricVisitor implements MetricVisitor {
}
@Override
- public boolean isReset() {
+ public boolean reset() {
return reset;
}
@Override
- public boolean isCollectTransactionMetrics() {
+ public boolean collectTransactionMetrics() {
return collectTransactionMetrics;
}
@Override
- public boolean isCollectQueryMetrics() {
+ public boolean collectQueryMetrics() {
return collectQueryMetrics;
}
@Override
- public boolean isCollectL2Metrics() {
+ public boolean collectL2Metrics() {
return collectL2Metrics;
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/BasicMetricVisitor.java b/ebean-api/src/main/java/io/ebean/meta/BasicMetricVisitor.java
index c821c63a7..0db953159 100644
--- a/ebean-api/src/main/java/io/ebean/meta/BasicMetricVisitor.java
+++ b/ebean-api/src/main/java/io/ebean/meta/BasicMetricVisitor.java
@@ -27,17 +27,17 @@ public class BasicMetricVisitor extends AbstractMetricVisitor implements ServerM
}
@Override
- public List getTimedMetrics() {
+ public List timedMetrics() {
return timed;
}
@Override
- public List getQueryMetrics() {
+ public List queryMetrics() {
return query;
}
@Override
- public List getCountMetrics() {
+ public List countMetrics() {
return count;
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
index 8b6af3594..cdaa2d7fa 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaCountMetric.java
@@ -8,6 +8,13 @@ public interface MetaCountMetric extends MetaMetric {
/**
* Return the total count.
*/
- long getCount();
+ long count();
+ /**
+ * Migrate to count()
+ */
+ @Deprecated
+ default long getCount() {
+ return count();
+ }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
index 0d716fe23..671dc05c1 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaMetric.java
@@ -8,6 +8,13 @@ public interface MetaMetric {
/**
* Return the metric name.
*/
- String getName();
+ String name();
+ /**
+ * Migrate to name().
+ */
+ @Deprecated
+ default String getName() {
+ return name();
+ }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
index e3907c69c..f5fee986c 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
@@ -8,21 +8,52 @@ public interface MetaQueryMetric extends MetaTimedMetric {
/**
* The type of entity or DTO bean.
*/
- Class> getType();
+ Class> type();
+
+ /**
+ * Migrate to type().
+ */
+ @Deprecated
+ default Class> getType() {
+ return type();
+ }
/**
* The label for the query (can be null).
*/
- String getLabel();
+ String label();
+
+ /**
+ * Migrate to label().
+ */
+ @Deprecated
+ default String getLabel() {
+ return label();
+ }
/**
* The actual SQL of the query.
*/
- String getSql();
+ String sql();
+
+ /**
+ * Migrate to sql().
+ */
+ @Deprecated
+ default String getSql() {
+ return sql();
+ }
/**
* Return the hash of the sql.
*/
- long getSqlHash();
+ long sqlHash();
+ /**
+ * Migrate to sqlHash().
+ */
+ @Deprecated
+ default long getSqlHash() {
+ return sqlHash();
+ }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
index 4f9667bd0..6cdce69a1 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
@@ -10,45 +10,45 @@ public interface MetaQueryPlan {
/**
* Return the bean type for the query.
*/
- Class> getBeanType();
+ Class> beanType();
/**
* Return the label of the query.
*/
- String getLabel();
+ String label();
/**
* Return the profile location for the query.
*/
- ProfileLocation getProfileLocation();
+ ProfileLocation profileLocation();
/**
* Return the sql of the query.
*/
- String getSql();
+ String sql();
/**
* Return the hash of the plan.
*/
- long getHash();
+ long sqlHash();
/**
* Return a description of the bind values.
*/
- String getBind();
+ String bind();
/**
* Return the raw plan.
*/
- String getPlan();
+ String plan();
/**
* Return the query execution time associated with the bind values capture.
*/
- long getQueryTimeMicros();
+ long queryTimeMicros();
/**
* Return the total count of times bind capture has occurred.
*/
- long getCaptureCount();
+ long captureCount();
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
index c6ba13516..f95f3248d 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
@@ -9,27 +9,68 @@ public interface MetaTimedMetric extends MetaMetric {
/**
* Return the metric location if defined.
*/
- String getLocation();
+ String location();
+
+ /**
+ * Migrate to location()
+ */
+ @Deprecated
+ default String getLocation() {
+ return location();
+ }
/**
* Return the total count.
*/
- long getCount();
+ long count();
+
+ /**
+ * Migrate to count()
+ */
+ @Deprecated
+ default long getCount() {
+ return count();
+ }
/**
* Return the total execution time in micros.
*/
- long getTotal();
+ long total();
+
+ /**
+ * Migrate to total()
+ */
+ @Deprecated
+ default long getTotal() {
+ return total();
+ }
/**
* Return the max execution time in micros.
*/
- long getMax();
+ long max();
+
+ /**
+ * Migrate to max()
+ */
+ @Deprecated
+ default long getMax() {
+ return max();
+ }
/**
* Return the mean execution time in micros.
*/
- long getMean();
+ long mean();
+
+
+ /**
+ * Migrate to mean()
+ */
+ @Deprecated
+ default long getMean() {
+ return mean();
+ }
/**
* Return true if this is the first metrics collection for this query.
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetricVisitor.java b/ebean-api/src/main/java/io/ebean/meta/MetricVisitor.java
index 18c7a72dc..fac9f050e 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetricVisitor.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetricVisitor.java
@@ -8,22 +8,22 @@ public interface MetricVisitor {
/**
* Return true if the metrics should be reset.
*/
- boolean isReset();
+ boolean reset();
/**
* Return true if we should visit the transaction metrics.
*/
- boolean isCollectTransactionMetrics();
+ boolean collectTransactionMetrics();
/**
* Return true if we should visit the ORM and SQL query metrics.
*/
- boolean isCollectQueryMetrics();
+ boolean collectQueryMetrics();
/**
* Return true if we should visit the L2 cache metrics.
*/
- boolean isCollectL2Metrics();
+ boolean collectL2Metrics();
/**
* Visit has started.
diff --git a/ebean-api/src/main/java/io/ebean/meta/QueryPlanInit.java b/ebean-api/src/main/java/io/ebean/meta/QueryPlanInit.java
index 9b785ec62..7caeabd2f 100644
--- a/ebean-api/src/main/java/io/ebean/meta/QueryPlanInit.java
+++ b/ebean-api/src/main/java/io/ebean/meta/QueryPlanInit.java
@@ -32,7 +32,7 @@ public class QueryPlanInit {
* Return the query execution time threshold which must be exceeded to initiate
* query plan collection.
*/
- public long getThresholdMicros() {
+ public long thresholdMicros() {
return thresholdMicros;
}
@@ -40,7 +40,7 @@ public class QueryPlanInit {
* Set the query execution time threshold which must be exceeded to initiate
* query plan collection.
*/
- public void setThresholdMicros(long thresholdMicros) {
+ public void thresholdMicros(long thresholdMicros) {
this.thresholdMicros = thresholdMicros;
}
@@ -54,14 +54,14 @@ public class QueryPlanInit {
/**
* Return the specific hashes that we want to collect query plans on.
*/
- public Set getHashes() {
+ public Set sqlHashes() {
return hashes;
}
/**
* Set the specific hashes that we want to collect query plans on.
*/
- public void setHashes(Set hashes) {
+ public void sqlHashes(Set hashes) {
this.hashes = hashes;
}
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/QueryPlanRequest.java b/ebean-api/src/main/java/io/ebean/meta/QueryPlanRequest.java
index c4a69b1aa..421e0c151 100644
--- a/ebean-api/src/main/java/io/ebean/meta/QueryPlanRequest.java
+++ b/ebean-api/src/main/java/io/ebean/meta/QueryPlanRequest.java
@@ -18,7 +18,7 @@ public class QueryPlanRequest {
* have been around for a while (e.g. 5 mins) and so reasonably represent
* bind values that match the slowest execution for this query plan.
*/
- public long getSince() {
+ public long since() {
return since;
}
@@ -28,14 +28,14 @@ public class QueryPlanRequest {
*
* @param since The minimum age of the bind values capture.
*/
- public void setSince(long since) {
+ public void since(long since) {
this.since = since;
}
/**
* Return the maximum number of plans to capture.
*/
- public int getMaxCount() {
+ public int maxCount() {
return maxCount;
}
@@ -45,7 +45,7 @@ public class QueryPlanRequest {
* Use this to limit how much query plan capturing is done as query
* plan capture is actual database load.
*/
- public void setMaxCount(int maxCount) {
+ public void maxCount(int maxCount) {
this.maxCount = maxCount;
}
@@ -54,7 +54,7 @@ public class QueryPlanRequest {
*
* Query plan collection will stop once this time is exceeded.
*/
- public long getMaxTimeMillis() {
+ public long maxTimeMillis() {
return maxTimeMillis;
}
@@ -65,7 +65,7 @@ public class QueryPlanRequest {
* this to ensure the query plan capture does not use excessive amount
* of time - put too much load on the database.
*/
- public void setMaxTimeMillis(long maxTimeMillis) {
+ public void maxTimeMillis(long maxTimeMillis) {
this.maxTimeMillis = maxTimeMillis;
}
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java b/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
index 8f0488d62..b8a50d85d 100644
--- a/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
+++ b/ebean-api/src/main/java/io/ebean/meta/ServerMetrics.java
@@ -10,16 +10,39 @@ public interface ServerMetrics {
/**
* Return timed metrics for Transactions, labelled SqlQuery, labelled SqlUpdate.
*/
- List getTimedMetrics();
+ List timedMetrics();
+
+ /**
+ * Migrate to timedMetrics().
+ */
+ @Deprecated
+ default List getTimedMetrics() {
+ return timedMetrics();
+ }
/**
* Return the query metrics.
*/
- List getQueryMetrics();
+ List queryMetrics();
+
+ /**
+ * Migrate to queryMetrics().
+ */
+ @Deprecated
+ default List getQueryMetrics() {
+ return queryMetrics();
+ }
/**
* Return the Counter metrics.
*/
- List getCountMetrics();
+ List countMetrics();
+ /**
+ * Migrate to countMetrics().
+ */
+ @Deprecated
+ default List getCountMetrics() {
+ return countMetrics();
+ }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java b/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
index f48ecb5b6..7e42302c8 100644
--- a/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
+++ b/ebean-api/src/main/java/io/ebean/meta/ServerMetricsAsJson.java
@@ -8,12 +8,12 @@ import java.util.Comparator;
public interface ServerMetricsAsJson {
/**
- * Set to false to exclude profile location and sql.
+ * Set to false in order to exclude profile location and sql.
*/
ServerMetricsAsJson withExtraAttributes(boolean withLocation);
/**
- * Set to false to exclude SQL hash.
+ * Set to false in order to exclude SQL hash.
*/
ServerMetricsAsJson withHash(boolean withHash);
diff --git a/ebean-api/src/main/java/io/ebean/meta/SortMetric.java b/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
index 9df2c704b..30104f1ff 100644
--- a/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/SortMetric.java
@@ -32,7 +32,7 @@ public class SortMetric {
@Override
public int compare(MetaCountMetric o1, MetaCountMetric o2) {
- return stringCompare(o1.getName(), o2.getName());
+ return stringCompare(o1.name(), o2.name());
}
}
@@ -43,8 +43,8 @@ public class SortMetric {
@Override
public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
- int i = stringCompare(o1.getName(), o2.getName());
- return i != 0 ? i : Long.compare(o1.getCount(), o2.getCount());
+ int i = stringCompare(o1.name(), o2.name());
+ return i != 0 ? i : Long.compare(o1.count(), o2.count());
}
}
@@ -55,7 +55,7 @@ public class SortMetric {
@Override
public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
- return Long.compare(o2.getCount(), o1.getCount());
+ return Long.compare(o2.count(), o1.count());
}
}
@@ -66,7 +66,7 @@ public class SortMetric {
@Override
public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
- return Long.compare(o2.getTotal(), o1.getTotal());
+ return Long.compare(o2.total(), o1.total());
}
}
@@ -77,7 +77,7 @@ public class SortMetric {
@Override
public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
- return Long.compare(o2.getMean(), o1.getMean());
+ return Long.compare(o2.mean(), o1.mean());
}
}
@@ -88,7 +88,7 @@ public class SortMetric {
@Override
public int compare(MetaTimedMetric o1, MetaTimedMetric o2) {
- return Long.compare(o2.getMax(), o1.getMax());
+ return Long.compare(o2.max(), o1.max());
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
index 051d331ba..20d7ec223 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultQueryPlanListener.java
@@ -18,8 +18,8 @@ class DefaultQueryPlanListener implements QueryPlanListener {
String dbName = capture.getDatabase().getName();
for (MetaQueryPlan plan : capture.getPlans()) {
log.info("queryPlan db:{} label:{} queryTimeMicros:{} loc:{} sql:{} bind:{} plan:{}",
- dbName, plan.getLabel(), plan.getQueryTimeMicros(), plan.getProfileLocation(),
- plan.getSql(), plan.getBind(), plan.getPlan());
+ dbName, plan.label(), plan.queryTimeMicros(), plan.profileLocation(),
+ plan.sql(), plan.bind(), plan.plan());
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
index d21f9967f..2040e3f78 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java
@@ -416,8 +416,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
private void collectQueryPlans() {
QueryPlanRequest request = new QueryPlanRequest();
- request.setMaxCount(config.getQueryPlanCaptureMaxCount());
- request.setMaxTimeMillis(config.getQueryPlanCaptureMaxTimeMillis());
+ request.maxCount(config.getQueryPlanCaptureMaxCount());
+ request.maxTimeMillis(config.getQueryPlanCaptureMaxTimeMillis());
// obtains query explain plans ...
List plans = metaInfoManager.queryPlanCollectNow(request);
@@ -2328,13 +2328,13 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
@Override
public void visitMetrics(MetricVisitor visitor) {
visitor.visitStart();
- if (visitor.isCollectTransactionMetrics()) {
+ if (visitor.collectTransactionMetrics()) {
transactionManager.visitMetrics(visitor);
}
- if (visitor.isCollectL2Metrics()) {
+ if (visitor.collectL2Metrics()) {
serverCacheManager.visitMetrics(visitor);
}
- if (visitor.isCollectQueryMetrics()) {
+ if (visitor.collectQueryMetrics()) {
beanDescriptorManager.visitMetrics(visitor);
dtoBeanManager.visitMetrics(visitor);
relationalQueryEngine.visitMetrics(visitor);
@@ -2351,7 +2351,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer {
List queryPlanInit(QueryPlanInit initRequest) {
if (initRequest.isAll()) {
- queryPlanManager.setDefaultThreshold(initRequest.getThresholdMicros());
+ queryPlanManager.setDefaultThreshold(initRequest.thresholdMicros());
}
return beanDescriptorManager.queryPlanInit(initRequest);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
index 4c42c4b11..f31fa849c 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetrics.java
@@ -78,11 +78,11 @@ class DumpMetrics {
out("-- Dumping metrics for " + server.getName() + " -- ");
ServerMetrics serverMetrics = server.getMetaInfoManager().collectMetrics();
- for (MetaTimedMetric metric : serverMetrics.getTimedMetrics()) {
+ for (MetaTimedMetric metric : serverMetrics.timedMetrics()) {
log(metric);
}
- List countMetrics = serverMetrics.getCountMetrics();
+ List countMetrics = serverMetrics.countMetrics();
if (!countMetrics.isEmpty()) {
out("\n-- Counters --");
countMetrics.sort(SortMetric.COUNT_NAME);
@@ -91,7 +91,7 @@ class DumpMetrics {
}
}
- List queryMetrics = serverMetrics.getQueryMetrics();
+ List queryMetrics = serverMetrics.queryMetrics();
if (!queryMetrics.isEmpty()) {
out("\n-- Queries --");
queryMetrics.sort(sortBy);
@@ -104,8 +104,8 @@ class DumpMetrics {
private void logCount(MetaCountMetric metric) {
StringBuilder sb = new StringBuilder();
- sb.append(padNameTimed(metric.getName())).append(" ");
- sb.append(" count:").append(pad(metric.getCount()));
+ sb.append(padNameTimed(metric.name())).append(" ");
+ sb.append(" count:").append(pad(metric.count()));
out(sb.toString());
}
@@ -120,38 +120,38 @@ class DumpMetrics {
appendQueryName(metric, sb);
appendCounters(metric, sb);
if (dumpHash) {
- sb.append("\n sqlHash:").append(metric.getSqlHash());
+ sb.append("\n sqlHash:").append(metric.sqlHash());
}
appendProfileAndSql(metric, sb);
out(sb.toString());
}
private void appendQueryName(MetaQueryMetric metric, StringBuilder sb) {
- sb.append("query:").append(padName(metric.getName())).append(" ");
+ sb.append("query:").append(padName(metric.name())).append(" ");
}
private void appendProfileAndSql(MetaQueryMetric metric, StringBuilder sb) {
- String location = metric.getLocation();
+ String location = metric.location();
if (dumpLoc && location != null) {
sb.append("\n loc:").append(location);
}
if (dumpSql) {
- sb.append(" \n\n sql:").append(metric.getSql()).append("\n\n");
+ sb.append(" \n\n sql:").append(metric.sql()).append("\n\n");
}
}
private void log(MetaTimedMetric metric) {
StringBuilder sb = new StringBuilder();
- sb.append(padNameTimed(metric.getName())).append(" ");
+ sb.append(padNameTimed(metric.name())).append(" ");
appendCounters(metric, sb);
out(sb.toString());
}
private void appendCounters(MetaTimedMetric timedMetric, StringBuilder sb) {
- sb.append(" count:").append(pad(timedMetric.getCount()))
- .append(" total:").append(pad(timedMetric.getTotal()))
- .append(" mean:").append(pad(timedMetric.getMean()))
- .append(" max:").append(pad(timedMetric.getMax()));
+ sb.append(" count:").append(pad(timedMetric.count()))
+ .append(" total:").append(pad(timedMetric.total()))
+ .append(" mean:").append(pad(timedMetric.mean()))
+ .append(" max:").append(pad(timedMetric.max()));
}
private String padName(String name) {
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
index 7458d0468..4ac8859b6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsData.java
@@ -31,9 +31,9 @@ class DumpMetricsData {
private void collect(ServerMetrics serverMetrics) {
- final List timedMetrics = serverMetrics.getTimedMetrics();
- final List countMetrics = serverMetrics.getCountMetrics();
- final List queryMetrics = serverMetrics.getQueryMetrics();
+ final List timedMetrics = serverMetrics.timedMetrics();
+ final List countMetrics = serverMetrics.countMetrics();
+ final List queryMetrics = serverMetrics.queryMetrics();
for (MetaTimedMetric metric : timedMetrics) {
add(metric);
@@ -47,7 +47,7 @@ class DumpMetricsData {
}
private MetricData create(MetaMetric metric) {
- MetricData data = new MetricData(metric.getName());
+ MetricData data = new MetricData(metric.name());
list.add(data);
return data;
}
@@ -55,30 +55,30 @@ class DumpMetricsData {
private void add(MetaTimedMetric metric) {
final MetricData data = create(metric);
appendCounters(data, metric);
- data.setLoc(metric.getLocation());
+ data.setLoc(metric.location());
}
private void addCount(MetaCountMetric metric) {
final MetricData data = create(metric);
- data.setCount(metric.getCount());
+ data.setCount(metric.count());
}
private void addQuery(MetaQueryMetric metric) {
final MetricData data = create(metric);
appendCounters(data, metric);
appendLocationAndSql(data, metric);
- data.setSqlHash(metric.getSqlHash());
+ data.setSqlHash(metric.sqlHash());
}
private void appendLocationAndSql(MetricData data, MetaQueryMetric metric) {
- data.setLoc(metric.getLocation());
- data.setSql(metric.getSql());
+ data.setLoc(metric.location());
+ data.setSql(metric.sql());
}
private void appendCounters(MetricData data, MetaTimedMetric timedMetric) {
- data.setCount(timedMetric.getCount());
- data.setTotal(timedMetric.getTotal());
- data.setMean(timedMetric.getMean());
- data.setMax(timedMetric.getMax());
+ data.setCount(timedMetric.count());
+ data.setTotal(timedMetric.total());
+ data.setMean(timedMetric.mean());
+ data.setMax(timedMetric.max());
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
index 6f74dac97..b0644ec9f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DumpMetricsJson.java
@@ -84,11 +84,11 @@ class DumpMetricsJson implements ServerMetricsAsJson {
private void collect(ServerMetrics serverMetrics) {
try {
start();
- for (MetaTimedMetric metric : serverMetrics.getTimedMetrics()) {
+ for (MetaTimedMetric metric : serverMetrics.timedMetrics()) {
logTimed(metric);
}
- List countMetrics = serverMetrics.getCountMetrics();
+ List countMetrics = serverMetrics.countMetrics();
if (!countMetrics.isEmpty()) {
if (sortBy != null) {
countMetrics.sort(SortMetric.COUNT_NAME);
@@ -98,7 +98,7 @@ class DumpMetricsJson implements ServerMetricsAsJson {
}
}
- List queryMetrics = serverMetrics.getQueryMetrics();
+ List queryMetrics = serverMetrics.queryMetrics();
if (!queryMetrics.isEmpty()) {
if (sortBy != null) {
queryMetrics.sort(sortBy);
@@ -170,7 +170,7 @@ class DumpMetricsJson implements ServerMetricsAsJson {
}
objStart();
key("name");
- val(metric.getName());
+ val(metric.name());
}
private void metricEnd() throws IOException {
@@ -180,7 +180,7 @@ class DumpMetricsJson implements ServerMetricsAsJson {
private void logCount(MetaCountMetric metric) throws IOException {
metricStart(metric);
key("count");
- val(metric.getCount());
+ val(metric.count());
metricEnd();
}
@@ -188,7 +188,7 @@ class DumpMetricsJson implements ServerMetricsAsJson {
metricStart(metric);
appendTiming(metric);
if (isIncludeDetail(metric)) {
- appendExtra("loc", metric.getLocation());
+ appendExtra("loc", metric.location());
}
metricEnd();
}
@@ -197,11 +197,11 @@ class DumpMetricsJson implements ServerMetricsAsJson {
metricStart(metric);
appendTiming(metric);
if (withHash) {
- keyVal("sqlHash", metric.getSqlHash());
+ keyVal("sqlHash", metric.sqlHash());
}
if (isIncludeDetail(metric)) {
- appendExtra("loc", metric.getLocation());
- appendExtra("sql", metric.getSql());
+ appendExtra("loc", metric.location());
+ appendExtra("sql", metric.sql());
}
metricEnd();
}
@@ -218,10 +218,10 @@ class DumpMetricsJson implements ServerMetricsAsJson {
}
private void appendTiming(MetaTimedMetric timedMetric) throws IOException {
- keyVal("count", timedMetric.getCount());
- keyVal("total", timedMetric.getTotal());
- keyVal("mean", timedMetric.getMean());
- keyVal("max", timedMetric.getMax());
+ keyVal("count", timedMetric.count());
+ keyVal("total", timedMetric.total());
+ keyVal("mean", timedMetric.mean());
+ keyVal("max", timedMetric.max());
}
private void keyVal(String key, long value) throws IOException {
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 e08b37d1d..6a9acd839 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
@@ -1559,7 +1559,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
void queryPlanInit(QueryPlanInit request, List list) {
for (CQueryPlan queryPlan : queryPlanCache.values()) {
if (request.includeHash(queryPlan.getSqlHash())) {
- queryPlan.queryPlanInit(request.getThresholdMicros());
+ queryPlan.queryPlanInit(request.thresholdMicros());
list.add(queryPlan.createMeta(null, null));
}
}
@@ -1572,7 +1572,7 @@ public class BeanDescriptor implements BeanType, STreeType, SpiBeanType {
iudMetrics.visit(visitor);
for (CQueryPlan queryPlan : queryPlanCache.values()) {
if (!queryPlan.isEmptyStats()) {
- visitor.visitQuery(queryPlan.getSnapshot(visitor.isReset()));
+ visitor.visitQuery(queryPlan.getSnapshot(visitor.reset()));
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
index 2cf7a25a7..d93e0dbdb 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DCountMetric.java
@@ -49,7 +49,7 @@ class DCountMetric implements CountMetric {
@Override
public void visit(MetricVisitor visitor) {
- long val = visitor.isReset() ? count.sumThenReset() : count.sum();
+ long val = visitor.reset() ? count.sumThenReset() : count.sum();
if (val > 0) {
visitor.visitCount(new DCountMetricStats(name, val));
}
@@ -66,12 +66,12 @@ class DCountMetric implements CountMetric {
}
@Override
- public String getName() {
+ public String name() {
return name;
}
@Override
- public long getCount() {
+ public long count() {
return count;
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
index fda2b62b8..fda1d4d9b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DQueryPlanMetric.java
@@ -19,7 +19,7 @@ class DQueryPlanMetric implements QueryPlanMetric {
@Override
public void visit(MetricVisitor visitor) {
- TimedMetricStats stats = metric.collect(visitor.isReset());
+ TimedMetricStats stats = metric.collect(visitor.reset());
if (stats != null) {
visitor.visitQuery(new Stats(meta, stats, collected));
collected = true;
@@ -45,11 +45,11 @@ class DQueryPlanMetric implements QueryPlanMetric {
@Override
public String toString() {
- return meta + " " + stats + " sql:" + getSql();
+ return meta + " " + stats + " sql:" + sql();
}
@Override
- public Class> getType() {
+ public Class> type() {
return meta.getType();
}
@@ -59,48 +59,48 @@ class DQueryPlanMetric implements QueryPlanMetric {
}
@Override
- public long getSqlHash() {
+ public long sqlHash() {
return meta.getSqlHash();
}
@Override
- public String getLabel() {
+ public String label() {
return meta.getLabel();
}
@Override
- public String getSql() {
+ public String sql() {
return meta.getSql();
}
@Override
- public String getName() {
+ public String name() {
return meta.getName();
}
@Override
- public String getLocation() {
+ public String location() {
return meta.getLocation();
}
@Override
- public long getCount() {
- return stats.getCount();
+ public long count() {
+ return stats.count();
}
@Override
- public long getTotal() {
- return stats.getTotal();
+ public long total() {
+ return stats.total();
}
@Override
- public long getMax() {
- return stats.getMax();
+ public long max() {
+ return stats.max();
}
@Override
- public long getMean() {
- return stats.getMean();
+ public long mean() {
+ return stats.mean();
}
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimeMetricStats.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimeMetricStats.java
index 54146abe9..2207fef3d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimeMetricStats.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimeMetricStats.java
@@ -60,12 +60,12 @@ class DTimeMetricStats implements TimedMetricStats {
}
@Override
- public String getName() {
+ public String name() {
return name;
}
@Override
- public String getLocation() {
+ public String location() {
return location;
}
@@ -73,7 +73,7 @@ class DTimeMetricStats implements TimedMetricStats {
* Return the count of values collected.
*/
@Override
- public long getCount() {
+ public long count() {
return count;
}
@@ -81,7 +81,7 @@ class DTimeMetricStats implements TimedMetricStats {
* Return the total of all the values.
*/
@Override
- public long getTotal() {
+ public long total() {
return total;
}
@@ -89,7 +89,7 @@ class DTimeMetricStats implements TimedMetricStats {
* Return the Max value collected.
*/
@Override
- public long getMax() {
+ public long max() {
return max;
}
@@ -97,7 +97,7 @@ class DTimeMetricStats implements TimedMetricStats {
* Return the mean value rounded up.
*/
@Override
- public long getMean() {
+ public long mean() {
return (count < 1) ? 0L : Math.round((double)(total / count));
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java
index 63eb275f6..cc344c3e6 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedMetric.java
@@ -71,7 +71,7 @@ class DTimedMetric implements TimedMetric {
@Override
public void visit(MetricVisitor visitor) {
- DTimeMetricStats metric = collect(visitor.isReset());
+ DTimeMetricStats metric = collect(visitor.reset());
if (metric != null) {
visitor.visitTimed(metric);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedProfileLocation.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedProfileLocation.java
index 7ef4e9084..27537737f 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedProfileLocation.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DTimedProfileLocation.java
@@ -48,7 +48,7 @@ class DTimedProfileLocation extends DProfileLocation implements TimedProfileLoca
@Override
public void visit(MetricVisitor visitor) {
- TimedMetricStats collect = timedMetric.collect(visitor.isReset());
+ TimedMetricStats collect = timedMetric.collect(visitor.reset());
if (collect != null) {
if (overrideMetricName) {
collect.setName(fullName);
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanRequest.java
index 86e15f389..315e7a07d 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanRequest.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanRequest.java
@@ -24,10 +24,10 @@ class CQueryPlanRequest {
CQueryPlanRequest(Connection connection, QueryPlanRequest req, Iterator iterator) {
this.connection = connection;
this.iterator = iterator;
- this.maxCount = req.getMaxCount();
- long reqSince = req.getSince();
+ this.maxCount = req.maxCount();
+ long reqSince = req.since();
this.since = (reqSince == 0) ? Long.MAX_VALUE: reqSince;
- long maxTimeMillis = req.getMaxTimeMillis();
+ long maxTimeMillis = req.maxTimeMillis();
this.maxTime = maxTimeMillis > 0 ? System.currentTimeMillis() + maxTimeMillis : 0;
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
index bbcfea2b9..36e070653 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanStats.java
@@ -83,56 +83,56 @@ public final class CQueryPlanStats {
@Override
public String toString() {
- return "label:" + getLabel() + " location:" + getLocation() + " metrics:" + metrics + " sql:" + getSql();
+ return "label:" + label() + " location:" + location() + " metrics:" + metrics + " sql:" + sql();
}
@Override
- public Class> getType() {
+ public Class> type() {
return queryPlan.getBeanType();
}
@Override
- public String getLabel() {
+ public String label() {
return queryPlan.getLabel();
}
@Override
- public String getName() {
+ public String name() {
return queryPlan.getName();
}
@Override
- public String getLocation() {
+ public String location() {
return queryPlan.getLocation();
}
@Override
- public long getCount() {
- return metrics.getCount();
+ public long count() {
+ return metrics.count();
}
@Override
- public long getTotal() {
- return metrics.getTotal();
+ public long total() {
+ return metrics.total();
}
@Override
- public long getMax() {
- return metrics.getMax();
+ public long max() {
+ return metrics.max();
}
@Override
- public long getMean() {
- return metrics.getMean();
+ public long mean() {
+ return metrics.mean();
}
@Override
- public long getSqlHash() {
+ public long sqlHash() {
return queryPlan.getSqlHash();
}
@Override
- public String getSql() {
+ public String sql() {
return queryPlan.getSql();
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DQueryPlanOutput.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DQueryPlanOutput.java
index 3d8c7aaac..3d879362b 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DQueryPlanOutput.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DQueryPlanOutput.java
@@ -16,14 +16,14 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
private final String sql;
private final String bind;
private final String plan;
- private final long hash;
+ private final long sqlHash;
private long queryTimeMicros;
private long captureCount;
- DQueryPlanOutput(Class> beanType, String label, long hash, String sql, ProfileLocation profileLocation, String bind, String plan) {
+ DQueryPlanOutput(Class> beanType, String label, long sqlHash, String sql, ProfileLocation profileLocation, String bind, String plan) {
this.beanType = beanType;
this.label = label;
- this.hash = hash;
+ this.sqlHash = sqlHash;
this.sql = sql;
this.profileLocation = profileLocation;
this.bind = bind;
@@ -31,15 +31,15 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
}
@Override
- public long getHash() {
- return hash;
+ public long sqlHash() {
+ return sqlHash;
}
/**
* Return the associated bean.
*/
@Override
- public Class> getBeanType() {
+ public Class> beanType() {
return beanType;
}
@@ -47,12 +47,12 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
* Return the query label if set.
*/
@Override
- public String getLabel() {
+ public String label() {
return label;
}
@Override
- public ProfileLocation getProfileLocation() {
+ public ProfileLocation profileLocation() {
return profileLocation;
}
@@ -60,7 +60,7 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
* Return the sql of query.
*/
@Override
- public String getSql() {
+ public String sql() {
return sql;
}
@@ -68,7 +68,7 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
* Return a description of the bind values used.
*/
@Override
- public String getBind() {
+ public String bind() {
return bind;
}
@@ -76,7 +76,7 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
* Return the query plan.
*/
@Override
- public String getPlan() {
+ public String plan() {
return plan;
}
@@ -85,7 +85,7 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
* to build the query plan.
*/
@Override
- public long getQueryTimeMicros() {
+ public long queryTimeMicros() {
return queryTimeMicros;
}
@@ -93,13 +93,13 @@ class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan {
* Return the total count of times bind capture has occurred.
*/
@Override
- public long getCaptureCount() {
+ public long captureCount() {
return captureCount;
}
@Override
public String toString() {
- return " BeanType:" + ((beanType == null) ? "" : beanType.getSimpleName()) + " planHash:" + hash + " label:" + label + " queryTimeMicros:" + queryTimeMicros + " captureCount:" + captureCount + "\n SQL:" + sql + "\nBIND:" + bind + "\nPLAN:" + plan;
+ return " BeanType:" + ((beanType == null) ? "" : beanType.getSimpleName()) + " planHash:" + sqlHash + " label:" + label + " queryTimeMicros:" + queryTimeMicros + " captureCount:" + captureCount + "\n SQL:" + sql + "\nBIND:" + bind + "\nPLAN:" + plan;
}
/**
diff --git a/ebean-core/src/test/java/io/ebean/BaseTestCase.java b/ebean-core/src/test/java/io/ebean/BaseTestCase.java
index 0205d5294..988e73b59 100644
--- a/ebean-core/src/test/java/io/ebean/BaseTestCase.java
+++ b/ebean-core/src/test/java/io/ebean/BaseTestCase.java
@@ -90,14 +90,14 @@ public abstract class BaseTestCase {
}
protected List visitTimedMetrics() {
- return collectMetrics().getTimedMetrics();
+ return collectMetrics().timedMetrics();
}
protected List sqlMetrics() {
List timedMetrics = visitTimedMetrics();
return timedMetrics.stream()
- .filter((it) -> it.getName().startsWith("sql.") || it.getName().startsWith("orm."))
+ .filter((it) -> it.name().startsWith("sql.") || it.name().startsWith("orm."))
.collect(Collectors.toList());
}
diff --git a/ebean-core/src/test/java/io/ebean/DtoQuery2Test.java b/ebean-core/src/test/java/io/ebean/DtoQuery2Test.java
index ba30e9a5c..625cc9ae9 100644
--- a/ebean-core/src/test/java/io/ebean/DtoQuery2Test.java
+++ b/ebean-core/src/test/java/io/ebean/DtoQuery2Test.java
@@ -191,13 +191,13 @@ public class DtoQuery2Test extends BaseTestCase {
BasicMetricVisitor basic = new BasicMetricVisitor(false, true, true, true);
server().getMetaInfoManager().visitMetrics(basic);
- List stats = basic.getQueryMetrics();
+ List stats = basic.queryMetrics();
assertThat(stats).hasSize(1);
MetaQueryMetric queryMetric = stats.get(0);
- assertThat(queryMetric.getLabel()).isEqualTo("basic");
- assertThat(queryMetric.getCount()).isEqualTo(3);
- assertThat(queryMetric.getName()).isEqualTo("dto.DCust_basic");
+ assertThat(queryMetric.label()).isEqualTo("basic");
+ assertThat(queryMetric.count()).isEqualTo(3);
+ assertThat(queryMetric.name()).isEqualTo("dto.DCust_basic");
server().findDto(DCust.class, "select c4.id, c4.name from o_customer c4 where lower(c4.name) = :name")
@@ -207,7 +207,7 @@ public class DtoQuery2Test extends BaseTestCase {
BasicMetricVisitor metric2 = server().getMetaInfoManager().visitBasic();
- stats = metric2.getQueryMetrics();
+ stats = metric2.queryMetrics();
assertThat(stats).hasSize(2);
log.info("stats " + stats);
diff --git a/ebean-core/src/test/java/io/ebean/DtoQueryFromOrmTest.java b/ebean-core/src/test/java/io/ebean/DtoQueryFromOrmTest.java
index ee26e9409..28b0bd490 100644
--- a/ebean-core/src/test/java/io/ebean/DtoQueryFromOrmTest.java
+++ b/ebean-core/src/test/java/io/ebean/DtoQueryFromOrmTest.java
@@ -27,12 +27,12 @@ public class DtoQueryFromOrmTest extends BaseTestCase {
@AfterClass
public static void reportStats() {
ServerMetrics metrics = DB.getDefault().getMetaInfoManager().collectMetrics();
- for (MetaQueryMetric metric : metrics.getQueryMetrics()) {
+ for (MetaQueryMetric metric : metrics.queryMetrics()) {
System.out.println(metric);
}
System.out.println("-- transaction metrics --");
- for (MetaTimedMetric metric : metrics.getTimedMetrics()) {
+ for (MetaTimedMetric metric : metrics.timedMetrics()) {
System.out.println(metric);
}
}
@@ -59,15 +59,15 @@ public class DtoQueryFromOrmTest extends BaseTestCase {
ServerMetrics metrics = collectMetrics();
- List stats = metrics.getQueryMetrics();
+ List stats = metrics.queryMetrics();
for (MetaQueryMetric stat : stats) {
- long meanMicros = stat.getMean();
+ long meanMicros = stat.mean();
assertThat(meanMicros).isLessThan(900_000);
- assertThat(stat.getLocation()).isSameAs(loc0.location());
+ assertThat(stat.location()).isSameAs(loc0.location());
}
assertThat(stats).hasSize(1);
- assertThat(stats.get(0).getCount()).isEqualTo(4);
+ assertThat(stats.get(0).count()).isEqualTo(4);
}
@ForPlatform(Platform.H2)
diff --git a/ebean-core/src/test/java/io/ebean/DtoQueryTest.java b/ebean-core/src/test/java/io/ebean/DtoQueryTest.java
index eea1c6da3..0331a8215 100644
--- a/ebean-core/src/test/java/io/ebean/DtoQueryTest.java
+++ b/ebean-core/src/test/java/io/ebean/DtoQueryTest.java
@@ -42,14 +42,14 @@ public class DtoQueryTest extends BaseTestCase {
ServerMetrics metrics = collectMetrics();
- List stats = metrics.getQueryMetrics();
+ List stats = metrics.queryMetrics();
for (MetaQueryMetric stat : stats) {
- long meanMicros = stat.getMean();
+ long meanMicros = stat.mean();
assertThat(meanMicros).isLessThan(900_000);
}
assertThat(stats).hasSize(1);
- assertThat(stats.get(0).getCount()).isEqualTo(1);
+ assertThat(stats.get(0).count()).isEqualTo(1);
}
@Test
@@ -283,13 +283,13 @@ public class DtoQueryTest extends BaseTestCase {
BasicMetricVisitor basic = new BasicMetricVisitor(false, true, true, true);
server().getMetaInfoManager().visitMetrics(basic);
- List stats = basic.getQueryMetrics();
+ List stats = basic.queryMetrics();
assertThat(stats).hasSize(1);
MetaQueryMetric queryMetric = stats.get(0);
- assertThat(queryMetric.getLabel()).isEqualTo("basic");
- assertThat(queryMetric.getCount()).isEqualTo(3);
- assertThat(queryMetric.getName()).isEqualTo("dto.DCust_basic");
+ assertThat(queryMetric.label()).isEqualTo("basic");
+ assertThat(queryMetric.count()).isEqualTo(3);
+ assertThat(queryMetric.name()).isEqualTo("dto.DCust_basic");
server().findDto(DCust.class, "select c4.id, c4.name from o_customer c4 where lower(c4.name) = :name")
@@ -299,7 +299,7 @@ public class DtoQueryTest extends BaseTestCase {
ServerMetrics metric2 = server().getMetaInfoManager().collectMetrics();
- stats = metric2.getQueryMetrics();
+ stats = metric2.queryMetrics();
assertThat(stats).hasSize(2);
log.info("stats " + stats);
diff --git a/ebean-core/src/test/java/io/ebean/UpdateQueryTest.java b/ebean-core/src/test/java/io/ebean/UpdateQueryTest.java
index ca2caa4c8..5b9c42991 100644
--- a/ebean-core/src/test/java/io/ebean/UpdateQueryTest.java
+++ b/ebean-core/src/test/java/io/ebean/UpdateQueryTest.java
@@ -39,10 +39,10 @@ public class UpdateQueryTest extends BaseTestCase {
assertSql(query).contains("update o_customer set status=?, updtime=? where status = ? and id > ?");
ServerMetrics metrics = collectMetrics();
- List ormQueryMetrics = metrics.getQueryMetrics();
+ List ormQueryMetrics = metrics.queryMetrics();
assertThat(ormQueryMetrics).hasSize(1);
- assertThat(ormQueryMetrics.get(0).getType()).isEqualTo(Customer.class);
- assertThat(ormQueryMetrics.get(0).getLabel()).isEqualTo("updateActive");
+ assertThat(ormQueryMetrics.get(0).type()).isEqualTo(Customer.class);
+ assertThat(ormQueryMetrics.get(0).label()).isEqualTo("updateActive");
}
@Test
@@ -69,10 +69,10 @@ public class UpdateQueryTest extends BaseTestCase {
assertSql(sql.get(0)).contains("update o_customer set status = status");
ServerMetrics metrics = collectMetrics();
- List ormQueryMetrics = metrics.getQueryMetrics();
+ List ormQueryMetrics = metrics.queryMetrics();
assertThat(ormQueryMetrics).hasSize(1);
- assertThat(ormQueryMetrics.get(0).getType()).isEqualTo(Customer.class);
- assertThat(ormQueryMetrics.get(0).getLabel()).isEqualTo("updateAll");
+ assertThat(ormQueryMetrics.get(0).type()).isEqualTo(Customer.class);
+ assertThat(ormQueryMetrics.get(0).label()).isEqualTo("updateAll");
}
@Test
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanIudMetricsTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanIudMetricsTest.java
index d53f0e973..9f26e978c 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanIudMetricsTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/BeanIudMetricsTest.java
@@ -23,11 +23,11 @@ public class BeanIudMetricsTest {
BasicMetricVisitor basic = new BasicMetricVisitor();
iudMetrics.visit(basic);
- List timed = basic.getTimedMetrics();
+ List timed = basic.timedMetrics();
assertThat(timed).hasSize(1);
- assertThat(timed.get(0).getCount()).isEqualTo(4);
- assertThat(timed.get(0).getName()).isEqualTo("iud.one.insertBatch");
+ assertThat(timed.get(0).count()).isEqualTo(4);
+ assertThat(timed.get(0).name()).isEqualTo("iud.one.insertBatch");
iudMetrics.addBatch(PersistRequest.Type.UPDATE, startNanos, 1);
iudMetrics.addBatch(PersistRequest.Type.DELETE_SOFT, startNanos, 2);
@@ -37,15 +37,15 @@ public class BeanIudMetricsTest {
basic = new BasicMetricVisitor();
iudMetrics.visit(basic);
- timed = basic.getTimedMetrics();
+ timed = basic.timedMetrics();
assertThat(timed).hasSize(3);
- assertThat(timed.get(0).getCount()).isEqualTo(16);
- assertThat(timed.get(0).getName()).isEqualTo("iud.one.insertBatch");
- assertThat(timed.get(1).getCount()).isEqualTo(3);
- assertThat(timed.get(1).getName()).isEqualTo("iud.one.updateBatch");
- assertThat(timed.get(2).getCount()).isEqualTo(12);
- assertThat(timed.get(2).getName()).isEqualTo("iud.one.deleteBatch");
+ assertThat(timed.get(0).count()).isEqualTo(16);
+ assertThat(timed.get(0).name()).isEqualTo("iud.one.insertBatch");
+ assertThat(timed.get(1).count()).isEqualTo(3);
+ assertThat(timed.get(1).name()).isEqualTo("iud.one.updateBatch");
+ assertThat(timed.get(2).count()).isEqualTo(12);
+ assertThat(timed.get(2).name()).isEqualTo("iud.one.deleteBatch");
}
@Test
@@ -63,15 +63,15 @@ public class BeanIudMetricsTest {
BasicMetricVisitor basic = new BasicMetricVisitor();
iudMetrics.visit(basic);
- List timed = basic.getTimedMetrics();
+ List timed = basic.timedMetrics();
assertThat(timed).hasSize(3);
- assertThat(timed.get(0).getCount()).isEqualTo(1);
- assertThat(timed.get(0).getName()).isEqualTo("iud.one.insert");
- assertThat(timed.get(1).getCount()).isEqualTo(2);
- assertThat(timed.get(1).getName()).isEqualTo("iud.one.update");
- assertThat(timed.get(2).getCount()).isEqualTo(2);
- assertThat(timed.get(2).getName()).isEqualTo("iud.one.delete");
+ assertThat(timed.get(0).count()).isEqualTo(1);
+ assertThat(timed.get(0).name()).isEqualTo("iud.one.insert");
+ assertThat(timed.get(1).count()).isEqualTo(2);
+ assertThat(timed.get(1).name()).isEqualTo("iud.one.update");
+ assertThat(timed.get(2).count()).isEqualTo(2);
+ assertThat(timed.get(2).name()).isEqualTo("iud.one.delete");
}
}
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricMapTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricMapTest.java
index 43f0e0426..cb6d4d662 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricMapTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricMapTest.java
@@ -21,17 +21,17 @@ public class DTimedMetricMapTest {
BasicMetricVisitor visitor = new BasicMetricVisitor();
metricMap.visit(visitor);
- MetaTimedMetric timedMetric = visitor.getTimedMetrics().get(0);
- assertThat(timedMetric.getCount()).isEqualTo(1);
- assertThat(timedMetric.getTotal()).isGreaterThan(10);
+ MetaTimedMetric timedMetric = visitor.timedMetrics().get(0);
+ assertThat(timedMetric.count()).isEqualTo(1);
+ assertThat(timedMetric.total()).isGreaterThan(10);
metricMap.addSinceNanos("some", nanos);
visitor = new BasicMetricVisitor();
metricMap.visit(visitor);
- timedMetric = visitor.getTimedMetrics().get(0);
- assertThat(timedMetric.getCount()).isEqualTo(1);
- assertThat(timedMetric.getTotal()).isGreaterThan(10);
+ timedMetric = visitor.timedMetrics().get(0);
+ assertThat(timedMetric.count()).isEqualTo(1);
+ assertThat(timedMetric.total()).isGreaterThan(10);
}
}
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java
index 28e651b88..6dbbb45d3 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/profile/DTimedMetricTest.java
@@ -17,16 +17,16 @@ public class DTimedMetricTest {
metric.addSinceNanos(start);
DTimeMetricStats stats = metric.collect(true);
- assertThat(stats.getCount()).isEqualTo(1);
- assertThat(stats.getTotal()).isGreaterThan(10);
- assertThat(stats.getMax()).isEqualTo(stats.getTotal());
+ assertThat(stats.count()).isEqualTo(1);
+ assertThat(stats.total()).isGreaterThan(10);
+ assertThat(stats.max()).isEqualTo(stats.total());
metric.addSinceNanos(start);
stats = metric.collect(true);
- assertThat(stats.getCount()).isEqualTo(1);
- assertThat(stats.getTotal()).isGreaterThan(10);
- assertThat(stats.getMax()).isEqualTo(stats.getTotal());
+ assertThat(stats.count()).isEqualTo(1);
+ assertThat(stats.total()).isGreaterThan(10);
+ assertThat(stats.max()).isEqualTo(stats.total());
}
@Test
@@ -40,16 +40,16 @@ public class DTimedMetricTest {
metric.addBatchSince(start, 5);
DTimeMetricStats stats = metric.collect(true);
- assertThat(stats.getCount()).isEqualTo(5);
- assertThat(stats.getTotal()).isGreaterThan(10000);
- assertThat(stats.getMax()).isEqualTo(stats.getTotal() / 5);
- assertThat(stats.getMax()).isGreaterThan(10000 / 5);
+ assertThat(stats.count()).isEqualTo(5);
+ assertThat(stats.total()).isGreaterThan(10000);
+ assertThat(stats.max()).isEqualTo(stats.total() / 5);
+ assertThat(stats.max()).isGreaterThan(10000 / 5);
metric.addBatchSince(start, 2);
stats = metric.collect(true);
- assertThat(stats.getCount()).isEqualTo(2);
- assertThat(stats.getTotal()).isGreaterThan(10000);
- assertThat(stats.getMax()).isEqualTo(stats.getTotal() / 2);
+ assertThat(stats.count()).isEqualTo(2);
+ assertThat(stats.total()).isGreaterThan(10000);
+ assertThat(stats.max()).isEqualTo(stats.total() / 2);
}
}
diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/profile/SortMetricTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/profile/SortMetricTest.java
index c67d14b30..29658566c 100644
--- a/ebean-core/src/test/java/io/ebeaninternal/server/profile/SortMetricTest.java
+++ b/ebean-core/src/test/java/io/ebeaninternal/server/profile/SortMetricTest.java
@@ -26,7 +26,7 @@ public class SortMetricTest {
list.add(create("a"));
list.sort(sortMetric);
- String names = list.stream().map(DTimeMetricStats::getName).collect(Collectors.joining());
+ String names = list.stream().map(DTimeMetricStats::name).collect(Collectors.joining());
assertEquals("nullabcd", names);
}
diff --git a/ebean-core/src/test/java/org/tests/batchinsert/TestBatchInsertFlush.java b/ebean-core/src/test/java/org/tests/batchinsert/TestBatchInsertFlush.java
index 6e956510a..2f9cdf7f1 100644
--- a/ebean-core/src/test/java/org/tests/batchinsert/TestBatchInsertFlush.java
+++ b/ebean-core/src/test/java/org/tests/batchinsert/TestBatchInsertFlush.java
@@ -80,15 +80,15 @@ public class TestBatchInsertFlush extends BaseTestCase {
}
ServerMetrics metrics = collectMetrics();
- List txnStats = metrics.getTimedMetrics();
+ List txnStats = metrics.timedMetrics();
for (MetaTimedMetric txnMetric : txnStats) {
System.out.println(txnMetric);
}
assertThat(txnStats).hasSize(4);
- assertThat(txnStats.get(0).getName()).isEqualTo("txn.main");
- assertThat(txnStats.get(1).getName()).isEqualTo("txn.named.TestBatchInsertFlush.no_cascade");
- assertThat(txnStats.get(2).getName()).isEqualTo("iud.TSDetail.insertBatch");
- assertThat(txnStats.get(3).getName()).isEqualTo("iud.TSMaster.insertBatch");
+ assertThat(txnStats.get(0).name()).isEqualTo("txn.main");
+ assertThat(txnStats.get(1).name()).isEqualTo("txn.named.TestBatchInsertFlush.no_cascade");
+ assertThat(txnStats.get(2).name()).isEqualTo("iud.TSDetail.insertBatch");
+ assertThat(txnStats.get(3).name()).isEqualTo("iud.TSMaster.insertBatch");
}
@Test
diff --git a/ebean-core/src/test/java/org/tests/m2m/TestM2mDeleteObject.java b/ebean-core/src/test/java/org/tests/m2m/TestM2mDeleteObject.java
index 3ba05ee68..3ccad9fb8 100644
--- a/ebean-core/src/test/java/org/tests/m2m/TestM2mDeleteObject.java
+++ b/ebean-core/src/test/java/org/tests/m2m/TestM2mDeleteObject.java
@@ -28,7 +28,7 @@ public class TestM2mDeleteObject extends BaseTestCase {
List sqlMetrics = sqlMetrics();
assertThat(sqlMetrics).hasSize(1);
- assertThat(sqlMetrics.get(0).getName()).isEqualTo("orm.update.deleteAllPermissions");
+ assertThat(sqlMetrics.get(0).name()).isEqualTo("orm.update.deleteAllPermissions");
Tenant t = new Tenant("tenant");
diff --git a/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java b/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
index b6a40903f..108b4a398 100644
--- a/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
+++ b/ebean-core/src/test/java/org/tests/query/finder/TestCustomerFinder.java
@@ -176,7 +176,7 @@ public class TestCustomerFinder extends BaseTestCase {
// change default collect query plan threshold to 200 micros
QueryPlanInit init0 = new QueryPlanInit();
init0.setAll(true);
- init0.setThresholdMicros(2);
+ init0.thresholdMicros(2);
final List plans = server().getMetaInfoManager().queryPlanInit(init0);
assertThat(plans.size()).isGreaterThan(1);
@@ -186,7 +186,7 @@ public class TestCustomerFinder extends BaseTestCase {
// change query plan threshold to 100 micros
QueryPlanInit init = new QueryPlanInit();
init.setAll(true);
- init.setThresholdMicros(1);
+ init.thresholdMicros(1);
final List appliedToPlans = server().getMetaInfoManager().queryPlanInit(init);
assertThat(appliedToPlans.size()).isGreaterThan(4);
@@ -195,30 +195,30 @@ public class TestCustomerFinder extends BaseTestCase {
ServerMetrics metrics = DB.getDefault().getMetaInfoManager().collectMetrics();
- List planStats = metrics.getQueryMetrics();
+ List planStats = metrics.queryMetrics();
assertThat(planStats.size()).isGreaterThan(4);
for (MetaQueryMetric planStat : planStats) {
System.out.println(planStat);
}
- for (MetaTimedMetric txnTimed : metrics.getTimedMetrics()) {
+ for (MetaTimedMetric txnTimed : metrics.timedMetrics()) {
System.out.println(txnTimed);
}
// obtains db query plans ...
QueryPlanRequest request = new QueryPlanRequest();
// collect max 1000 plans (use something more like 10)
- request.setMaxCount(1_000);
+ request.maxCount(1_000);
// don't collect any more plans if used 10 secs
- request.setMaxTimeMillis(10_000);
+ request.maxTimeMillis(10_000);
List plans0 = server().getMetaInfoManager().queryPlanCollectNow(request);
assertThat(plans0).isNotEmpty();
for (MetaQueryPlan plan : plans) {
logger.info("queryPlan label:{}, queryTimeMicros:{} loc:{} sql:{} bind:{} plan:{}",
- plan.getLabel(), plan.getQueryTimeMicros(), plan.getProfileLocation(),
- plan.getSql(), plan.getBind(), plan.getPlan());
+ plan.label(), plan.queryTimeMicros(), plan.profileLocation(),
+ plan.sql(), plan.bind(), plan.plan());
System.out.println(plan);
}
diff --git a/ebean-core/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java b/ebean-core/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
index 996f08bbe..f16828ec5 100644
--- a/ebean-core/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
+++ b/ebean-core/src/test/java/org/tests/query/sqlquery/SqlQueryTests.java
@@ -407,7 +407,7 @@ public class SqlQueryTests extends BaseTestCase {
List sqlMetrics = sqlMetrics();
assertThat(sqlMetrics).hasSize(1);
- assertThat(sqlMetrics.get(0).getName()).isEqualTo("sql.query.findEach-Max10Rows");
+ assertThat(sqlMetrics.get(0).name()).isEqualTo("sql.query.findEach-Max10Rows");
}
@Test
diff --git a/ebean-core/src/test/java/org/tests/transaction/TestNestedMandatory.java b/ebean-core/src/test/java/org/tests/transaction/TestNestedMandatory.java
index 91eb4e14f..de3184595 100644
--- a/ebean-core/src/test/java/org/tests/transaction/TestNestedMandatory.java
+++ b/ebean-core/src/test/java/org/tests/transaction/TestNestedMandatory.java
@@ -33,7 +33,7 @@ public class TestNestedMandatory extends BaseTestCase {
}
assertThat(txnMetrics).hasSize(2);
- assertThat(txnMetrics.get(1).getName()).isEqualTo("txn.named.outer");
+ assertThat(txnMetrics.get(1).name()).isEqualTo("txn.named.outer");
}
class Outer {
diff --git a/ebean-core/src/test/java/org/tests/transaction/TestTransactionalReadOnly.java b/ebean-core/src/test/java/org/tests/transaction/TestTransactionalReadOnly.java
index 99f776f14..28e0be699 100644
--- a/ebean-core/src/test/java/org/tests/transaction/TestTransactionalReadOnly.java
+++ b/ebean-core/src/test/java/org/tests/transaction/TestTransactionalReadOnly.java
@@ -20,9 +20,9 @@ public class TestTransactionalReadOnly extends BaseTestCase {
resetAllMetrics();
executeTransactionalUsingReadOnlyDataSource();
- final List timedMetrics = collectMetrics().getTimedMetrics();
+ final List timedMetrics = collectMetrics().timedMetrics();
final Optional txnReadOnly = metric(timedMetrics, "txn.readonly");
- assertThat(txnReadOnly.get().getCount()).isEqualTo(1);
+ assertThat(txnReadOnly.get().count()).isEqualTo(1);
assertThat(metric(timedMetrics, "txn")).isEmpty();
}
@@ -32,15 +32,15 @@ public class TestTransactionalReadOnly extends BaseTestCase {
resetAllMetrics();
executeTransactionalUsingMainDataSource();
- final List timedMetrics = collectMetrics().getTimedMetrics();
+ final List timedMetrics = collectMetrics().timedMetrics();
final Optional txnMain = metric(timedMetrics, "txn.main");
- assertThat(txnMain.get().getCount()).isEqualTo(1);
+ assertThat(txnMain.get().count()).isEqualTo(1);
assertThat(metric(timedMetrics, "txn.readonly")).isEmpty();
}
private Optional metric(List timedMetrics, String name) {
return timedMetrics.stream()
- .filter(metaTimedMetric -> metaTimedMetric.getName().equals(name))
+ .filter(metaTimedMetric -> metaTimedMetric.name().equals(name))
.findFirst();
}
diff --git a/ebean-core/src/test/java/org/tests/update/TestSqlUpdateInTxn.java b/ebean-core/src/test/java/org/tests/update/TestSqlUpdateInTxn.java
index 50ca87970..c539beda8 100644
--- a/ebean-core/src/test/java/org/tests/update/TestSqlUpdateInTxn.java
+++ b/ebean-core/src/test/java/org/tests/update/TestSqlUpdateInTxn.java
@@ -126,8 +126,8 @@ public class TestSqlUpdateInTxn extends BaseTestCase {
List sqlMetrics = sqlMetrics();
assertThat(sqlMetrics).hasSize(1);
- assertThat(sqlMetrics.get(0).getName()).isEqualTo("sql.update.auditLargeUpdate");
- assertThat(sqlMetrics.get(0).getCount()).isEqualTo(1);
+ assertThat(sqlMetrics.get(0).name()).isEqualTo("sql.update.auditLargeUpdate");
+ assertThat(sqlMetrics.get(0).count()).isEqualTo(1);
}
@Test
diff --git a/ebean-ddl-generator/src/test/java/io/ebean/BaseTestCase.java b/ebean-ddl-generator/src/test/java/io/ebean/BaseTestCase.java
index 3abf51366..4c0410ff3 100644
--- a/ebean-ddl-generator/src/test/java/io/ebean/BaseTestCase.java
+++ b/ebean-ddl-generator/src/test/java/io/ebean/BaseTestCase.java
@@ -8,9 +8,7 @@ import io.ebean.meta.MetaTimedMetric;
import io.ebean.meta.ServerMetrics;
import io.ebean.util.StringHelper;
import io.ebeaninternal.api.SpiEbeanServer;
-import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.api.SpiTransaction;
-import io.ebeaninternal.server.core.OrmQueryRequest;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.expression.platform.DbExpressionHandler;
import io.ebeaninternal.server.expression.platform.DbExpressionHandlerFactory;
@@ -88,14 +86,14 @@ public abstract class BaseTestCase {
}
protected List visitTimedMetrics() {
- return collectMetrics().getTimedMetrics();
+ return collectMetrics().timedMetrics();
}
protected List sqlMetrics() {
List timedMetrics = visitTimedMetrics();
return timedMetrics.stream()
- .filter((it) -> it.getName().startsWith("sql.") || it.getName().startsWith("orm."))
+ .filter((it) -> it.name().startsWith("sql.") || it.name().startsWith("orm."))
.collect(Collectors.toList());
}
diff --git a/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java b/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java
index 39e670a7f..a69fb6766 100644
--- a/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java
+++ b/ebean-redis/src/main/java/io/ebean/redis/RedisCache.java
@@ -255,14 +255,13 @@ class RedisCache implements ServerCache {
@Override
public ServerCacheStatistics getStatistics(boolean reset) {
-
ServerCacheStatistics cacheStats = new ServerCacheStatistics();
cacheStats.setCacheName(cacheKey);
cacheStats.setHitCount(hitCount.get(reset));
cacheStats.setMissCount(missCount.get(reset));
- cacheStats.setPutCount(metricPut.collect(reset).getCount());
- cacheStats.setRemoveCount(metricRemove.collect(reset).getCount());
- cacheStats.setClearCount(metricClear.collect(reset).getCount());
+ cacheStats.setPutCount(metricPut.collect(reset).count());
+ cacheStats.setRemoveCount(metricRemove.collect(reset).count());
+ cacheStats.setClearCount(metricClear.collect(reset).count());
return cacheStats;
}
}
From fea7de42d5507f5c207dd05889a07f39f4018148 Mon Sep 17 00:00:00 2001
From: rbygrave
Date: Fri, 6 Aug 2021 14:48:42 +1200
Subject: [PATCH 64/87] #2290 - Add MetaTimedMetric locationHash() which is a
crc32 checksum of package + type + method (excludes line number)
---
.../main/java/io/ebean/ProfileLocation.java | 8 +++++
.../java/io/ebean/meta/MetaTimedMetric.java | 8 +++++
.../main/java/io/ebean/meta/MetricData.java | 9 ++++++
.../io/ebean/metric/TimedMetricStats.java | 5 ++++
.../server/core/DumpMetrics.java | 1 +
.../server/core/DumpMetricsData.java | 2 ++
.../server/core/DumpMetricsJson.java | 2 ++
.../server/profile/BasicProfileLocation.java | 7 +++++
.../server/profile/DProfileLocation.java | 11 ++++---
.../server/profile/DQueryPlanMeta.java | 4 +++
.../server/profile/DQueryPlanMetric.java | 5 ++++
.../server/profile/DTimeMetricStats.java | 22 +++++++++-----
.../server/profile/UtilLocation.java | 15 +++++++++-
.../server/query/CQueryPlan.java | 30 ++++++-------------
.../server/query/CQueryPlanStats.java | 5 ++++
.../server/profile/UtilLocationTest.java | 8 ++++-
.../model/basic/finder/CustomerFinder.java | 2 --
.../tests/profile/ProfileLocationTest.java | 20 +++++++++----
.../query/finder/TestCustomerFinder.java | 3 +-
19 files changed, 124 insertions(+), 43 deletions(-)
diff --git a/ebean-api/src/main/java/io/ebean/ProfileLocation.java b/ebean-api/src/main/java/io/ebean/ProfileLocation.java
index 33584a0b3..605de580a 100644
--- a/ebean-api/src/main/java/io/ebean/ProfileLocation.java
+++ b/ebean-api/src/main/java/io/ebean/ProfileLocation.java
@@ -45,6 +45,14 @@ public interface ProfileLocation {
*/
String label();
+ /**
+ * Return a hash of the location that intentionally excludes the line number.
+ *
+ * The hash is expected to be stable regardless of line number in the source file
+ * so that is identifies the class and method location over a long time.
+ */
+ long hash();
+
/**
* Return the full location.
*/
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
index f95f3248d..dbd0f0a0e 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
@@ -6,6 +6,14 @@ package io.ebean.meta;
*/
public interface MetaTimedMetric extends MetaMetric {
+ /**
+ * Return the metric location hash if defined.
+ *
- * The hash is expected to be stable regardless of line number in the source file
- * so that is identifies the class and method location over a long time.
- */
- long hash();
-
/**
* Return the full location.
*/
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
index f5fee986c..1c9b5fe12 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryMetric.java
@@ -45,15 +45,8 @@ public interface MetaQueryMetric extends MetaTimedMetric {
}
/**
- * Return the hash of the sql.
+ * Return the hash of the plan.
*/
- long sqlHash();
+ String hash();
- /**
- * Migrate to sqlHash().
- */
- @Deprecated
- default long getSqlHash() {
- return sqlHash();
- }
}
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java b/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
index 6cdce69a1..c1ae44a82 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaQueryPlan.java
@@ -30,7 +30,7 @@ public interface MetaQueryPlan {
/**
* Return the hash of the plan.
*/
- long sqlHash();
+ String hash();
/**
* Return a description of the bind values.
diff --git a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
index dbd0f0a0e..f95f3248d 100644
--- a/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
+++ b/ebean-api/src/main/java/io/ebean/meta/MetaTimedMetric.java
@@ -6,14 +6,6 @@ package io.ebean.meta;
*/
public interface MetaTimedMetric extends MetaMetric {
- /**
- * Return the metric location hash if defined.
- *