From bd7499a5054564119b6609e1be94f8c43c87f181 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler=20=28JPo=29?= Date: Mon, 29 Mar 2021 13:23:56 +0200 Subject: [PATCH 01/68] Use SoftReference in Cache, so it can be gc'ed if the jvm runs out of memory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Jonas Pöhler (JPo) --- .../server/cache/DefaultServerCache.java | 45 +++++++++++-------- .../cache/DefaultServerCacheConfig.java | 8 ++-- .../server/cache/DefaultServerQueryCache.java | 5 ++- 3 files changed, 35 insertions(+), 23 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java index 41ec3e2c9..334a0838a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCache.java @@ -11,6 +11,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.Serializable; +import java.lang.ref.SoftReference; import java.util.ArrayList; import java.util.Comparator; import java.util.Iterator; @@ -37,7 +38,7 @@ public class DefaultServerCache implements ServerCache { /** * The underlying map (ConcurrentHashMap or similar) */ - protected final Map map; + protected final Map> map; protected final CountMetric hitCount; protected final CountMetric missCount; @@ -199,7 +200,8 @@ public class DefaultServerCache implements ServerCache { * Get the cache entry - override for query cache to validate dependent tables. */ protected CacheEntry getCacheEntry(Object id) { - return map.get(key(id)); + final SoftReference ref = map.get(key(id)); + return ref != null ? ref.get() : null; } @Override @@ -213,7 +215,7 @@ public class DefaultServerCache implements ServerCache { @Override public void put(Object id, Object value) { Object key = key(id); - map.put(key, new CacheEntry(key, value)); + map.put(key, new SoftReference<>(new CacheEntry(key, value))); putCount.increment(); } @@ -222,8 +224,8 @@ public class DefaultServerCache implements ServerCache { */ @Override public void remove(Object id) { - CacheEntry entry = map.remove(key(id)); - if (entry != null) { + SoftReference entry = map.remove(key(id)); + if (entry != null && entry.get() != null) { removeCount.increment(); } } @@ -266,6 +268,7 @@ public class DefaultServerCache implements ServerCache { long startNanos = System.nanoTime(); long trimmedByIdle = 0; + long trimmedByGC = 0; long trimmedByTTL = 0; long trimmedByLRU = 0; @@ -274,10 +277,14 @@ public class DefaultServerCache implements ServerCache { long idleExpireNano = startNanos - TimeUnit.SECONDS.toNanos(maxIdleSecs); long ttlExpireNano = startNanos - TimeUnit.SECONDS.toNanos(maxSecsToLive); - Iterator it = map.values().iterator(); + Iterator> it = map.values().iterator(); while (it.hasNext()) { - CacheEntry cacheEntry = it.next(); - if (maxIdleSecs > 0 && idleExpireNano > cacheEntry.getLastAccessTime()) { + SoftReference ref = it.next(); + final CacheEntry cacheEntry = ref.get(); + if (cacheEntry == null) { + it.remove(); + trimmedByGC++; + } else if (maxIdleSecs > 0 && idleExpireNano > cacheEntry.getLastAccessTime()) { it.remove(); trimmedByIdle++; @@ -290,27 +297,27 @@ public class DefaultServerCache implements ServerCache { } } - if (trimForMaxSize > 0) { - trimmedByLRU = activeList.size() - maxSize; - if (trimmedByLRU > 0) { - // sort into last access time ascending - activeList.sort(BY_LAST_ACCESS); - int trimSize = getTrimSize(); - for (int i = trimSize; i < activeList.size(); i++) { - // remove if still in the cache - map.remove(activeList.get(i).getKey()); + if (trimForMaxSize > 0 && activeList.size() > maxSize) { + // sort into last access time ascending + activeList.sort(BY_LAST_ACCESS); + int trimSize = getTrimSize(); + for (int i = trimSize; i < activeList.size(); i++) { + // remove if still in the cache + if (map.remove(activeList.get(i).getKey()) != null) { + trimmedByLRU++; } } } evictCount.add(trimmedByIdle); + evictCount.add(trimmedByGC); evictCount.add(trimmedByTTL); evictCount.add(trimmedByLRU); if (logger.isTraceEnabled()) { long exeMicros = TimeUnit.MICROSECONDS.convert(System.nanoTime() - startNanos, TimeUnit.NANOSECONDS); - logger.trace("Executed trim of cache {} in [{}]millis idle[{}] timeToLive[{}] accessTime[{}]" - , name, exeMicros, trimmedByIdle, trimmedByTTL, trimmedByLRU); + logger.trace("Executed trim of cache {} in [{}]millis idle[{}] timeToLive[{}] accessTime[{}] gc[{}]", + name, exeMicros, trimmedByIdle, trimmedByTTL, trimmedByLRU, trimmedByGC); } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java index 638f237a2..5f8ed1d5d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerCacheConfig.java @@ -4,7 +4,9 @@ import io.ebean.cache.QueryCacheEntryValidate; import io.ebean.cache.ServerCacheConfig; import io.ebean.cache.ServerCacheOptions; import io.ebean.config.CurrentTenantProvider; +import io.ebeaninternal.server.cache.DefaultServerCache.CacheEntry; +import java.lang.ref.SoftReference; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; @@ -17,13 +19,13 @@ public class DefaultServerCacheConfig { private int maxSecsToLive; private int trimFrequency; - private Map map; + private Map> map; public DefaultServerCacheConfig(ServerCacheConfig config) { this(config, new ConcurrentHashMap<>()); } - public DefaultServerCacheConfig(ServerCacheConfig config, Map map) { + public DefaultServerCacheConfig(ServerCacheConfig config, Map> map) { this.config = config; this.map = map; @@ -50,7 +52,7 @@ public class DefaultServerCacheConfig { return config.getShortName(); } - public Map getMap() { + public Map> getMap() { return map; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java index afbdb37f7..4f437eafc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/cache/DefaultServerQueryCache.java @@ -3,6 +3,8 @@ package io.ebeaninternal.server.cache; import io.ebean.cache.QueryCacheEntry; import io.ebean.cache.QueryCacheEntryValidate; +import java.lang.ref.SoftReference; + /** * Server cache for query caching. *

@@ -27,7 +29,8 @@ public class DefaultServerQueryCache extends DefaultServerCache { @Override protected CacheEntry getCacheEntry(Object id) { Object key = key(id); - CacheEntry entry = map.get(key); + final SoftReference ref = map.get(key); + CacheEntry entry = ref != null ? ref.get() : null; if (entry == null) { return null; } From 4cebb367debec308a665dd74cee8a8bfd2e934c3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler?= Date: Thu, 29 Jul 2021 17:09:24 +0200 Subject: [PATCH 02/68] FIX: subquery could not not have a where clause --- .../server/query/CQueryPredicates.java | 3 ++- .../test/java/org/tests/query/TestQueryExists.java | 14 +++++++++++++- .../test/java/org/tests/query/TestSubQuery.java | 12 +++++++++++- 3 files changed, 26 insertions(+), 3 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java index c41f830c6..bc0588949 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java @@ -22,6 +22,7 @@ import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Timestamp; +import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Set; @@ -411,7 +412,7 @@ public class CQueryPredicates { * Return the bind values for the where expression. */ public List getWhereExprBindValues() { - return where.getBindValues(); + return where == null ? Collections.emptyList() : where.getBindValues(); } /** diff --git a/ebean-core/src/test/java/org/tests/query/TestQueryExists.java b/ebean-core/src/test/java/org/tests/query/TestQueryExists.java index 93155bf9a..d72a1ae0d 100644 --- a/ebean-core/src/test/java/org/tests/query/TestQueryExists.java +++ b/ebean-core/src/test/java/org/tests/query/TestQueryExists.java @@ -4,7 +4,6 @@ import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Query; import io.ebeantest.LoggedSql; - import org.junit.Test; import org.tests.model.basic.Customer; import org.tests.model.basic.Order; @@ -111,4 +110,17 @@ public class TestQueryExists extends BaseTestCase { assertThat(sql).contains("not exists ("); } + + @Test + public void testExistsNoWhere() { + ResetBasicData.reset(); + + Query subQuery = Ebean.find(Order.class).alias("sq").select("id"); + Query query = Ebean.find(Customer.class).alias("qt").where().notExists(subQuery).query(); + + query.findList(); + String sql = query.getGeneratedSql(); + + assertThat(sql).contains("not exists (select sq.id from o_order sq)"); + } } diff --git a/ebean-core/src/test/java/org/tests/query/TestSubQuery.java b/ebean-core/src/test/java/org/tests/query/TestSubQuery.java index db9eb7cbd..5de3f9290 100644 --- a/ebean-core/src/test/java/org/tests/query/TestSubQuery.java +++ b/ebean-core/src/test/java/org/tests/query/TestSubQuery.java @@ -44,7 +44,17 @@ public class TestSubQuery extends BaseTestCase { Query sq = DB.createQuery(Order.class).select("id").where() .isIn("details.product.id", productIds).query(); - DB.find(Order.class).where().isIn("id", sq).findList(); + assertThat(DB.find(Order.class).where().isIn("id", sq).findList()).hasSize(2); + } + + @Test + public void test_IsInNoWhere() { + ResetBasicData.reset(); + + Query sq = DB.createQuery(Order.class).select("id"); + int expectedSize = DB.find(Order.class).findCount(); // expect everything + + assertThat(DB.find(Order.class).where().isIn("id", sq).findList()).hasSize(expectedSize); } public void testCompositeKey() { From fc7379aabc56b1697872df9c34fffb46fa7a1ea6 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Fri, 13 Aug 2021 09:18:31 +1200 Subject: [PATCH 03/68] Tidy internals - server.persist.dml package for whitespace and typos --- .../server/persist/PstmtFactory.java | 5 --- .../server/persist/dml/DeleteHandler.java | 2 -- .../server/persist/dml/DeleteMeta.java | 8 +---- .../server/persist/dml/DmlBeanPersister.java | 6 ---- .../persist/dml/DmlBeanPersisterFactory.java | 3 -- .../server/persist/dml/DmlHandler.java | 18 ---------- .../persist/dml/GenerateDmlRequest.java | 5 --- .../server/persist/dml/InsertHandler.java | 28 +++------------ .../server/persist/dml/InsertMeta.java | 21 +++--------- .../server/persist/dml/MetaFactory.java | 19 +++-------- .../server/persist/dml/UpdateHandler.java | 5 --- .../server/persist/dml/UpdateMeta.java | 11 ------ .../server/persist/dml/UpdatePlan.java | 34 ------------------- 13 files changed, 14 insertions(+), 151 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/PstmtFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/PstmtFactory.java index cf8b294df..14b24dd3b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/PstmtFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/PstmtFactory.java @@ -56,7 +56,6 @@ class PstmtFactory { if (t.isLogSql()) { t.logSql(TrimLogSql.trim(sql)); } - Connection conn = t.getInternalConnection(); PreparedStatement stmt = conn.prepareStatement(sql); BatchedPstmt bs = new BatchedPstmt(stmt, false, sql, t); @@ -68,10 +67,8 @@ class PstmtFactory { * Return a callable statement taking into account batch requirements. */ CallableStatement getCstmtBatch(SpiTransaction t, boolean logSql, String sql, BatchPostExecute batchExe) throws SQLException { - BatchedPstmtHolder batch = t.getBatchControl().getPstmtHolder(); CallableStatement stmt = (CallableStatement) batch.getStmt(sql, batchExe); - if (stmt != null) { return stmt; } @@ -79,10 +76,8 @@ class PstmtFactory { if (logSql) { t.logSql(sql); } - Connection conn = t.getInternalConnection(); stmt = conn.prepareCall(sql); - BatchedPstmt bs = new BatchedPstmt(stmt, false, sql, t); batch.addStmt(bs, batchExe); return stmt; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteHandler.java index 7889e94af..9320a49fa 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteHandler.java @@ -29,10 +29,8 @@ public class DeleteHandler extends DmlHandler { */ @Override public void bind() throws SQLException { - sql = meta.getSql(persistRequest); SpiTransaction t = persistRequest.getTransaction(); - PreparedStatement pstmt; if (persistRequest.isBatched()) { pstmt = getPstmtBatch(t, sql, persistRequest, false); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteMeta.java index c51a62531..ccb196947 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteMeta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteMeta.java @@ -41,9 +41,7 @@ final class DeleteMeta extends BaseMeta { * Bind the request based on the concurrency mode. */ public void bind(PersistRequestBean persist, DmlHandler bind) throws SQLException { - EntityBean bean = persist.getEntityBean(); - id.dmlBind(bind, bean); if (tenantId != null) { tenantId.dmlBind(bind, bean); @@ -58,7 +56,6 @@ final class DeleteMeta extends BaseMeta { * get or generate the sql based on the concurrency mode. */ public String getSql(PersistRequestBean request) { - if (id.isEmpty()) { throw new IllegalStateException("Can not deleteById on " + request.getFullName() + " as no @Id property"); } @@ -77,10 +74,7 @@ final class DeleteMeta extends BaseMeta { } private String genSql(ConcurrencyMode conMode, String table) { - - GenerateDmlRequest request = new GenerateDmlRequest(); - request.append("delete from ").append(table); - request.append(" where "); + GenerateDmlRequest request = new GenerateDmlRequest().append("delete from ").append(table).append(" where "); return appendWhere(request, conMode); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java index 5c925e8d2..f07d207b8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java @@ -19,11 +19,8 @@ import java.sql.SQLException; public final class DmlBeanPersister implements BeanPersister { private final DatabasePlatform dbPlatform; - private final UpdateMeta updateMeta; - private final InsertMeta insertMeta; - private final DeleteMeta deleteMeta; DmlBeanPersister(DatabasePlatform dbPlatform, UpdateMeta updateMeta, InsertMeta insertMeta, DeleteMeta deleteMeta) { @@ -61,7 +58,6 @@ public final class DmlBeanPersister implements BeanPersister { * execute request taking batching into account. */ private int execute(PersistRequestBean request, PersistHandler handler) { - boolean batched = request.isBatched(); try { handler.bind(); @@ -72,7 +68,6 @@ public final class DmlBeanPersister implements BeanPersister { } else { return handler.executeNoBatch(); } - } catch (SQLException e) { // log the error to the transaction log String msg = "Error[" + StringHelper.removeNewLines(e.getMessage()) + "]"; @@ -80,7 +75,6 @@ public final class DmlBeanPersister implements BeanPersister { request.getTransaction().logSummary(msg); } throw dbPlatform.translate(msg, e); - } finally { if (!batched) { handler.close(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersisterFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersisterFactory.java index a06ac1505..6e349dee1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersisterFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersisterFactory.java @@ -11,7 +11,6 @@ import io.ebeaninternal.server.persist.BeanPersisterFactory; public class DmlBeanPersisterFactory implements BeanPersisterFactory { private final DatabasePlatform dbPlatform; - private final MetaFactory metaFactory; public DmlBeanPersisterFactory(DatabasePlatform dbPlatform) { @@ -24,11 +23,9 @@ public class DmlBeanPersisterFactory implements BeanPersisterFactory { */ @Override public BeanPersister create(BeanDescriptor desc) { - if (desc.isDocStoreOnly()) { return new DocStoreBeanPersister(GeneratedProperties.of(desc)); } - UpdateMeta updMeta = metaFactory.createUpdate(desc); DeleteMeta delMeta = metaFactory.createDelete(desc); InsertMeta insMeta = metaFactory.createInsert(desc); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlHandler.java index 0a4bb6b8a..3baeb6551 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlHandler.java @@ -27,28 +27,14 @@ public abstract class DmlHandler implements PersistHandler, BindableRequest { private static final short BATCHED_FIRST = 1; private static final short BATCHED = 2; - /** - * The originating request. - */ final PersistRequestBean persistRequest; - private final StringBuilder bindLog; - final SpiTransaction transaction; - private final boolean logLevelSql; - private final long now; - - /** - * The PreparedStatement used for the dml. - */ DataBind dataBind; - BatchedPstmt batchedPstmt; - String sql; - private short batchedStatus; DmlHandler(PersistRequestBean persistRequest) { @@ -226,7 +212,6 @@ public abstract class DmlHandler implements PersistHandler, BindableRequest { } private void bindInternal(boolean log, Object value, BeanProperty prop) throws SQLException { - if (log) { if (bindLog.length() > 0) { bindLog.append(","); @@ -249,14 +234,12 @@ public abstract class DmlHandler implements PersistHandler, BindableRequest { * Check with useGeneratedKeys to get appropriate PreparedStatement. */ PreparedStatement getPstmt(SpiTransaction t, String sql, boolean genKeys) throws SQLException { - Connection conn = t.getInternalConnection(); if (genKeys) { // the Id generated is always the first column // Required to stop Oracle10 giving us Oracle rowId?? // Other jdbc drivers seem fine without this hint. return conn.prepareStatement(sql, GENERATED_KEY_COLUMNS); - } else { return conn.prepareStatement(sql); } @@ -272,7 +255,6 @@ public abstract class DmlHandler implements PersistHandler, BindableRequest { batchedStatus = batchedPstmt.isEmpty() ? BATCHED_FIRST : BATCHED; return batchedPstmt.getStatement(request); } - batchedStatus = BATCHED_FIRST; PreparedStatement stmt = getPstmt(t, sql, genKeys); batchedPstmt = new BatchedPstmt(stmt, genKeys, sql, t); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GenerateDmlRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GenerateDmlRequest.java index 5093ae111..809115563 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GenerateDmlRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GenerateDmlRequest.java @@ -6,14 +6,10 @@ package io.ebeaninternal.server.persist.dml; public class GenerateDmlRequest { private final StringBuilder sb = new StringBuilder(100); - private StringBuilder insertBindBuffer; - private String prefix; private String prefix2; - private int insertMode; - private int bindColumnCount; /** @@ -33,7 +29,6 @@ public class GenerateDmlRequest { } public void appendColumn(String column, String bind) { - ++bindColumnCount; sb.append(prefix); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertHandler.java index f1508bf50..d9fb1e8f0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertHandler.java @@ -20,24 +20,11 @@ import static io.ebeaninternal.server.persist.DmlUtil.isNullOrZero; */ public class InsertHandler extends DmlHandler { - /** - * The associated InsertMeta data. - */ private final InsertMeta meta; - - /** - * Set to true when the key is concatenated. - */ - private final boolean concatinatedKey; - - /** - * Flag set when using getGeneratedKeys. - */ + private final boolean concatenatedKey; private boolean useGeneratedKeys; - /** - * A SQL Select used to fetch back the Id where generatedKeys is not - * supported. + * SQL Select used to fetch back the Id where generatedKeys is not supported. */ private boolean useSelectLastInsertedId; @@ -47,7 +34,7 @@ public class InsertHandler extends DmlHandler { public InsertHandler(PersistRequestBean persist, InsertMeta meta) { super(persist); this.meta = meta; - this.concatinatedKey = meta.isConcatenatedKey(); + this.concatenatedKey = meta.isConcatenatedKey(); } @Override @@ -60,17 +47,14 @@ public class InsertHandler extends DmlHandler { */ @Override public void bind() throws SQLException { - BeanDescriptor desc = persistRequest.getBeanDescriptor(); EntityBean bean = persistRequest.getEntityBean(); - Object idValue = desc.getId(bean); - boolean withId = !isNullOrZero(idValue); // check to see if we are going to use generated keys if (!withId) { - if (concatinatedKey) { + if (concatenatedKey) { // expecting a concatenated key that can // be built from supplied AssocOne beans withId = meta.deriveConcatenatedId(persistRequest); @@ -84,10 +68,8 @@ public class InsertHandler extends DmlHandler { } SpiTransaction t = persistRequest.getTransaction(); - // get the appropriate sql sql = meta.getSql(withId, persistRequest.isPublish()); - PreparedStatement pstmt; if (persistRequest.isBatched()) { pstmt = getPstmtBatch(t, sql, persistRequest, useGeneratedKeys); @@ -139,7 +121,6 @@ public class InsertHandler extends DmlHandler { * For non batch insert with generated keys. */ private void getGeneratedKeys() throws SQLException { - ResultSet rset = dataBind.getPstmt().getGeneratedKeys(); try { setGeneratedKey(rset); @@ -164,7 +145,6 @@ public class InsertHandler extends DmlHandler { * SQL select to fetch back the Id value. */ private void fetchGeneratedKeyUsingSelect() throws SQLException { - PreparedStatement stmt = null; ResultSet rset = null; try { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMeta.java index abaefd095..588b778e7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMeta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertMeta.java @@ -26,28 +26,18 @@ final class InsertMeta { private final String sqlWithId; private final String sqlDraftNullId; private final String sqlDraftWithId; - private final BindableId id; - private final Bindable discriminator; - private final BindableList all; - private final BindableList allExcludeDraftOnly; - private final boolean supportsGetGeneratedKeys; - - private final boolean concatinatedKey; - + private final boolean concatenatedKey; /** * Used for DB that do not support getGeneratedKeys. */ private final boolean supportsSelectLastInsertedId; - private final Bindable shadowFKey; - private final String[] identityDbColumns; - private final Platform platform; InsertMeta(DatabasePlatform dbPlatform, BeanDescriptor desc, Bindable shadowFKey, BindableId id, BindableList all) { @@ -66,7 +56,7 @@ final class InsertMeta { // only available for single Id property if (id.isConcatenated()) { // concatenated key - this.concatinatedKey = true; + this.concatenatedKey = true; this.identityDbColumns = null; this.sqlNullId = null; this.sqlDraftNullId = null; @@ -75,7 +65,7 @@ final class InsertMeta { } else { // insert sql for db identity or sequence insert - this.concatinatedKey = false; + this.concatenatedKey = false; if (id.getIdentityColumn() == null) { this.identityDbColumns = new String[]{}; this.supportsGetGeneratedKeys = false; @@ -99,7 +89,7 @@ final class InsertMeta { * Return true if this is a concatenated key. */ boolean isConcatenatedKey() { - return concatinatedKey; + return concatenatedKey; } String[] getIdentityDbColumns() { @@ -133,7 +123,6 @@ final class InsertMeta { * Bind the request based on whether the id value(s) are null. */ public void bind(DmlHandler request, EntityBean bean, boolean withId, boolean publish) throws SQLException { - if (withId) { id.dmlBind(request, bean); } @@ -154,7 +143,6 @@ final class InsertMeta { * get the sql based whether the id value(s) are null. */ public String getSql(boolean withId, boolean publish) { - if (withId) { return publish ? sqlWithId : sqlDraftWithId; } else { @@ -163,7 +151,6 @@ final class InsertMeta { } private String genSql(boolean nullId, String table, boolean draftTable) { - GenerateDmlRequest request = new GenerateDmlRequest(); request.setInsertSetMode(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/MetaFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/MetaFactory.java index 6df6d088c..de7c2bb39 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/MetaFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/MetaFactory.java @@ -24,19 +24,17 @@ import java.util.List; */ class MetaFactory { - private final FactoryBaseProperties baseFact; - private final FactoryEmbedded embeddedFact; - private final FactoryVersion versionFact = new FactoryVersion(); - private final FactoryAssocOnes assocOneFact = new FactoryAssocOnes(); - - private final FactoryId idFact = new FactoryId(); - /** * Include Lobs in the base statement. Generally true. Oracle9 used to require * a separate statement for Clobs and Blobs. */ private static final boolean includeLobs = true; + private final FactoryBaseProperties baseFact; + private final FactoryEmbedded embeddedFact; + private final FactoryVersion versionFact = new FactoryVersion(); + private final FactoryAssocOnes assocOneFact = new FactoryAssocOnes(); + private final FactoryId idFact = new FactoryId(); private final DatabasePlatform dbPlatform; MetaFactory(DatabasePlatform dbPlatform) { @@ -52,9 +50,7 @@ class MetaFactory { * Create the UpdateMeta for the given bean type. */ UpdateMeta createUpdate(BeanDescriptor desc) { - List setList = new ArrayList<>(); - baseFact.create(setList, desc, DmlMode.UPDATE, includeLobs); embeddedFact.create(setList, desc, DmlMode.UPDATE, includeLobs); assocOneFact.create(setList, desc, DmlMode.UPDATE); @@ -75,7 +71,6 @@ class MetaFactory { * Create the DeleteMeta for the given bean type. */ DeleteMeta createDelete(BeanDescriptor desc) { - BindableId id = idFact.createId(desc); Bindable version = versionFact.createForDelete(desc); Bindable tenantId = versionFact.createTenantId(desc); @@ -86,19 +81,15 @@ class MetaFactory { * Create the InsertMeta for the given bean type. */ InsertMeta createInsert(BeanDescriptor desc) { - BindableId id = idFact.createId(desc); List allList = new ArrayList<>(); - baseFact.create(allList, desc, DmlMode.INSERT, includeLobs); embeddedFact.create(allList, desc, DmlMode.INSERT, includeLobs); assocOneFact.create(allList, desc, DmlMode.INSERT); BindableList allBindable = new BindableList(allList); - BeanPropertyAssocOne unidirectional = desc.getUnidirectional(); - Bindable shadowFkey; if (unidirectional == null) { shadowFkey = null; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateHandler.java index 85f96c192..8a3e724c8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateHandler.java @@ -14,7 +14,6 @@ import java.sql.SQLException; public class UpdateHandler extends DmlHandler { private final UpdateMeta meta; - private boolean emptySetClause; UpdateHandler(PersistRequestBean persist, UpdateMeta meta) { @@ -32,18 +31,14 @@ public class UpdateHandler extends DmlHandler { */ @Override public void bind() throws SQLException { - SpiUpdatePlan updatePlan = meta.getUpdatePlan(persistRequest); - if (updatePlan.isEmptySetClause()) { emptySetClause = true; return; } sql = updatePlan.getSql(); - SpiTransaction t = persistRequest.getTransaction(); - PreparedStatement pstmt; if (persistRequest.isBatched()) { pstmt = getPstmtBatch(t, sql, persistRequest, false); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateMeta.java index 49dbbaea4..4b667e521 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateMeta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateMeta.java @@ -30,16 +30,12 @@ final class UpdateMeta extends BaseMeta { * Bind the request based on the concurrency mode. */ public void bind(PersistRequestBean persist, DmlHandler bind, SpiUpdatePlan updatePlan) throws SQLException { - EntityBean bean = persist.getEntityBean(); - updatePlan.bindSet(bind, bean); - id.dmlBind(bind, bean); if (tenantId != null) { tenantId.dmlBind(bind, bean); } - if (persist.getConcurrencyMode() == ConcurrencyMode.VERSION) { version.dmlBind(bind, bean); } @@ -53,9 +49,7 @@ final class UpdateMeta extends BaseMeta { } private SpiUpdatePlan getDynamicUpdatePlan(PersistRequestBean persistRequest) { - String key = persistRequest.getUpdatePlanHash(); - // check if we can use a cached UpdatePlan BeanDescriptor beanDescriptor = persistRequest.getBeanDescriptor(); SpiUpdatePlan updatePlan = beanDescriptor.getUpdatePlan(key); @@ -71,20 +65,16 @@ final class UpdateMeta extends BaseMeta { BindableList bindableList = new BindableList(list); ConcurrencyMode mode = persistRequest.getConcurrencyMode(); - // build the SQL for this update statement String sql = genSql(mode, bindableList, persistRequest.getUpdateTable()); updatePlan = new UpdatePlan(key, mode, sql, bindableList); - // add the UpdatePlan to the cache beanDescriptor.putUpdatePlan(key, updatePlan); - return updatePlan; } private String genSql(ConcurrencyMode conMode, BindableList bindableList, String tableName) { - GenerateDmlRequest request = new GenerateDmlRequest(); request.append("update ").append(tableName).append(" set "); request.setUpdateSetMode(); @@ -95,7 +85,6 @@ final class UpdateMeta extends BaseMeta { // with the result that nothing is in the set clause return null; } - request.append(" where "); return appendWhere(request, conMode); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdatePlan.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdatePlan.java index 9422d83dd..97811b5cf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdatePlan.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdatePlan.java @@ -13,26 +13,13 @@ import java.sql.SQLException; class UpdatePlan implements SpiUpdatePlan { private final String key; - private final ConcurrencyMode mode; - private final String sql; - private final Bindable set; - private final long timeCreated; - private final boolean emptySetClause; - private long timeLastUsed; - /** - * Create a non cached UpdatePlan. - */ - UpdatePlan(ConcurrencyMode mode, String sql, Bindable set) { - this(null, mode, sql, set); - } - /** * Create a UpdatePlan with a given key. */ @@ -50,9 +37,6 @@ class UpdatePlan implements SpiUpdatePlan { return emptySetClause; } - /** - * Run the prepared statement binding for the 'update set' properties. - */ @Override public void bindSet(DmlHandler bind, EntityBean bean) throws SQLException { set.dmlBind(bind, bean); @@ -60,49 +44,31 @@ class UpdatePlan implements SpiUpdatePlan { this.timeLastUsed = System.currentTimeMillis(); } - /** - * Return the time this plan was created. - */ @Override public long getTimeCreated() { return timeCreated; } - /** - * Return the time this plan was last used. - */ @Override public long getTimeLastUsed() { return timeLastUsed; } - /** - * Return the key. - */ @Override public String getKey() { return key; } - /** - * Return the concurrency mode for this plan. - */ @Override public ConcurrencyMode getMode() { return mode; } - /** - * Return the DML statement. - */ @Override public String getSql() { return sql; } - /** - * Return the Bindable properties for the update set. - */ @Override public Bindable getSet() { return set; From 965c1e803fa67806d39e725ec1c640bc933bd830 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Fri, 13 Aug 2021 10:47:14 +0200 Subject: [PATCH 04/68] FIX: mutationDetection = SOURCE works also for special json types --- .../server/type/DefaultTypeManager.java | 13 +- .../server/type/ScalarTypeJsonList.java | 66 ++++---- .../server/type/ScalarTypeJsonMap.java | 116 +++++++++----- .../type/ScalarTypeJsonMapPostgres.java | 22 +-- .../server/type/ScalarTypeJsonSet.java | 68 ++++---- .../server/type/ScalarTypeJsonListTest.java | 12 +- .../java/org/tests/json/TestOldValue.java | 120 ++++++++++++++ .../org/tests/model/json/EBasicOldValue.java | 146 ++++++++++++++++++ 8 files changed, 446 insertions(+), 117 deletions(-) create mode 100644 ebean-core/src/test/java/org/tests/json/TestOldValue.java create mode 100644 ebean-core/src/test/java/org/tests/model/json/EBasicOldValue.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeManager.java index 1400b2180..4419f1e1f 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 @@ -289,7 +289,7 @@ public final class DefaultTypeManager implements TypeManager { @Override public ScalarType getDbMapScalarType() { - return (postgres) ? hstoreType : ScalarTypeJsonMap.typeFor(false, Types.VARCHAR); + return (postgres) ? hstoreType : ScalarTypeJsonMap.typeFor(false, Types.VARCHAR, false); } @Override @@ -312,7 +312,7 @@ public final class DefaultTypeManager implements TypeManager { return arrayTypeSetFactory.typeFor(valueType, nullable); } // fallback to JSON storage in VARCHAR column - return new ScalarTypeJsonSet.Varchar(getDocType(valueType), nullable); + return new ScalarTypeJsonSet.Varchar(getDocType(valueType), nullable, false); // TODO: keepSource for @DbArray? } private ScalarType getArrayScalarTypeList(Type valueType, boolean nullable) { @@ -323,7 +323,7 @@ public final class DefaultTypeManager implements TypeManager { return arrayTypeListFactory.typeFor(valueType, nullable); } // fallback to JSON storage in VARCHAR column - return new ScalarTypeJsonList.Varchar(getDocType(valueType), nullable); + return new ScalarTypeJsonList.Varchar(getDocType(valueType), nullable, false); // TODO: keepSource for @DbArray? } private Class> asEnumClass(Type valueType) { @@ -340,10 +340,11 @@ public final class DefaultTypeManager implements TypeManager { Type genericType = prop.getGenericType(); boolean hasJacksonAnnotations = objectMapperPresent && checkJacksonAnnotations(prop); + boolean keepSource = prop.getMutationDetection() == MutationDetection.SOURCE; if (type.equals(List.class)) { DocPropertyType docType = getDocType(genericType); if (!hasJacksonAnnotations && isValueTypeSimple(genericType)) { - return ScalarTypeJsonList.typeFor(postgres, dbType, docType, prop.isNullable()); + return ScalarTypeJsonList.typeFor(postgres, dbType, docType, prop.isNullable(), keepSource); } else { return createJsonObjectMapperType(prop, dbType, docType); } @@ -351,14 +352,14 @@ public final class DefaultTypeManager implements TypeManager { if (type.equals(Set.class)) { DocPropertyType docType = getDocType(genericType); if (!hasJacksonAnnotations && isValueTypeSimple(genericType)) { - return ScalarTypeJsonSet.typeFor(postgres, dbType, docType, prop.isNullable()); + return ScalarTypeJsonSet.typeFor(postgres, dbType, docType, prop.isNullable(), keepSource); } else { return createJsonObjectMapperType(prop, dbType, docType); } } if (type.equals(Map.class)) { if (!hasJacksonAnnotations && isMapValueTypeObject(genericType)) { - return ScalarTypeJsonMap.typeFor(postgres, dbType); + return ScalarTypeJsonMap.typeFor(postgres, dbType, keepSource); } else { return createJsonObjectMapperType(prop, dbType, DocPropertyType.OBJECT); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java index a196085a6..7ca361405 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java @@ -24,24 +24,24 @@ public class ScalarTypeJsonList { /** * Return the appropriate ScalarType based requested dbType and if Postgres. */ - public static ScalarType typeFor(boolean postgres, int dbType, DocPropertyType docType, boolean nullable) { + public static ScalarType typeFor(boolean postgres, int dbType, DocPropertyType docType, boolean nullable, boolean keepSource) { if (postgres) { switch (dbType) { case DbPlatformType.JSONB: - return new ScalarTypeJsonList.JsonB(docType, nullable); + return new ScalarTypeJsonList.JsonB(docType, nullable, keepSource); case DbPlatformType.JSON: - return new ScalarTypeJsonList.Json(docType, nullable); + return new ScalarTypeJsonList.Json(docType, nullable, keepSource); } } - return new ScalarTypeJsonList.Varchar(docType, nullable); + return new ScalarTypeJsonList.Varchar(docType, nullable, keepSource); } /** * List mapped to DB VARCHAR. */ public static class Varchar extends ScalarTypeJsonList.Base { - public Varchar(DocPropertyType docType, boolean nullable) { - super(Types.VARCHAR, docType, nullable); + public Varchar(DocPropertyType docType, boolean nullable, boolean keepSource) { + super(Types.VARCHAR, docType, nullable, keepSource); } } @@ -49,8 +49,8 @@ public class ScalarTypeJsonList { * List mapped to Postgres JSON. */ private static class Json extends ScalarTypeJsonList.PgBase { - public Json(DocPropertyType docType, boolean nullable) { - super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE, docType, nullable); + public Json(DocPropertyType docType, boolean nullable, boolean keepSource) { + super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE, docType, nullable, keepSource); } } @@ -58,8 +58,8 @@ public class ScalarTypeJsonList { * List mapped to Postgres JSONB. */ private static class JsonB extends ScalarTypeJsonList.PgBase { - public JsonB(DocPropertyType docType, boolean nullable) { - super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE, docType, nullable); + public JsonB(DocPropertyType docType, boolean nullable, boolean keepSource) { + super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE, docType, nullable, keepSource); } } @@ -68,14 +68,24 @@ public class ScalarTypeJsonList { */ @SuppressWarnings("rawtypes") private abstract static class Base extends ScalarTypeJsonCollection { + private final boolean keepSource; - public Base(int dbType, DocPropertyType docType, boolean nullable) { + public Base(int dbType, DocPropertyType docType, boolean nullable, boolean keepSource) { super(List.class, dbType, docType, nullable); + this.keepSource = keepSource; + } + + @Override + public boolean isJsonMapper() { + return keepSource; } @Override public List read(DataReader reader) throws SQLException { String json = reader.getString(); + if (isJsonMapper()) { + reader.pushJson(json); + } try { // parse JSON into modifyAware list return EJson.parseList(json, true); @@ -85,17 +95,15 @@ public class ScalarTypeJsonList { } @Override - public void bind(DataBinder binder, List value) throws SQLException { + public final void bind(DataBinder binder, List value) throws SQLException { + String rawJson = isJsonMapper() ? binder.popJson() : null; + if (rawJson == null && value != null) { + rawJson = formatValue(value); + } if (value == null) { bindNull(binder); - } else if (value.isEmpty()) { - binder.setString("[]"); } else { - try { - binder.setString(EJson.write(value)); - } catch (IOException e) { - throw new SQLException("Failed to format List into JSON content", e); - } + bindRawJson(binder, rawJson); } } @@ -107,9 +115,16 @@ public class ScalarTypeJsonList { binder.setString("[]"); } } + + protected void bindRawJson(DataBinder binder, String rawJson) throws SQLException { + binder.setString(rawJson); + } @Override public String formatValue(List value) { + if (value.isEmpty()) { + return "[]"; + } try { return EJson.write(value); } catch (IOException e) { @@ -144,19 +159,14 @@ public class ScalarTypeJsonList { final String pgType; - PgBase(int jdbcType, String pgType, DocPropertyType docType, boolean nullable) { - super(jdbcType, docType, nullable); + PgBase(int jdbcType, String pgType, DocPropertyType docType, boolean nullable, boolean keepSource) { + super(jdbcType, docType, nullable, keepSource); this.pgType = pgType; } - @SuppressWarnings("rawtypes") @Override - public void bind(DataBinder binder, List value) throws SQLException { - if (value == null) { - bindNull(binder); - } else { - binder.setObject(PostgresHelper.asObject(pgType, formatValue(value))); - } + protected void bindRawJson(DataBinder binder, String rawJson) throws SQLException { + binder.setObject(PostgresHelper.asObject(pgType, rawJson)); } @Override diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java index 6dd4f900b..507e7012b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java @@ -15,6 +15,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; +import java.io.StringWriter; import java.nio.charset.StandardCharsets; import java.sql.SQLException; import java.sql.Types; @@ -26,27 +27,21 @@ import java.util.Map; @SuppressWarnings("rawtypes") public abstract class ScalarTypeJsonMap extends ScalarTypeBase { - private static final ScalarTypeJsonMap CLOB = new ScalarTypeJsonMap.Clob(); - private static final ScalarTypeJsonMap BLOB = new ScalarTypeJsonMap.Blob(); - private static final ScalarTypeJsonMap VARCHAR = new ScalarTypeJsonMap.Varchar(); - private static final ScalarTypeJsonMap JSON = new ScalarTypeJsonMapPostgres.JSON(); - private static final ScalarTypeJsonMap JSONB = new ScalarTypeJsonMapPostgres.JSONB(); - /** * Return the ScalarType for the requested dbType and postgres. */ - public static ScalarTypeJsonMap typeFor(boolean postgres, int dbType) { + public static ScalarTypeJsonMap typeFor(boolean postgres, int dbType, boolean keepSource) { switch (dbType) { case Types.VARCHAR: - return VARCHAR; + return new ScalarTypeJsonMap.Varchar(keepSource); case Types.BLOB: - return BLOB; + return new ScalarTypeJsonMap.Blob(keepSource); case Types.CLOB: - return CLOB; + return new ScalarTypeJsonMap.Clob(keepSource); case DbPlatformType.JSONB: - return postgres ? JSONB : CLOB; + return postgres ? new ScalarTypeJsonMapPostgres.JSONB(keepSource) : new ScalarTypeJsonMap.Clob(keepSource); case DbPlatformType.JSON: - return postgres ? JSON : CLOB; + return postgres ? new ScalarTypeJsonMapPostgres.JSON(keepSource) : new ScalarTypeJsonMap.Clob(keepSource); default: throw new IllegalStateException("Unknown dbType " + dbType); } @@ -54,41 +49,50 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { public static class Clob extends ScalarTypeJsonMap { - public Clob() { - super(Types.CLOB); + public Clob(boolean keepSource) { + super(Types.CLOB, keepSource); } @Override - public Map read(DataReader reader) throws SQLException { - String content = reader.getStringFromStream(); - if (content == null) { - return null; - } - return parse(content); + protected String readJson(DataReader reader) throws SQLException { + return reader.getStringFromStream(); } } public static class Varchar extends ScalarTypeJsonMap { - public Varchar() { - super(Types.VARCHAR); + public Varchar(boolean keepSource) { + super(Types.VARCHAR, keepSource); } } public static class Blob extends ScalarTypeJsonMap { - public Blob() { - super(Types.BLOB); + public Blob(boolean keepSource) { + super(Types.BLOB, keepSource); } @Override public Map read(DataReader reader) throws SQLException { InputStream is = reader.getBinaryStream(); if (is == null) { + if (isJsonMapper()) { + reader.pushJson(null); + } return null; } try { - try (InputStreamReader inputStreamReader = new InputStreamReader(is)) { - return parse(inputStreamReader); + if (isJsonMapper()) { + StringWriter rawJson = new StringWriter(); + try (InputStreamReader inputStreamReader = new InputStreamReader(is, StandardCharsets.UTF_8)) { + inputStreamReader.transferTo(rawJson); + } + reader.pushJson(rawJson.toString()); + return parse(rawJson.toString()); + + } else { + try (InputStreamReader inputStreamReader = new InputStreamReader(is, StandardCharsets.UTF_8)) { + return parse(inputStreamReader); + } } } catch (IOException e) { throw new SQLException("Error reading Blob stream from DB", e); @@ -96,18 +100,22 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } @Override - public void bind(DataBinder binder, Map value) throws SQLException { - if (value == null) { - binder.setNull(Types.BLOB); - } else { - String rawJson = formatValue(value); - binder.setBytes(rawJson.getBytes(StandardCharsets.UTF_8)); - } + protected void bindNull(DataBinder binder) throws SQLException { + binder.setNull(Types.BLOB); } + + @Override + protected void bindJson(DataBinder binder, String rawJson) throws SQLException { + binder.setBytes(rawJson.getBytes(StandardCharsets.UTF_8)); + } + } - public ScalarTypeJsonMap(int jdbcType) { + private final boolean keepSource; + + public ScalarTypeJsonMap(int jdbcType, boolean keepSource) { super(Map.class, false, jdbcType); + this.keepSource = keepSource; } /** @@ -125,26 +133,56 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { public boolean isDirty(Object value) { return TypeJsonManager.checkIsDirty(value); } + + + + @Override + public boolean isJsonMapper() { + return keepSource; + } + @Override public Map read(DataReader reader) throws SQLException { - String rawJson = reader.getString(); + String rawJson = readJson(reader); + if (isJsonMapper()) { + reader.pushJson(rawJson); + } + if (rawJson == null) { return null; } + return parse(rawJson); } + + protected String readJson(DataReader reader) throws SQLException { + return reader.getString(); + } + @Override - public void bind(DataBinder binder, Map value) throws SQLException { + public final void bind(DataBinder binder, Map value) throws SQLException { + String rawJson = isJsonMapper() ? binder.popJson() : null; + if (rawJson == null && value != null) { + rawJson = formatValue(value); + } + if (value == null) { - binder.setNull(Types.VARCHAR); + bindNull(binder); } else { - String rawJson = formatValue(value); - binder.setString(rawJson); + bindJson(binder, rawJson); } } + + protected void bindNull(DataBinder binder) throws SQLException { + binder.setNull(Types.VARCHAR); + } + protected void bindJson(DataBinder binder, String rawJson) throws SQLException { + binder.setString(rawJson); + } + @Override public Object toJdbcType(Object value) { return value; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMapPostgres.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMapPostgres.java index 87eecc5f9..46a585ebc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMapPostgres.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMapPostgres.java @@ -4,7 +4,6 @@ import io.ebean.config.dbplatform.DbPlatformType; import io.ebean.core.type.DataBinder; import java.sql.SQLException; -import java.util.Map; /** * Support for the Postgres DB types JSON and JSONB. @@ -13,15 +12,18 @@ public abstract class ScalarTypeJsonMapPostgres extends ScalarTypeJsonMap { final String postgresType; - ScalarTypeJsonMapPostgres(int jdbcType, String postgresType) { - super(jdbcType); + ScalarTypeJsonMapPostgres(int jdbcType, String postgresType, boolean keepSource) { + super(jdbcType, keepSource); this.postgresType = postgresType; } - @SuppressWarnings("rawtypes") @Override - public void bind(DataBinder binder, Map value) throws SQLException { - String rawJson = (value == null) ? null : formatValue(value); + protected void bindNull(DataBinder binder) throws SQLException { + binder.setObject(PostgresHelper.asObject(postgresType, null)); + } + + @Override + protected void bindJson(DataBinder binder, String rawJson) throws SQLException { binder.setObject(PostgresHelper.asObject(postgresType, rawJson)); } @@ -30,8 +32,8 @@ public abstract class ScalarTypeJsonMapPostgres extends ScalarTypeJsonMap { */ public static class JSON extends ScalarTypeJsonMapPostgres { - public JSON() { - super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE); + public JSON(boolean keepSource) { + super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE, keepSource); } } @@ -40,8 +42,8 @@ public abstract class ScalarTypeJsonMapPostgres extends ScalarTypeJsonMap { */ public static class JSONB extends ScalarTypeJsonMapPostgres { - public JSONB() { - super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE); + public JSONB(boolean keepSource) { + super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE, keepSource); } } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java index d95adb572..7e728b0d3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java @@ -26,24 +26,24 @@ public class ScalarTypeJsonSet { /** * Return the appropriate ScalarType for the requested dbType and Postgres. */ - public static ScalarType typeFor(boolean postgres, int dbType, DocPropertyType docPropertyType, boolean nullable) { + public static ScalarType typeFor(boolean postgres, int dbType, DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { if (postgres) { switch (dbType) { case DbPlatformType.JSONB: - return new ScalarTypeJsonSet.JsonB(docPropertyType, nullable); + return new ScalarTypeJsonSet.JsonB(docPropertyType, nullable, keepSource); case DbPlatformType.JSON: - return new ScalarTypeJsonSet.Json(docPropertyType, nullable); + return new ScalarTypeJsonSet.Json(docPropertyType, nullable, keepSource); } } - return new ScalarTypeJsonSet.Varchar(docPropertyType, nullable); + return new ScalarTypeJsonSet.Varchar(docPropertyType, nullable, keepSource); } /** * List mapped to DB VARCHAR. */ public static class Varchar extends ScalarTypeJsonSet.Base { - public Varchar(DocPropertyType docPropertyType, boolean nullable) { - super(Types.VARCHAR, docPropertyType, nullable); + public Varchar(DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { + super(Types.VARCHAR, docPropertyType, nullable, keepSource); } } @@ -51,8 +51,8 @@ public class ScalarTypeJsonSet { * List mapped to Postgres JSON. */ private static class Json extends ScalarTypeJsonSet.PgBase { - public Json(DocPropertyType docPropertyType, boolean nullable) { - super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE, docPropertyType, nullable); + public Json(DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { + super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE, docPropertyType, nullable, keepSource); } } @@ -60,8 +60,8 @@ public class ScalarTypeJsonSet { * List mapped to Postgres JSONB. */ private static class JsonB extends ScalarTypeJsonSet.PgBase { - public JsonB(DocPropertyType docPropertyType, boolean nullable) { - super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE, docPropertyType, nullable); + public JsonB(DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { + super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE, docPropertyType, nullable, keepSource); } } @@ -71,13 +71,25 @@ public class ScalarTypeJsonSet { @SuppressWarnings("rawtypes") private abstract static class Base extends ScalarTypeJsonCollection { - public Base(int dbType, DocPropertyType docPropertyType, boolean nullable) { + private boolean keepSource; + + public Base(int dbType, DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { super(Set.class, dbType, docPropertyType, nullable); + this.keepSource = keepSource; } + + @Override + public boolean isJsonMapper() { + return keepSource; + } + @Override public Set read(DataReader reader) throws SQLException { String json = reader.getString(); + if (isJsonMapper()) { + reader.pushJson(json); + } try { // parse JSON into modifyAware list return EJson.parseSet(json, true); @@ -87,17 +99,15 @@ public class ScalarTypeJsonSet { } @Override - public void bind(DataBinder binder, Set value) throws SQLException { + public final void bind(DataBinder binder, Set value) throws SQLException { + String rawJson = isJsonMapper() ? binder.popJson() : null; + if (rawJson == null && value != null) { + rawJson = formatValue(value); + } if (value == null) { bindNull(binder); - } else if (value.isEmpty()) { - binder.setString("[]"); } else { - try { - binder.setString(EJson.write(value)); - } catch (IOException e) { - throw new SQLException("Failed to format Set into JSON content", e); - } + bindRawJson(binder, rawJson); } } @@ -110,8 +120,15 @@ public class ScalarTypeJsonSet { } } + protected void bindRawJson(DataBinder binder, String rawJson) throws SQLException { + binder.setString(rawJson); + } + @Override public String formatValue(Set value) { + if (value.isEmpty()) { + return "[]"; + } try { return EJson.write(value); } catch (IOException e) { @@ -151,19 +168,14 @@ public class ScalarTypeJsonSet { final String pgType; - PgBase(int jdbcType, String pgType, DocPropertyType docPropertyType, boolean nullable) { - super(jdbcType, docPropertyType, nullable); + PgBase(int jdbcType, String pgType, DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { + super(jdbcType, docPropertyType, nullable, keepSource); this.pgType = pgType; } - @SuppressWarnings("rawtypes") @Override - public void bind(DataBinder binder, Set value) throws SQLException { - if (value == null) { - bindNull(binder); - } else { - binder.setObject(PostgresHelper.asObject(pgType, formatValue(value))); - } + protected void bindRawJson(DataBinder binder, String rawJson) throws SQLException { + binder.setObject(PostgresHelper.asObject(pgType, rawJson)); } @Override diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java index ff329efac..43ed867ba 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/type/ScalarTypeJsonListTest.java @@ -11,19 +11,19 @@ public class ScalarTypeJsonListTest extends BasePlatformArrayTypeFactoryTest { @Test public void typeFor_expect_nullToEmpty_when_postgresNonNull() throws SQLException { - assertBindNullTo_PGObjectEmpty(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSONB, DocPropertyType.OBJECT, false)); - assertBindNullTo_PGObjectEmpty(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSON, DocPropertyType.OBJECT, false)); + assertBindNullTo_PGObjectEmpty(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSONB, DocPropertyType.OBJECT, false, false)); + assertBindNullTo_PGObjectEmpty(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSON, DocPropertyType.OBJECT, false, false)); - assertBindNullTo_EmptyString(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSONVarchar, DocPropertyType.OBJECT, false)); + assertBindNullTo_EmptyString(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSONVarchar, DocPropertyType.OBJECT, false, false)); } @Test public void typeFor_expect_nullToNull_when_nullable() throws SQLException { - assertBindNullTo_PGObjectNull(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSONB, DocPropertyType.OBJECT, true)); - assertBindNullTo_PGObjectNull(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSON, DocPropertyType.OBJECT, true)); + assertBindNullTo_PGObjectNull(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSONB, DocPropertyType.OBJECT, true, false)); + assertBindNullTo_PGObjectNull(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSON, DocPropertyType.OBJECT, true, false)); - assertBindNullTo_Null(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSONVarchar, DocPropertyType.OBJECT, true)); + assertBindNullTo_Null(ScalarTypeJsonList.typeFor(true, ExtraDbTypes.JSONVarchar, DocPropertyType.OBJECT, true, false)); } } diff --git a/ebean-core/src/test/java/org/tests/json/TestOldValue.java b/ebean-core/src/test/java/org/tests/json/TestOldValue.java new file mode 100644 index 000000000..dec8a9f05 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/json/TestOldValue.java @@ -0,0 +1,120 @@ +package org.tests.json; + +import io.ebean.BaseTestCase; +import io.ebean.DB; +import io.ebean.ValuePair; +import io.ebean.annotation.ForPlatform; +import io.ebean.annotation.Platform; +import io.ebean.text.TextException; + +import org.assertj.core.api.SoftAssertions; +import org.ebeantest.LoggedSqlCollector; +import org.junit.Ignore; +import org.junit.Test; +import org.tests.model.json.EBasicJsonList; +import org.tests.model.json.EBasicOldValue; +import org.tests.model.json.PlainBean; + +import javax.persistence.PersistenceException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +public class TestOldValue extends BaseTestCase { + + + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Test + public void testDbJsonOldValue() throws Exception { + EBasicOldValue bean = new EBasicOldValue(); + + bean.getStringList().add("sl1"); + bean.getStringSet().add("ss1"); + bean.getObjectMap().put("sk1","sm1"); + bean.getLongList().add(1L); + bean.getLongSet().add(1001L); + bean.getLongMap().put("lk1",2001L); + bean.getIntList().add(2); + bean.getIntSet().add(1002); + bean.getIntMap().put("ik1",2002); + + DB.save(bean); + bean = DB.find(EBasicOldValue.class, bean.getId()); + + bean.getStringList().add("sl2"); + bean.getStringSet().add("ss2"); + bean.getObjectMap().put("sk2","sm2"); + bean.getLongList().add(5L); + bean.getLongSet().add(1005L); + bean.getLongMap().put("lk2",2005L); + bean.getIntList().add(6); + bean.getIntSet().add(1006); + bean.getIntMap().put("ik2",2006); + + + Map dirty = DB.getBeanState(bean).getDirtyValues(); + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(dirty).hasSize(9); + + softly.assertThat((List)dirty.get("stringList").getOldValue()).containsExactly("sl1"); + softly.assertThat((List)dirty.get("stringList").getNewValue()).containsExactly("sl1", "sl2"); + softly.assertThat((List)dirty.get("longList").getOldValue()).containsExactly(1L); + softly.assertThat((List)dirty.get("longList").getNewValue()).containsExactly(1L, 5L); + softly.assertThat((List)dirty.get("intList").getOldValue()).containsExactly(2); + softly.assertThat((List)dirty.get("intList").getNewValue()).containsExactly(2, 6); + + softly.assertThat((Set)dirty.get("stringSet").getOldValue()).containsExactly("ss1"); + softly.assertThat((Set)dirty.get("stringSet").getNewValue()).containsExactly("ss1", "ss2"); + softly.assertThat((Set)dirty.get("longSet").getOldValue()).containsExactly(1001L); + softly.assertThat((Set)dirty.get("longSet").getNewValue()).containsExactly(1001L, 1005L); + softly.assertThat((Set)dirty.get("intSet").getOldValue()).containsExactly(1002); + softly.assertThat((Set)dirty.get("intSet").getNewValue()).containsExactly(1002, 1006); + + softly.assertThat((Map)dirty.get("objectMap").getOldValue()).containsEntry("sk1","sm1").hasSize(1); + softly.assertThat((Map)dirty.get("objectMap").getNewValue()).containsEntry("sk1","sm1").containsEntry("sk2","sm2").hasSize(2); + softly.assertThat((Map)dirty.get("longMap").getOldValue()).containsEntry("lk1",2001L).hasSize(1); + softly.assertThat((Map)dirty.get("longMap").getNewValue()).containsEntry("lk1",2001L).containsEntry("lk2",2005L).hasSize(2); + softly.assertThat((Map)dirty.get("intMap").getOldValue()).containsEntry("ik1",2002).hasSize(1); + softly.assertThat((Map)dirty.get("intMap").getNewValue()).containsEntry("ik1",2002).containsEntry("ik2",2006).hasSize(2); + + softly.assertAll(); + + } + + @SuppressWarnings({ "rawtypes", "unchecked" }) + @Test + @Ignore("Old value detection does not work for @DbArray") + public void testDbArrayOldValue() throws Exception { + EBasicOldValue bean = new EBasicOldValue(); + + bean.getStringArr().add("sa1"); + + + DB.save(bean); + bean = DB.find(EBasicOldValue.class, bean.getId()); + + bean.getStringArr().add("sa2"); + + + + Map dirty = DB.getBeanState(bean).getDirtyValues(); + SoftAssertions softly = new SoftAssertions(); + softly.assertThat(dirty).hasSize(1); + + softly.assertThat((List)dirty.get("stringArr").getOldValue()).containsExactly("sa1"); + softly.assertThat((List)dirty.get("stringArr").getNewValue()).containsExactly("sa1", "sa2"); + + softly.assertAll(); + + } +} diff --git a/ebean-core/src/test/java/org/tests/model/json/EBasicOldValue.java b/ebean-core/src/test/java/org/tests/model/json/EBasicOldValue.java new file mode 100644 index 000000000..27a086ad5 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/json/EBasicOldValue.java @@ -0,0 +1,146 @@ +package org.tests.model.json; + +import io.ebean.annotation.DbArray; +import io.ebean.annotation.DbJson; + +import javax.persistence.Entity; +import javax.persistence.Id; +import java.util.*; + +import static io.ebean.annotation.MutationDetection.SOURCE; + +@Entity +public class EBasicOldValue { + + @Id + Long id; + + String name; + + @DbJson(mutationDetection = SOURCE) + Set stringSet = new LinkedHashSet<>(); + + @DbJson(mutationDetection = SOURCE) + Set longSet = new LinkedHashSet<>(); + + @DbJson(mutationDetection = SOURCE) + Set intSet = new LinkedHashSet<>(); + + @DbJson(mutationDetection = SOURCE) + List stringList = new ArrayList<>(); + + @DbJson(mutationDetection = SOURCE) + List longList = new ArrayList<>(); + + @DbJson(mutationDetection = SOURCE) + List intList = new ArrayList<>(); + + @DbJson(mutationDetection = SOURCE) + Map objectMap = new LinkedHashMap<>(); + + @DbJson(mutationDetection = SOURCE) + Map longMap = new LinkedHashMap<>(); + + @DbJson(mutationDetection = SOURCE) + Map intMap = new LinkedHashMap<>(); + + @DbArray() + List stringArr = new ArrayList<>(); + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Set getStringSet() { + return stringSet; + } + + public void setStringSet(Set stringSet) { + this.stringSet = stringSet; + } + + public Set getLongSet() { + return longSet; + } + + public void setLongSet(Set longSet) { + this.longSet = longSet; + } + + public Set getIntSet() { + return intSet; + } + + public void setIntSet(Set intSet) { + this.intSet = intSet; + } + + public List getStringList() { + return stringList; + } + + public void setStringList(List stringList) { + this.stringList = stringList; + } + + public List getLongList() { + return longList; + } + + public void setLongList(List longList) { + this.longList = longList; + } + + public List getIntList() { + return intList; + } + + public void setIntList(List intList) { + this.intList = intList; + } + + public Map getObjectMap() { + return objectMap; + } + + public void setObjectMap(Map objectMap) { + this.objectMap = objectMap; + } + + public Map getLongMap() { + return longMap; + } + + public void setLongMap(Map longMap) { + this.longMap = longMap; + } + + public Map getIntMap() { + return intMap; + } + + public void setIntMap(Map intMap) { + this.intMap = intMap; + } + + public List getStringArr() { + return stringArr; + } + + public void setStringArr(List stringArr) { + this.stringArr = stringArr; + } + +} From 6b263919d5ccd5c8f552d3268bbb01eb9ea84e65 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Fri, 13 Aug 2021 11:19:24 +0200 Subject: [PATCH 05/68] handle also JsonNode --- .../server/type/DefaultTypeManager.java | 2 +- .../java/org/tests/json/TestOldValue.java | 31 +++++++------------ .../org/tests/model/json/EBasicOldValue.java | 15 +++++++++ 3 files changed, 28 insertions(+), 20 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 4419f1e1f..6e1e1f0d7 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 @@ -364,7 +364,7 @@ public final class DefaultTypeManager implements TypeManager { return createJsonObjectMapperType(prop, dbType, DocPropertyType.OBJECT); } } - if (objectMapperPresent) { + if (objectMapperPresent && prop.getMutationDetection() == MutationDetection.DEFAULT) { if (type.equals(JsonNode.class)) { switch (dbType) { case Types.VARCHAR: diff --git a/ebean-core/src/test/java/org/tests/json/TestOldValue.java b/ebean-core/src/test/java/org/tests/json/TestOldValue.java index dec8a9f05..f7bd391e5 100644 --- a/ebean-core/src/test/java/org/tests/json/TestOldValue.java +++ b/ebean-core/src/test/java/org/tests/json/TestOldValue.java @@ -3,32 +3,19 @@ package org.tests.json; import io.ebean.BaseTestCase; import io.ebean.DB; import io.ebean.ValuePair; -import io.ebean.annotation.ForPlatform; -import io.ebean.annotation.Platform; -import io.ebean.text.TextException; import org.assertj.core.api.SoftAssertions; -import org.ebeantest.LoggedSqlCollector; import org.junit.Ignore; import org.junit.Test; -import org.tests.model.json.EBasicJsonList; import org.tests.model.json.EBasicOldValue; -import org.tests.model.json.PlainBean; -import javax.persistence.PersistenceException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.LinkedHashSet; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + import java.util.List; import java.util.Map; import java.util.Set; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertNotNull; -import static org.junit.Assert.assertNull; -import static org.junit.Assert.assertTrue; - public class TestOldValue extends BaseTestCase { @@ -37,6 +24,7 @@ public class TestOldValue extends BaseTestCase { @Test public void testDbJsonOldValue() throws Exception { EBasicOldValue bean = new EBasicOldValue(); + JsonNodeFactory jnf = new JsonNodeFactory(false); bean.getStringList().add("sl1"); bean.getStringSet().add("ss1"); @@ -47,7 +35,9 @@ public class TestOldValue extends BaseTestCase { bean.getIntList().add(2); bean.getIntSet().add(1002); bean.getIntMap().put("ik1",2002); - + + bean.setJsonNode(jnf.arrayNode().add("Foo")); + DB.save(bean); bean = DB.find(EBasicOldValue.class, bean.getId()); @@ -60,11 +50,11 @@ public class TestOldValue extends BaseTestCase { bean.getIntList().add(6); bean.getIntSet().add(1006); bean.getIntMap().put("ik2",2006); - + ((ArrayNode)bean.getJsonNode()).add("Bar"); Map dirty = DB.getBeanState(bean).getDirtyValues(); SoftAssertions softly = new SoftAssertions(); - softly.assertThat(dirty).hasSize(9); + softly.assertThat(dirty).hasSize(10); softly.assertThat((List)dirty.get("stringList").getOldValue()).containsExactly("sl1"); softly.assertThat((List)dirty.get("stringList").getNewValue()).containsExactly("sl1", "sl2"); @@ -87,6 +77,9 @@ public class TestOldValue extends BaseTestCase { softly.assertThat((Map)dirty.get("intMap").getOldValue()).containsEntry("ik1",2002).hasSize(1); softly.assertThat((Map)dirty.get("intMap").getNewValue()).containsEntry("ik1",2002).containsEntry("ik2",2006).hasSize(2); + softly.assertThat((ArrayNode)dirty.get("jsonNode").getOldValue()).hasToString("[\"Foo\"]"); + softly.assertThat((ArrayNode)dirty.get("jsonNode").getNewValue()).hasToString("[\"Foo\",\"Bar\"]"); + softly.assertAll(); } diff --git a/ebean-core/src/test/java/org/tests/model/json/EBasicOldValue.java b/ebean-core/src/test/java/org/tests/model/json/EBasicOldValue.java index 27a086ad5..37e805412 100644 --- a/ebean-core/src/test/java/org/tests/model/json/EBasicOldValue.java +++ b/ebean-core/src/test/java/org/tests/model/json/EBasicOldValue.java @@ -5,6 +5,9 @@ import io.ebean.annotation.DbJson; import javax.persistence.Entity; import javax.persistence.Id; + +import com.fasterxml.jackson.databind.JsonNode; + import java.util.*; import static io.ebean.annotation.MutationDetection.SOURCE; @@ -44,9 +47,13 @@ public class EBasicOldValue { @DbJson(mutationDetection = SOURCE) Map intMap = new LinkedHashMap<>(); + @DbJson(mutationDetection = SOURCE) + JsonNode jsonNode; + @DbArray() List stringArr = new ArrayList<>(); + public Long getId() { return id; } @@ -135,6 +142,14 @@ public class EBasicOldValue { this.intMap = intMap; } + public JsonNode getJsonNode() { + return jsonNode; + } + + public void setJsonNode(JsonNode jsonNode) { + this.jsonNode = jsonNode; + } + public List getStringArr() { return stringArr; } From 843b90cbbad96f70667a22785dd1d557ea3e1f96 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Fri, 13 Aug 2021 11:52:31 +0200 Subject: [PATCH 06/68] FIX: mutation info is not restored on cache hit --- .../server/deploy/BeanPropertyJsonMapper.java | 13 ++++++++++++ .../org/tests/changelog/TestChangeLog.java | 21 ++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) 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 fdea2e449..f1b77f4bd 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 @@ -5,6 +5,7 @@ import io.ebean.bean.EntityBean; import io.ebean.bean.EntityBeanIntercept; import io.ebean.bean.MutableValueInfo; import io.ebean.bean.MutableValueNext; +import io.ebean.bean.PersistenceContext; import io.ebean.core.type.DataReader; import io.ebean.core.type.ScalarType; import io.ebean.text.TextException; @@ -104,6 +105,18 @@ public class BeanPropertyJsonMapper extends BeanPropertyJsonBasic { throw new PersistenceException("Error readSet on " + descriptor + "." + name, e); } } + + @Override + public void setCacheDataValue(EntityBean bean, Object cacheData, PersistenceContext context) { + if (cacheData instanceof String) { + // parse back from string to support optimisation of java object serialisation + final MutableValueInfo hash = createMutableInfo((String)cacheData); + bean._ebean_getIntercept().mutableInfo(propertyIndex, hash); + cacheData = scalarType.parse((String) cacheData); + } + setValue(bean, cacheData); + } + private static final class NextPair implements MutableValueNext { diff --git a/ebean-core/src/test/java/org/tests/changelog/TestChangeLog.java b/ebean-core/src/test/java/org/tests/changelog/TestChangeLog.java index a10a41276..75f8c97bd 100644 --- a/ebean-core/src/test/java/org/tests/changelog/TestChangeLog.java +++ b/ebean-core/src/test/java/org/tests/changelog/TestChangeLog.java @@ -28,7 +28,7 @@ import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; public class TestChangeLog extends BaseTestCase { @@ -158,6 +158,25 @@ public class TestChangeLog extends BaseTestCase { assertThat(change.getData()).contains("\"plainBean\":{\"name\":\"B\""); assertThat(change.getOldData()).contains("\"plainBean\":{\"name\":\"A\""); } + + @Test + public void testMutationWithCache() throws Exception { + EBasicChangeLog bean = new EBasicChangeLog(); + bean.setName("Name1"); + bean.setPlainBean(new PlainBean("foo", 42)); + server.save(bean); + BeanChange change = firstChange(); + assertThat(change.getData()).contains("\"plainBean\""); + + server.find(EBasicChangeLog.class, bean.getId()); // load cache + bean = server.find(EBasicChangeLog.class, bean.getId()); // hit cache + bean.setShortDescription("Desc"); + server.save(bean); + + change = firstChange(); + assertThat(change.getData()).doesNotContain("\"plainBean\""); + } + private Database createServer() { DatabaseConfig config = new DatabaseConfig(); From ada8df5755e92292ceeda24eefa02558c860308f Mon Sep 17 00:00:00 2001 From: rbygrave Date: Sun, 15 Aug 2021 12:05:30 +1200 Subject: [PATCH 07/68] Improve startup logging messages --- .../server/core/DatabasePlatformFactory.java | 10 +++----- .../server/core/DefaultContainer.java | 25 ++++++------------- 2 files changed, 11 insertions(+), 24 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java index a96907848..9a7c54034 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DatabasePlatformFactory.java @@ -36,9 +36,8 @@ import java.sql.SQLException; /** * Create a DatabasePlatform from the configuration. *

- * Will used platform name or use the meta data from the JDBC driver to + * Will used platform name or use the metadata from the JDBC driver to * determine the platform automatically. - *

*/ public class DatabasePlatformFactory { @@ -54,14 +53,12 @@ public class DatabasePlatformFactory { logger.info("offline platform [{}]", offlinePlatform); return byDatabaseName(offlinePlatform); } - if (config.getDatabasePlatformName() != null) { // choose based on dbName return byDatabaseName(config.getDatabasePlatformName()); } - if (config.getDataSourceConfig().isOffline()) { - throw new PersistenceException("You must specify a DatabasePlatformName when you are offline"); + throw new PersistenceException("DatabasePlatformName must be specified with offline mode"); } // guess using meta data from driver return byDataSource(config.getDataSource()); @@ -142,10 +139,10 @@ public class DatabasePlatformFactory { * Find the platform by the metaData.getDatabaseProductName(). */ private DatabasePlatform byDatabaseMeta(DatabaseMetaData metaData, Connection connection) throws SQLException { - String dbProductName = metaData.getDatabaseProductName().toLowerCase(); final int majorVersion = metaData.getDatabaseMajorVersion(); final int minorVersion = metaData.getDatabaseMinorVersion(); + logger.debug("platform for productName[{}] version[{}.{}]", dbProductName, majorVersion, minorVersion); if (dbProductName.contains("oracle")) { return oracleVersion(majorVersion); @@ -206,7 +203,6 @@ public class DatabasePlatformFactory { } catch (SQLException e) { logger.warn("Error running detection query on Postgres", e); } - if (majorVersion <= 9) { return new Postgres9Platform(); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java index 2c8bbfecc..e912b8cbb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java @@ -34,7 +34,7 @@ import java.util.concurrent.locks.ReentrantLock; */ public class DefaultContainer implements SpiContainer { - private static final Logger logger = LoggerFactory.getLogger("io.ebean.internal.DefaultContainer"); + private static final Logger logger = LoggerFactory.getLogger("io.ebean.DB"); private final ReentrantLock lock = new ReentrantLock(); private final ClusterManager clusterManager; @@ -77,9 +77,10 @@ public class DefaultContainer implements SpiContainer { public SpiEbeanServer createServer(DatabaseConfig config) { lock.lock(); try { + long start = System.currentTimeMillis(); applyConfigServices(config); setNamingConvention(config); - BootupClasses bootupClasses = getBootupClasses(config); + BootupClasses bootupClasses = bootupClasses(config); boolean online = true; if (config.isDocStoreOnly()) { @@ -101,22 +102,18 @@ public class DefaultContainer implements SpiContainer { // use a configured DbEncrypt rather than the platform default config.getDatabasePlatform().setDbEncrypt(config.getDbEncrypt()); } - // inform the NamingConvention of the associated DatabasePlatform config.getNamingConvention().setDatabasePlatform(config.getDatabasePlatform()); - // executor and l2 caching service setup early (used during server construction) SpiBackgroundExecutor executor = createBackgroundExecutor(config); InternalConfiguration c = new InternalConfiguration(online, clusterManager, executor, config, bootupClasses); - DefaultServer server = new DefaultServer(c, c.cacheManager()); - - // generate and run DDL if required - // if there are any other tasks requiring action in their plugins, do them as well + // generate and run DDL if required plus other plugins if (!DbOffline.isGenerateMigration()) { startServer(online, server); } DbOffline.reset(); + logger.info("started database[{}] platform[{}] in {}ms", config.getName(), config.getDatabasePlatform().getPlatform(), System.currentTimeMillis() - start); return server; } finally { lock.unlock(); @@ -161,9 +158,8 @@ public class DefaultContainer implements SpiContainer { * Get the entities, scalarTypes, Listeners etc combining the class registered * ones with the already created instances. */ - private BootupClasses getBootupClasses(DatabaseConfig config) { - - BootupClasses bootup = getBootupClasses1(config); + private BootupClasses bootupClasses(DatabaseConfig config) { + BootupClasses bootup = bootupClasses1(config); bootup.addIdGenerators(config.getIdGenerators()); bootup.addPersistControllers(config.getPersistControllers()); bootup.addPostLoaders(config.getPostLoaders()); @@ -173,7 +169,6 @@ public class DefaultContainer implements SpiContainer { bootup.addQueryAdapters(config.getQueryAdapters()); bootup.addServerConfigStartup(config.getServerConfigStartupListeners()); bootup.addChangeLogInstances(config); - bootup.runServerConfigStartup(config); return bootup; } @@ -181,14 +176,12 @@ public class DefaultContainer implements SpiContainer { /** * Get the class based entities, scalarTypes, Listeners etc. */ - private BootupClasses getBootupClasses1(DatabaseConfig config) { - + private BootupClasses bootupClasses1(DatabaseConfig config) { List> entityClasses = config.getClasses(); if (config.isDisableClasspathSearch() || (entityClasses != null && !entityClasses.isEmpty())) { // use classes we explicitly added via configuration return new BootupClasses(entityClasses); } - return BootupClassPathSearch.search(config); } @@ -205,7 +198,6 @@ public class DefaultContainer implements SpiContainer { * Set the DatabasePlatform if it has not already been set. */ private void setDatabasePlatform(DatabaseConfig config) { - DatabasePlatform platform = config.getDatabasePlatform(); if (platform == null) { if (config.getTenantMode().isDynamicDataSource()) { @@ -215,7 +207,6 @@ public class DefaultContainer implements SpiContainer { platform = new DatabasePlatformFactory().create(config); config.setDatabasePlatform(platform); } - logger.info("DatabasePlatform name:{} platform:{}", config.getName(), platform.getName()); platform.configure(config.getPlatformConfig()); } From 1297324fa9b4e778a9b0f0e8305feda3c06df875 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Sun, 15 Aug 2021 13:47:46 +1200 Subject: [PATCH 08/68] Fix where using JDK 10 Reader.transferTo() method plus add final to methods and classes --- .../server/type/ScalarTypeJsonList.java | 46 ++++---- .../server/type/ScalarTypeJsonMap.java | 111 ++++++++---------- .../type/ScalarTypeJsonMapPostgres.java | 18 +-- .../type/ScalarTypeJsonObjectMapper.java | 26 ++-- .../server/type/ScalarTypeJsonSet.java | 46 ++++---- 5 files changed, 118 insertions(+), 129 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java index 7ca361405..699c7ad0f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java @@ -19,12 +19,12 @@ import java.util.List; /** * Types for mapping List in JSON format to DB types VARCHAR, JSON and JSONB. */ -public class ScalarTypeJsonList { +class ScalarTypeJsonList { /** * Return the appropriate ScalarType based requested dbType and if Postgres. */ - public static ScalarType typeFor(boolean postgres, int dbType, DocPropertyType docType, boolean nullable, boolean keepSource) { + static ScalarType typeFor(boolean postgres, int dbType, DocPropertyType docType, boolean nullable, boolean keepSource) { if (postgres) { switch (dbType) { case DbPlatformType.JSONB: @@ -39,8 +39,8 @@ public class ScalarTypeJsonList { /** * List mapped to DB VARCHAR. */ - public static class Varchar extends ScalarTypeJsonList.Base { - public Varchar(DocPropertyType docType, boolean nullable, boolean keepSource) { + static final class Varchar extends ScalarTypeJsonList.Base { + Varchar(DocPropertyType docType, boolean nullable, boolean keepSource) { super(Types.VARCHAR, docType, nullable, keepSource); } } @@ -48,8 +48,8 @@ public class ScalarTypeJsonList { /** * List mapped to Postgres JSON. */ - private static class Json extends ScalarTypeJsonList.PgBase { - public Json(DocPropertyType docType, boolean nullable, boolean keepSource) { + private final static class Json extends ScalarTypeJsonList.PgBase { + Json(DocPropertyType docType, boolean nullable, boolean keepSource) { super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE, docType, nullable, keepSource); } } @@ -57,8 +57,8 @@ public class ScalarTypeJsonList { /** * List mapped to Postgres JSONB. */ - private static class JsonB extends ScalarTypeJsonList.PgBase { - public JsonB(DocPropertyType docType, boolean nullable, boolean keepSource) { + private static final class JsonB extends ScalarTypeJsonList.PgBase { + JsonB(DocPropertyType docType, boolean nullable, boolean keepSource) { super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE, docType, nullable, keepSource); } } @@ -68,22 +68,22 @@ public class ScalarTypeJsonList { */ @SuppressWarnings("rawtypes") private abstract static class Base extends ScalarTypeJsonCollection { - private final boolean keepSource; + final boolean keepSource; - public Base(int dbType, DocPropertyType docType, boolean nullable, boolean keepSource) { + private Base(int dbType, DocPropertyType docType, boolean nullable, boolean keepSource) { super(List.class, dbType, docType, nullable); this.keepSource = keepSource; } - + @Override - public boolean isJsonMapper() { + public final boolean isJsonMapper() { return keepSource; } @Override - public List read(DataReader reader) throws SQLException { + public final List read(DataReader reader) throws SQLException { String json = reader.getString(); - if (isJsonMapper()) { + if (keepSource) { reader.pushJson(json); } try { @@ -96,7 +96,7 @@ public class ScalarTypeJsonList { @Override public final void bind(DataBinder binder, List value) throws SQLException { - String rawJson = isJsonMapper() ? binder.popJson() : null; + String rawJson = keepSource ? binder.popJson() : null; if (rawJson == null && value != null) { rawJson = formatValue(value); } @@ -115,15 +115,15 @@ public class ScalarTypeJsonList { binder.setString("[]"); } } - + protected void bindRawJson(DataBinder binder, String rawJson) throws SQLException { binder.setString(rawJson); } @Override - public String formatValue(List value) { + public final String formatValue(List value) { if (value.isEmpty()) { - return "[]"; + return "[]"; } try { return EJson.write(value); @@ -133,7 +133,7 @@ public class ScalarTypeJsonList { } @Override - public List parse(String value) { + public final List parse(String value) { try { return EJson.parseList(value, false); } catch (IOException e) { @@ -142,12 +142,12 @@ public class ScalarTypeJsonList { } @Override - public List jsonRead(JsonParser parser) throws IOException { + public final List jsonRead(JsonParser parser) throws IOException { return EJson.parseList(parser, parser.getCurrentToken()); } @Override - public void jsonWrite(JsonGenerator writer, List value) throws IOException { + public final void jsonWrite(JsonGenerator writer, List value) throws IOException { EJson.write(value, writer); } } @@ -165,12 +165,12 @@ public class ScalarTypeJsonList { } @Override - protected void bindRawJson(DataBinder binder, String rawJson) throws SQLException { + protected final void bindRawJson(DataBinder binder, String rawJson) throws SQLException { binder.setObject(PostgresHelper.asObject(pgType, rawJson)); } @Override - protected void bindNull(DataBinder binder) throws SQLException { + protected final void bindNull(DataBinder binder) throws SQLException { binder.setObject(PostgresHelper.asObject(pgType, nullable ? null : "[]")); } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java index 507e7012b..93ecdab79 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMap.java @@ -9,13 +9,7 @@ import io.ebean.core.type.DocPropertyType; import io.ebean.text.TextException; import io.ebean.text.json.EJson; -import java.io.DataInput; -import java.io.DataOutput; -import java.io.IOException; -import java.io.InputStream; -import java.io.InputStreamReader; -import java.io.Reader; -import java.io.StringWriter; +import java.io.*; import java.nio.charset.StandardCharsets; import java.sql.SQLException; import java.sql.Types; @@ -25,12 +19,12 @@ import java.util.Map; * Type which maps Map to various DB types (Clob, Varchar, Blob) in JSON format. */ @SuppressWarnings("rawtypes") -public abstract class ScalarTypeJsonMap extends ScalarTypeBase { +abstract class ScalarTypeJsonMap extends ScalarTypeBase { /** * Return the ScalarType for the requested dbType and postgres. */ - public static ScalarTypeJsonMap typeFor(boolean postgres, int dbType, boolean keepSource) { + static ScalarTypeJsonMap typeFor(boolean postgres, int dbType, boolean keepSource) { switch (dbType) { case Types.VARCHAR: return new ScalarTypeJsonMap.Varchar(keepSource); @@ -47,9 +41,8 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } } - public static class Clob extends ScalarTypeJsonMap { - - public Clob(boolean keepSource) { + private static final class Clob extends ScalarTypeJsonMap { + Clob(boolean keepSource) { super(Types.CLOB, keepSource); } @@ -59,15 +52,14 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } } - public static class Varchar extends ScalarTypeJsonMap { - - public Varchar(boolean keepSource) { + private static final class Varchar extends ScalarTypeJsonMap { + Varchar(boolean keepSource) { super(Types.VARCHAR, keepSource); } } - public static class Blob extends ScalarTypeJsonMap { - public Blob(boolean keepSource) { + private static final class Blob extends ScalarTypeJsonMap { + Blob(boolean keepSource) { super(Types.BLOB, keepSource); } @@ -75,23 +67,23 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { public Map read(DataReader reader) throws SQLException { InputStream is = reader.getBinaryStream(); if (is == null) { - if (isJsonMapper()) { + if (keepSource) { reader.pushJson(null); } return null; } try { - if (isJsonMapper()) { - StringWriter rawJson = new StringWriter(); - try (InputStreamReader inputStreamReader = new InputStreamReader(is, StandardCharsets.UTF_8)) { - inputStreamReader.transferTo(rawJson); + if (keepSource) { + StringWriter jsonBuffer = new StringWriter(); + try (InputStreamReader streamReader = new InputStreamReader(is, StandardCharsets.UTF_8)) { + transferTo(streamReader, jsonBuffer); } - reader.pushJson(rawJson.toString()); - return parse(rawJson.toString()); - + String rawJson = jsonBuffer.toString(); + reader.pushJson(rawJson); + return parse(rawJson); } else { - try (InputStreamReader inputStreamReader = new InputStreamReader(is, StandardCharsets.UTF_8)) { - return parse(inputStreamReader); + try (InputStreamReader streamReader = new InputStreamReader(is, StandardCharsets.UTF_8)) { + return parse(streamReader); } } } catch (IOException e) { @@ -99,21 +91,29 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } } + private static void transferTo(Reader reader, Writer out) throws IOException { + char[] buffer = new char[2048]; + int nRead; + while ((nRead = reader.read(buffer, 0, 2048)) >= 0) { + out.write(buffer, 0, nRead); + } + } + @Override protected void bindNull(DataBinder binder) throws SQLException { binder.setNull(Types.BLOB); } - + @Override protected void bindJson(DataBinder binder, String rawJson) throws SQLException { binder.setBytes(rawJson.getBytes(StandardCharsets.UTF_8)); } - + } - private final boolean keepSource; - - public ScalarTypeJsonMap(int jdbcType, boolean keepSource) { + final boolean keepSource; + + ScalarTypeJsonMap(int jdbcType, boolean keepSource) { super(Map.class, false, jdbcType); this.keepSource = keepSource; } @@ -122,7 +122,7 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { * Map is a mutable type. Use the isDirty() method to check for dirty state. */ @Override - public boolean isMutable() { + public final boolean isMutable() { return true; } @@ -133,48 +133,41 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { public boolean isDirty(Object value) { return TypeJsonManager.checkIsDirty(value); } - - - + @Override - public boolean isJsonMapper() { + public final boolean isJsonMapper() { return keepSource; } - @Override public Map read(DataReader reader) throws SQLException { String rawJson = readJson(reader); - if (isJsonMapper()) { + if (keepSource) { reader.pushJson(rawJson); } - if (rawJson == null) { return null; } - return parse(rawJson); } - protected String readJson(DataReader reader) throws SQLException { return reader.getString(); } - + @Override public final void bind(DataBinder binder, Map value) throws SQLException { - String rawJson = isJsonMapper() ? binder.popJson() : null; + String rawJson = keepSource ? binder.popJson() : null; if (rawJson == null && value != null) { rawJson = formatValue(value); } - if (value == null) { bindNull(binder); } else { bindJson(binder, rawJson); } } - + protected void bindNull(DataBinder binder) throws SQLException { binder.setNull(Types.VARCHAR); } @@ -182,19 +175,19 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { protected void bindJson(DataBinder binder, String rawJson) throws SQLException { binder.setString(rawJson); } - + @Override - public Object toJdbcType(Object value) { + public final Object toJdbcType(Object value) { return value; } @Override - public Map toBeanType(Object value) { + public final Map toBeanType(Object value) { return (Map) value; } @Override - public String formatValue(Map v) { + public final String formatValue(Map v) { try { return EJson.write(v); } catch (IOException e) { @@ -203,7 +196,7 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } @Override - public Map parse(String value) { + public final Map parse(String value) { try { // return a modify aware map return EJson.parseObject(value, true); @@ -212,7 +205,7 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } } - public Map parse(Reader reader) { + public final Map parse(Reader reader) { try { // return a modify aware map return EJson.parseObject(reader, true); @@ -222,17 +215,17 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } @Override - public Map convertFromMillis(long dateTime) { + public final Map convertFromMillis(long dateTime) { throw new RuntimeException("Should never be called"); } @Override - public boolean isDateTimeCapable() { + public final boolean isDateTimeCapable() { return false; } @Override - public Map readData(DataInput dataInput) throws IOException { + public final Map readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { return null; } else { @@ -241,7 +234,7 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } @Override - public void writeData(DataOutput dataOutput, Map map) throws IOException { + public final void writeData(DataOutput dataOutput, Map map) throws IOException { if (map == null) { dataOutput.writeBoolean(false); } else { @@ -250,17 +243,17 @@ public abstract class ScalarTypeJsonMap extends ScalarTypeBase { } @Override - public void jsonWrite(JsonGenerator writer, Map value) throws IOException { + public final void jsonWrite(JsonGenerator writer, Map value) throws IOException { EJson.write(value, writer); } @Override - public Map jsonRead(JsonParser parser) throws IOException { + public final Map jsonRead(JsonParser parser) throws IOException { return EJson.parseObject(parser, parser.getCurrentToken()); } @Override - public DocPropertyType getDocType() { + public final DocPropertyType getDocType() { return DocPropertyType.OBJECT; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMapPostgres.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMapPostgres.java index 46a585ebc..ae33fa0e4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMapPostgres.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonMapPostgres.java @@ -8,9 +8,9 @@ import java.sql.SQLException; /** * Support for the Postgres DB types JSON and JSONB. */ -public abstract class ScalarTypeJsonMapPostgres extends ScalarTypeJsonMap { +abstract class ScalarTypeJsonMapPostgres extends ScalarTypeJsonMap { - final String postgresType; + private final String postgresType; ScalarTypeJsonMapPostgres(int jdbcType, String postgresType, boolean keepSource) { super(jdbcType, keepSource); @@ -18,21 +18,21 @@ public abstract class ScalarTypeJsonMapPostgres extends ScalarTypeJsonMap { } @Override - protected void bindNull(DataBinder binder) throws SQLException { + protected final void bindNull(DataBinder binder) throws SQLException { binder.setObject(PostgresHelper.asObject(postgresType, null)); } - + @Override - protected void bindJson(DataBinder binder, String rawJson) throws SQLException { + protected final void bindJson(DataBinder binder, String rawJson) throws SQLException { binder.setObject(PostgresHelper.asObject(postgresType, rawJson)); } /** * ScalarType mapping java Map type to Postgres JSON database type. */ - public static class JSON extends ScalarTypeJsonMapPostgres { + static final class JSON extends ScalarTypeJsonMapPostgres { - public JSON(boolean keepSource) { + JSON(boolean keepSource) { super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE, keepSource); } } @@ -40,9 +40,9 @@ public abstract class ScalarTypeJsonMapPostgres extends ScalarTypeJsonMap { /** * ScalarType mapping java Map type to Postgres JSONB database type. */ - public static class JSONB extends ScalarTypeJsonMapPostgres { + static final class JSONB extends ScalarTypeJsonMapPostgres { - public JSONB(boolean keepSource) { + JSONB(boolean keepSource) { super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE, keepSource); } } 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 41cb28d49..65cb88cdc 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 @@ -46,7 +46,7 @@ class ScalarTypeJsonObjectMapper { /** * No mutation detection on this json property. */ - private static class NoMutationDetection extends Base { + private static final class NoMutationDetection extends Base { NoMutationDetection(TypeJsonManager jsonManager, AnnotatedField field, int dbType, DocPropertyType docType) { super(Object.class, jsonManager, field, dbType, docType); @@ -66,7 +66,7 @@ class ScalarTypeJsonObjectMapper { /** * Supports HASH and SOURCE dirty detection modes. */ - private static class GenericObject extends Base { + private static final class GenericObject extends Base { GenericObject(TypeJsonManager jsonManager, AnnotatedField field, int dbType, DocPropertyType docType) { super(Object.class, jsonManager, field, dbType, docType); @@ -167,20 +167,20 @@ class ScalarTypeJsonObjectMapper { } @Override - public Object toJdbcType(Object value) { + public final Object toJdbcType(Object value) { // no type conversion supported return value; } @Override @SuppressWarnings("unchecked") - public T toBeanType(Object value) { + public final T toBeanType(Object value) { // no type conversion supported return (T) value; } @Override - public String formatValue(T value) { + public final String formatValue(T value) { try { return objectWriter.writeValueAsString(value); } catch (JsonProcessingException e) { @@ -189,7 +189,7 @@ class ScalarTypeJsonObjectMapper { } @Override - public T parse(String value) { + public final T parse(String value) { try { return objectReader.readValue(value, deserType); } catch (IOException e) { @@ -198,32 +198,32 @@ class ScalarTypeJsonObjectMapper { } @Override - public DocPropertyType getDocType() { + public final DocPropertyType getDocType() { return docType; } @Override - public boolean isDateTimeCapable() { + public final boolean isDateTimeCapable() { return false; } @Override - public T convertFromMillis(long dateTime) { + public final T convertFromMillis(long dateTime) { throw new IllegalStateException("Not supported"); } @Override - public T jsonRead(JsonParser parser) throws IOException { + public final T jsonRead(JsonParser parser) throws IOException { return objectReader.readValue(parser, deserType); } @Override - public void jsonWrite(JsonGenerator writer, T value) throws IOException { + public final void jsonWrite(JsonGenerator writer, T value) throws IOException { objectWriter.writeValue(writer, value); } @Override - public T readData(DataInput dataInput) throws IOException { + public final T readData(DataInput dataInput) throws IOException { if (!dataInput.readBoolean()) { return null; } else { @@ -232,7 +232,7 @@ class ScalarTypeJsonObjectMapper { } @Override - public void writeData(DataOutput dataOutput, T value) throws IOException { + public final void writeData(DataOutput dataOutput, T value) throws IOException { if (value == null) { dataOutput.writeBoolean(false); } else { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java index 7e728b0d3..86a39443e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java @@ -21,12 +21,12 @@ import java.util.Set; /** * Types for mapping List in JSON format to DB types VARCHAR, JSON and JSONB. */ -public class ScalarTypeJsonSet { +final class ScalarTypeJsonSet { /** * Return the appropriate ScalarType for the requested dbType and Postgres. */ - public static ScalarType typeFor(boolean postgres, int dbType, DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { + static ScalarType typeFor(boolean postgres, int dbType, DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { if (postgres) { switch (dbType) { case DbPlatformType.JSONB: @@ -41,7 +41,7 @@ public class ScalarTypeJsonSet { /** * List mapped to DB VARCHAR. */ - public static class Varchar extends ScalarTypeJsonSet.Base { + static final class Varchar extends ScalarTypeJsonSet.Base { public Varchar(DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { super(Types.VARCHAR, docPropertyType, nullable, keepSource); } @@ -50,8 +50,8 @@ public class ScalarTypeJsonSet { /** * List mapped to Postgres JSON. */ - private static class Json extends ScalarTypeJsonSet.PgBase { - public Json(DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { + private static final class Json extends ScalarTypeJsonSet.PgBase { + private Json(DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { super(DbPlatformType.JSON, PostgresHelper.JSON_TYPE, docPropertyType, nullable, keepSource); } } @@ -59,35 +59,31 @@ public class ScalarTypeJsonSet { /** * List mapped to Postgres JSONB. */ - private static class JsonB extends ScalarTypeJsonSet.PgBase { - public JsonB(DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { + private static final class JsonB extends ScalarTypeJsonSet.PgBase { + private JsonB(DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { super(DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE, docPropertyType, nullable, keepSource); } } - /** - * Base class for List handling. - */ @SuppressWarnings("rawtypes") private abstract static class Base extends ScalarTypeJsonCollection { - private boolean keepSource; - - public Base(int dbType, DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { + final boolean keepSource; + + private Base(int dbType, DocPropertyType docPropertyType, boolean nullable, boolean keepSource) { super(Set.class, dbType, docPropertyType, nullable); this.keepSource = keepSource; } - @Override - public boolean isJsonMapper() { + public final boolean isJsonMapper() { return keepSource; } - + @Override - public Set read(DataReader reader) throws SQLException { + public final Set read(DataReader reader) throws SQLException { String json = reader.getString(); - if (isJsonMapper()) { + if (keepSource) { reader.pushJson(json); } try { @@ -100,7 +96,7 @@ public class ScalarTypeJsonSet { @Override public final void bind(DataBinder binder, Set value) throws SQLException { - String rawJson = isJsonMapper() ? binder.popJson() : null; + String rawJson = keepSource ? binder.popJson() : null; if (rawJson == null && value != null) { rawJson = formatValue(value); } @@ -125,7 +121,7 @@ public class ScalarTypeJsonSet { } @Override - public String formatValue(Set value) { + public final String formatValue(Set value) { if (value.isEmpty()) { return "[]"; } @@ -137,7 +133,7 @@ public class ScalarTypeJsonSet { } @Override - public Set parse(String value) { + public final Set parse(String value) { try { return convertList(EJson.parseList(value)); } catch (IOException e) { @@ -146,12 +142,12 @@ public class ScalarTypeJsonSet { } @Override - public Set jsonRead(JsonParser parser) throws IOException { + public final Set jsonRead(JsonParser parser) throws IOException { return convertList(EJson.parseList(parser, parser.getCurrentToken())); } @Override - public void jsonWrite(JsonGenerator writer, Set value) throws IOException { + public final void jsonWrite(JsonGenerator writer, Set value) throws IOException { EJson.write(value, writer); } @@ -174,12 +170,12 @@ public class ScalarTypeJsonSet { } @Override - protected void bindRawJson(DataBinder binder, String rawJson) throws SQLException { + protected final void bindRawJson(DataBinder binder, String rawJson) throws SQLException { binder.setObject(PostgresHelper.asObject(pgType, rawJson)); } @Override - protected void bindNull(DataBinder binder) throws SQLException { + protected final void bindNull(DataBinder binder) throws SQLException { binder.setObject(PostgresHelper.asObject(pgType, nullable ? null : "[]")); } } From 587b2e3075f359941d72fa67eb2e3676b5eba23c Mon Sep 17 00:00:00 2001 From: rbygrave Date: Sun, 15 Aug 2021 14:09:44 +1200 Subject: [PATCH 09/68] #2310 Tidy to only cast once --- .../server/deploy/BeanPropertyJsonMapper.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) 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 f1b77f4bd..bb234664f 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 @@ -19,7 +19,7 @@ import java.util.Objects; /** * Handle json property with MutationDetection of SOURCE or HASH only. */ -public class BeanPropertyJsonMapper extends BeanPropertyJsonBasic { +public final class BeanPropertyJsonMapper extends BeanPropertyJsonBasic { private final boolean sourceDetection; @@ -105,14 +105,15 @@ public class BeanPropertyJsonMapper extends BeanPropertyJsonBasic { throw new PersistenceException("Error readSet on " + descriptor + "." + name, e); } } - + @Override public void setCacheDataValue(EntityBean bean, Object cacheData, PersistenceContext context) { if (cacheData instanceof String) { // parse back from string to support optimisation of java object serialisation - final MutableValueInfo hash = createMutableInfo((String)cacheData); + final String jsonContent = (String) cacheData; + final MutableValueInfo hash = createMutableInfo(jsonContent); bean._ebean_getIntercept().mutableInfo(propertyIndex, hash); - cacheData = scalarType.parse((String) cacheData); + cacheData = scalarType.parse(jsonContent); } setValue(bean, cacheData); } From ebc0fabbdb05fff1db1e05e1d883cbedc4ed8fcf Mon Sep 17 00:00:00 2001 From: rbygrave Date: Sun, 15 Aug 2021 14:15:03 +1200 Subject: [PATCH 10/68] #2311 - Fix BindPadding for empty list --- .../src/main/java/io/ebeaninternal/server/core/BindPadding.java | 2 +- .../test/java/io/ebeaninternal/server/core/BindPaddingTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/BindPadding.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/BindPadding.java index 75963723e..8659fabfd 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/BindPadding.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/BindPadding.java @@ -33,7 +33,7 @@ public final class BindPadding { * Extra padding on binding id's in order to get better hit ratio on DB prepared statements / query plans. */ static int padding(int size) { - if (size == 1) { + if (size <= 1) { return 0; } if (size <= 5) { diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/core/BindPaddingTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/core/BindPaddingTest.java index d0363d2c6..483963fcc 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/core/BindPaddingTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/core/BindPaddingTest.java @@ -29,7 +29,7 @@ public class BindPaddingTest { @Test public void padding() { - + assertEquals(0, BindPadding.padding(0)); assertEquals(0, BindPadding.padding(1)); assertEquals(3, BindPadding.padding(2)); assertEquals(2, BindPadding.padding(3)); From 82c12b1565adde4339602a5a37e1025b11424a25 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Sun, 15 Aug 2021 14:50:43 +1200 Subject: [PATCH 11/68] #2312 - Refactor internals - make more classes final in persist packages --- .../server/persist/BatchDepthComparator.java | 2 +- .../server/persist/BatchDepthOrder.java | 4 ++-- .../server/persist/BatchedBeanHolder.java | 2 +- .../ebeaninternal/server/persist/BatchedPstmt.java | 2 +- .../server/persist/BatchedPstmtHolder.java | 2 +- .../io/ebeaninternal/server/persist/Binder.java | 2 +- .../server/persist/DeleteIdRequest.java | 2 +- .../server/persist/DeleteUnloadedForeignKeys.java | 2 +- .../io/ebeaninternal/server/persist/DmlUtil.java | 2 +- .../server/persist/ExeCallableSql.java | 10 +--------- .../ebeaninternal/server/persist/ExeOrmUpdate.java | 10 +--------- .../ebeaninternal/server/persist/ExeUpdateSql.java | 14 +------------- .../ebeaninternal/server/persist/MergeContext.java | 2 +- .../ebeaninternal/server/persist/MergeHandler.java | 10 +--------- .../io/ebeaninternal/server/persist/MergeNode.java | 13 +++++-------- .../server/persist/MergeNodeAssocManyToMany.java | 8 +------- .../server/persist/MergeNodeAssocOne.java | 3 +-- .../server/persist/MergeNodeAssocOneToMany.java | 5 +---- .../ebeaninternal/server/persist/MergeRequest.java | 3 +-- .../server/persist/MultiValueWrapper.java | 2 +- .../ebeaninternal/server/persist/PstmtFactory.java | 5 +---- .../ebeaninternal/server/persist/SaveManyBase.java | 8 ++++---- .../server/persist/SaveManyBeans.java | 2 +- .../server/persist/SaveManyElementCollection.java | 2 +- .../persist/SaveManyElementCollectionMap.java | 2 +- .../ebeaninternal/server/persist/TrimLogSql.java | 2 +- .../ebeaninternal/server/persist/dml/BaseMeta.java | 4 +--- .../server/persist/dml/DeleteHandler.java | 2 +- .../server/persist/dml/DeleteMeta.java | 1 - .../server/persist/dml/DmlBeanPersister.java | 2 +- .../persist/dml/DmlBeanPersisterFactory.java | 2 +- .../server/persist/dml/DocStoreBeanPersister.java | 2 +- .../server/persist/dml/GenerateDmlRequest.java | 12 ++---------- .../server/persist/dml/GeneratedProperties.java | 2 +- .../persist/dml/GeneratedPropertyCollector.java | 2 +- .../server/persist/dml/InsertHandler.java | 2 +- .../server/persist/dml/MetaFactory.java | 2 +- .../server/persist/dml/UpdateHandler.java | 2 +- .../server/persist/dml/UpdatePlan.java | 2 +- .../server/persist/dmlbind/BindableAssocOne.java | 9 ++++----- .../persist/dmlbind/BindableAssocTenant.java | 3 +-- .../persist/dmlbind/BindableDiscriminator.java | 2 +- .../server/persist/dmlbind/BindableEmbedded.java | 6 +++--- .../persist/dmlbind/BindableEncryptedProperty.java | 4 ++-- .../server/persist/dmlbind/BindableIdEmpty.java | 2 +- .../server/persist/dmlbind/BindableIdScalar.java | 4 ++-- .../server/persist/dmlbind/BindableList.java | 2 +- .../persist/dmlbind/BindableOrderColumn.java | 3 +-- .../server/persist/dmlbind/BindableProperty.java | 11 +++++------ .../dmlbind/BindablePropertyJsonInsert.java | 2 +- .../dmlbind/BindablePropertyJsonUpdate.java | 2 +- .../persist/dmlbind/BindablePropertyVersion.java | 4 ++-- .../persist/dmlbind/BindableUnidirectional.java | 9 +-------- .../server/persist/dmlbind/FactoryAssocOnes.java | 6 +----- .../persist/dmlbind/FactoryBaseProperties.java | 4 +--- .../server/persist/dmlbind/FactoryEmbedded.java | 3 +-- .../server/persist/dmlbind/FactoryId.java | 7 +------ .../server/persist/dmlbind/FactoryProperty.java | 2 +- .../server/persist/dmlbind/FactoryVersion.java | 9 +-------- .../persist/dmlbind/MatchedImportedEmbedded.java | 4 +--- .../persist/dmlbind/MatchedImportedFactory.java | 14 +++----------- .../persist/dmlbind/MatchedImportedScalar.java | 4 +--- .../server/persist/platform/MultiValueBind.java | 1 - .../persist/platform/PostgresMultiValueBind.java | 2 +- 64 files changed, 85 insertions(+), 192 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchDepthComparator.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchDepthComparator.java index 7606599d9..66756b4a1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchDepthComparator.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchDepthComparator.java @@ -12,7 +12,7 @@ import java.util.Comparator; * keys from inserts. These values are required to persist the 'detail' beans. *

*/ -class BatchDepthComparator implements Comparator, Serializable { +final class BatchDepthComparator implements Comparator, Serializable { private static final long serialVersionUID = 264611821665757991L; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchDepthOrder.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchDepthOrder.java index 3817f43bd..bb0b4bcfa 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchDepthOrder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchDepthOrder.java @@ -6,7 +6,7 @@ import java.util.Map; /** * Helper to determine batch execution order for BatchedBeanHolders. */ -class BatchDepthOrder { +final class BatchDepthOrder { private final Map map = new HashMap<>(); @@ -22,7 +22,7 @@ class BatchDepthOrder { map.clear(); } - private static class Counter { + private static final class Counter { int count; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedBeanHolder.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedBeanHolder.java index db43c32d0..db6d85a35 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedBeanHolder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedBeanHolder.java @@ -18,7 +18,7 @@ import java.util.ArrayList; * executed. The lowest depth is executed first. *

*/ -class BatchedBeanHolder { +final class BatchedBeanHolder { /** * The owning queue. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedPstmt.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedPstmt.java index 0a764e35b..9afd4d6e8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedPstmt.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedPstmt.java @@ -20,7 +20,7 @@ import java.util.List; * This can hold CallableStatements as well. *

*/ -public class BatchedPstmt implements SpiProfileTransactionEvent { +public final class BatchedPstmt implements SpiProfileTransactionEvent { private static final Logger log = LoggerFactory.getLogger(BatchedPstmt.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedPstmtHolder.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedPstmtHolder.java index 4bd892bd4..50ed43900 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedPstmtHolder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/BatchedPstmtHolder.java @@ -15,7 +15,7 @@ import java.util.Map; * statements of a single 'depth' at any given time. *

*/ -public class BatchedPstmtHolder { +public final class BatchedPstmtHolder { /** * A Map of the statements using a String key. This is used so that the same diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java index 600a7e21a..bec0223d0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/Binder.java @@ -31,7 +31,7 @@ import java.util.List; /** * Binds bean values to a PreparedStatement. */ -public class Binder { +public final class Binder { private static final Logger logger = LoggerFactory.getLogger(Binder.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/DeleteIdRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/DeleteIdRequest.java index e086e2630..760d9eda3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/DeleteIdRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/DeleteIdRequest.java @@ -5,7 +5,7 @@ import io.ebean.Transaction; import io.ebean.event.BeanDeleteIdRequest; import io.ebeaninternal.api.SpiEbeanServer; -class DeleteIdRequest implements BeanDeleteIdRequest { +final class DeleteIdRequest implements BeanDeleteIdRequest { private final EbeanServer server; private final Transaction transaction; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/DeleteUnloadedForeignKeys.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/DeleteUnloadedForeignKeys.java index c3065b779..1c258b5bb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/DeleteUnloadedForeignKeys.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/DeleteUnloadedForeignKeys.java @@ -21,7 +21,7 @@ import java.util.List; * helps fetch the foreign keys and delete the appropriate rows. *

*/ -class DeleteUnloadedForeignKeys { +final class DeleteUnloadedForeignKeys { private final List> propList = new ArrayList<>(4); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/DmlUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/DmlUtil.java index 46ce61d33..c7693f6e8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/DmlUtil.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/DmlUtil.java @@ -4,7 +4,7 @@ package io.ebeaninternal.server.persist; /** * Utility object with helper methods for DML. */ -public class DmlUtil { +public final class DmlUtil { /** * Return true if the value is null or a Numeric 0 (for primitive int's and long's) or Option empty. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeCallableSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeCallableSql.java index 2c01fcd31..fc2c1e0e5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeCallableSql.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeCallableSql.java @@ -13,10 +13,9 @@ import java.sql.SQLException; /** * Handles the execution of CallableSql requests. */ -class ExeCallableSql { +final class ExeCallableSql { private final Binder binder; - private final PstmtFactory pstmtFactory; ExeCallableSql(Binder binder) { @@ -28,9 +27,7 @@ class ExeCallableSql { * execute the CallableSql requests. */ public int execute(PersistRequestCallableSql request) { - boolean batchThisRequest = request.isBatchThisRequest(); - CallableStatement cstmt = null; try { cstmt = bindStmt(request, batchThisRequest); @@ -58,18 +55,15 @@ class ExeCallableSql { private CallableStatement bindStmt(PersistRequestCallableSql request, boolean batchThisRequest) throws SQLException { - request.startBind(batchThisRequest); SpiCallableSql callableSql = request.getCallableSql(); SpiTransaction t = request.getTransaction(); String sql = callableSql.getSql(); - BindParams bindParams = callableSql.getBindParams(); // process named parameters if required sql = BindParamsParser.parse(bindParams, sql); - boolean logSql = request.isLogSql(); CallableStatement cstmt; @@ -90,9 +84,7 @@ class ExeCallableSql { if (!bindParams.isEmpty()) { bindLog = binder.bind(bindParams, cstmt, t.getInternalConnection()); } - request.setBindLog(bindLog); - // required to read OUT params later request.setBound(bindParams, cstmt); return cstmt; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeOrmUpdate.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeOrmUpdate.java index d79a4d66f..ee9ffad23 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeOrmUpdate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeOrmUpdate.java @@ -15,15 +15,11 @@ import java.sql.SQLException; /** * Executes the UpdateSql requests. */ -class ExeOrmUpdate { +final class ExeOrmUpdate { private final Binder binder; - private final PstmtFactory pstmtFactory; - /** - * Create with a given binder. - */ ExeOrmUpdate(Binder binder) { this.pstmtFactory = new PstmtFactory(); this.binder = binder; @@ -33,9 +29,7 @@ class ExeOrmUpdate { * Execute the orm update request. */ public int execute(PersistRequestOrmUpdate request) { - boolean batchThisRequest = request.isBatchThisRequest(); - PreparedStatement pstmt = null; try { pstmt = bindStmt(request, batchThisRequest); @@ -68,13 +62,11 @@ class ExeOrmUpdate { * Convert bean and property names to db table and columns. */ private String translate(PersistRequestOrmUpdate request, String sql) { - BeanDescriptor descriptor = request.getBeanDescriptor(); return descriptor.convertOrmUpdateToSql(sql); } private PreparedStatement bindStmt(PersistRequestOrmUpdate request, boolean batchThisRequest) throws SQLException { - request.startBind(batchThisRequest); SpiUpdate ormUpdate = request.getOrmUpdate(); SpiTransaction t = request.getTransaction(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeUpdateSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeUpdateSql.java index cea7560c9..75627671f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeUpdateSql.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/ExeUpdateSql.java @@ -16,15 +16,11 @@ import java.sql.SQLException; /** * Executes the UpdateSql requests. */ -class ExeUpdateSql { +final class ExeUpdateSql { private final Binder binder; - private final PstmtFactory pstmtFactory; - /** - * Create with a given binder. - */ ExeUpdateSql(Binder binder) { this.binder = binder; this.pstmtFactory = new PstmtFactory(); @@ -34,14 +30,10 @@ class ExeUpdateSql { * Execute the UpdateSql request. */ public int execute(PersistRequestUpdateSql request) { - boolean batchThisRequest = request.isBatchThisRequest(); - PreparedStatement pstmt = null; try { - pstmt = bindStmt(request, batchThisRequest); - if (batchThisRequest) { pstmt.addBatch(); // return -1 to indicate batch mode @@ -66,7 +58,6 @@ class ExeUpdateSql { } private void readGeneratedKeys(PreparedStatement stmt, PersistRequestUpdateSql request) { - ResultSet resultSet = null; try { resultSet = stmt.getGeneratedKeys(); @@ -82,7 +73,6 @@ class ExeUpdateSql { } private PreparedStatement bindStmt(PersistRequestUpdateSql request, boolean batchThisRequest) throws SQLException { - request.startBind(batchThisRequest); SpiSqlUpdate updateSql = request.getUpdateSql(); SpiTransaction t = request.getTransaction(); @@ -121,7 +111,6 @@ class ExeUpdateSql { private void determineType(String word1, String word2, String word3, PersistRequestUpdateSql request) { - if (word1.equalsIgnoreCase("UPDATE")) { request.setType(SqlType.SQL_UPDATE, word2); @@ -137,7 +126,6 @@ class ExeUpdateSql { } private void parseUpdate(String sql, PersistRequestUpdateSql request) { - int[] pos = new int[3]; int spaceCount = 0; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeContext.java index bdd6ce855..e3cb0d5e2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeContext.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeContext.java @@ -10,7 +10,7 @@ import java.util.List; /** * Context used for merge processing. */ -class MergeContext { +final class MergeContext { private final SpiEbeanServer server; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeHandler.java index b2d53ba40..3e09a44f9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeHandler.java @@ -24,7 +24,7 @@ import java.util.regex.Pattern; /** * Drives the merge processing. */ -class MergeHandler { +final class MergeHandler { private static final Pattern PATH_SPLIT = Pattern.compile("\\."); @@ -33,10 +33,8 @@ class MergeHandler { private final EntityBean bean; private final MergeOptions options; private final SpiTransaction transaction; - private final Map nodes = new LinkedHashMap<>(); - MergeHandler(SpiEbeanServer server, BeanDescriptor desc, EntityBean bean, MergeOptions options, SpiTransaction transaction) { this.server = server; this.desc = desc; @@ -49,7 +47,6 @@ class MergeHandler { * Fetch the Ids for the graph and use them to determine inserts, updates and deletes for the merge paths. */ List merge() { - Set paths = options.paths(); if (desc.isIdGeneratedValue() && paths.isEmpty() && !options.isClientGeneratedIds()) { // just do a single insert or update based on Id value present @@ -76,7 +73,6 @@ class MergeHandler { for (MergeNode value : nodes.values()) { value.merge(request); } - return context.getDeletedBeans(); } @@ -86,9 +82,7 @@ class MergeHandler { * We use the Id values to determine what are inserts, updates and deletes as part of the merge. */ private EntityBean fetchOutline(Set paths) { - Query query = server.find(desc.getBeanType()); - query.setBeanCacheMode(CacheMode.OFF); query.setPersistenceContextScope(PersistenceContextScope.QUERY); query.setId(desc.getId(bean)); @@ -126,14 +120,12 @@ class MergeHandler { } private MergeNode addRootLevelNode(String rootPath) { - MergeNode node = createMergeNode(rootPath, desc, rootPath); nodes.put(rootPath, node); return node; } static MergeNode createMergeNode(String fullPath, BeanDescriptor targetDesc, String path) { - BeanProperty prop = targetDesc.getBeanProperty(path); if (!(prop instanceof BeanPropertyAssoc)) { throw new PersistenceException("merge path [" + path + "] is not a ToMany or ToOne property of " + targetDesc.getFullName()); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNode.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNode.java index fa2dc398e..cc5ebeaba 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNode.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNode.java @@ -33,7 +33,7 @@ abstract class MergeNode { /** * Add a child node given the fullPath and relative path. */ - MergeNode addChild(String fullPath, String path) { + final MergeNode addChild(String fullPath, String path) { MergeNode childNode = MergeHandler.createMergeNode(fullPath, targetDescriptor, path); if (children == null) { children = new LinkedHashMap<>(); @@ -45,7 +45,7 @@ abstract class MergeNode { /** * Return the node given the relative path. */ - MergeNode get(String path) { + final MergeNode get(String path) { if (children != null) { return children.get(path); } @@ -55,8 +55,7 @@ abstract class MergeNode { /** * Return the outline beans as a map keyed by Id values. */ - Map toMap(Collection outlines) { - + final Map toMap(Collection outlines) { Map outlineMap = new HashMap<>(); if (outlines != null) { for (Object out : outlines) { @@ -71,8 +70,7 @@ abstract class MergeNode { /** * Add to the query to fetch the Ids values for the foreign keys basically. */ - void addSelectId(Query query) { - + final void addSelectId(Query query) { BeanProperty idProperty = targetDescriptor.getIdProperty(); query.fetch(fullPath, idProperty.getName()); } @@ -80,8 +78,7 @@ abstract class MergeNode { /** * Cascade the merge processing if this has child nodes. */ - void cascade(EntityBean entityBean, EntityBean outlineBean, MergeRequest request) { - + final void cascade(EntityBean entityBean, EntityBean outlineBean, MergeRequest request) { if (children != null && !children.isEmpty()) { MergeRequest sub = request.sub(entityBean, outlineBean); for (MergeNode node : children.values()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocManyToMany.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocManyToMany.java index 7fd74e8a9..02acdf3f9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocManyToMany.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocManyToMany.java @@ -15,7 +15,7 @@ import java.util.Map; /** * Node for processing merge on ManyToMany properties. */ -class MergeNodeAssocManyToMany extends MergeNode { +final class MergeNodeAssocManyToMany extends MergeNode { private final BeanPropertyAssocMany many; @@ -26,14 +26,11 @@ class MergeNodeAssocManyToMany extends MergeNode { @Override public void merge(MergeRequest request) { - EntityBean parentBean = request.getBean(); - Collection beans = many.getRawCollection(parentBean); Collection outlines = many.getRawCollection(request.getOutline()); Map outlineIds = toMap(outlines); - List additions = new ArrayList<>(); if (beans != null) { for (Object bean : beans) { @@ -57,7 +54,6 @@ class MergeNodeAssocManyToMany extends MergeNode { if (!deletions.isEmpty()) { transaction.flush(); - SqlUpdate delete = intersectionTable.delete(server, false); for (EntityBean deletion : deletions) { many.intersectionBind(delete, parentBean, deletion); @@ -68,7 +64,6 @@ class MergeNodeAssocManyToMany extends MergeNode { if (!additions.isEmpty()) { transaction.flush(); - SqlUpdate insert = intersectionTable.insert(server, false); for (EntityBean addition : additions) { many.intersectionBind(insert, parentBean, addition); @@ -76,7 +71,6 @@ class MergeNodeAssocManyToMany extends MergeNode { } insert.execute(); } - many.resetMany(parentBean); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOne.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOne.java index 90f44e07f..68438bf40 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOne.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOne.java @@ -8,7 +8,7 @@ import java.util.Objects; /** * Node for processing merge on ToOne properties. */ -class MergeNodeAssocOne extends MergeNode { +final class MergeNodeAssocOne extends MergeNode { private final BeanPropertyAssocOne one; @@ -19,7 +19,6 @@ class MergeNodeAssocOne extends MergeNode { @Override public void merge(MergeRequest request) { - EntityBean entityBean = getEntityBean(request.getBean()); if (entityBean == null) { checkOrphanRemoval(request); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOneToMany.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOneToMany.java index a75ea26fb..8372c955d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOneToMany.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeNodeAssocOneToMany.java @@ -9,7 +9,7 @@ import java.util.Map; /** * Node for processing merge on ToMany properties. */ -class MergeNodeAssocOneToMany extends MergeNode { +final class MergeNodeAssocOneToMany extends MergeNode { private final BeanPropertyAssocMany many; @@ -20,12 +20,10 @@ class MergeNodeAssocOneToMany extends MergeNode { @Override public void merge(MergeRequest request) { - Collection beans = many.getRawCollection(request.getBean()); Collection outlines = many.getRawCollection(request.getOutline()); Map outlineIds = toMap(outlines); - if (beans != null) { for (Object bean : beans) { EntityBean entityBean = (EntityBean) bean; @@ -40,7 +38,6 @@ class MergeNodeAssocOneToMany extends MergeNode { } } } - // any remaining are considered deletes for (EntityBean outlineBean : outlineIds.values()) { request.addDelete(outlineBean); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeRequest.java index 1826e749e..d893fd999 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MergeRequest.java @@ -7,11 +7,10 @@ import io.ebeaninternal.api.SpiTransaction; /** * Request object used for processing the merge. */ -class MergeRequest { +final class MergeRequest { private final EntityBean bean; private final EntityBean outline; - private final MergeContext context; MergeRequest(MergeContext context, EntityBean bean, EntityBean outline) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MultiValueWrapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MultiValueWrapper.java index 36104822a..5e23a66cd 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/MultiValueWrapper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/MultiValueWrapper.java @@ -6,7 +6,7 @@ import java.util.Collection; * Wraps the multi values that are used for "property in (...)" queries * @author Roland Praml, FOCONIS AG */ -public class MultiValueWrapper { +public final class MultiValueWrapper { private final Collection values; private final Class type; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/PstmtFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/PstmtFactory.java index 14b24dd3b..fb47147da 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/PstmtFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/PstmtFactory.java @@ -15,10 +15,7 @@ import java.sql.Statement; * getGeneratedKeys. *

*/ -class PstmtFactory { - - PstmtFactory() { - } +final class PstmtFactory { /** * Get a callable statement without any batching. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyBase.java index f305e3244..a31cee3f2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyBase.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyBase.java @@ -46,20 +46,20 @@ abstract class SaveManyBase implements SaveMany { */ abstract void save(); - void preElementCollectionUpdate() { + final void preElementCollectionUpdate() { if (!insertedParent) { request.preElementCollectionUpdate(); persister.addToFlushQueue(many.deleteByParentId(request.getBeanId(), null), transaction, 1); } } - void resetModifyState() { + final void resetModifyState() { if (value instanceof BeanCollection) { modifyListenReset((BeanCollection) value); } } - void modifyListenReset(BeanCollection c) { + final void modifyListenReset(BeanCollection c) { if (insertedParent) { // after insert set the modify listening mode for private owned etc c.setModifyListening(many.getModifyListenMode()); @@ -67,7 +67,7 @@ abstract class SaveManyBase implements SaveMany { c.modifyReset(); } - void postElementCollectionUpdate() { + final void postElementCollectionUpdate() { if (!insertedParent) { if (request.isNotifyCache()) { try { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyBeans.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyBeans.java index 1f1da9fc0..33edf8dd8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyBeans.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyBeans.java @@ -26,7 +26,7 @@ import static io.ebeaninternal.server.persist.DmlUtil.isNullOrZero; /** * Saves the details for a OneToMany or ManyToMany relationship (entity beans). */ -public class SaveManyBeans extends SaveManyBase { +public final class SaveManyBeans extends SaveManyBase { private static final Logger log = LoggerFactory.getLogger(SaveManyBeans.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollection.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollection.java index 53f638114..8b577da93 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollection.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollection.java @@ -11,7 +11,7 @@ import java.util.Collection; /** * Save details for a simple scalar element collection. */ -class SaveManyElementCollection extends SaveManyBase { +final class SaveManyElementCollection extends SaveManyBase { private Collection collection; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollectionMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollectionMap.java index 60dd2e01d..2941a1499 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollectionMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/SaveManyElementCollectionMap.java @@ -12,7 +12,7 @@ import java.util.Set; /** * Save details for a simple scalar map element collection. */ -class SaveManyElementCollectionMap extends SaveManyBase { +final class SaveManyElementCollectionMap extends SaveManyBase { private Set> entries; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/TrimLogSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/TrimLogSql.java index 1ab6349a0..f38490420 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/TrimLogSql.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/TrimLogSql.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.persist; /** * Utility to improve logging of raw SQL that contains new line characters. */ -public class TrimLogSql { +public final class TrimLogSql { /** * Replace new line chars for nicer logging of multi-line sql strings. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/BaseMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/BaseMeta.java index d7ed5c90c..872119060 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/BaseMeta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/BaseMeta.java @@ -16,19 +16,17 @@ class BaseMeta { this.tenantId = tenantId; } - String appendWhere(GenerateDmlRequest request, ConcurrencyMode conMode) { + final String appendWhere(GenerateDmlRequest request, ConcurrencyMode conMode) { request.setWhereIdMode(); id.dmlAppend(request); if (tenantId != null) { tenantId.dmlAppend(request); } - if (ConcurrencyMode.VERSION == conMode) { if (version != null) { version.dmlAppend(request); } } - return request.toString(); } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteHandler.java index 9320a49fa..846e88f80 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteHandler.java @@ -10,7 +10,7 @@ import java.sql.SQLException; /** * Delete bean handler. */ -public class DeleteHandler extends DmlHandler { +final class DeleteHandler extends DmlHandler { private final DeleteMeta meta; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteMeta.java index ccb196947..7baac04ab 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteMeta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DeleteMeta.java @@ -30,7 +30,6 @@ final class DeleteMeta extends BaseMeta { String draftTableName = desc.getDraftTable(); this.sqlDraftNone = genSql(ConcurrencyMode.NONE, draftTableName); this.sqlDraftVersion = genSql(ConcurrencyMode.VERSION, draftTableName); - } else { this.sqlDraftNone = sqlNone; this.sqlDraftVersion = sqlVersion; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java index f07d207b8..f9d592cf3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java @@ -16,7 +16,7 @@ import java.sql.SQLException; * a flat list of Bindable objects. *

*/ -public final class DmlBeanPersister implements BeanPersister { +final class DmlBeanPersister implements BeanPersister { private final DatabasePlatform dbPlatform; private final UpdateMeta updateMeta; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersisterFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersisterFactory.java index 6e349dee1..c9b4cadea 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersisterFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersisterFactory.java @@ -8,7 +8,7 @@ import io.ebeaninternal.server.persist.BeanPersisterFactory; /** * Factory for creating a DmlBeanPersister for a bean type. */ -public class DmlBeanPersisterFactory implements BeanPersisterFactory { +public final class DmlBeanPersisterFactory implements BeanPersisterFactory { private final DatabasePlatform dbPlatform; private final MetaFactory metaFactory; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DocStoreBeanPersister.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DocStoreBeanPersister.java index 9bbe7bfcd..9b9a9c2cf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DocStoreBeanPersister.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DocStoreBeanPersister.java @@ -8,7 +8,7 @@ import javax.persistence.PersistenceException; /** * Document store based BeanPersister. */ -class DocStoreBeanPersister implements BeanPersister { +final class DocStoreBeanPersister implements BeanPersister { private final GeneratedProperties generatedProperties; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GenerateDmlRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GenerateDmlRequest.java index 809115563..ab292163d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GenerateDmlRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GenerateDmlRequest.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.persist.dml; /** * Helper to support the generation of DML statements. */ -public class GenerateDmlRequest { +public final class GenerateDmlRequest { private final StringBuilder sb = new StringBuilder(100); private StringBuilder insertBindBuffer; @@ -12,13 +12,7 @@ public class GenerateDmlRequest { private int insertMode; private int bindColumnCount; - /** - * Create from a PersistRequestBean. - */ - public GenerateDmlRequest() { - } - - public GenerateDmlRequest append(String s) { + GenerateDmlRequest append(String s) { sb.append(s); return this; } @@ -30,7 +24,6 @@ public class GenerateDmlRequest { public void appendColumn(String column, String bind) { ++bindColumnCount; - sb.append(prefix); sb.append(column); //sb.append(expr); @@ -43,7 +36,6 @@ public class GenerateDmlRequest { sb.append("="); sb.append(bind); } - if (prefix2 != null) { prefix = prefix2; prefix2 = null; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GeneratedProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GeneratedProperties.java index 5f4090541..44a1d919b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GeneratedProperties.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GeneratedProperties.java @@ -10,7 +10,7 @@ import java.util.List; /** * Executes the generated property (like WhenCreated, WhoCreated etc) for doc store persisting. */ -class GeneratedProperties { +final class GeneratedProperties { /** * Create the GeneratedProperties for the given bean type. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GeneratedPropertyCollector.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GeneratedPropertyCollector.java index 08036e143..33b804a6c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GeneratedPropertyCollector.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/GeneratedPropertyCollector.java @@ -10,7 +10,7 @@ import java.util.List; /** * Collects the generated properties for inserts and updates for a given bean type. */ -class GeneratedPropertyCollector { +final class GeneratedPropertyCollector { private final List preInsert = new ArrayList<>(); private final List preUpdate = new ArrayList<>(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertHandler.java index d9fb1e8f0..113e6ff39 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/InsertHandler.java @@ -18,7 +18,7 @@ import static io.ebeaninternal.server.persist.DmlUtil.isNullOrZero; /** * Insert bean handler. */ -public class InsertHandler extends DmlHandler { +public final class InsertHandler extends DmlHandler { private final InsertMeta meta; private final boolean concatenatedKey; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/MetaFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/MetaFactory.java index de7c2bb39..7ad52d87f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/MetaFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/MetaFactory.java @@ -22,7 +22,7 @@ import java.util.List; /** * Factory for creating InsertMeta UpdateMeta and DeleteMeta. */ -class MetaFactory { +final class MetaFactory { /** * Include Lobs in the base statement. Generally true. Oracle9 used to require diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateHandler.java index 8a3e724c8..49f6e1bfb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdateHandler.java @@ -11,7 +11,7 @@ import java.sql.SQLException; /** * Update bean handler. */ -public class UpdateHandler extends DmlHandler { +public final class UpdateHandler extends DmlHandler { private final UpdateMeta meta; private boolean emptySetClause; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdatePlan.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdatePlan.java index 97811b5cf..69527de9b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdatePlan.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/UpdatePlan.java @@ -10,7 +10,7 @@ import java.sql.SQLException; /** * Plan for executing bean updates for a given set of changed properties. */ -class UpdatePlan implements SpiUpdatePlan { +final class UpdatePlan implements SpiUpdatePlan { private final String key; private final ConcurrencyMode mode; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableAssocOne.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableAssocOne.java index 9a9be58fc..8eaa091a0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableAssocOne.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableAssocOne.java @@ -24,30 +24,29 @@ class BindableAssocOne implements Bindable { } @Override - public String toString() { + public final String toString() { return "BindableAssocOne " + assocOne; } @Override - public boolean isDraftOnly() { + public final boolean isDraftOnly() { return assocOne.isDraftOnly(); } @Override - public void addToUpdate(PersistRequestBean request, List list) { + public final void addToUpdate(PersistRequestBean request, List list) { if (request.isAddToUpdate(assocOne)) { list.add(this); } } @Override - public void dmlAppend(GenerateDmlRequest request) { + public final void dmlAppend(GenerateDmlRequest request) { importedId.dmlAppend(request); } @Override public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException { - EntityBean assocBean = (EntityBean) assocOne.getValue(bean); registerDeferred(request, bean, assocBean); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableAssocTenant.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableAssocTenant.java index eab3678a5..f3086783c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableAssocTenant.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableAssocTenant.java @@ -5,7 +5,7 @@ import io.ebeaninternal.server.deploy.BeanPropertyAssocOne; import java.sql.SQLException; -class BindableAssocTenant extends BindableAssocOne { +final class BindableAssocTenant extends BindableAssocOne { BindableAssocTenant(BeanPropertyAssocOne assocOne) { super(assocOne); @@ -13,7 +13,6 @@ class BindableAssocTenant extends BindableAssocOne { @Override public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException { - EntityBean assocBean = (EntityBean) assocOne.getValue(bean); importedId.bind(request, assocBean); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableDiscriminator.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableDiscriminator.java index 1079df8e0..565b85d27 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableDiscriminator.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableDiscriminator.java @@ -12,7 +12,7 @@ import java.util.List; /** * Bindable for inserting a discriminator value. */ -public class BindableDiscriminator implements Bindable { +public final class BindableDiscriminator implements Bindable { private final String columnName; private final Object discValue; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableEmbedded.java index 44b9a201e..cfda5ae6a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableEmbedded.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableEmbedded.java @@ -10,15 +10,15 @@ import java.util.Arrays; import java.util.List; /** - * Bindable for a Embedded bean. + * Bindable for an Embedded bean. */ -public class BindableEmbedded implements Bindable { +final class BindableEmbedded implements Bindable { private final Bindable[] items; private final BeanPropertyAssocOne embProp; - public BindableEmbedded(BeanPropertyAssocOne embProp, List bindList) { + BindableEmbedded(BeanPropertyAssocOne embProp, List bindList) { this.embProp = embProp; this.items = bindList.toArray(new Bindable[0]); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableEncryptedProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableEncryptedProperty.java index b855fef00..3bfd2fa41 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableEncryptedProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableEncryptedProperty.java @@ -12,13 +12,13 @@ import java.util.List; /** * Bindable for a DB encrypted BeanProperty. */ -public class BindableEncryptedProperty implements Bindable { +final class BindableEncryptedProperty implements Bindable { private final BeanProperty prop; private final boolean bindEncryptDataFirst; - public BindableEncryptedProperty(BeanProperty prop, boolean bindEncryptDataFirst) { + BindableEncryptedProperty(BeanProperty prop, boolean bindEncryptDataFirst) { this.prop = prop; this.bindEncryptDataFirst = bindEncryptDataFirst; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableIdEmpty.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableIdEmpty.java index 1f970ee25..fa9c73b0b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableIdEmpty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableIdEmpty.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.persist.dml.GenerateDmlRequest; import java.util.List; -public class BindableIdEmpty implements BindableId { +final class BindableIdEmpty implements BindableId { @Override public boolean isEmpty() { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableIdScalar.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableIdScalar.java index 4d0538f4a..518a236b7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableIdScalar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableIdScalar.java @@ -12,11 +12,11 @@ import java.util.List; /** * Bindable for a single scalar id property. */ -public final class BindableIdScalar implements BindableId { +final class BindableIdScalar implements BindableId { private final BeanProperty uidProp; - public BindableIdScalar(BeanProperty uidProp) { + BindableIdScalar(BeanProperty uidProp) { this.uidProp = uidProp; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableList.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableList.java index de6957ad1..85894ee53 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableList.java @@ -12,7 +12,7 @@ import java.util.List; /** * List of Bindable items. */ -public class BindableList implements Bindable { +public final class BindableList implements Bindable { private final Bindable[] items; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableOrderColumn.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableOrderColumn.java index ef7046634..7879d192c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableOrderColumn.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableOrderColumn.java @@ -10,7 +10,7 @@ import java.util.List; /** * Bindable for the synthetic order column. */ -public class BindableOrderColumn extends BindableProperty { +public final class BindableOrderColumn extends BindableProperty { public BindableOrderColumn(BeanProperty prop) { super(prop); @@ -29,7 +29,6 @@ public class BindableOrderColumn extends BindableProperty { */ @Override public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException { - int sortOrder = bean._ebean_getIntercept().getSortOrder(); request.bind(sortOrder, prop); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableProperty.java index 8716ddf91..8f50fe7b3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableProperty.java @@ -11,21 +11,21 @@ import java.util.List; /** * Bindable for a single BeanProperty. */ -public class BindableProperty implements Bindable { +class BindableProperty implements Bindable { final BeanProperty prop; - public BindableProperty(BeanProperty prop) { + BindableProperty(BeanProperty prop) { this.prop = prop; } @Override - public String toString() { + public final String toString() { return prop.toString(); } @Override - public boolean isDraftOnly() { + public final boolean isDraftOnly() { return prop.isDraftOnly(); } @@ -37,7 +37,7 @@ public class BindableProperty implements Bindable { } @Override - public void dmlAppend(GenerateDmlRequest request) { + public final void dmlAppend(GenerateDmlRequest request) { request.appendColumn(prop.getDbColumn()); } @@ -46,7 +46,6 @@ public class BindableProperty implements Bindable { */ @Override public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException { - Object value = null; if (bean != null) { value = prop.getValue(bean); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyJsonInsert.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyJsonInsert.java index 1cbb7eeca..a6d6d6cb6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyJsonInsert.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyJsonInsert.java @@ -9,7 +9,7 @@ import java.sql.SQLException; /** * For JSON Jackson properties - dirty detection via MD5 of json content. */ -class BindablePropertyJsonInsert extends BindableProperty { +final class BindablePropertyJsonInsert extends BindableProperty { private final int propertyIndex; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyJsonUpdate.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyJsonUpdate.java index cfa056a63..7501fd92b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyJsonUpdate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyJsonUpdate.java @@ -8,7 +8,7 @@ import java.sql.SQLException; /** * For JSON Jackson properties - dirty detection via MD5 of json content. */ -class BindablePropertyJsonUpdate extends BindableProperty { +final class BindablePropertyJsonUpdate extends BindableProperty { private final int propertyIndex; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyVersion.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyVersion.java index 5cdea3e8b..db28c3035 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyVersion.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindablePropertyVersion.java @@ -11,11 +11,11 @@ import java.util.List; /** * Bindable for a Version BeanProperty. Obtains value from 'old values'. */ -public class BindablePropertyVersion implements Bindable { +final class BindablePropertyVersion implements Bindable { private final BeanProperty prop; - public BindablePropertyVersion(BeanProperty prop) { + BindablePropertyVersion(BeanProperty prop) { this.prop = prop; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableUnidirectional.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableUnidirectional.java index 4e94b85d2..2ea853644 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableUnidirectional.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/BindableUnidirectional.java @@ -18,19 +18,16 @@ import java.util.List; * parentBean. *

*/ -public class BindableUnidirectional implements Bindable { +public final class BindableUnidirectional implements Bindable { private final BeanPropertyAssocOne unidirectional; - private final ImportedId importedId; - private final BeanDescriptor desc; public BindableUnidirectional(BeanDescriptor desc, BeanPropertyAssocOne unidirectional) { this.desc = desc; this.unidirectional = unidirectional; this.importedId = unidirectional.getImportedId(); - } @Override @@ -54,13 +51,10 @@ public class BindableUnidirectional implements Bindable { importedId.dmlAppend(request); } - @Override public void dmlBind(BindableRequest request, EntityBean bean) throws SQLException { - PersistRequestBean persistRequest = request.getPersistRequest(); Object parentBean = persistRequest.getParentBean(); - if (parentBean == null) { Class localType = desc.getBeanType(); Class targetType = unidirectional.getTargetType(); @@ -69,7 +63,6 @@ public class BindableUnidirectional implements Bindable { msg += "For inserts you must use cascade save on the master bean [" + targetType + "]."; throw new PersistenceException(msg); } - importedId.bind(request, (EntityBean) parentBean); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryAssocOnes.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryAssocOnes.java index bf3b0723d..7c2314bed 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryAssocOnes.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryAssocOnes.java @@ -9,16 +9,12 @@ import java.util.List; /** * A factory that builds Bindable for BeanPropertyAssocOne properties. */ -public class FactoryAssocOnes { - - public FactoryAssocOnes() { - } +public final class FactoryAssocOnes { /** * Add foreign key columns from associated one beans. */ public void create(List list, BeanDescriptor desc, DmlMode mode) { - for (BeanPropertyAssocOne one : desc.propertiesOneImported()) { if (!one.isImportedPrimaryKey()) { switch (mode) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryBaseProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryBaseProperties.java index 43b9bec8d..209f17bbf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryBaseProperties.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryBaseProperties.java @@ -12,11 +12,10 @@ import java.util.List; * This excludes unique embedded and associated properties. *

*/ -public class FactoryBaseProperties { +public final class FactoryBaseProperties { private final FactoryProperty factoryProperty; - public FactoryBaseProperties(boolean bindEncryptDataFirst) { factoryProperty = new FactoryProperty(bindEncryptDataFirst); } @@ -25,7 +24,6 @@ public class FactoryBaseProperties { * Add Bindable for the base properties to the list. */ public void create(List list, BeanDescriptor desc, DmlMode mode, boolean withLobs) { - for (BeanProperty prop : desc.propertiesBaseScalar()) { if (!prop.isImportedPrimaryKey()) { Bindable item = factoryProperty.create(prop, mode, withLobs, false); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryEmbedded.java index 380c7b3a9..cef891682 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryEmbedded.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryEmbedded.java @@ -11,7 +11,7 @@ import java.util.List; /** * A factory that builds Bindable for embedded bean properties. */ -public class FactoryEmbedded { +public final class FactoryEmbedded { private final FactoryProperty factoryProperty; @@ -23,7 +23,6 @@ public class FactoryEmbedded { * Add bindable for the embedded properties to the list. */ public void create(List list, BeanDescriptor desc, DmlMode mode, boolean withLobs) { - for (BeanPropertyAssocOne anEmbedded : desc.propertiesEmbedded()) { BeanProperty[] props = anEmbedded.getProperties(); List bindList = new ArrayList<>(props.length); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryId.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryId.java index d517e051b..398f59ecf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryId.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryId.java @@ -7,23 +7,18 @@ import io.ebeaninternal.server.deploy.BeanPropertyAssocOne; /** * Create a Bindable for the ids of a bean type. */ -public class FactoryId { - - public FactoryId() { - } +public final class FactoryId { /** * Add uniqueId properties. */ public BindableId createId(BeanDescriptor desc) { - BeanProperty id = desc.getIdProperty(); if (id == null) { return new BindableIdEmpty(); } if (!id.isEmbedded()) { return new BindableIdScalar(id); - } else { BeanPropertyAssocOne embId = (BeanPropertyAssocOne) id; MatchedImportedProperty[] matches = MatchedImportedFactory.build(embId.getProperties(), desc); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryProperty.java index d5c59daf3..7de3e79ea 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryProperty.java @@ -12,7 +12,7 @@ import io.ebeaninternal.server.persist.dml.DmlMode; * and BindablePropertyUpdateGenerated as required. *

*/ -class FactoryProperty { +final class FactoryProperty { private final boolean bindEncryptDataFirst; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryVersion.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryVersion.java index abb7f1a20..7c418af31 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryVersion.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/FactoryVersion.java @@ -7,17 +7,12 @@ import io.ebeaninternal.server.deploy.BeanPropertyAssocOne; /** * Creates a Bindable to support version concurrency where clauses. */ -public class FactoryVersion { - - - public FactoryVersion() { - } +public final class FactoryVersion { /** * Create a Bindable for the version property(s) for a bean type. */ public Bindable create(BeanDescriptor desc) { - BeanProperty versionProperty = desc.getVersionProperty(); return (versionProperty == null) ? null : new BindablePropertyVersion(versionProperty); } @@ -26,7 +21,6 @@ public class FactoryVersion { * Create a Bindable for the version property(s) for a bean type. */ public Bindable createForDelete(BeanDescriptor desc) { - BeanProperty versionProperty = desc.getVersionProperty(); return (versionProperty == null) ? null : new BindableProperty(versionProperty); } @@ -35,7 +29,6 @@ public class FactoryVersion { * Create a Bindable for TenantId If multi-tenant with partitioning is on this bean type. */ public Bindable createTenantId(BeanDescriptor desc) { - BeanProperty tenant = desc.getTenantProperty(); if (tenant == null) { return null; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedEmbedded.java index 4ce1bb63d..60a32ea19 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedEmbedded.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedEmbedded.java @@ -8,12 +8,10 @@ import io.ebeaninternal.server.deploy.BeanPropertyAssocOne; * Matches local embedded id properties to 'matching' properties from a * ManyToOne associated bean that is a 'imported primary key'. */ -class MatchedImportedEmbedded implements MatchedImportedProperty { +final class MatchedImportedEmbedded implements MatchedImportedProperty { private final BeanProperty localProp; - private final BeanPropertyAssocOne assocOne; - private final BeanProperty foreignProp; MatchedImportedEmbedded(BeanProperty localProp, BeanPropertyAssocOne assocOne, BeanProperty foreignProp) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedFactory.java index 714e910dd..e4fa26284 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedFactory.java @@ -4,15 +4,13 @@ import io.ebeaninternal.server.deploy.BeanDescriptor; import io.ebeaninternal.server.deploy.BeanProperty; import io.ebeaninternal.server.deploy.BeanPropertyAssocOne; -class MatchedImportedFactory { +final class MatchedImportedFactory { /** * Create the array of matchedImportedProperty based on the properties and descriptor. */ static MatchedImportedProperty[] build(BeanProperty[] props, BeanDescriptor desc) { - MatchedImportedProperty[] matches = new MatchedImportedProperty[props.length]; - for (int i = 0; i < props.length; i++) { // find matching assoc one property for dbColumn matches[i] = findMatch(props[i], desc); @@ -25,12 +23,9 @@ class MatchedImportedFactory { } private static MatchedImportedProperty findMatch(BeanProperty prop, BeanDescriptor desc) { - // find matching against the local database column String dbColumn = prop.getDbColumn(); - - BeanPropertyAssocOne[] assocOnes = desc.propertiesOne(); - for (BeanPropertyAssocOne assocOne1 : assocOnes) { + for (BeanPropertyAssocOne assocOne1 : desc.propertiesOne()) { if (assocOne1.isImportedPrimaryKey()) { // search using the ImportedId from the assoc one BeanProperty foreignMatch = assocOne1.getImportedId().findMatchImport(dbColumn); @@ -39,14 +34,11 @@ class MatchedImportedFactory { } } } - - BeanProperty[] scalar = desc.propertiesBaseScalar(); - for (BeanProperty beanProperty : scalar) { + for (BeanProperty beanProperty : desc.propertiesBaseScalar()) { if (dbColumn.equals(beanProperty.getDbColumn())) { return new MatchedImportedScalar(prop, beanProperty); } } - // there was no matching assoc one property. // example UserRole bean missing assoc one to User? return null; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedScalar.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedScalar.java index 436ef69a5..de9907863 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedScalar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dmlbind/MatchedImportedScalar.java @@ -6,10 +6,9 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Matches local embedded id properties to 'matching' imported primary key scalar properties. */ -class MatchedImportedScalar implements MatchedImportedProperty { +final class MatchedImportedScalar implements MatchedImportedProperty { private final BeanProperty localProp; - private final BeanProperty foreignProp; MatchedImportedScalar(BeanProperty localProp, BeanProperty foreignProp) { @@ -19,7 +18,6 @@ class MatchedImportedScalar implements MatchedImportedProperty { @Override public void populate(EntityBean sourceBean, EntityBean embeddedId) { - Object value = foreignProp.getValue(sourceBean); localProp.setValue(embeddedId, value); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/platform/MultiValueBind.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/platform/MultiValueBind.java index 3559a3a69..1a15b8438 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/platform/MultiValueBind.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/platform/MultiValueBind.java @@ -11,7 +11,6 @@ import java.util.Collection; */ public class MultiValueBind { - @FunctionalInterface public interface BindOne { void bind(Object value) throws SQLException; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/platform/PostgresMultiValueBind.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/platform/PostgresMultiValueBind.java index f90d5cfb8..f7d86f55e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/platform/PostgresMultiValueBind.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/platform/PostgresMultiValueBind.java @@ -6,7 +6,7 @@ import io.ebean.core.type.ScalarType; /** * Multi value binder that uses Postgres Array. */ -public class PostgresMultiValueBind extends AbstractMultiValueBind { +public final class PostgresMultiValueBind extends AbstractMultiValueBind { @Override public String getInExpression(boolean not, ScalarType type, int size) { From 0688061f5cb2eed9b872ca2d648e9a72335cb55f Mon Sep 17 00:00:00 2001 From: rbygrave Date: Sun, 15 Aug 2021 15:17:19 +1200 Subject: [PATCH 12/68] Speed up TestUuidGenerator --- .../server/idgen/TestUuidGenerator.java | 47 ++++++------------- 1 file changed, 15 insertions(+), 32 deletions(-) diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/idgen/TestUuidGenerator.java b/ebean-core/src/test/java/io/ebeaninternal/server/idgen/TestUuidGenerator.java index 0f27c5a89..3623fdd73 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/idgen/TestUuidGenerator.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/idgen/TestUuidGenerator.java @@ -2,39 +2,32 @@ * Licensed Materials - Property of FOCONIS AG * (C) Copyright FOCONIS AG. */ - package io.ebeaninternal.server.idgen; - -import static org.assertj.core.api.Assertions.assertThat; +import io.ebean.config.dbplatform.PlatformIdGenerator; +import org.junit.Test; import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.atomic.AtomicBoolean; -import org.junit.Test; - -import io.ebean.config.dbplatform.PlatformIdGenerator; - +import static org.assertj.core.api.Assertions.assertThat; /** * Run some simple tests for the UUID generator. * * @author Roland Praml, FOCONIS AG - * */ public class TestUuidGenerator { - -/** - * Worker to generate UUIDs - * - * @author Roland Praml, FOCONIS AG - * - */ + /** + * Worker to generate UUIDs + * + * @author Roland Praml, FOCONIS AG + */ public static class IdTest implements Runnable { - private final Map map; + private final Map map; private final PlatformIdGenerator idGen; private final int ids; private final AtomicBoolean failFlag; @@ -46,12 +39,6 @@ public class TestUuidGenerator { this.failFlag = failFlag; } - public IdTest(PlatformIdGenerator idGen, int ids) { - this.idGen = idGen; - this.ids = ids; - this.map = null; - this.failFlag = null; - } @Override public void run() { //System.out.println("Start " + Thread.currentThread()); @@ -70,7 +57,7 @@ public class TestUuidGenerator { */ @Test public void testUuidV1SingleThread() throws Exception { - testGenerator(1, 1_000_000, UuidV1IdGenerator.getInstance("ebean-test-uuid.state")); + testGenerator(1, 500_000, UuidV1IdGenerator.getInstance("ebean-test-uuid.state")); } /** @@ -78,7 +65,7 @@ public class TestUuidGenerator { */ @Test public void testUuidV1MultiThread() throws Exception { - testGenerator(10, 100_000, UuidV1IdGenerator.getInstance("ebean-test-uuid.state")); + testGenerator(10, 50_000, UuidV1IdGenerator.getInstance("ebean-test-uuid.state")); } /** @@ -86,7 +73,7 @@ public class TestUuidGenerator { */ @Test public void testUuidV1RndMultiThread() throws Exception { - testGenerator(10, 100_000, UuidV1RndIdGenerator.INSTANCE); + testGenerator(10, 50_000, UuidV1RndIdGenerator.INSTANCE); } /** @@ -94,7 +81,7 @@ public class TestUuidGenerator { */ @Test public void testUuidType1RndSingleThread() throws Exception { - testGenerator(1, 1_000_000, UuidV1RndIdGenerator.INSTANCE); + testGenerator(1, 500_000, UuidV1RndIdGenerator.INSTANCE); } /** @@ -102,7 +89,7 @@ public class TestUuidGenerator { */ @Test public void testUuidType4MultiThread() throws Exception { - testGenerator(10, 100_000, UuidV4IdGenerator.INSTANCE); + testGenerator(10, 50_000, UuidV4IdGenerator.INSTANCE); } /** @@ -110,12 +97,9 @@ public class TestUuidGenerator { */ @Test public void testUuidType4SingleThread() throws Exception { - testGenerator(1, 1_000_000, UuidV4IdGenerator.INSTANCE); + testGenerator(1, 500_000, UuidV4IdGenerator.INSTANCE); } - - - private void testGenerator(int threadCount, int count, PlatformIdGenerator generator) throws Exception { System.out.println("Printing 5 consecutive IDs of " + generator); for (int i = 0; i < 5; i++) { @@ -136,6 +120,5 @@ public class TestUuidGenerator { } assertThat(failFlag.get()).isFalse(); assertThat(map.size()).isEqualTo(threadCount * count); - } } From 4109fab0d86ef1ab1b2d5af3b97573a5a02e068f Mon Sep 17 00:00:00 2001 From: rbygrave Date: Sun, 15 Aug 2021 15:22:02 +1200 Subject: [PATCH 13/68] #2313 - Refactor internals - make more classes final in query packages --- .../server/query/BaseFuture.java | 8 +- .../io/ebeaninternal/server/query/CQuery.java | 2 +- .../server/query/CQueryBindCapture.java | 2 +- .../server/query/CQueryBuilder.java | 2 +- .../server/query/CQueryBuilderRawSql.java | 2 +- .../server/query/CQueryCollectionAddNoop.java | 2 +- .../server/query/CQueryDraftSupport.java | 2 +- .../server/query/CQueryEngine.java | 2 +- .../query/CQueryFetchSingleAttribute.java | 2 +- .../server/query/CQueryHistorySupport.java | 2 +- .../server/query/CQueryIteratorSimple.java | 2 +- .../query/CQueryIteratorWithBuffer.java | 2 +- .../server/query/CQueryOrderBy.java | 2 +- .../server/query/CQueryPlan.java | 48 ++++++------ .../server/query/CQueryPlanManager.java | 2 +- .../server/query/CQueryPlanRawSql.java | 3 +- .../server/query/CQueryPlanRequest.java | 4 +- .../server/query/CQueryPlanStats.java | 3 - .../server/query/CQueryPredicates.java | 25 +------ .../server/query/CQueryRowCount.java | 2 +- .../server/query/CQueryUpdate.java | 2 +- .../server/query/CallableQuery.java | 2 - .../server/query/CallableQueryCount.java | 4 +- .../server/query/CallableQueryIds.java | 4 +- .../server/query/CallableQueryList.java | 3 +- .../server/query/DFetchGroup.java | 2 +- .../server/query/DFetchGroupBuilder.java | 2 +- .../server/query/DQueryPlanOutput.java | 2 +- .../server/query/DbOrderByTrim.java | 2 +- .../server/query/DefaultDbSqlContext.java | 2 +- .../server/query/DefaultFetchGroupQuery.java | 2 +- .../server/query/DefaultOrmQueryEngine.java | 2 +- .../query/DefaultRelationalQueryEngine.java | 2 +- .../server/query/DefaultSqlRow.java | 2 +- .../server/query/DtoQueryEngine.java | 2 +- .../server/query/DtoQueryIterator.java | 2 +- .../ebeaninternal/server/query/ExtraJoin.java | 2 +- .../server/query/LimitOffsetPagedList.java | 2 +- .../server/query/OrderVersionDesc.java | 2 +- .../server/query/QueryFutureIds.java | 2 +- .../server/query/QueryFutureList.java | 2 +- .../server/query/QueryFutureRowCount.java | 2 +- .../server/query/QueryPlanLogger.java | 6 +- .../server/query/QueryPlanLoggerExplain.java | 2 +- .../server/query/QueryPlanLoggerOracle.java | 2 +- .../server/query/QueryPlanLoggerPostgres.java | 2 +- .../query/QueryPlanLoggerSqlServer.java | 2 +- .../server/query/RawSqlQueryPlanKey.java | 2 +- .../server/query/SqlBeanLoad.java | 2 +- .../ebeaninternal/server/query/SqlTree.java | 2 +- .../server/query/SqlTreeAlias.java | 2 +- .../server/query/SqlTreeBuilder.java | 22 +----- .../server/query/SqlTreeNodeBean.java | 44 ++++------- .../server/query/SqlTreeNodeExtraJoin.java | 3 +- .../query/SqlTreeNodeFormulaWhereJoin.java | 3 +- .../query/SqlTreeNodeManyWhereJoin.java | 8 +- .../server/query/SqlTreeNodeRoot.java | 2 - .../server/query/SqlTreeProperties.java | 10 +-- .../server/querydefn/AbstractQuery.java | 10 +-- .../server/querydefn/DefaultDtoQuery.java | 17 +---- .../server/querydefn/DefaultOrmQuery.java | 74 +------------------ .../server/querydefn/DefaultOrmUpdate.java | 20 ----- .../querydefn/DefaultRelationalQuery.java | 12 +-- .../server/querydefn/DefaultUpdateQuery.java | 2 +- .../server/querydefn/NaturalKeyBindParam.java | 3 +- .../server/querydefn/ONamedParam.java | 3 +- .../server/querydefn/OrmQueryDetail.java | 2 +- .../querydefn/OrmQueryDetailParser.java | 5 +- .../querydefn/OrmQueryLimitRequest.java | 6 +- .../server/querydefn/OrmQueryPlanKey.java | 2 +- .../server/querydefn/OrmQueryProperties.java | 8 +- .../server/querydefn/OrmQuerySecondary.java | 3 +- .../server/querydefn/OrmUpdateProperties.java | 11 ++- .../server/querydefn/SimpleTextParser.java | 3 +- 74 files changed, 120 insertions(+), 343 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/BaseFuture.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/BaseFuture.java index 93c86fe7b..e71334ea6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/BaseFuture.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/BaseFuture.java @@ -26,22 +26,22 @@ abstract class BaseFuture implements Future { } @Override - public T get() throws InterruptedException, ExecutionException { + public final T get() throws InterruptedException, ExecutionException { return futureTask.get(); } @Override - public T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { + public final T get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException { return futureTask.get(timeout, unit); } @Override - public boolean isCancelled() { + public final boolean isCancelled() { return futureTask.isCancelled(); } @Override - public boolean isDone() { + public final boolean isDone() { return futureTask.isDone(); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQuery.java index 7fc636af0..e9d2281d0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQuery.java @@ -37,7 +37,7 @@ import java.util.concurrent.locks.ReentrantLock; * The tree structure is flattened into a SqlSelectChain. The SqlSelectChain is * the key object used in reading the flat resultSet back into Objects. */ -public class CQuery implements DbReadContext, CancelableQuery, SpiProfileTransactionEvent { +public final class CQuery implements DbReadContext, CancelableQuery, SpiProfileTransactionEvent { private static final Logger logger = LoggerFactory.getLogger(CQuery.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBindCapture.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBindCapture.java index e3a1a5e54..559dfa0da 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBindCapture.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBindCapture.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.type.bindcapture.BindCapture; import java.util.concurrent.locks.ReentrantLock; -class CQueryBindCapture implements SpiQueryBindCapture { +final class CQueryBindCapture implements SpiQueryBindCapture { private static final double multiplier = 1.5d; 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 9a4b1d32e..09b465893 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 @@ -40,7 +40,7 @@ import java.util.List; * Generates the SQL SELECT statements taking into account the physical * deployment properties. */ -class CQueryBuilder { +final class CQueryBuilder { private final String columnAliasPrefix; private final SqlLimiter sqlLimiter; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBuilderRawSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBuilderRawSql.java index 2bc60d208..d3b4e7ca6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBuilderRawSql.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryBuilderRawSql.java @@ -11,7 +11,7 @@ import io.ebeaninternal.server.querydefn.OrmQueryLimitRequest; import io.ebeaninternal.server.rawsql.SpiRawSql; import io.ebeaninternal.server.util.BindParamsParser; -class CQueryBuilderRawSql { +final class CQueryBuilderRawSql { private final SqlLimiter sqlLimiter; private final DatabasePlatform dbPlatform; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryCollectionAddNoop.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryCollectionAddNoop.java index ac4230999..cf8adf097 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryCollectionAddNoop.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryCollectionAddNoop.java @@ -7,7 +7,7 @@ import io.ebean.bean.EntityBean; * A NOOP based CQueryCollectionAdd for use with lazy loading many queries where the * beans loaded into the collection are added to the collection(s) of the parent(s). */ -class CQueryCollectionAddNoop implements CQueryCollectionAdd { +final class CQueryCollectionAddNoop implements CQueryCollectionAdd { /** * Return null as we are not collecting the beans. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryDraftSupport.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryDraftSupport.java index da1e01cac..771ff8145 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryDraftSupport.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryDraftSupport.java @@ -5,7 +5,7 @@ import java.util.Map; /** * Support 'asDraft' queries. */ -class CQueryDraftSupport { +final class CQueryDraftSupport { /** * The mapping of base tables to their matching 'draft' table. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java index 03074b43f..b76d0b4e9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryEngine.java @@ -33,7 +33,7 @@ import java.util.Map; /** * Handles the Object Relational fetching. */ -public class CQueryEngine { +public final class CQueryEngine { private static final Logger logger = LoggerFactory.getLogger(CQueryEngine.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryFetchSingleAttribute.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryFetchSingleAttribute.java index a89cd28fa..41f9e7f4d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryFetchSingleAttribute.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryFetchSingleAttribute.java @@ -24,7 +24,7 @@ import java.util.concurrent.locks.ReentrantLock; /** * Base compiled query request for single attribute queries. */ -class CQueryFetchSingleAttribute implements SpiProfileTransactionEvent, CancelableQuery { +final class CQueryFetchSingleAttribute implements SpiProfileTransactionEvent, CancelableQuery { private static final Logger logger = LoggerFactory.getLogger(CQueryFetchSingleAttribute.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryHistorySupport.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryHistorySupport.java index 5f810c6da..e082c97eb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryHistorySupport.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryHistorySupport.java @@ -7,7 +7,7 @@ import java.util.Map; /** * Helper to support history functions. */ -class CQueryHistorySupport { +final class CQueryHistorySupport { /** * The DB specific support. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorSimple.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorSimple.java index 17cec9d15..d438ec747 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorSimple.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorSimple.java @@ -9,7 +9,7 @@ import java.sql.SQLException; /** * QueryIterator that does not require a buffer for secondary queries. */ -class CQueryIteratorSimple implements QueryIterator { +final class CQueryIteratorSimple implements QueryIterator { private final CQuery cquery; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorWithBuffer.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorWithBuffer.java index e2a9bdad2..ad1a924b5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorWithBuffer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryIteratorWithBuffer.java @@ -11,7 +11,7 @@ import java.util.NoSuchElementException; /** * A QueryIterator that uses a buffer to execute secondary queries periodically. */ -class CQueryIteratorWithBuffer implements QueryIterator { +final class CQueryIteratorWithBuffer implements QueryIterator { private final CQuery cquery; private final int bufferSize; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryOrderBy.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryOrderBy.java index c325255ef..ffb65a039 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryOrderBy.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryOrderBy.java @@ -13,7 +13,7 @@ import java.util.List; /** * Creates the order by expression clause. */ -class CQueryOrderBy { +final class CQueryOrderBy { private final BeanDescriptor desc; 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 de365f253..aef2c1164 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 @@ -164,49 +164,49 @@ public class CQueryPlan implements SpiQueryPlan { } @Override - public Class getBeanType() { + public final Class getBeanType() { return beanType; } @Override - public String getName() { + public final String getName() { return name; } @Override - public String getHash() { + public final String getHash() { return hash; } @Override - public String getSql() { + public final String getSql() { return sql; } @Override - public ProfileLocation getProfileLocation() { + public final ProfileLocation getProfileLocation() { return profileLocation; } - public String getLabel() { + public final String getLabel() { return label; } - public Set getDependentTables() { + public final Set getDependentTables() { return dependentTables; } - public String getLocation() { + public final String getLocation() { return location; } @Override - public void queryPlanInit(long thresholdMicros) { + public final void queryPlanInit(long thresholdMicros) { bindCapture.queryPlanInit(thresholdMicros); } @Override - public DQueryPlanOutput createMeta(String bind, String planString) { + public final DQueryPlanOutput createMeta(String bind, String planString) { return new DQueryPlanOutput(getBeanType(), name, hash, sql, profileLocation, bind, planString); } @@ -217,7 +217,7 @@ public class CQueryPlan implements SpiQueryPlan { /** * Bind keys for encrypted properties if necessary returning the DataBind. */ - DataBind bindEncryptedProperties(PreparedStatement stmt, Connection conn) throws SQLException { + final DataBind bindEncryptedProperties(PreparedStatement stmt, Connection conn) throws SQLException { DataBind dataBind = new DataBind(dataTimeZone, stmt, conn); if (encryptedProps != null) { for (STreeProperty encryptedProp : encryptedProps) { @@ -237,14 +237,14 @@ public class CQueryPlan implements SpiQueryPlan { return dataBind; } - int getAsOfTableCount() { + final int getAsOfTableCount() { return asOfTableCount; } /** * Return a key used in audit logging to identify the query. */ - String getAuditQueryKey() { + final String getAuditQueryKey() { if (auditQueryHash == null) { // volatile object assignment (so happy for multithreaded access) auditQueryHash = calcAuditQueryKey(); @@ -257,29 +257,29 @@ public class CQueryPlan implements SpiQueryPlan { return rawSql ? planKey.getPartialKey() + "_" + hash : planKey.getPartialKey(); } - SqlTree getSqlTree() { + final SqlTree getSqlTree() { return sqlTree; } - public boolean isRawSql() { + public final boolean isRawSql() { return rawSql; } - String getLogWhereSql() { + final String getLogWhereSql() { return logWhereSql; } /** * Reset the query statistics. */ - public void resetStatistics() { + public final void resetStatistics() { stats.reset(); } /** * Register an execution time against this query plan; */ - boolean executionTime(long timeMicros) { + final boolean executionTime(long timeMicros) { stats.add(timeMicros); return bindCapture != null && bindCapture.collectFor(timeMicros); } @@ -287,33 +287,33 @@ public class CQueryPlan implements SpiQueryPlan { /** * Return a copy of the current query statistics. */ - public Snapshot getSnapshot(boolean reset) { + public final Snapshot getSnapshot(boolean reset) { return stats.getSnapshot(reset); } /** * Return the time this query plan was last used. */ - public long getLastQueryTime() { + public final long getLastQueryTime() { return stats.getLastQueryTime(); } - ScalarDataReader getSingleAttributeScalarType() { + final ScalarDataReader getSingleAttributeScalarType() { return sqlTree.getRootNode().getSingleAttributeReader(); } /** * Return true if there are no statistics collected since the last reset. */ - public boolean isEmptyStats() { + public final boolean isEmptyStats() { return stats.isEmpty(); } - TimedMetric createTimedMetric() { + final TimedMetric createTimedMetric() { return MetricFactory.get().createTimedMetric(label); } - void captureBindForQueryPlan(CQueryPredicates predicates, long executionTimeMicros) { + final void captureBindForQueryPlan(CQueryPredicates predicates, long executionTimeMicros) { final long startNanos = System.nanoTime(); try { DataBindCapture capture = bindCapture(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanManager.java index 4ff62f44d..499e801d3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanManager.java @@ -20,7 +20,7 @@ import java.util.concurrent.ConcurrentHashMap; import static java.util.Collections.emptyList; -public class CQueryPlanManager implements QueryPlanManager { +public final class CQueryPlanManager implements QueryPlanManager { private static final Logger log = LoggerFactory.getLogger(CQueryPlanManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanRawSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanRawSql.java index bab955d84..a23114bf2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanRawSql.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPlanRawSql.java @@ -12,7 +12,7 @@ import java.util.List; /** * RawSql based query plan. */ -class CQueryPlanRawSql extends CQueryPlan { +final class CQueryPlanRawSql extends CQueryPlan { private final int[] rsetIndexPositions; @@ -27,7 +27,6 @@ class CQueryPlanRawSql extends CQueryPlan { } private int[] createIndexPositions(OrmQueryRequest request, SqlTree sqlTree) { - List chain = sqlTree.buildRawSqlSelectChain(); ColumnMapping columnMapping = request.getQuery().getRawSql().getColumnMapping(); 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 315e7a07d..00b202d57 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 @@ -11,7 +11,7 @@ import java.util.List; /** * Captures database query plans. */ -class CQueryPlanRequest { +final class CQueryPlanRequest { private final List plans = new ArrayList<>(); @@ -19,7 +19,7 @@ class CQueryPlanRequest { private final long since; private final int maxCount; private final long maxTime; - private Iterator iterator; + private final Iterator iterator; CQueryPlanRequest(Connection connection, QueryPlanRequest req, Iterator iterator) { this.connection = connection; 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 ffc749eb9..05ad13173 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 @@ -10,11 +10,8 @@ import io.ebean.metric.TimedMetricStats; public final class CQueryPlanStats { private final CQueryPlan queryPlan; - private final TimedMetric timedMetric; - private boolean collected; - private long lastQueryTime; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java index c41f830c6..426b1ed4e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryPredicates.java @@ -37,74 +37,51 @@ import java.util.Set; * named parameters and expression values into the prepared statement. *

*/ -public class CQueryPredicates { +public final class CQueryPredicates { private static final Logger logger = LoggerFactory.getLogger(CQueryPredicates.class); private final Binder binder; - private final OrmQueryRequest request; - private final SpiQuery query; - private final Object idValue; - - /** - * Named bind parameters. - */ private final BindParams bindParams; - - /** - * Bind values from the where expressions. - */ private DefaultExpressionRequest filterMany; - /** * SQL generated from the where expressions. */ private String filterManyExprSql; - /** * Bind values from the where expressions. */ private DefaultExpressionRequest where; - /** * SQL generated from the where expressions. */ private String whereExprSql; - /** * Bind values for having expression. */ private DefaultExpressionRequest having; - /** * SQL generated from the having expression. */ private String havingExprSql; - private String dbHaving; - /** * logicalWhere with property names converted to db columns. */ private String dbWhere; - /** * Filter than can apply to a many fetch join. */ private String dbFilterMany; - private String dbOrderBy; - private String dbUpdateClause; - /** * Includes from where and order by clauses. */ private Set predicateIncludes; - private Set orderByIncludes; CQueryPredicates(Binder binder, OrmQueryRequest request) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryRowCount.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryRowCount.java index 0c1df9483..ccfbb3ce6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryRowCount.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryRowCount.java @@ -19,7 +19,7 @@ import java.util.concurrent.locks.ReentrantLock; /** * Executes the select row count query. */ -class CQueryRowCount implements SpiProfileTransactionEvent, CancelableQuery { +final class CQueryRowCount implements SpiProfileTransactionEvent, CancelableQuery { private final CQueryPlan queryPlan; private final OrmQueryRequest request; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryUpdate.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryUpdate.java index 302b1bcf0..e35615a0c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryUpdate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CQueryUpdate.java @@ -16,7 +16,7 @@ import java.util.concurrent.locks.ReentrantLock; /** * Executes the update query. */ -class CQueryUpdate implements SpiProfileTransactionEvent, CancelableQuery { +final class CQueryUpdate implements SpiProfileTransactionEvent, CancelableQuery { private final CQueryPlan queryPlan; private final OrmQueryRequest request; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQuery.java index 2a432b732..528984d17 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQuery.java @@ -10,9 +10,7 @@ import io.ebeaninternal.api.SpiQuery; abstract class CallableQuery { final SpiQuery query; - final SpiEbeanServer server; - final Transaction transaction; CallableQuery(SpiEbeanServer server, SpiQuery query, Transaction t) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryCount.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryCount.java index a2076b363..959ce2abd 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryCount.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryCount.java @@ -8,10 +8,8 @@ import java.util.concurrent.Callable; /** * Represent the findCount query as a Callable. - * - * @param the entity bean type */ -public class CallableQueryCount extends CallableQuery implements Callable { +public final class CallableQueryCount extends CallableQuery implements Callable { /** * Note that the transaction passed in is always a new transaction solely to diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryIds.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryIds.java index c8ae160f6..c236ccb6d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryIds.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryIds.java @@ -9,10 +9,8 @@ import java.util.concurrent.Callable; /** * Represent the fetch Id's query as a Callable. - * - * @param the entity bean type */ -public class CallableQueryIds extends CallableQuery implements Callable> { +public final class CallableQueryIds extends CallableQuery implements Callable> { public CallableQueryIds(SpiEbeanServer server, SpiQuery query, Transaction t) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryList.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryList.java index b20e75a86..350cd67f0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/CallableQueryList.java @@ -12,8 +12,7 @@ import java.util.concurrent.Callable; * * @param the entity bean type */ -public class CallableQueryList extends CallableQuery implements Callable> { - +public final class CallableQueryList extends CallableQuery implements Callable> { public CallableQueryList(SpiEbeanServer server, SpiQuery query, Transaction t) { super(server, query, t); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroup.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroup.java index 4b17e3461..bc2449d63 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroup.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroup.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.querydefn.SpiFetchGroup; /** * Default FetchGroup implementation. */ -class DFetchGroup implements SpiFetchGroup { +final class DFetchGroup implements SpiFetchGroup { private final OrmQueryDetail detail; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroupBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroupBuilder.java index 6553b7ea4..50966a45f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroupBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DFetchGroupBuilder.java @@ -9,7 +9,7 @@ import io.ebeaninternal.server.querydefn.SpiFetchGroup; /** * Default implementation of the FetchGroupBuilder. */ -class DFetchGroupBuilder implements FetchGroupBuilder { +final class DFetchGroupBuilder implements FetchGroupBuilder { private static final FetchConfig DEFAULT_FETCH = FetchConfig.ofDefault(); 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 1c1a41d07..642e163e2 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 @@ -7,7 +7,7 @@ import io.ebeaninternal.api.SpiDbQueryPlan; /** * Captured query plan details. */ -class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan { +final class DQueryPlanOutput implements MetaQueryPlan, SpiDbQueryPlan { private final Class beanType; private final String label; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DbOrderByTrim.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DbOrderByTrim.java index 766be909b..72eb81db4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DbOrderByTrim.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DbOrderByTrim.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.query; import java.util.regex.Pattern; -class DbOrderByTrim { +final class DbOrderByTrim { private static final Pattern orderByTrim = Pattern.compile("(?i) asc\\b| desc\\b|\\b nulls first\\b|\\b nulls last\\b"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultDbSqlContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultDbSqlContext.java index 378647818..dbd9b263e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultDbSqlContext.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultDbSqlContext.java @@ -8,7 +8,7 @@ import io.ebeaninternal.server.util.ArrayStack; import java.util.ArrayList; import java.util.HashSet; -class DefaultDbSqlContext implements DbSqlContext { +final class DefaultDbSqlContext implements DbSqlContext { private static final String COMMA = ", "; private static final String PERIOD = "."; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java index 9f7cb9b7e..459bba998 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultFetchGroupQuery.java @@ -44,7 +44,7 @@ import java.util.stream.Stream; /** * Implementation of FetchGroup query for use to create FetchGroup via query beans. */ -class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQueryFetch { +final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQueryFetch { private static final FetchConfig FETCH_CACHE = FetchConfig.ofCache(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultOrmQueryEngine.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultOrmQueryEngine.java index b112c7986..abab7cdf9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultOrmQueryEngine.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultOrmQueryEngine.java @@ -21,7 +21,7 @@ import java.util.List; /** * Main Finder implementation. */ -public class DefaultOrmQueryEngine implements OrmQueryEngine { +public final class DefaultOrmQueryEngine implements OrmQueryEngine { /** * Find using predicates diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultRelationalQueryEngine.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultRelationalQueryEngine.java index 78b9717d9..44b84a6a5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultRelationalQueryEngine.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultRelationalQueryEngine.java @@ -23,7 +23,7 @@ import java.util.function.Predicate; /** * Perform native sql fetches. */ -public class DefaultRelationalQueryEngine implements RelationalQueryEngine { +public final class DefaultRelationalQueryEngine implements RelationalQueryEngine { private final Binder binder; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultSqlRow.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultSqlRow.java index 0ee1e1525..e38d9d7d7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultSqlRow.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DefaultSqlRow.java @@ -29,7 +29,7 @@ import java.util.UUID; * returning the type you expect. *

*/ -public class DefaultSqlRow implements SqlRow { +public final class DefaultSqlRow implements SqlRow { private static final long serialVersionUID = -3120927797041336242L; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DtoQueryEngine.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DtoQueryEngine.java index 526d36dee..39588b733 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DtoQueryEngine.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DtoQueryEngine.java @@ -12,7 +12,7 @@ import java.util.List; import java.util.function.Consumer; import java.util.function.Predicate; -public class DtoQueryEngine { +public final class DtoQueryEngine { private final Binder binder; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/DtoQueryIterator.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/DtoQueryIterator.java index bdf4e2df6..47676c525 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/DtoQueryIterator.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/DtoQueryIterator.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.core.DtoQueryRequest; import javax.persistence.PersistenceException; import java.sql.SQLException; -class DtoQueryIterator implements QueryIterator { +final class DtoQueryIterator implements QueryIterator { private final DtoQueryRequest request; private boolean closed; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/ExtraJoin.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/ExtraJoin.java index c246c651d..6fdeedd43 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/ExtraJoin.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/ExtraJoin.java @@ -1,6 +1,6 @@ package io.ebeaninternal.server.query; -public class ExtraJoin { +public final class ExtraJoin { private final STreePropertyAssoc property; private final boolean containsMany; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/LimitOffsetPagedList.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/LimitOffsetPagedList.java index a6f506ef6..cb9f6f560 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/LimitOffsetPagedList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/LimitOffsetPagedList.java @@ -12,7 +12,7 @@ import java.util.concurrent.locks.ReentrantLock; /** * PagedList implementation based on limit offset types of queries. */ -public class LimitOffsetPagedList implements PagedList { +public final class LimitOffsetPagedList implements PagedList { private final transient SpiEbeanServer server; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/OrderVersionDesc.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/OrderVersionDesc.java index e3b99561a..52e661b10 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/OrderVersionDesc.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/OrderVersionDesc.java @@ -9,7 +9,7 @@ import java.util.Comparator; /** * Compare Version beans in descending order with nulls last. */ -class OrderVersionDesc implements Comparator>, Serializable { +final class OrderVersionDesc implements Comparator>, Serializable { static final OrderVersionDesc INSTANCE = new OrderVersionDesc(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureIds.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureIds.java index b330d7d25..ff5acb76c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureIds.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureIds.java @@ -10,7 +10,7 @@ import java.util.concurrent.FutureTask; /** * Default implementation of FutureIds. */ -public class QueryFutureIds extends BaseFuture> implements FutureIds { +public final class QueryFutureIds extends BaseFuture> implements FutureIds { private final CallableQueryIds call; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureList.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureList.java index 2d3999b61..34264ffcf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureList.java @@ -14,7 +14,7 @@ import java.util.concurrent.TimeoutException; /** * Default implementation for FutureList. */ -public class QueryFutureList extends BaseFuture> implements FutureList { +public final class QueryFutureList extends BaseFuture> implements FutureList { private final CallableQueryList call; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureRowCount.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureRowCount.java index 52c7b0fca..832653f1d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureRowCount.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryFutureRowCount.java @@ -8,7 +8,7 @@ import java.util.concurrent.FutureTask; /** * Future implementation for the row count query. */ -public class QueryFutureRowCount extends BaseFuture implements FutureRowCount { +public final class QueryFutureRowCount extends BaseFuture implements FutureRowCount { private final CallableQueryCount call; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLogger.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLogger.java index 53bd01f94..1ab789158 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLogger.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLogger.java @@ -16,7 +16,7 @@ public abstract class QueryPlanLogger { abstract SpiDbQueryPlan collectPlan(Connection conn, SpiQueryPlan plan, BindCapture bind); - SpiDbQueryPlan readQueryPlan(SpiQueryPlan plan, BindCapture bind, ResultSet rset) throws SQLException { + final SpiDbQueryPlan readQueryPlan(SpiQueryPlan plan, BindCapture bind, ResultSet rset) throws SQLException { StringBuilder sb = new StringBuilder(); for (int i = 1; i <= rset.getMetaData().getColumnCount(); i++) { sb.append(rset.getMetaData().getColumnLabel(i)).append("\t"); @@ -27,11 +27,11 @@ public abstract class QueryPlanLogger { return createPlan(plan, bind.toString(), sb.toString()); } - SpiDbQueryPlan createPlan(SpiQueryPlan plan, String bind, String planString) { + final SpiDbQueryPlan createPlan(SpiQueryPlan plan, String bind, String planString) { return plan.createMeta(bind, planString); } - SpiDbQueryPlan readQueryPlanBasic(SpiQueryPlan plan, BindCapture bind, ResultSet rset) throws SQLException { + final SpiDbQueryPlan readQueryPlanBasic(SpiQueryPlan plan, BindCapture bind, ResultSet rset) throws SQLException { StringBuilder sb = new StringBuilder(); readPlanData(sb, rset); return createPlan(plan, bind.toString(), sb.toString().trim()); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerExplain.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerExplain.java index 6f89c138a..6319967d9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerExplain.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerExplain.java @@ -12,7 +12,7 @@ import java.sql.SQLException; /** * A QueryPlanLogger that prefixes "EXPLAIN " to the query. This works for Postgres, H2 and MySql. */ -public class QueryPlanLoggerExplain extends QueryPlanLogger { +public final class QueryPlanLoggerExplain extends QueryPlanLogger { @Override public SpiDbQueryPlan collectPlan(Connection conn, SpiQueryPlan plan, BindCapture bind) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerOracle.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerOracle.java index 2d2f4702f..d4ccd81bb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerOracle.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerOracle.java @@ -16,7 +16,7 @@ import java.sql.Statement; * * @author Roland Praml, FOCONIS AG */ -public class QueryPlanLoggerOracle extends QueryPlanLogger { +public final class QueryPlanLoggerOracle extends QueryPlanLogger { @Override public SpiDbQueryPlan collectPlan(Connection conn, SpiQueryPlan plan, BindCapture bind) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerPostgres.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerPostgres.java index 596f33bc0..f52654ba5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerPostgres.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerPostgres.java @@ -12,7 +12,7 @@ import java.sql.SQLException; /** * A QueryPlanLogger for Postgres that prefixes "EXPLAIN ANALYZE" to the query. */ -public class QueryPlanLoggerPostgres extends QueryPlanLogger { +public final class QueryPlanLoggerPostgres extends QueryPlanLogger { @Override public SpiDbQueryPlan collectPlan(Connection conn, SpiQueryPlan plan, BindCapture bind) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerSqlServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerSqlServer.java index 6657448e2..c71072084 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerSqlServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/QueryPlanLoggerSqlServer.java @@ -16,7 +16,7 @@ import java.sql.Statement; * * @author Roland Praml, FOCONIS AG */ -public class QueryPlanLoggerSqlServer extends QueryPlanLogger { +public final class QueryPlanLoggerSqlServer extends QueryPlanLogger { @Override public SpiDbQueryPlan collectPlan(Connection conn, SpiQueryPlan plan, BindCapture bind) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/RawSqlQueryPlanKey.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/RawSqlQueryPlanKey.java index 2a3fce499..b24a57e04 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/RawSqlQueryPlanKey.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/RawSqlQueryPlanKey.java @@ -7,7 +7,7 @@ import java.util.Objects; /** * QueryPlanKey for RawSql queries. */ -class RawSqlQueryPlanKey implements CQueryPlanKey { +final class RawSqlQueryPlanKey implements CQueryPlanKey { private final String sql; private final boolean rawSql; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlBeanLoad.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlBeanLoad.java index 83c7b2936..cdeb345c0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlBeanLoad.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlBeanLoad.java @@ -13,7 +13,7 @@ import io.ebeaninternal.server.deploy.DbReadContext; * partial objects. *

*/ -public class SqlBeanLoad { +public final class SqlBeanLoad { private final DbReadContext ctx; private final EntityBean bean; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTree.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTree.java index 5f548fd59..27e35c365 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTree.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTree.java @@ -10,7 +10,7 @@ import java.util.Set; /** * Represents the SELECT clause part of the SQL query. */ -class SqlTree { +final class SqlTree { private final SqlTreeNode rootNode; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeAlias.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeAlias.java index 27ec943b4..9d46d07c3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeAlias.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeAlias.java @@ -12,7 +12,7 @@ import java.util.TreeSet; /** * Special Map of the logical property joins to table alias. */ -class SqlTreeAlias { +final class SqlTreeAlias { private final SpiQuery.TemporalMode temporalMode; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java index 65fa4f7f8..43e3a0215 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeBuilder.java @@ -30,44 +30,28 @@ public final class SqlTreeBuilder { private static final Logger logger = LoggerFactory.getLogger(SqlTreeBuilder.class); private final SpiQuery query; - private final STreeType desc; - private final OrmQueryDetail queryDetail; - private final CQueryPredicates predicates; - private final boolean subQuery; - private final boolean distinctOnPlatform; /** * Property if resultSet contains master and detail rows. */ private STreePropertyAssocMany manyProperty; - private final SqlTreeAlias alias; - private final DefaultDbSqlContext ctx; - private final HashSet selectIncludes = new HashSet<>(); - private final ManyWhereJoins manyWhereJoins; - private final TableJoin includeJoin; - private final boolean rawSql; - /** * rawNoId true if the RawSql does not include the @Id property */ private final boolean rawNoId; - private final boolean disableLazyLoad; - private final SpiQuery.TemporalMode temporalMode; - private SqlTreeNode rootNode; - private boolean sqlDistinct; /** @@ -103,9 +87,9 @@ public final class SqlTreeBuilder { this.temporalMode = SpiQuery.TemporalMode.of(query); this.disableLazyLoad = query.isDisableLazyLoading(); this.subQuery = Type.SQ_EXISTS == query.getType() - || Type.SQ_IN == query.getType() - || Type.ID_LIST == query.getType() - || Type.DELETE == query.getType() + || Type.SQ_IN == query.getType() + || Type.ID_LIST == query.getType() + || Type.DELETE == query.getType() || query.isCountDistinct(); this.includeJoin = query.getM2mIncludeJoin(); this.manyWhereJoins = query.getManyWhereJoins(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeBean.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeBean.java index 1c9bff694..83c8362a9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeBean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeBean.java @@ -28,58 +28,40 @@ class SqlTreeNodeBean implements SqlTreeNode { private static final SqlTreeNode[] NO_CHILDREN = new SqlTreeNode[0]; final STreeType desc; - final IdBinder idBinder; - /** * The children which will be other SelectBean or SelectProxyBean. */ final SqlTreeNode[] children; - /** * Set to true if this is a partial object fetch. */ private final boolean partialObject; - private final STreeProperty[] properties; - /** * Extra where clause added by Where annotation on associated many. */ private final String extraWhere; - private final STreePropertyAssoc nodeBeanProp; - /** * False if report bean and has no id property. */ final boolean readId; private final boolean readIdNormal; - private final boolean disableLazyLoad; - private final InheritInfo inheritInfo; - final String prefix; - private final Map pathMap; - final STreePropertyAssocMany lazyLoadParent; - private final SpiQuery.TemporalMode temporalMode; - private final boolean temporalVersions; - private final IdBinder lazyLoadParentIdBinder; - String baseTableAlias; - /** * Table alias set if this bean node includes a join to a intersection * table and that table has history support. */ private boolean intersectionAsOfTableAlias; - private final boolean aggregation; /** @@ -131,12 +113,12 @@ class SqlTreeNodeBean implements SqlTreeNode { } @Override - public boolean isSingleProperty() { + public final boolean isSingleProperty() { return properties != null && properties.length == 1 && children.length == 0; } @Override - public ScalarDataReader getSingleAttributeReader() { + public final ScalarDataReader getSingleAttributeReader() { if (properties == null || properties.length == 0) { // if we have no property ask first children (in a distinct select with join) if (children.length == 0) { @@ -172,7 +154,7 @@ class SqlTreeNodeBean implements SqlTreeNode { } @Override - public void buildRawSqlSelectChain(List selectChain) { + public final void buildRawSqlSelectChain(List selectChain) { if (readId) { if (inheritInfo != null) { // discriminator column always proceeds id column @@ -194,7 +176,7 @@ class SqlTreeNodeBean implements SqlTreeNode { /** * Load that takes into account inheritance. */ - private class LoadInherit extends Load { + private final class LoadInherit extends Load { private LoadInherit(DbReadContext ctx, EntityBean parentBean) { super(ctx, parentBean); @@ -437,7 +419,7 @@ class SqlTreeNodeBean implements SqlTreeNode { /** * Perform the load returning the loaded bean. */ - EntityBean perform() throws SQLException { + final EntityBean perform() throws SQLException { initialise(); if (isLazyLoadManyRoot()) { return getContextBean(); @@ -451,7 +433,7 @@ class SqlTreeNodeBean implements SqlTreeNode { * Return true if this bean was already in the context. If already in the * context we need to check if it is already contained in the collection. */ - boolean isContextBean() { + final boolean isContextBean() { return localBean == null; } } @@ -467,12 +449,12 @@ class SqlTreeNodeBean implements SqlTreeNode { /** * Create the loader with or without inheritance. */ - Load createLoad(DbReadContext ctx, EntityBean parentBean) { + final Load createLoad(DbReadContext ctx, EntityBean parentBean) { return (inheritInfo != null) ? new LoadInherit(ctx, parentBean) : new Load(ctx, parentBean); } @Override - public void appendGroupBy(DbSqlContext ctx, boolean subQuery) { + public final void appendGroupBy(DbSqlContext ctx, boolean subQuery) { ctx.pushJoin(prefix); ctx.pushTableAlias(prefix); if (lazyLoadParent != null) { @@ -507,7 +489,7 @@ class SqlTreeNodeBean implements SqlTreeNode { * Append the property columns to the buffer. */ @Override - public void appendSelect(DbSqlContext ctx, boolean subQuery) { + public final void appendSelect(DbSqlContext ctx, boolean subQuery) { ctx.pushJoin(prefix); ctx.pushTableAlias(prefix); if (temporalVersions) { @@ -532,7 +514,7 @@ class SqlTreeNodeBean implements SqlTreeNode { } @Override - public boolean isAggregation() { + public final boolean isAggregation() { if (aggregation) { return true; } @@ -553,14 +535,14 @@ class SqlTreeNodeBean implements SqlTreeNode { } } - void appendSelectId(DbSqlContext ctx, STreeProperty prop) { + final void appendSelectId(DbSqlContext ctx, STreeProperty prop) { if (prop != null) { prop.appendSelect(ctx, false); } } @Override - public void appendWhere(DbSqlContext ctx) { + public final void appendWhere(DbSqlContext ctx) { // Only apply inheritance to root node as any join will already have the inheritance join include - see TableJoin if (inheritInfo != null && nodeBeanProp == null) { if (!inheritInfo.isRoot()) { @@ -618,7 +600,7 @@ class SqlTreeNodeBean implements SqlTreeNode { } @Override - public void addSoftDeletePredicate(SpiQuery query) { + public final void addSoftDeletePredicate(SpiQuery query) { if (desc.isSoftDelete()) { query.addSoftDeletePredicate(desc.getSoftDeletePredicate(baseTableAlias)); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeExtraJoin.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeExtraJoin.java index 1b31ee08c..ae5e5bf3f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeExtraJoin.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeExtraJoin.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.query; -import io.ebean.Version; import io.ebean.bean.EntityBean; import io.ebean.core.type.ScalarType; import io.ebean.util.SplitName; @@ -22,7 +21,7 @@ import java.util.Set; * etc in this case we must add an extra join. *

*/ -class SqlTreeNodeExtraJoin implements SqlTreeNode { +final class SqlTreeNodeExtraJoin implements SqlTreeNode { private final STreePropertyAssoc assocBeanProperty; private final SpiQuery.TemporalMode temporalMode; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeFormulaWhereJoin.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeFormulaWhereJoin.java index 20a3037da..faf1ce4f1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeFormulaWhereJoin.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeFormulaWhereJoin.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.query; -import io.ebean.Version; import io.ebean.bean.EntityBean; import io.ebean.core.type.ScalarType; import io.ebeaninternal.api.SpiQuery; @@ -13,7 +12,7 @@ import java.util.Set; /** * Join to Many (or child of a many) to support where clause predicates on many properties. */ -class SqlTreeNodeFormulaWhereJoin implements SqlTreeNode { +final class SqlTreeNodeFormulaWhereJoin implements SqlTreeNode { private final STreeProperty nodeBeanProp; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeManyWhereJoin.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeManyWhereJoin.java index c537c4bf7..c3f534a25 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeManyWhereJoin.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeManyWhereJoin.java @@ -1,6 +1,5 @@ package io.ebeaninternal.server.query; -import io.ebean.Version; import io.ebean.bean.EntityBean; import io.ebean.core.type.ScalarType; import io.ebean.util.SplitName; @@ -15,21 +14,16 @@ import java.util.Set; /** * Join to Many (or child of a many) to support where clause predicates on many properties. */ -class SqlTreeNodeManyWhereJoin implements SqlTreeNode { +final class SqlTreeNodeManyWhereJoin implements SqlTreeNode { private final String parentPrefix; - private final String prefix; - private final STreePropertyAssoc nodeBeanProp; - private final STreeType target; - /** * The many where join which is either INNER or OUTER. */ private final SqlJoinType manyJoinType; - private final boolean softDelete; SqlTreeNodeManyWhereJoin(String prefix, STreePropertyAssoc prop, SqlJoinType manyJoinType, SpiQuery.TemporalMode temporalMode) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeRoot.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeRoot.java index e52477cf1..a58c51cc5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeRoot.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeNodeRoot.java @@ -18,9 +18,7 @@ import java.util.Set; final class SqlTreeNodeRoot extends SqlTreeNodeBean implements SqlTreeRoot { private final TableJoin includeJoin; - private final boolean sqlDistinct; - private final String baseTable; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeProperties.java index f46ca8088..489341789 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeProperties.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/query/SqlTreeProperties.java @@ -10,24 +10,16 @@ import java.util.List; /** * The select properties for a node in the SqlTree. */ -public class SqlTreeProperties { +public final class SqlTreeProperties { - /** - * The bean properties in order. - */ private final List propsList = new ArrayList<>(); - /** * Maintain a list of property names to detect embedded bean additions. */ private final LinkedHashSet propNames = new LinkedHashSet<>(); - private boolean allProperties; - private boolean aggregationManyToOne; - private boolean aggregation; - private String aggregationPath; SqlTreeProperties() { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/AbstractQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/AbstractQuery.java index 62fd3cdf0..4ad835188 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/AbstractQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/AbstractQuery.java @@ -15,14 +15,12 @@ import io.ebeaninternal.api.SpiCancelableQuery; */ public class AbstractQuery implements SpiCancelableQuery { + private final ReentrantLock lock = new ReentrantLock(); private boolean cancelled; - private CancelableQuery cancelableQuery; - private final ReentrantLock lock = new ReentrantLock(); - @Override - public void cancel() { + public final void cancel() { lock.lock(); try { if (!cancelled) { @@ -37,14 +35,14 @@ public class AbstractQuery implements SpiCancelableQuery { } @Override - public void checkCancelled() { + public final void checkCancelled() { if (cancelled) { throw new PersistenceException("Query was cancelled"); } } @Override - public void setCancelableQuery(CancelableQuery cancelableQuery) { + public final void setCancelableQuery(CancelableQuery cancelableQuery) { lock.lock(); try { checkCancelled(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java index c2cb02198..4a72c0057 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultDtoQuery.java @@ -21,35 +21,20 @@ import java.util.stream.Stream; /** * Default implementation of DtoQuery. */ -public class DefaultDtoQuery extends AbstractQuery implements SpiDtoQuery { +public final class DefaultDtoQuery extends AbstractQuery implements SpiDtoQuery { private final SpiEbeanServer server; - private final DtoBeanDescriptor descriptor; - private final SpiQuery ormQuery; - private String sql; - private int firstRow; - private int maxRows; - private int timeout; - private int bufferFetchSizeHint; - private boolean relaxedMode; - private String label; - private ProfileLocation profileLocation; - - /** - * Bind parameters when using the query language. - */ private final BindParams bindParams = new BindParams(); - private Transaction transaction; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index b5aeec323..65ba6b9a3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -32,77 +32,47 @@ import java.util.stream.Stream; /** * Default implementation of an Object Relational query. */ -public class DefaultOrmQuery extends AbstractQuery implements SpiQuery { +public final class DefaultOrmQuery extends AbstractQuery implements SpiQuery { private static final String DEFAULT_QUERY_NAME = "default"; - private static final FetchConfig FETCH_CACHE = FetchConfig.ofCache(); - private static final FetchConfig FETCH_QUERY = FetchConfig.ofQuery(); - private static final FetchConfig FETCH_LAZY = FetchConfig.ofLazy(); private final Class beanType; - private final ExpressionFactory expressionFactory; - private final BeanDescriptor rootBeanDescriptor; - private BeanDescriptor beanDescriptor; - private SpiEbeanServer server; - private SpiTransaction transaction; - /** * For lazy loading of ManyToMany we need to add a join to the intersection table. This is that * join to the intersection table. */ private TableJoin m2mIncludeJoin; - private ProfilingListener profilingListener; - private Type type; - private String label; - private Mode mode = Mode.NORMAL; - private Object tenantId; - /** * Holds query in structured form. */ private OrmQueryDetail detail; - private int maxRows; - private int firstRow; - - /** - * Set to true to disable lazy loading on the object graph returned. - */ private boolean disableLazyLoading; - /** * Lazy loading batch size (can override server wide default). */ private int lazyLoadBatchSize; - private OrderBy orderBy; - private String loadMode; - private String loadDescription; - private String generatedSql; - private String lazyLoadProperty; - private String lazyLoadManyPath; - private boolean allowLoadErrors; - /** * Flag set for report/DTO beans when we may choose to explicitly include the Id property. */ @@ -141,97 +111,55 @@ public class DefaultOrmQuery extends AbstractQuery implements SpiQuery { * Bind parameters when using the query language. */ private BindParams bindParams; - private DefaultExpressionList textExpressions; - private DefaultExpressionList whereExpressions; - private DefaultExpressionList havingExpressions; - private boolean asOfBaseTable; - private int asOfTableCount; /** * Set for flashback style 'as of' query. */ private Timestamp asOf; - private TemporalMode temporalMode = TemporalMode.CURRENT; - private Timestamp versionsStart; private Timestamp versionsEnd; - private List softDeletePredicates; - private boolean disableReadAudit; - private int bufferFetchSizeHint; - private boolean usageProfiling = true; - private CacheMode useBeanCache = CacheMode.AUTO; - private CacheMode useQueryCache = CacheMode.OFF; - private Boolean readOnly; - private PersistenceContextScope persistenceContextScope; /** * Allow for explicit on off or null for default. */ private Boolean autoTune; - private LockWait forUpdate; private LockType lockType; - private boolean singleAttribute; - private CountDistinctOrder countDistinctOrder; - - /** - * Set to true if this query has been tuned by autoTune. - */ private boolean autoTuned; - - /** - * Root table alias. For {@link Query#alias(String)} command. - */ private String rootTableAlias; - private String baseTable; - /** * The node of the bean or collection that fired lazy loading. Not null if profiling is on and * this query is for lazy loading. Used to hook back a lazy loading query to the "original" query * point. */ private ObjectGraphNode parentNode; - private BeanPropertyAssocMany lazyLoadForParentsProperty; - - /** - * Hash of final query after AutoTune tuning. - */ private CQueryPlanKey queryPlanKey; - private PersistenceContext persistenceContext; - private ManyWhereJoins manyWhereJoins; - private SpiRawSql rawSql; - private boolean useDocStore; - private String docIndexName; - private OrmUpdateProperties updateProperties; - private String nativeSql; - private boolean orderById; - private ProfileLocation profileLocation; public DefaultOrmQuery(BeanDescriptor desc, SpiEbeanServer server, ExpressionFactory expressionFactory) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmUpdate.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmUpdate.java index 0381df322..88b84fc2f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmUpdate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmUpdate.java @@ -14,41 +14,21 @@ public final class DefaultOrmUpdate implements SpiUpdate, Serializable { private static final long serialVersionUID = -8791423602246515438L; - private transient final EbeanServer server; - private final Class beanType; - - /** - * The name of the update. - */ private final String name; - private String label; - - /** - * The parameters used to bind to the sql. - */ private final BindParams bindParams = new BindParams(); - - /** - * The sql update or delete statement. - */ private final String updateStatement; - /** * Automatically detect the table being modified by this sql. This will * register this information so that eBean invalidates cached objects if * required. */ private boolean notifyCache = true; - private int timeout; - private String generatedSql; - private final String baseTable; - private final OrmUpdateType type; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java index 6afe54a1f..879d1bdaf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultRelationalQuery.java @@ -17,27 +17,17 @@ import java.util.function.Predicate; /** * Default implementation of SQuery - SQL Query. */ -public class DefaultRelationalQuery extends AbstractQuery implements SpiSqlQuery { +public final class DefaultRelationalQuery extends AbstractQuery implements SpiSqlQuery { private static final long serialVersionUID = -1098305779779591068L; private final transient SpiEbeanServer server; - private final String query; - private String label; - private int firstRow; - private int maxRows; - private int timeout; - private int bufferFetchSizeHint; - - /** - * Bind parameters when using the query language. - */ private final BindParams bindParams = new BindParams(); /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultUpdateQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultUpdateQuery.java index 897424b8a..c9ed9ca11 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultUpdateQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultUpdateQuery.java @@ -10,7 +10,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Default implementation of UpdateQuery. */ -public class DefaultUpdateQuery implements UpdateQuery { +public final class DefaultUpdateQuery implements UpdateQuery { private final OrmUpdateProperties values = new OrmUpdateProperties(); private final DefaultOrmQuery query; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/NaturalKeyBindParam.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/NaturalKeyBindParam.java index 3655a3ef4..301ec4ef3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/NaturalKeyBindParam.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/NaturalKeyBindParam.java @@ -1,9 +1,8 @@ package io.ebeaninternal.server.querydefn; -public class NaturalKeyBindParam { +public final class NaturalKeyBindParam { private final String name; - private final Object value; public NaturalKeyBindParam(String name, Object value) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/ONamedParam.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/ONamedParam.java index e63526063..f2585a708 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/ONamedParam.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/ONamedParam.java @@ -7,10 +7,9 @@ import javax.persistence.PersistenceException; /** * Named parameter used as placeholder in expressions created by EQL language parsing. */ -class ONamedParam implements SpiNamedParam { +final class ONamedParam implements SpiNamedParam { private final String name; - private Object value; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetail.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetail.java index 2fabfdd79..90f4cbac1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetail.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetail.java @@ -21,7 +21,7 @@ import java.util.*; * Tuning a query is a matter of replacing an instance of this class with one that has been tuned * with select() and join() set. */ -public class OrmQueryDetail implements Serializable { +public final class OrmQueryDetail implements Serializable { private static final long serialVersionUID = -2510486880141461807L; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetailParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetailParser.java index 0314b55b6..744f70ebf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetailParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryDetailParser.java @@ -9,10 +9,9 @@ import javax.persistence.PersistenceException; * replace the OrmQueryDetail leaving the attributes unchanged. *

*/ -public class OrmQueryDetailParser { +public final class OrmQueryDetailParser { private final OrmQueryDetail detail = new OrmQueryDetail(); - private final SimpleTextParser parser; public OrmQueryDetailParser(String oql) { @@ -20,7 +19,6 @@ public class OrmQueryDetailParser { } public OrmQueryDetail parse() throws PersistenceException { - if (parser.isEmpty()) return detail; parser.nextWord(); @@ -68,7 +66,6 @@ public class OrmQueryDetailParser { } private OrmQueryProperties readFindFetch() { - boolean readAlias = false; String props = null; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryLimitRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryLimitRequest.java index 99354bf71..a36889557 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryLimitRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryLimitRequest.java @@ -4,16 +4,12 @@ import io.ebean.config.dbplatform.DatabasePlatform; import io.ebean.config.dbplatform.SqlLimitRequest; import io.ebeaninternal.api.SpiQuery; -public class OrmQueryLimitRequest implements SqlLimitRequest { +public final class OrmQueryLimitRequest implements SqlLimitRequest { private final SpiQuery ormQuery; - private final DatabasePlatform dbPlatform; - private final String sql; - private final String sqlOrderBy; - private final boolean distinct; public OrmQueryLimitRequest(String sql, String sqlOrderBy, SpiQuery ormQuery, DatabasePlatform dbPlatform, boolean distinct) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKey.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKey.java index 3a9ac8e33..3ce478c92 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKey.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryPlanKey.java @@ -8,7 +8,7 @@ import java.util.Objects; /** * Query plan key for ORM queries. */ -class OrmQueryPlanKey implements CQueryPlanKey { +final class OrmQueryPlanKey implements CQueryPlanKey { private final SpiRawSql.Key rawSqlKey; private final int maxRows; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java index 0a8b51465..98864e744 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQueryProperties.java @@ -23,7 +23,7 @@ import java.util.Set; /** * Represents the Properties of an Object Relational query. */ -public class OrmQueryProperties implements Serializable { +public final class OrmQueryProperties implements Serializable { private static final long serialVersionUID = -8785582703966455658L; @@ -35,30 +35,24 @@ public class OrmQueryProperties implements Serializable { private final Set included; private final FetchConfig fetchConfig; private final boolean cache; - /** * Flag set when this fetch path needs to be a query join. */ private boolean markForQueryJoin; - /** * Included bean joins. */ private Set includedBeanJoin; - /** * Add these properties to the select so that the foreign key columns are included in the query. */ private Set secondaryQueryJoins; - private List secondaryChildren; - /** * OrderBy properties that where on the main query but moved here as they relate to this (query join). */ @SuppressWarnings("rawtypes") private OrderBy orderBy; - /** * A filter that can be applied to the fetch of this path in the object graph. */ diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQuerySecondary.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQuerySecondary.java index 738566597..4d2a94b1c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQuerySecondary.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmQuerySecondary.java @@ -7,10 +7,9 @@ import java.util.List; /** * The secondary query paths for 'query joins' and 'lazy loading'. */ -class OrmQuerySecondary implements SpiQuerySecondary { +final class OrmQuerySecondary implements SpiQuerySecondary { private final List queryJoins; - private final List lazyJoins; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmUpdateProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmUpdateProperties.java index 930e653f4..5a9d5b392 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmUpdateProperties.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/OrmUpdateProperties.java @@ -13,10 +13,9 @@ import java.util.Set; /** * Set properties for a UpdateQuery. */ -public class OrmUpdateProperties { +public final class OrmUpdateProperties { private static final NullValue NULL_VALUE = new NullValue(); - private static final NoneValue NONE_VALUE = new NoneValue(); /** @@ -41,7 +40,7 @@ public class OrmUpdateProperties { /** * Set property to null. */ - private static class NullValue extends Value { + private static final class NullValue extends Value { @Override public String bindClause() { return "=null"; @@ -51,7 +50,7 @@ public class OrmUpdateProperties { /** * Set property to a simple value. */ - private static class SimpleValue extends Value { + private static final class SimpleValue extends Value { final Object value; final ScalarType scalarType; @@ -85,7 +84,7 @@ public class OrmUpdateProperties { /** * Set using an expression with no bind value. */ - private static class NoneValue extends Value { + private static final class NoneValue extends Value { @Override public String bindClause() { return ""; @@ -95,7 +94,7 @@ public class OrmUpdateProperties { /** * Set using an expression with many bind values. */ - private static class RawArrayValue extends Value { + private static final class RawArrayValue extends Value { final Object[] bindValues; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/SimpleTextParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/SimpleTextParser.java index 849234e8c..0072c8eec 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/SimpleTextParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/SimpleTextParser.java @@ -1,11 +1,10 @@ package io.ebeaninternal.server.querydefn; -public class SimpleTextParser { +public final class SimpleTextParser { private final String oql; private final char[] chars; private final int eof; - private int pos; private String word; private String lowerWord; From f3b0e34b673c15feb5ca0c83ea5d665f5c5e3ca1 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 09:16:31 +1200 Subject: [PATCH 14/68] #2315 - Refactor internals - make more classes final in transaction packages --- .../properties/BeanPropertiesReader.java | 3 +- .../server/transaction/BeanPersistIds.java | 4 +- .../transaction/BulkEventListenerMap.java | 6 +- .../transaction/DefaultProfileHandler.java | 2 +- .../transaction/DefaultProfileStream.java | 2 +- .../DefaultTransactionScopeManager.java | 11 +- .../transaction/DocStoreOnlyTransaction.java | 2 +- .../DocStoreTransactionManager.java | 2 +- .../ExternalTransactionScopeManager.java | 2 +- .../ImplicitReadOnlyTransaction.java | 2 +- .../server/transaction/JdbcTransaction.java | 169 +++++++++--------- .../server/transaction/JtaTransaction.java | 2 +- .../transaction/JtaTransactionManager.java | 2 +- .../server/transaction/NoTransaction.java | 4 +- .../transaction/NoopProfileHandler.java | 2 +- .../server/transaction/RemoteTableMod.java | 2 +- .../transaction/RemoteTransactionEvent.java | 2 +- .../transaction/SavepointTransaction.java | 2 +- .../server/transaction/TChangeLogHolder.java | 2 +- .../server/transaction/TableModState.java | 2 +- .../transaction/TransactionFactory.java | 5 +- .../transaction/TransactionFactoryBasic.java | 3 +- .../TransactionFactoryBasicWithRead.java | 5 +- .../TransactionFactoryBuilder.java | 2 +- .../transaction/TransactionFactoryTenant.java | 3 +- .../TransactionFactoryTenantWithRead.java | 5 +- .../transaction/TransactionManager.java | 90 +++++----- .../TransactionManagerOptions.java | 2 +- .../transaction/TransactionProfile.java | 2 +- 29 files changed, 161 insertions(+), 181 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/properties/BeanPropertiesReader.java b/ebean-core/src/main/java/io/ebeaninternal/server/properties/BeanPropertiesReader.java index e00fdf497..a283a42ea 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/properties/BeanPropertiesReader.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/properties/BeanPropertiesReader.java @@ -8,10 +8,9 @@ import java.util.Map; /** * Determines the properties on a given bean. */ -public class BeanPropertiesReader { +public final class BeanPropertiesReader { private final Map propertyIndexMap = new HashMap<>(); - private final String[] props; public BeanPropertiesReader(Class clazz) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/BeanPersistIds.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/BeanPersistIds.java index bb1690bfe..280f3c28f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/BeanPersistIds.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/BeanPersistIds.java @@ -28,12 +28,10 @@ import java.util.List; * size of data sent around the network. *

*/ -public class BeanPersistIds implements BinaryWritable { +public final class BeanPersistIds implements BinaryWritable { private final BeanDescriptor beanDescriptor; - private final String descriptorId; - /** * The ids to invalidate from the cache (updates and deletes). */ diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/BulkEventListenerMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/BulkEventListenerMap.java index 86a6428b7..bcc91909f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/BulkEventListenerMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/BulkEventListenerMap.java @@ -8,12 +8,11 @@ import java.util.HashMap; import java.util.List; import java.util.Set; -public class BulkEventListenerMap { +public final class BulkEventListenerMap { private final HashMap map = new HashMap<>(); public BulkEventListenerMap(List listeners) { - if (listeners != null) { for (BulkTableEventListener l : listeners) { Set tables = l.registeredTables(); @@ -29,7 +28,6 @@ public class BulkEventListenerMap { } public void process(BulkTableEvent event) { - Entry entry = map.get(event.getTableName()); if (entry != null) { entry.process(event); @@ -42,7 +40,7 @@ public class BulkEventListenerMap { entry.add(l); } - private static class Entry { + private static final class Entry { final List listeners = new ArrayList<>(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultProfileHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultProfileHandler.java index 38f5446d2..177e4bc15 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultProfileHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultProfileHandler.java @@ -38,7 +38,7 @@ import static java.time.temporal.ChronoField.YEAR; *

* Uses a sleep backoff on the single threaded consumer that reads the profiles and writes them to files. */ -public class DefaultProfileHandler implements SpiProfileHandler, Plugin { +public final class DefaultProfileHandler implements SpiProfileHandler, Plugin { private static final Logger log = LoggerFactory.getLogger(DefaultProfileHandler.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultProfileStream.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultProfileStream.java index bc2913137..38c38e3d5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultProfileStream.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultProfileStream.java @@ -5,7 +5,7 @@ import io.ebean.ProfileLocation; /** * Default transaction profiling event collection. */ -public class DefaultProfileStream implements ProfileStream { +public final class DefaultProfileStream implements ProfileStream { private final long startNanos; private final StringBuilder buffer; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultTransactionScopeManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultTransactionScopeManager.java index 0cabba365..2ad93d490 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultTransactionScopeManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DefaultTransactionScopeManager.java @@ -9,7 +9,6 @@ import javax.persistence.PersistenceException; */ public class DefaultTransactionScopeManager extends TransactionScopeManager { - private final ThreadLocal local = new ThreadLocal<>(); @Override @@ -18,7 +17,7 @@ public class DefaultTransactionScopeManager extends TransactionScopeManager { } @Override - public SpiTransaction getInScope() { + public final SpiTransaction getInScope() { return local.get(); } @@ -33,7 +32,7 @@ public class DefaultTransactionScopeManager extends TransactionScopeManager { } @Override - public void replace(SpiTransaction trans) { + public final void replace(SpiTransaction trans) { if (trans == null) { throw new IllegalStateException("Setting a null transaction?"); } @@ -41,7 +40,7 @@ public class DefaultTransactionScopeManager extends TransactionScopeManager { } @Override - public void set(SpiTransaction trans) { + public final void set(SpiTransaction trans) { if (trans == null) { throw new IllegalStateException("Setting a null transaction?"); } @@ -50,13 +49,13 @@ public class DefaultTransactionScopeManager extends TransactionScopeManager { } @Override - public void clear() { + public final void clear() { checkForActiveTransaction(); local.remove(); } @Override - public void clearExternal() { + public final void clearExternal() { local.remove(); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DocStoreOnlyTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DocStoreOnlyTransaction.java index 43fb216a5..0165fb1e8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DocStoreOnlyTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DocStoreOnlyTransaction.java @@ -5,7 +5,7 @@ import java.sql.Connection; /** * Document store only transaction. */ -public class DocStoreOnlyTransaction extends JdbcTransaction { +public final class DocStoreOnlyTransaction extends JdbcTransaction { /** * Create a new DocStore only Transaction. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DocStoreTransactionManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DocStoreTransactionManager.java index 364e46841..d23476c25 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DocStoreTransactionManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/DocStoreTransactionManager.java @@ -9,7 +9,7 @@ import java.sql.Connection; *

* There is no underlying JDBC DataSource etc */ -public class DocStoreTransactionManager extends TransactionManager { +public final class DocStoreTransactionManager extends TransactionManager { /** * Create the TransactionManager diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/ExternalTransactionScopeManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/ExternalTransactionScopeManager.java index b033e277b..6922e2129 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/ExternalTransactionScopeManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/ExternalTransactionScopeManager.java @@ -6,7 +6,7 @@ import io.ebeaninternal.api.SpiTransaction; /** * A TransactionScopeManager aware of external transaction managers. */ -public class ExternalTransactionScopeManager extends DefaultTransactionScopeManager { +public final class ExternalTransactionScopeManager extends DefaultTransactionScopeManager { private final ExternalTransactionManager externalManager; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/ImplicitReadOnlyTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/ImplicitReadOnlyTransaction.java index e4e36e337..cbb4f7618 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/ImplicitReadOnlyTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/ImplicitReadOnlyTransaction.java @@ -27,7 +27,7 @@ import java.util.Map; * persisting features are attempted to be used - which is not expected). *

*/ -class ImplicitReadOnlyTransaction implements SpiTransaction, TxnProfileEventCodes { +final class ImplicitReadOnlyTransaction implements SpiTransaction, TxnProfileEventCodes { private static final Logger logger = LoggerFactory.getLogger(ImplicitReadOnlyTransaction.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java index f61f03699..d271d1c04 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JdbcTransaction.java @@ -219,56 +219,56 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void setLabel(String label) { + public final void setLabel(String label) { this.label = label; } @Override - public String getLabel() { + public final String getLabel() { return label; } @Override - public long getStartNanoTime() { + public final long getStartNanoTime() { return startNanos; } @Override - public long profileOffset() { + public final long profileOffset() { return (profileStream == null) ? 0 : profileStream.offset(); } @Override - public void profileEvent(SpiProfileTransactionEvent event) { + public final void profileEvent(SpiProfileTransactionEvent event) { if (profileStream != null) { event.profile(); } } @Override - public void setProfileStream(ProfileStream profileStream) { + public final void setProfileStream(ProfileStream profileStream) { this.profileStream = profileStream; } @Override - public ProfileStream profileStream() { + public final ProfileStream profileStream() { return profileStream; } @Override - public void setProfileLocation(ProfileLocation profileLocation) { + public final void setProfileLocation(ProfileLocation profileLocation) { this.profileLocation = profileLocation; } @Override - public ProfileLocation getProfileLocation() { + public final ProfileLocation getProfileLocation() { return profileLocation; } /** * Overridden in AutoCommitJdbcTransaction as that expects to run/operate with autocommit true. */ - void checkAutoCommit(Connection connection) throws SQLException { + final void checkAutoCommit(Connection connection) throws SQLException { if (connection != null) { this.autoCommit = connection.getAutoCommit(); if (this.autoCommit) { @@ -289,34 +289,34 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void setAutoPersistUpdates(boolean autoPersistUpdates) { + public final void setAutoPersistUpdates(boolean autoPersistUpdates) { this.autoPersistUpdates = autoPersistUpdates; this.batchMode = true; } @Override - public boolean isAutoPersistUpdates() { + public final boolean isAutoPersistUpdates() { return autoPersistUpdates; } @Override - public boolean isSkipCacheExplicit() { + public final boolean isSkipCacheExplicit() { return (skipCache != null && !skipCache); } @Override - public boolean isSkipCache() { + public final boolean isSkipCache() { if (skipCache != null) return skipCache; return skipCacheAfterWrite && !queryOnly; } @Override - public void setSkipCache(boolean skipCache) { + public final void setSkipCache(boolean skipCache) { this.skipCache = skipCache; } @Override - public String getLogPrefix() { + public final String getLogPrefix() { return logPrefix; } @@ -330,7 +330,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void addBeanChange(BeanChange beanChange) { + public final void addBeanChange(BeanChange beanChange) { if (changeLogHolder == null) { changeLogHolder = new TChangeLogHolder(this, 100); } @@ -338,14 +338,14 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void sendChangeLog(ChangeSet changesRequest) { + public final void sendChangeLog(ChangeSet changesRequest) { if (manager != null) { manager.sendChangeLog(changesRequest); } } @Override - public void register(TransactionCallback callback) { + public final void register(TransactionCallback callback) { if (callbackList == null) { callbackList = new ArrayList<>(4); } @@ -391,27 +391,27 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public int getDocStoreBatchSize() { + public final int getDocStoreBatchSize() { return docStoreBatchSize; } @Override - public void setDocStoreBatchSize(int docStoreBatchSize) { + public final void setDocStoreBatchSize(int docStoreBatchSize) { this.docStoreBatchSize = docStoreBatchSize; } @Override - public DocStoreMode getDocStoreMode() { + public final DocStoreMode getDocStoreMode() { return docStoreMode; } @Override - public void setDocStoreMode(DocStoreMode docStoreMode) { + public final void setDocStoreMode(DocStoreMode docStoreMode) { this.docStoreMode = docStoreMode; } @Override - public void registerDeferred(PersistDeferredRelationship derived) { + public final void registerDeferred(PersistDeferredRelationship derived) { if (deferredList == null) { deferredList = new ArrayList<>(); } @@ -425,7 +425,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { *

*/ @Override - public void registerDeleteBean(Integer persistingBean) { + public final void registerDeleteBean(Integer persistingBean) { if (deletingBeansHash == null) { deletingBeansHash = new HashSet<>(); } @@ -436,7 +436,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Return true if this is a bean that has already been saved/deleted. */ @Override - public boolean isRegisteredDeleteBean(Integer persistingBean) { + public final boolean isRegisteredDeleteBean(Integer persistingBean) { return deletingBeansHash != null && deletingBeansHash.contains(persistingBean); } @@ -444,7 +444,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Unregister the persisted beans (when persisting at the top level). */ @Override - public void unregisterBeans() { + public final void unregisterBeans() { persistingBeans.clear(); } @@ -453,7 +453,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * register the bean if it is not already. */ @Override - public boolean isRegisteredBean(Object bean) { + public final boolean isRegisteredBean(Object bean) { if (persistingBeans == null) { persistingBeans = new IdentityHashMap<>(); } @@ -465,7 +465,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * This is to stop m2m intersection management via both directions of a m2m. */ @Override - public boolean isSaveAssocManyIntersection(String intersectionTable, String beanName) { + public final boolean isSaveAssocManyIntersection(String intersectionTable, String beanName) { if (m2mIntersectionSave == null) { // first attempt so yes allow this m2m intersection direction m2mIntersectionSave = new HashMap<>(); @@ -500,7 +500,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * @param diff the amount to add or subtract from the depth. */ @Override - public void depth(int diff) { + public final void depth(int diff) { depth += diff; } @@ -508,12 +508,12 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Return the current depth. */ @Override - public int depth() { + public final int depth() { return depth; } @Override - public void markNotQueryOnly() { + public final void markNotQueryOnly() { this.queryOnly = false; } @@ -543,17 +543,17 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void setUpdateAllLoadedProperties(boolean updateAllLoadedProperties) { + public final void setUpdateAllLoadedProperties(boolean updateAllLoadedProperties) { this.updateAllLoadedProperties = updateAllLoadedProperties; } @Override - public Boolean isUpdateAllLoadedProperties() { + public final Boolean isUpdateAllLoadedProperties() { return updateAllLoadedProperties; } @Override - public void setBatchMode(boolean batchMode) { + public final void setBatchMode(boolean batchMode) { if (!isActive()) { throw new IllegalStateException(illegalStateMessage); } @@ -561,12 +561,12 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public boolean isBatchMode() { + public final boolean isBatchMode() { return batchMode; } @Override - public void setBatchOnCascade(boolean batchMode) { + public final void setBatchOnCascade(boolean batchMode) { if (!isActive()) { throw new IllegalStateException(illegalStateMessage); } @@ -574,17 +574,17 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public boolean isBatchOnCascade() { + public final boolean isBatchOnCascade() { return batchOnCascadeMode; } @Override - public Boolean getBatchGetGeneratedKeys() { + public final Boolean getBatchGetGeneratedKeys() { return batchGetGeneratedKeys; } @Override - public void setGetGeneratedKeys(boolean getGeneratedKeys) { + public final void setGetGeneratedKeys(boolean getGeneratedKeys) { this.batchGetGeneratedKeys = getGeneratedKeys; if (batchControl != null) { batchControl.setGetGeneratedKeys(getGeneratedKeys); @@ -592,7 +592,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void setFlushOnMixed(boolean batchFlushOnMixed) { + public final void setFlushOnMixed(boolean batchFlushOnMixed) { this.batchFlushOnMixed = batchFlushOnMixed; if (batchControl != null) { batchControl.setBatchFlushOnMixed(batchFlushOnMixed); @@ -606,12 +606,12 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { *

*/ @Override - public int getBatchSize() { + public final int getBatchSize() { return batchSize; } @Override - public void setBatchSize(int batchSize) { + public final void setBatchSize(int batchSize) { this.batchSize = batchSize; if (batchControl != null) { batchControl.setBatchSize(batchSize); @@ -619,12 +619,12 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public boolean isFlushOnQuery() { + public final boolean isFlushOnQuery() { return batchFlushOnQuery; } @Override - public void setFlushOnQuery(boolean batchFlushOnQuery) { + public final void setFlushOnQuery(boolean batchFlushOnQuery) { this.batchFlushOnQuery = batchFlushOnQuery; } @@ -633,12 +633,12 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * this request should be executed immediately. */ @Override - public boolean isBatchThisRequest() { + public final boolean isBatchThisRequest() { return batchMode; } @Override - public void checkBatchEscalationOnCollection() { + public final void checkBatchEscalationOnCollection() { if (!batchMode && batchOnCascadeMode) { batchMode = true; batchOnCascadeSet = true; @@ -646,7 +646,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void flushBatchOnCollection() { + public final void flushBatchOnCollection() { if (batchOnCascadeSet) { batchFlushReset(); // restore the previous batch mode of NONE @@ -675,7 +675,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public PersistenceException translate(String message, SQLException cause) { + public final PersistenceException translate(String message, SQLException cause) { if (manager != null) { return manager.translate(message, cause); } @@ -686,14 +686,14 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Flush after completing persist cascade. */ @Override - public void flushBatchOnCascade() { + public final void flushBatchOnCascade() { batchFlushReset(); // restore the previous batch mode batchMode = oldBatchMode; } @Override - public void flushBatchOnRollback() { + public final void flushBatchOnRollback() { internalBatchClear(); // restore the previous batch mode batchMode = oldBatchMode; @@ -709,13 +709,11 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public boolean checkBatchEscalationOnCascade(PersistRequestBean request) { - + public final boolean checkBatchEscalationOnCascade(PersistRequestBean request) { if (batchMode) { // already batching (at top level) return false; } - if (batchOnCascadeMode) { // escalate up to batch mode for this request (and cascade) oldBatchMode = false; @@ -725,13 +723,12 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { request.setSkipBatchForTopLevel(); return true; } - batchFlushReset(); return false; } @Override - public BatchControl getBatchControl() { + public final BatchControl getBatchControl() { return batchControl; } @@ -740,7 +737,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * on the first persist request. */ @Override - public void setBatchControl(BatchControl batchControl) { + public final void setBatchControl(BatchControl batchControl) { queryOnly = false; this.batchControl = batchControl; // in case these parameters have already been set @@ -763,7 +760,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { *

*/ @Override - public void flush() { + public final void flush() { if (!isActive()) { throw new IllegalStateException(illegalStateMessage); } @@ -771,7 +768,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void flushBatch() { + public final void flushBatch() { flush(); } @@ -797,7 +794,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Return the persistence context associated with this transaction. */ @Override - public SpiPersistenceContext getPersistenceContext() { + public final SpiPersistenceContext getPersistenceContext() { return persistenceContext; } @@ -809,7 +806,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * then set it back later to a second transaction. */ @Override - public void setPersistenceContext(SpiPersistenceContext context) { + public final void setPersistenceContext(SpiPersistenceContext context) { if (!isActive()) { throw new IllegalStateException(illegalStateMessage); } @@ -820,7 +817,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Return the underlying TransactionEvent. */ @Override - public TransactionEvent getEvent() { + public final TransactionEvent getEvent() { queryOnly = false; if (event == null) { event = new TransactionEvent(); @@ -832,27 +829,27 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Return true if this was an explicitly created transaction. */ @Override - public boolean isExplicit() { + public final boolean isExplicit() { return explicit; } @Override - public boolean isLogSql() { + public final boolean isLogSql() { return logSql; } @Override - public boolean isLogSummary() { + public final boolean isLogSummary() { return logSummary; } @Override - public void logSql(String msg) { + public final void logSql(String msg) { manager.log().sql().debug(Str.add(logPrefix, msg)); } @Override - public void logSummary(String msg) { + public final void logSummary(String msg) { manager.log().sum().debug(Str.add(logPrefix, msg)); } @@ -860,17 +857,17 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Return the transaction id. */ @Override - public String getId() { + public final String getId() { return id; } @Override - public void setTenantId(Object tenantId) { + public final void setTenantId(Object tenantId) { this.tenantId = tenantId; } @Override - public Object getTenantId() { + public final Object getTenantId() { return tenantId; } @@ -926,7 +923,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { /** * Notify the transaction manager. */ - void notifyCommit() { + final void notifyCommit() { if (manager != null) { if (queryOnly) { manager.notifyOfQueryOnly(this); @@ -1000,13 +997,13 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void postCommit() { + public final void postCommit() { firePostCommit(); notifyCommit(); } @Override - public void preCommit() { + public final void preCommit() { internalBatchFlush(); firePreCommit(); } @@ -1081,7 +1078,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { /** * Notify the transaction manager. */ - void notifyRollback(Throwable cause) { + final void notifyRollback(Throwable cause) { if (manager != null) { if (queryOnly) { manager.notifyOfQueryOnly(this); @@ -1095,7 +1092,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Return true if the transaction is marked as rollback only. */ @Override - public boolean isRollbackOnly() { + public final boolean isRollbackOnly() { return rollbackOnly; } @@ -1103,17 +1100,17 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Mark the transaction as rollback only. */ @Override - public void setRollbackOnly() { + public final void setRollbackOnly() { this.rollbackOnly = true; } @Override - public boolean isNestedUseSavepoint() { + public final boolean isNestedUseSavepoint() { return nestedUseSavepoint; } @Override - public void setNestedUseSavepoint() { + public final void setNestedUseSavepoint() { this.nestedUseSavepoint = true; } @@ -1159,7 +1156,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void postRollback(Throwable cause) { + public final void postRollback(Throwable cause) { firePostRollback(); notifyRollback(cause); } @@ -1183,22 +1180,22 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public boolean isPersistCascade() { + public final boolean isPersistCascade() { return persistCascade; } @Override - public void setPersistCascade(boolean persistCascade) { + public final void setPersistCascade(boolean persistCascade) { this.persistCascade = persistCascade; } @Override - public void addModification(String tableName, boolean inserts, boolean updates, boolean deletes) { + public final void addModification(String tableName, boolean inserts, boolean updates, boolean deletes) { getEvent().add(tableName, inserts, updates, deletes); } @Override - public DocStoreTransaction getDocStoreTransaction() { + public final DocStoreTransaction getDocStoreTransaction() { if (docStoreTxn == null) { queryOnly = false; docStoreTxn = manager.createDocStoreTransaction(docStoreBatchSize); @@ -1207,7 +1204,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public void putUserObject(String name, Object value) { + public final void putUserObject(String name, Object value) { if (userObjects == null) { userObjects = new HashMap<>(); } @@ -1215,7 +1212,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { } @Override - public Object getUserObject(String name) { + public final Object getUserObject(String name) { if (userObjects == null) { return null; } @@ -1226,7 +1223,7 @@ class JdbcTransaction implements SpiTransaction, TxnProfileEventCodes { * Alias for end(), which enables this class to be used in try-with-resources. */ @Override - public void close() { + public final void close() { end(); } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JtaTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JtaTransaction.java index e0c33a193..cfd76c581 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JtaTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JtaTransaction.java @@ -9,7 +9,7 @@ import java.sql.SQLException; /** * Jta based transaction. */ -public class JtaTransaction extends JdbcTransaction { +public final class JtaTransaction extends JdbcTransaction { private final UserTransaction userTransaction; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JtaTransactionManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JtaTransactionManager.java index cc9e8cdc8..2168a287b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JtaTransactionManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/JtaTransactionManager.java @@ -18,7 +18,7 @@ import javax.transaction.UserTransaction; /** * Hook into external JTA transaction manager. */ -public class JtaTransactionManager implements ExternalTransactionManager { +public final class JtaTransactionManager implements ExternalTransactionManager { private static final Logger logger = LoggerFactory.getLogger(JtaTransactionManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/NoTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/NoTransaction.java index d435e93fd..0ed17e94f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/NoTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/NoTransaction.java @@ -19,9 +19,9 @@ import java.sql.Connection; import java.sql.SQLException; /** - * Place holder for use with SUPPORTS and NEVER transactional when there really isn't a transaction. + * Placeholder for use with SUPPORTS and NEVER transactional when there really isn't a transaction. */ -class NoTransaction implements SpiTransaction { +final class NoTransaction implements SpiTransaction { static final NoTransaction INSTANCE = new NoTransaction(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/NoopProfileHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/NoopProfileHandler.java index 636ad7c6a..a994987c5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/NoopProfileHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/NoopProfileHandler.java @@ -6,7 +6,7 @@ import io.ebeaninternal.api.SpiProfileHandler; /** * A do nothing SpiProfileHandler. */ -public class NoopProfileHandler implements SpiProfileHandler { +public final class NoopProfileHandler implements SpiProfileHandler { @Override public void collectTransactionProfile(TransactionProfile transactionProfile) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/RemoteTableMod.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/RemoteTableMod.java index f963aad71..a3b97ec2a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/RemoteTableMod.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/RemoteTableMod.java @@ -9,7 +9,7 @@ import java.io.IOException; import java.util.LinkedHashSet; import java.util.Set; -public class RemoteTableMod implements BinaryWritable { +public final class RemoteTableMod implements BinaryWritable { private final long timestamp; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/RemoteTransactionEvent.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/RemoteTransactionEvent.java index 50480c043..8a9041eef 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/RemoteTransactionEvent.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/RemoteTransactionEvent.java @@ -14,7 +14,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -public class RemoteTransactionEvent implements Runnable, BinaryWritable { +public final class RemoteTransactionEvent implements Runnable, BinaryWritable { private final List beanPersistList = new ArrayList<>(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/SavepointTransaction.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/SavepointTransaction.java index dafaa05b5..aa4bc978e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/SavepointTransaction.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/SavepointTransaction.java @@ -12,7 +12,7 @@ import java.sql.Savepoint; /** * A nested transaction that represents a Savepoint. */ -class SavepointTransaction extends SpiTransactionProxy { +final class SavepointTransaction extends SpiTransactionProxy { private static final int STATE_COMMITTED = 1; private static final int STATE_ROLLED_BACK = 2; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TChangeLogHolder.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TChangeLogHolder.java index 961247bd9..b2a7269d0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TChangeLogHolder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TChangeLogHolder.java @@ -11,7 +11,7 @@ import java.util.UUID; * Holder of the changes handling the case when we send the changes * prior to commit or rollback as we hit the allowed 'batch size'. */ -public class TChangeLogHolder { +public final class TChangeLogHolder { /** * The owning transaction. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TableModState.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TableModState.java index e16fa6d81..d3793a8e4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TableModState.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TableModState.java @@ -17,7 +17,7 @@ import java.util.concurrent.ConcurrentHashMap; * This information is used to validate entries in the L2 query caches. *

*/ -public class TableModState implements QueryCacheEntryValidate, ServerCacheNotify { +public final class TableModState implements QueryCacheEntryValidate, ServerCacheNotify { private static final Logger log = LoggerFactory.getLogger("io.ebean.cache.TABLEMOD"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactory.java index 9a8684982..687741654 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactory.java @@ -33,8 +33,7 @@ abstract class TransactionFactory { /** * Set the Transaction Isolation level if required. */ - SpiTransaction setIsolationLevel(SpiTransaction t, boolean explicit, int isolationLevel) { - + final SpiTransaction setIsolationLevel(SpiTransaction t, boolean explicit, int isolationLevel) { if (isolationLevel > -1) { Connection connection = t.getConnection(); try { @@ -44,11 +43,9 @@ abstract class TransactionFactory { throw new PersistenceException(e); } } - if (explicit && manager.log().txn().isTrace()) { manager.log().txn().trace(t.getLogPrefix() + "Begin"); } - return t; } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBasic.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBasic.java index 1fd2f9e69..a190cf64e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBasic.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBasic.java @@ -22,7 +22,6 @@ class TransactionFactoryBasic extends TransactionFactory { @Override public SpiTransaction createReadOnlyTransaction(Object tenantId) { - Connection connection = null; try { connection = dataSource.getConnection(); @@ -37,7 +36,7 @@ class TransactionFactoryBasic extends TransactionFactory { } @Override - public SpiTransaction createTransaction(boolean explicit, int isolationLevel) { + public final SpiTransaction createTransaction(boolean explicit, int isolationLevel) { Connection connection = null; try { connection = dataSource.getConnection(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBasicWithRead.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBasicWithRead.java index c942ed31e..d84361480 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBasicWithRead.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBasicWithRead.java @@ -16,7 +16,7 @@ import java.sql.SQLException; * - Skip explicit commit (as we use AutoCommit instead) *

*/ -class TransactionFactoryBasicWithRead extends TransactionFactoryBasic { +final class TransactionFactoryBasicWithRead extends TransactionFactoryBasic { private final DataSource readOnlyDataSource; @@ -27,16 +27,13 @@ class TransactionFactoryBasicWithRead extends TransactionFactoryBasic { @Override public SpiTransaction createReadOnlyTransaction(Object tenantId) { - Connection connection = null; try { connection = readOnlyDataSource.getConnection(); return new ImplicitReadOnlyTransaction(manager, connection); - } catch (PersistenceException ex) { JdbcClose.close(connection); throw ex; - } catch (SQLException ex) { throw new PersistenceException(ex); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBuilder.java index 590fcec63..b2b7e875f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryBuilder.java @@ -5,7 +5,7 @@ import io.ebean.config.CurrentTenantProvider; /** * Helper to build and return the appropriate TransactionFactory. */ -class TransactionFactoryBuilder { +final class TransactionFactoryBuilder { /** * Build and return based on multi-tenancy and read only DataSource. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenant.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenant.java index fd70cd47a..64c9c9511 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenant.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenant.java @@ -29,8 +29,7 @@ class TransactionFactoryTenant extends TransactionFactory { } @Override - public SpiTransaction createTransaction(boolean explicit, int isolationLevel) { - + public final SpiTransaction createTransaction(boolean explicit, int isolationLevel) { SpiTransaction t = create(explicit, null); return setIsolationLevel(t, explicit, isolationLevel); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenantWithRead.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenantWithRead.java index 1aa190770..cb9f8c9c4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenantWithRead.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionFactoryTenantWithRead.java @@ -16,7 +16,7 @@ import java.sql.SQLException; * - Skip explicit commit (as we use AutoCommit instead) *

*/ -class TransactionFactoryTenantWithRead extends TransactionFactoryTenant { +final class TransactionFactoryTenantWithRead extends TransactionFactoryTenant { TransactionFactoryTenantWithRead(TransactionManager manager, DataSourceSupplier dataSourceSupplier, CurrentTenantProvider tenantProvider) { super(manager, dataSourceSupplier, tenantProvider); @@ -24,7 +24,6 @@ class TransactionFactoryTenantWithRead extends TransactionFactoryTenant { @Override public SpiTransaction createReadOnlyTransaction(Object tenantId) { - Connection connection = null; try { if (tenantId == null) { @@ -33,11 +32,9 @@ class TransactionFactoryTenantWithRead extends TransactionFactoryTenant { } connection = dataSourceSupplier.getReadOnlyConnection(tenantId); return new ImplicitReadOnlyTransaction(manager, connection, tenantId); - } catch (PersistenceException ex) { JdbcClose.close(connection); throw ex; - } catch (SQLException ex) { throw new PersistenceException(ex); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManager.java index e3fbdd425..37a53f680 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManager.java @@ -201,14 +201,14 @@ public class TransactionManager implements SpiTransactionManager { /** * Return the scope manager. */ - public TransactionScopeManager scope() { + public final TransactionScopeManager scope() { return scopeManager; } /** * Set the transaction onto the scope. */ - public void set(SpiTransaction txn) { + public final void set(SpiTransaction txn) { scopeManager.set(txn); } @@ -216,7 +216,7 @@ public class TransactionManager implements SpiTransactionManager { * Return the current active transaction. */ @Override - public SpiTransaction getActive() { + public final SpiTransaction getActive() { return scopeManager.getActive(); } @@ -230,18 +230,18 @@ public class TransactionManager implements SpiTransactionManager { /** * Return the current transaction from thread local scope. Note that it may be inactive. */ - public SpiTransaction getInScope() { + public final SpiTransaction getInScope() { return scopeManager.getInScope(); } /** * Translate the SQLException into a specific exception if possible based on the DB platform. */ - public PersistenceException translate(String message, SQLException cause) { + public final PersistenceException translate(String message, SQLException cause) { return databasePlatform.translate(message, cause); } - public void shutdown(boolean shutdownDataSource, boolean deregisterDriver) { + public final void shutdown(boolean shutdownDataSource, boolean deregisterDriver) { if (shutdownDataSource) { dataSourceSupplier.shutdown(deregisterDriver); } @@ -250,39 +250,39 @@ public class TransactionManager implements SpiTransactionManager { /** * Return true if the DB platform supports SavepointId(). */ - boolean isSupportsSavepointId() { + final boolean isSupportsSavepointId() { return supportsSavepointId; } - boolean isDocStoreActive() { + final boolean isDocStoreActive() { return docStoreActive; } - DocStoreTransaction createDocStoreTransaction(int docStoreBatchSize) { + final DocStoreTransaction createDocStoreTransaction(int docStoreBatchSize) { return docStoreUpdateProcessor.createTransaction(docStoreBatchSize); } - boolean isSkipCacheAfterWrite() { + final boolean isSkipCacheAfterWrite() { return skipCacheAfterWrite; } - public BeanDescriptorManager getBeanDescriptorManager() { + public final BeanDescriptorManager getBeanDescriptorManager() { return beanDescriptorManager; } - BulkEventListenerMap getBulkEventListenerMap() { + final BulkEventListenerMap getBulkEventListenerMap() { return bulkEventListenerMap; } - boolean isAutoPersistUpdates() { + final boolean isAutoPersistUpdates() { return autoPersistUpdates; } - boolean isPersistBatch() { + final boolean isPersistBatch() { return persistBatch; } - boolean isPersistBatchOnCascade() { + final boolean isPersistBatchOnCascade() { return persistBatchOnCascade; } @@ -296,7 +296,7 @@ public class TransactionManager implements SpiTransactionManager { * If the Isolation level is higher (say SERIALIZABLE) then Connections used * just for queries do need to be committed or rollback after the query. */ - OnQueryOnly initOnQueryOnly(OnQueryOnly dbPlatformOnQueryOnly) { + final OnQueryOnly initOnQueryOnly(OnQueryOnly dbPlatformOnQueryOnly) { // first check for a system property 'override' String systemPropertyValue = System.getProperty("ebean.transaction.onqueryonly"); if (systemPropertyValue != null) { @@ -306,29 +306,29 @@ public class TransactionManager implements SpiTransactionManager { return dbPlatformOnQueryOnly == null ? OnQueryOnly.COMMIT : dbPlatformOnQueryOnly; } - public String getServerName() { + public final String getServerName() { return serverName; } @Override - public Connection getQueryPlanConnection() throws SQLException { + public final Connection getQueryPlanConnection() throws SQLException { return dataSourceSupplier.getConnection(null); } @Override - public DataSource getDataSource() { + public final DataSource getDataSource() { return dataSourceSupplier.getDataSource(); } @Override - public DataSource getReadOnlyDataSource() { + public final DataSource getReadOnlyDataSource() { return dataSourceSupplier.getReadOnlyDataSource(); } /** * Defines the type of behavior to use when closing a transaction that was used to query data only. */ - OnQueryOnly getOnQueryOnly() { + final OnQueryOnly getOnQueryOnly() { return onQueryOnly; } @@ -390,7 +390,7 @@ public class TransactionManager implements SpiTransactionManager { * Process a local rolled back transaction. */ @Override - public void notifyOfRollback(SpiTransaction transaction, Throwable cause) { + public final void notifyOfRollback(SpiTransaction transaction, Throwable cause) { try { if (txnLogger.isDebug()) { String msg = transaction.getLogPrefix() + "Rollback"; @@ -408,7 +408,7 @@ public class TransactionManager implements SpiTransactionManager { * Query only transaction in read committed isolation. */ @Override - public void notifyOfQueryOnly(SpiTransaction transaction) { + public final void notifyOfQueryOnly(SpiTransaction transaction) { // Nothing that interesting here if (txnLogger.isTrace()) { txnLogger.trace(transaction.getLogPrefix() + "Commit - query only"); @@ -442,7 +442,7 @@ public class TransactionManager implements SpiTransactionManager { * Process a local committed transaction. */ @Override - public void notifyOfCommit(SpiTransaction transaction) { + public final void notifyOfCommit(SpiTransaction transaction) { try { if (txnLogger.isDebug()) { txnLogger.debug(transaction.getLogPrefix() + "Commit"); @@ -455,7 +455,7 @@ public class TransactionManager implements SpiTransactionManager { } } - public void externalModification(TransactionEventTable tableEvent) { + public final void externalModification(TransactionEventTable tableEvent) { SpiTransaction t = getActive(); if (t != null) { t.getEvent().add(tableEvent); @@ -476,7 +476,7 @@ public class TransactionManager implements SpiTransactionManager { /** * Notify local BeanPersistListeners etc of events from another server in the cluster. */ - public void remoteTransactionEvent(RemoteTransactionEvent remoteEvent) { + public final void remoteTransactionEvent(RemoteTransactionEvent remoteEvent) { if (clusterLogger.isDebugEnabled()) { clusterLogger.debug("processing {}", remoteEvent); } @@ -506,14 +506,14 @@ public class TransactionManager implements SpiTransactionManager { /** * Process the docstore / ElasticSearch updates. */ - void processDocStoreUpdates(DocStoreUpdates docStoreUpdates, int bulkBatchSize) { + final void processDocStoreUpdates(DocStoreUpdates docStoreUpdates, int bulkBatchSize) { docStoreUpdateProcessor.process(docStoreUpdates, bulkBatchSize); } /** * Prepare and then send/log the changeSet. */ - void sendChangeLog(final ChangeSet changeSet) { + final void sendChangeLog(final ChangeSet changeSet) { // can set userId, userIpAddress & userContext if desired if (changeLogPrepare.prepare(changeSet)) { if (changeLogAsync) { @@ -528,7 +528,7 @@ public class TransactionManager implements SpiTransactionManager { /** * Invalidate the query caches for entities based on views. */ - void processTouchedTables(Set touchedTables) { + final void processTouchedTables(Set touchedTables) { tableModState.touch(touchedTables); if (viewInvalidation) { beanDescriptorManager.processViewInvalidation(touchedTables); @@ -539,32 +539,32 @@ public class TransactionManager implements SpiTransactionManager { /** * Process the collected transaction profiling information. */ - void profileCollect(TransactionProfile transactionProfile) { + final void profileCollect(TransactionProfile transactionProfile) { profileHandler.collectTransactionProfile(transactionProfile); } /** * Collect execution time for an explicit transaction. */ - void collectMetric(long exeMicros) { + final void collectMetric(long exeMicros) { txnMain.add(exeMicros); } /** * Collect execution time for implicit read only transaction. */ - void collectMetricReadOnly(long exeMicros) { + final void collectMetricReadOnly(long exeMicros) { txnReadOnly.add(exeMicros); } /** * Collect execution time for a named transaction. */ - void collectMetricNamed(long exeMicros, String label) { + final void collectMetricNamed(long exeMicros, String label) { txnNamed.add(label, exeMicros); } - public void visitMetrics(MetricVisitor visitor) { + public final void visitMetrics(MetricVisitor visitor) { txnMain.visit(visitor); txnReadOnly.visit(visitor); txnNamed.visit(visitor); @@ -576,14 +576,14 @@ public class TransactionManager implements SpiTransactionManager { /** * Clear an implicit transaction from thread local scope. */ - public void clearServerTransaction() { + public final void clearServerTransaction() { scopeManager.clear(); } /** * Begin an implicit transaction. */ - public SpiTransaction beginServerTransaction() { + public final SpiTransaction beginServerTransaction() { SpiTransaction t = createTransaction(false, -1); scopeManager.set(t); return t; @@ -592,7 +592,7 @@ public class TransactionManager implements SpiTransactionManager { /** * Exit a scoped transaction (that can be inactive - already committed etc). */ - public void exitScopedTransaction(Object returnOrThrowable, int opCode) { + public final void exitScopedTransaction(Object returnOrThrowable, int opCode) { SpiTransaction st = getInScope(); if (st instanceof ScopedTransaction) { // can be null for Supports as that can start as a 'No Transaction' and then @@ -602,7 +602,7 @@ public class TransactionManager implements SpiTransactionManager { } @Override - public void externalRemoveTransaction() { + public final void externalRemoveTransaction() { scopeManager.clearExternal(); } @@ -611,7 +611,7 @@ public class TransactionManager implements SpiTransactionManager { * (e.g. Spring managed transaction). */ @Override - public ScopedTransaction externalBeginTransaction(SpiTransaction transaction, TxScope txScope) { + public final ScopedTransaction externalBeginTransaction(SpiTransaction transaction, TxScope txScope) { ScopedTransaction scopedTxn = new ScopedTransaction(scopeManager); scopedTxn.push(new ScopeTrans(rollbackOnChecked, false, transaction, txScope)); scopeManager.replace(scopedTxn); @@ -621,7 +621,7 @@ public class TransactionManager implements SpiTransactionManager { /** * Begin a scoped transaction. */ - public ScopedTransaction beginScopedTransaction(TxScope txScope) { + public final ScopedTransaction beginScopedTransaction(TxScope txScope) { txScope = initTxScope(txScope); ScopedTransaction txnContainer = getActiveScoped(); @@ -742,26 +742,26 @@ public class TransactionManager implements SpiTransactionManager { /** * Return true if Transaction debug is on. */ - public boolean isTxnDebug() { + public final boolean isTxnDebug() { return txnDebug; } - public SpiLogManager log() { + public final SpiLogManager log() { return logManager; } - public boolean isLogSql() { + public final boolean isLogSql() { return logManager.sql().isDebug(); } - public boolean isLogSummary() { + public final boolean isLogSummary() { return logManager.sum().isDebug(); } /** * Experimental - find dirty beans in the persistence context and persist them. */ - public void flushTransparent(SpiPersistenceContext persistenceContext, SpiTransaction transaction) { + public final void flushTransparent(SpiPersistenceContext persistenceContext, SpiTransaction transaction) { List dirtyBeans = persistenceContext.dirtyBeans(beanDescriptorManager); if (!dirtyBeans.isEmpty()) { server.updateAll(dirtyBeans, transaction); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManagerOptions.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManagerOptions.java index 5d0c87794..b7d54b37e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManagerOptions.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionManagerOptions.java @@ -14,7 +14,7 @@ import io.ebeanservice.docstore.api.DocStoreUpdateProcessor; /** * Objects supplied for constructing the TransactionManager. */ -public class TransactionManagerOptions { +public final class TransactionManagerOptions { final SpiServer server; final boolean notifyL2CacheInForeground; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionProfile.java b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionProfile.java index 2c7006eba..cb749cd54 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionProfile.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/transaction/TransactionProfile.java @@ -5,7 +5,7 @@ import io.ebean.ProfileLocation; /** * Profiling information for a single transaction that has completed. */ -public class TransactionProfile { +public final class TransactionProfile { private final ProfileLocation location; private final String label; From 885ba0fdd2f4b19d628587a7380c491154a15358 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 09:18:31 +1200 Subject: [PATCH 15/68] Set autoReleaseAfterClose true --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index dc3426809..1cebb8daa 100644 --- a/pom.xml +++ b/pom.xml @@ -38,7 +38,7 @@ - false + true 7.0 2.12.1 From 3c6d17c9a5fe6aeae200bf5784d9a75dbc80bd9e Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 09:23:11 +1200 Subject: [PATCH 16/68] [maven-release-plugin] prepare release ebean-parent-12.11.1 --- ebean-api/pom.xml | 2 +- ebean-autotune/pom.xml | 6 +++--- ebean-bom/pom.xml | 30 +++++++++++++++--------------- ebean-core-type/pom.xml | 4 ++-- ebean-core/pom.xml | 10 +++++----- ebean-ddl-generator/pom.xml | 6 +++--- ebean-externalmapping-api/pom.xml | 2 +- ebean-externalmapping-xml/pom.xml | 10 +++++----- 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 | 4 ++-- querybean-generator/pom.xml | 2 +- 16 files changed, 63 insertions(+), 63 deletions(-) diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml index 72fbfe3ae..0e84c71c9 100644 --- a/ebean-api/pom.xml +++ b/ebean-api/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean api diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml index c47f7fe08..5bedfbd89 100644 --- a/ebean-autotune/pom.xml +++ b/ebean-autotune/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 @@ -14,7 +14,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-12.8.0 + ebean-parent-12.11.1 ebean autotune @@ -26,7 +26,7 @@ io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 provided diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml index fff064c90..9b651c8a2 100644 --- a/ebean-bom/pom.xml +++ b/ebean-bom/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean bom @@ -81,88 +81,88 @@ io.ebean ebean - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-api - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-core-type - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-ddl-generator - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-externalmapping-api - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-externalmapping-xml - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-autotune - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-querybean - 12.11.1-SNAPSHOT + 12.11.1 io.ebean querybean-generator - 12.11.1-SNAPSHOT + 12.11.1 provided io.ebean kotlin-querybean-generator - 12.11.1-SNAPSHOT + 12.11.1 provided io.ebean ebean-test - 12.11.1-SNAPSHOT + 12.11.1 test io.ebean ebean-postgis - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-redis - 12.11.1-SNAPSHOT + 12.11.1 diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml index d8eab3e25..e0d543cfc 100644 --- a/ebean-core-type/pom.xml +++ b/ebean-core-type/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean-core-type @@ -16,7 +16,7 @@ io.ebean ebean-api - 12.11.1-SNAPSHOT + 12.11.1 diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml index 5324aec82..cface4b9e 100644 --- a/ebean-core/pom.xml +++ b/ebean-core/pom.xml @@ -3,7 +3,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean-core @@ -15,7 +15,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-12.8.0 + ebean-parent-12.11.1 @@ -78,19 +78,19 @@ io.ebean ebean-api - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-core-type - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-externalmapping-api - 12.11.1-SNAPSHOT + 12.11.1 diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml index f83a8b02e..2e9b2347b 100644 --- a/ebean-ddl-generator/pom.xml +++ b/ebean-ddl-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean ddl generation @@ -28,14 +28,14 @@ io.ebean ebean-core-type - 12.11.1-SNAPSHOT + 12.11.1 provided io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 provided diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml index e506a6841..23962062a 100644 --- a/ebean-externalmapping-api/pom.xml +++ b/ebean-externalmapping-api/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean external mapping api diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml index d0226a553..821436b6b 100644 --- a/ebean-externalmapping-xml/pom.xml +++ b/ebean-externalmapping-xml/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 @@ -14,7 +14,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-12.8.0 + ebean-parent-12.11.1 ebean external mapping xml @@ -33,7 +33,7 @@ io.ebean ebean-externalmapping-api - 12.11.1-SNAPSHOT + 12.11.1 @@ -59,14 +59,14 @@ io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 test io.ebean ebean-ddl-generator - 12.11.1-SNAPSHOT + 12.11.1 test diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml index 98b44522d..eb6d6fb4c 100644 --- a/ebean-postgis/pom.xml +++ b/ebean-postgis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean postgis @@ -23,7 +23,7 @@ io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 provided @@ -74,7 +74,7 @@ io.ebean ebean-test - 12.11.1-SNAPSHOT + 12.11.1 test diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml index 059976afa..87c0c3cdf 100644 --- a/ebean-querybean/pom.xml +++ b/ebean-querybean/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean querybean @@ -17,7 +17,7 @@ io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 provided @@ -57,21 +57,21 @@ io.ebean ebean-ddl-generator - 12.11.1-SNAPSHOT + 12.11.1 test io.ebean querybean-generator - 12.11.1-SNAPSHOT + 12.11.1 test io.ebean ebean-test - 12.11.1-SNAPSHOT + 12.11.1 test diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml index 943ab6985..eb22bf8b8 100644 --- a/ebean-redis/pom.xml +++ b/ebean-redis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean-redis @@ -22,35 +22,35 @@ io.ebean ebean-api - 12.11.1-SNAPSHOT + 12.11.1 provided io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 provided io.ebean ebean-querybean - 12.11.1-SNAPSHOT + 12.11.1 test io.ebean querybean-generator - 12.11.1-SNAPSHOT + 12.11.1 test io.ebean ebean-test - 12.11.1-SNAPSHOT + 12.11.1 test diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 4b9b05272..1d6ee0b9b 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean test @@ -29,14 +29,14 @@ io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 provided io.ebean ebean-ddl-generator - 12.11.1-SNAPSHOT + 12.11.1 diff --git a/ebean/pom.xml b/ebean/pom.xml index db01d91a1..892b73af6 100644 --- a/ebean/pom.xml +++ b/ebean/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 ebean composite @@ -22,20 +22,20 @@ io.ebean ebean-api - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 io.ebean ebean-querybean - 12.11.1-SNAPSHOT + 12.11.1 diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml index 1b3f9d848..304a5e3e0 100644 --- a/kotlin-querybean-generator/pom.xml +++ b/kotlin-querybean-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 kotlin querybean generator @@ -29,7 +29,7 @@ io.ebean ebean-querybean - 12.11.1-SNAPSHOT + 12.11.1 test @@ -43,7 +43,7 @@ io.ebean ebean-core - 12.11.1-SNAPSHOT + 12.11.1 test @@ -64,7 +64,7 @@ io.ebean ebean-ddl-generator - 12.11.1-SNAPSHOT + 12.11.1 test diff --git a/pom.xml b/pom.xml index 1cebb8daa..8374733c8 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ io.ebean ebean-parent - 12.11.1-SNAPSHOT + 12.11.1 pom ebean parent @@ -18,7 +18,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-12.8.0 + ebean-parent-12.11.1 diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml index a240e3b8b..238a37f1f 100644 --- a/querybean-generator/pom.xml +++ b/querybean-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1-SNAPSHOT + 12.11.1 querybean generator From f7a0ae8b4a3c28067789ace17bfadfd4f8dab5cb Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 09:23:18 +1200 Subject: [PATCH 17/68] [maven-release-plugin] prepare for next development iteration --- ebean-api/pom.xml | 2 +- ebean-autotune/pom.xml | 6 +++--- ebean-bom/pom.xml | 30 +++++++++++++++--------------- ebean-core-type/pom.xml | 4 ++-- ebean-core/pom.xml | 10 +++++----- ebean-ddl-generator/pom.xml | 6 +++--- ebean-externalmapping-api/pom.xml | 2 +- ebean-externalmapping-xml/pom.xml | 10 +++++----- 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 | 4 ++-- querybean-generator/pom.xml | 2 +- 16 files changed, 63 insertions(+), 63 deletions(-) diff --git a/ebean-api/pom.xml b/ebean-api/pom.xml index 0e84c71c9..b6adad05d 100644 --- a/ebean-api/pom.xml +++ b/ebean-api/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean api diff --git a/ebean-autotune/pom.xml b/ebean-autotune/pom.xml index 5bedfbd89..c244053d2 100644 --- a/ebean-autotune/pom.xml +++ b/ebean-autotune/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT @@ -14,7 +14,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-12.11.1 + ebean-parent-12.8.0 ebean autotune @@ -26,7 +26,7 @@ io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT provided diff --git a/ebean-bom/pom.xml b/ebean-bom/pom.xml index 9b651c8a2..cb50c064c 100644 --- a/ebean-bom/pom.xml +++ b/ebean-bom/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean bom @@ -81,88 +81,88 @@ io.ebean ebean - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-api - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-core-type - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-ddl-generator - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-externalmapping-api - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-externalmapping-xml - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-autotune - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-querybean - 12.11.1 + 12.11.2-SNAPSHOT io.ebean querybean-generator - 12.11.1 + 12.11.2-SNAPSHOT provided io.ebean kotlin-querybean-generator - 12.11.1 + 12.11.2-SNAPSHOT provided io.ebean ebean-test - 12.11.1 + 12.11.2-SNAPSHOT test io.ebean ebean-postgis - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-redis - 12.11.1 + 12.11.2-SNAPSHOT diff --git a/ebean-core-type/pom.xml b/ebean-core-type/pom.xml index e0d543cfc..10c45ea74 100644 --- a/ebean-core-type/pom.xml +++ b/ebean-core-type/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean-core-type @@ -16,7 +16,7 @@ io.ebean ebean-api - 12.11.1 + 12.11.2-SNAPSHOT diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml index cface4b9e..bff1574de 100644 --- a/ebean-core/pom.xml +++ b/ebean-core/pom.xml @@ -3,7 +3,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean-core @@ -15,7 +15,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-12.11.1 + ebean-parent-12.8.0 @@ -78,19 +78,19 @@ io.ebean ebean-api - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-core-type - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-externalmapping-api - 12.11.1 + 12.11.2-SNAPSHOT diff --git a/ebean-ddl-generator/pom.xml b/ebean-ddl-generator/pom.xml index 2e9b2347b..cbc716413 100644 --- a/ebean-ddl-generator/pom.xml +++ b/ebean-ddl-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean ddl generation @@ -28,14 +28,14 @@ io.ebean ebean-core-type - 12.11.1 + 12.11.2-SNAPSHOT provided io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT provided diff --git a/ebean-externalmapping-api/pom.xml b/ebean-externalmapping-api/pom.xml index 23962062a..c2ea63651 100644 --- a/ebean-externalmapping-api/pom.xml +++ b/ebean-externalmapping-api/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean external mapping api diff --git a/ebean-externalmapping-xml/pom.xml b/ebean-externalmapping-xml/pom.xml index 821436b6b..b62c33793 100644 --- a/ebean-externalmapping-xml/pom.xml +++ b/ebean-externalmapping-xml/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT @@ -14,7 +14,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-12.11.1 + ebean-parent-12.8.0 ebean external mapping xml @@ -33,7 +33,7 @@ io.ebean ebean-externalmapping-api - 12.11.1 + 12.11.2-SNAPSHOT @@ -59,14 +59,14 @@ io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT test io.ebean ebean-ddl-generator - 12.11.1 + 12.11.2-SNAPSHOT test diff --git a/ebean-postgis/pom.xml b/ebean-postgis/pom.xml index eb6d6fb4c..42b18f4f1 100644 --- a/ebean-postgis/pom.xml +++ b/ebean-postgis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean postgis @@ -23,7 +23,7 @@ io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT provided @@ -74,7 +74,7 @@ io.ebean ebean-test - 12.11.1 + 12.11.2-SNAPSHOT test diff --git a/ebean-querybean/pom.xml b/ebean-querybean/pom.xml index 87c0c3cdf..a91cdb4ef 100644 --- a/ebean-querybean/pom.xml +++ b/ebean-querybean/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean querybean @@ -17,7 +17,7 @@ io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT provided @@ -57,21 +57,21 @@ io.ebean ebean-ddl-generator - 12.11.1 + 12.11.2-SNAPSHOT test io.ebean querybean-generator - 12.11.1 + 12.11.2-SNAPSHOT test io.ebean ebean-test - 12.11.1 + 12.11.2-SNAPSHOT test diff --git a/ebean-redis/pom.xml b/ebean-redis/pom.xml index eb22bf8b8..835a05812 100644 --- a/ebean-redis/pom.xml +++ b/ebean-redis/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean-redis @@ -22,35 +22,35 @@ io.ebean ebean-api - 12.11.1 + 12.11.2-SNAPSHOT provided io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT provided io.ebean ebean-querybean - 12.11.1 + 12.11.2-SNAPSHOT test io.ebean querybean-generator - 12.11.1 + 12.11.2-SNAPSHOT test io.ebean ebean-test - 12.11.1 + 12.11.2-SNAPSHOT test diff --git a/ebean-test/pom.xml b/ebean-test/pom.xml index 1d6ee0b9b..894f7f1b9 100644 --- a/ebean-test/pom.xml +++ b/ebean-test/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean test @@ -29,14 +29,14 @@ io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT provided io.ebean ebean-ddl-generator - 12.11.1 + 12.11.2-SNAPSHOT diff --git a/ebean/pom.xml b/ebean/pom.xml index 892b73af6..b17e93449 100644 --- a/ebean/pom.xml +++ b/ebean/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT ebean composite @@ -22,20 +22,20 @@ io.ebean ebean-api - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT io.ebean ebean-querybean - 12.11.1 + 12.11.2-SNAPSHOT diff --git a/kotlin-querybean-generator/pom.xml b/kotlin-querybean-generator/pom.xml index 304a5e3e0..7f76d5e09 100644 --- a/kotlin-querybean-generator/pom.xml +++ b/kotlin-querybean-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT kotlin querybean generator @@ -29,7 +29,7 @@ io.ebean ebean-querybean - 12.11.1 + 12.11.2-SNAPSHOT test @@ -43,7 +43,7 @@ io.ebean ebean-core - 12.11.1 + 12.11.2-SNAPSHOT test @@ -64,7 +64,7 @@ io.ebean ebean-ddl-generator - 12.11.1 + 12.11.2-SNAPSHOT test diff --git a/pom.xml b/pom.xml index 8374733c8..bec194354 100644 --- a/pom.xml +++ b/pom.xml @@ -9,7 +9,7 @@ io.ebean ebean-parent - 12.11.1 + 12.11.2-SNAPSHOT pom ebean parent @@ -18,7 +18,7 @@ scm:git:git@github.com:ebean-orm/ebean.git - ebean-parent-12.11.1 + ebean-parent-12.8.0 diff --git a/querybean-generator/pom.xml b/querybean-generator/pom.xml index 238a37f1f..1cf09f8be 100644 --- a/querybean-generator/pom.xml +++ b/querybean-generator/pom.xml @@ -4,7 +4,7 @@ ebean-parent io.ebean - 12.11.1 + 12.11.2-SNAPSHOT querybean generator From f3ec4a78c9d05494c8a035efc8967144090416ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jonas=20P=C3=B6hler=20=28JPo=29?= Date: Mon, 29 Mar 2021 13:23:56 +0200 Subject: [PATCH 18/68] FIX: setting json values to null was throwing a NPE when persisting --- .../server/type/ScalarTypeJsonList.java | 3 -- .../server/type/ScalarTypeJsonSet.java | 3 -- .../org/tests/json/TestJsonNullValues.java | 42 +++++++++++++++++++ 3 files changed, 42 insertions(+), 6 deletions(-) create mode 100644 ebean-core/src/test/java/org/tests/json/TestJsonNullValues.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java index 699c7ad0f..d3c700443 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java @@ -122,9 +122,6 @@ class ScalarTypeJsonList { @Override public final String formatValue(List value) { - if (value.isEmpty()) { - return "[]"; - } try { return EJson.write(value); } catch (IOException e) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java index 86a39443e..50cc7f0b3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonSet.java @@ -122,9 +122,6 @@ final class ScalarTypeJsonSet { @Override public final String formatValue(Set value) { - if (value.isEmpty()) { - return "[]"; - } try { return EJson.write(value); } catch (IOException e) { diff --git a/ebean-core/src/test/java/org/tests/json/TestJsonNullValues.java b/ebean-core/src/test/java/org/tests/json/TestJsonNullValues.java new file mode 100644 index 000000000..533116fd1 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/json/TestJsonNullValues.java @@ -0,0 +1,42 @@ +package org.tests.json; + +import io.ebean.BaseTestCase; +import io.ebean.DB; +import org.junit.Test; +import org.tests.model.json.EBasicOldValue; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TestJsonNullValues extends BaseTestCase { + + @Test + public void testSetToNull() { + EBasicOldValue bean = new EBasicOldValue(); + DB.save(bean); + bean = DB.find(EBasicOldValue.class, bean.getId()); + + bean.setStringList(null); + bean.setStringSet(null); + bean.setObjectMap(null); + bean.setLongList(null); + bean.setLongSet(null); + bean.setLongMap(null); + bean.setIntList(null); + bean.setIntSet(null); + bean.setIntMap(null); + + DB.save(bean); + bean = DB.find(EBasicOldValue.class, bean.getId()); + + assertThat(bean.getStringList()).isEmpty(); + assertThat(bean.getStringSet()).isEmpty(); + assertThat(bean.getObjectMap()).isEmpty(); + assertThat(bean.getLongList()).isEmpty(); + assertThat(bean.getLongSet()).isEmpty(); + assertThat(bean.getLongMap()).isEmpty(); + assertThat(bean.getIntList()).isEmpty(); + assertThat(bean.getIntSet()).isEmpty(); + assertThat(bean.getIntMap()).isEmpty(); + } + +} From 14262d4c2553a69cc6ff20388f7994f9494b06ff Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 22:19:15 +1200 Subject: [PATCH 19/68] #2317 - Incorrect SQL generated for @IdClass with fetch() on ToMany path --- .../java/org/tests/model/bridge/BDManyId.java | 32 ++++++++++ .../org/tests/model/bridge/BSiteUserD.java | 18 ++++-- .../tests/model/bridge/BSiteUserDMany.java | 64 +++++++++++++++++++ .../tests/model/bridge/TestIdClassScalar.java | 18 ++++++ 4 files changed, 128 insertions(+), 4 deletions(-) create mode 100644 ebean-core/src/test/java/org/tests/model/bridge/BDManyId.java create mode 100644 ebean-core/src/test/java/org/tests/model/bridge/BSiteUserDMany.java diff --git a/ebean-core/src/test/java/org/tests/model/bridge/BDManyId.java b/ebean-core/src/test/java/org/tests/model/bridge/BDManyId.java new file mode 100644 index 000000000..32e5e3af8 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/bridge/BDManyId.java @@ -0,0 +1,32 @@ +package org.tests.model.bridge; + +import javax.persistence.Embeddable; +import java.util.Objects; +import java.util.UUID; + +@Embeddable +public class BDManyId { + + private final UUID siteId; + private final UUID userId; + private final String name; + + public BDManyId(UUID siteId, UUID userId, String name) { + this.siteId = siteId; + this.userId = userId; + this.name = name; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + BDManyId bdManyId = (BDManyId) o; + return siteId.equals(bdManyId.siteId) && userId.equals(bdManyId.userId) && name.equals(bdManyId.name); + } + + @Override + public int hashCode() { + return Objects.hash(siteId, userId, name); + } +} diff --git a/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserD.java b/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserD.java index 4ff4513f4..220990cad 100644 --- a/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserD.java +++ b/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserD.java @@ -1,9 +1,7 @@ package org.tests.model.bridge; -import javax.persistence.Entity; -import javax.persistence.Id; -import javax.persistence.IdClass; -import javax.persistence.Version; +import javax.persistence.*; +import java.util.List; import java.util.UUID; @Entity @@ -18,6 +16,10 @@ public class BSiteUserD { private BAccessLevel accessLevel; + @OneToMany(cascade = CascadeType.PERSIST) + @JoinColumns({@JoinColumn(name="site_id", referencedColumnName = "site_id"), @JoinColumn(name="user_id", referencedColumnName = "user_id")}) + private List children; + @Version private long version; @@ -58,4 +60,12 @@ public class BSiteUserD { public void setVersion(long version) { this.version = version; } + + public List children() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } } diff --git a/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserDMany.java b/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserDMany.java new file mode 100644 index 000000000..4d7a84f95 --- /dev/null +++ b/ebean-core/src/test/java/org/tests/model/bridge/BSiteUserDMany.java @@ -0,0 +1,64 @@ +package org.tests.model.bridge; + +import javax.persistence.*; +import java.util.UUID; + +@Entity +@IdClass(BDManyId.class) +public class BSiteUserDMany { + + @Id + private UUID siteId; + @Id + private UUID userId; + @Id + String name; + + String many; + + @Version + long version; + + public UUID siteId() { + return siteId; + } + + public BSiteUserDMany siteId(UUID siteId) { + this.siteId = siteId; + return this; + } + + public UUID userId() { + return userId; + } + + public BSiteUserDMany userId(UUID userId) { + this.userId = userId; + return this; + } + + public String name() { + return name; + } + + public BSiteUserDMany name(String name) { + this.name = name; + return this; + } + + public long version() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } + + public String many() { + return many; + } + + public void setMany(String many) { + this.many = many; + } +} diff --git a/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java b/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java index a06c7e173..f378dbd29 100644 --- a/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java +++ b/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java @@ -41,6 +41,24 @@ public class TestIdClassScalar extends BaseTestCase { } + @Test + public void fetchMany() { + UUID siteId = UUID.randomUUID(); + UUID userId = UUID.randomUUID(); + + BSiteUserD access = new BSiteUserD(BAccessLevel.ONE, siteId, userId); + DB.save(access); + + final List found = DB.find(BSiteUserD.class) + .fetch("children") + .where().eq("siteId", siteId) + .findList(); + + assertThat(found).hasSize(1); + + DB.delete(BSiteUserD.class, new BEmbId(siteId, userId)); + } + @Test public void insertBatch() { UUID siteId = UUID.randomUUID(); From 12220d43222463e3745a03cca7ff92435b12518f Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 22:21:49 +1200 Subject: [PATCH 20/68] #2317 - Incorrect SQL generated for @IdClass with fetch() on ToMany path --- .../server/deploy/id/IdBinderEmbedded.java | 66 +++++++++---------- 1 file changed, 30 insertions(+), 36 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java index cf2085fa6..2edc359fc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderEmbedded.java @@ -26,18 +26,16 @@ import java.util.Map; public final class IdBinderEmbedded implements IdBinder { private final BeanPropertyAssocOne embIdProperty; - private final boolean idInExpandedForm; - + private final boolean idClass; private BeanProperty[] props; - private BeanDescriptor idDesc; - private String idInValueSql; public IdBinderEmbedded(boolean idInExpandedForm, BeanPropertyAssocOne embIdProperty) { this.idInExpandedForm = idInExpandedForm; this.embIdProperty = embIdProperty; + this.idClass = "_idClass".equals(embIdProperty.getName()); } @Override @@ -59,10 +57,7 @@ public final class IdBinderEmbedded implements IdBinder { if (i > 0) { sb.append(" and "); } - sb.append(idDesc.getBaseTableAlias()); - sb.append("."); - sb.append(props[i].getDbColumn()); - sb.append("=?"); + sb.append(idDesc.getBaseTableAlias()).append(".").append(props[i].getDbColumn()).append("=?"); } sb.append(")"); return sb.toString(); @@ -95,7 +90,9 @@ public final class IdBinderEmbedded implements IdBinder { if (pathPrefix != null) { sb.append(pathPrefix).append("."); } - sb.append(embIdProperty.getName()).append("."); + if (!idClass) { + sb.append(embIdProperty.getName()).append("."); + } sb.append(props[i].getName()); if (!ascending) { sb.append(" desc"); @@ -115,7 +112,9 @@ public final class IdBinderEmbedded implements IdBinder { @Override public void buildRawSqlSelectChain(String prefix, List selectChain) { - prefix = SplitName.add(prefix, embIdProperty.getName()); + if (!idClass) { + prefix = SplitName.add(prefix, embIdProperty.getName()); + } for (BeanProperty prop : props) { prop.buildRawSqlSelectChain(prefix, selectChain); } @@ -141,10 +140,11 @@ public final class IdBinderEmbedded implements IdBinder { StringBuilder sb = new StringBuilder(); for (int i = 0; i < props.length; i++) { if (i > 0) { - sb.append(","); + sb.append(", "); + } + if (!idClass) { + sb.append(embIdProperty.getName()).append("."); } - sb.append(embIdProperty.getName()); - sb.append("."); sb.append(props[i].getName()); } return sb.toString(); @@ -173,8 +173,7 @@ public final class IdBinderEmbedded implements IdBinder { if (i > 0) { sb.append(" and "); } - sb.append(props[i].getDbColumn()); - sb.append("=?"); + sb.append(props[i].getDbColumn()).append("=?"); } sb.append(")"); } @@ -200,7 +199,7 @@ public final class IdBinderEmbedded implements IdBinder { if (idInExpandedForm) { sb.append(" or "); } else { - sb.append(","); + sb.append(", "); } } sb.append(idInValueSql); @@ -212,11 +211,11 @@ public final class IdBinderEmbedded implements IdBinder { @Override public Object[] getIdValues(EntityBean bean) { Object val = embIdProperty.getValue(bean); - Object[] bindvalues = new Object[props.length]; + Object[] bindValues = new Object[props.length]; for (int i = 0; i < props.length; i++) { - bindvalues[i] = props[i].getValue((EntityBean) val); + bindValues[i] = props[i].getValue((EntityBean) val); } - return bindvalues; + return bindValues; } @Override @@ -354,11 +353,10 @@ public final class IdBinderEmbedded implements IdBinder { sb.append("("); for (int i = 0; i < props.length; i++) { if (i > 0) { - sb.append(","); + sb.append(", "); } if (prefix != null) { - sb.append(prefix); - sb.append("."); + sb.append(prefix).append("."); } sb.append(props[i].getName()); } @@ -374,13 +372,12 @@ public final class IdBinderEmbedded implements IdBinder { sb.append(" and "); } if (prefix != null) { - sb.append(prefix); - sb.append("."); + sb.append(prefix).append("."); } - sb.append(embIdProperty.getName()); - sb.append("."); - sb.append(props[i].getName()); - sb.append(operator); + if (!idClass) { + sb.append(embIdProperty.getName()).append("."); + } + sb.append(props[i].getName()).append(operator); } return sb.toString(); } @@ -393,11 +390,9 @@ public final class IdBinderEmbedded implements IdBinder { sb.append(" and "); } if (baseTableAlias != null) { - sb.append(baseTableAlias); - sb.append("."); + sb.append(baseTableAlias).append("."); } - sb.append(props[i].getDbColumn()); - sb.append(" = ? "); + sb.append(props[i].getDbColumn()).append("=?"); } return sb.toString(); } @@ -414,8 +409,7 @@ public final class IdBinderEmbedded implements IdBinder { sb.append(","); } if (baseTableAlias != null) { - sb.append(baseTableAlias); - sb.append("."); + sb.append(baseTableAlias).append("."); } sb.append(props[i].getDbColumn()); } @@ -427,9 +421,9 @@ public final class IdBinderEmbedded implements IdBinder { public Object convertId(Object idValue) { if (idValue instanceof String) { final EntityBean embId = idDesc.createEntityBean(); - final String[] rawVals = ((String)idValue).split("\\|"); + final String[] rawValues = ((String)idValue).split("\\|"); for (int i = 0; i < props.length; i++) { - props[i].setValue(embId, props[i].parse(rawVals[i])); + props[i].setValue(embId, props[i].parse(rawValues[i])); } return embId; } From 4163b4dc251139b43b2d65044161bea5d72acc6a Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 22:23:58 +1200 Subject: [PATCH 21/68] #2317 - Plus test changes due to tidy whitespace on sql generation --- .../test/java/org/tests/model/bridge/TestIdClassScalar.java | 4 ++-- .../java/org/tests/model/history/TestHistoryEmbeddedId.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java b/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java index f378dbd29..2e00493fe 100644 --- a/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java +++ b/ebean-core/src/test/java/org/tests/model/bridge/TestIdClassScalar.java @@ -132,7 +132,7 @@ public class TestIdClassScalar extends BaseTestCase { sql = LoggedSqlCollector.stop(); assertThat(sql).hasSize(2); - assertSql(sql.get(0)).contains("select t0.site_id, t0.user_id, t0.site_id, t0.user_id, t0.access_level, t0.version from bsite_user_d t0 where t0.site_id = ? and t0.user_id = ?"); + assertSql(sql.get(0)).contains("select t0.site_id, t0.user_id, t0.site_id, t0.user_id, t0.access_level, t0.version from bsite_user_d t0 where t0.site_id=? and t0.user_id=?"); assertSql(sql.get(1)).contains("update bsite_user_d set access_level=?, version=? where site_id=? and user_id=? and version=?"); } @@ -178,7 +178,7 @@ public class TestIdClassScalar extends BaseTestCase { sql = LoggedSqlCollector.stop(); assertThat(sql).hasSize(2); - assertSql(sql.get(0)).contains("select t0.site_id, t0.user_id, t0.access_level, t0.site_id, t0.user_id from bsite_user_e t0 where t0.site_id = ? and t0.user_id = ?"); + assertSql(sql.get(0)).contains("select t0.site_id, t0.user_id, t0.access_level, t0.site_id, t0.user_id from bsite_user_e t0 where t0.site_id=? and t0.user_id=?"); assertSql(sql.get(1)).contains("update bsite_user_e set access_level=? where site_id=? and user_id=?"); } diff --git a/ebean-core/src/test/java/org/tests/model/history/TestHistoryEmbeddedId.java b/ebean-core/src/test/java/org/tests/model/history/TestHistoryEmbeddedId.java index 0bd8ddef3..ffe82ac75 100644 --- a/ebean-core/src/test/java/org/tests/model/history/TestHistoryEmbeddedId.java +++ b/ebean-core/src/test/java/org/tests/model/history/TestHistoryEmbeddedId.java @@ -48,7 +48,7 @@ public class TestHistoryEmbeddedId extends BaseTestCase { assertThat(namePair.getOldValue()).isEqualTo("ten"); assertThat(sql).hasSize(1); - assertThat(sql.get(0)).contains("from hembi_bean_with_history t0 where t0.part = ? and t0.brand = ?"); + assertThat(sql.get(0)).contains("from hembi_bean_with_history t0 where t0.part=? and t0.brand=?"); if (isH2()) { assertThat(sql.get(0)).contains("order by t0.sys_period_start desc"); } else if (isPostgres()) { From f33e54d8bac2465791e7ccaa91ad736bc09bb8e7 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 22:53:38 +1200 Subject: [PATCH 22/68] #2318 - Refactor internals - final classes in id and generated property packages --- .../deploy/generatedproperty/CounterFactory.java | 7 ++----- .../deploy/generatedproperty/GeneratedCounter.java | 2 +- .../generatedproperty/GeneratedCounterInteger.java | 6 +----- .../generatedproperty/GeneratedCounterLong.java | 6 +----- .../generatedproperty/GeneratedInsertDate.java | 2 +- .../generatedproperty/GeneratedInsertJavaTime.java | 12 ++++++------ .../generatedproperty/GeneratedInsertJodaTime.java | 8 ++++---- .../generatedproperty/GeneratedInsertLong.java | 2 +- .../generatedproperty/GeneratedInsertTimestamp.java | 2 +- .../generatedproperty/GeneratedPropertyFactory.java | 10 +--------- .../generatedproperty/GeneratedUpdateDate.java | 2 +- .../generatedproperty/GeneratedUpdateJavaTime.java | 12 ++++++------ .../generatedproperty/GeneratedUpdateJodaTime.java | 8 ++++---- .../generatedproperty/GeneratedUpdateLong.java | 2 +- .../generatedproperty/GeneratedUpdateTimestamp.java | 2 +- .../generatedproperty/GeneratedWhoCreated.java | 2 +- .../generatedproperty/GeneratedWhoModified.java | 2 +- .../generatedproperty/InsertTimestampFactory.java | 2 +- .../deploy/generatedproperty/JavaTimeUtils.java | 2 +- .../generatedproperty/UpdateTimestampFactory.java | 2 +- .../generatedproperty/UuidGeneratedProperty.java | 2 +- .../server/deploy/id/IdBinderFactory.java | 3 +-- .../server/deploy/id/IdBinderSimple.java | 4 ---- .../server/deploy/id/ImportedIdEmbedded.java | 4 +--- .../server/deploy/id/ImportedIdSimple.java | 12 ------------ 25 files changed, 40 insertions(+), 78 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/CounterFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/CounterFactory.java index 1bfd2542e..999deb121 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/CounterFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/CounterFactory.java @@ -13,14 +13,13 @@ import java.sql.Types; * Aka, Integer, Long, Short etc. *

*/ -class CounterFactory { +final class CounterFactory { private final GeneratedCounterInteger integerCounter = new GeneratedCounterInteger(); private final GeneratedCounterLong longCounter = new GeneratedCounterLong(); - public void setCounter(DeployBeanProperty property) { - + void setCounter(DeployBeanProperty property) { property.setGeneratedProperty(createCounter(property)); } @@ -28,7 +27,6 @@ class CounterFactory { * Create the GeneratedProperty based on the property type. */ private GeneratedProperty createCounter(DeployBeanProperty property) { - Class propType = property.getPropertyType(); if (propType.equals(Integer.class) || propType.equals(int.class)) { return integerCounter; @@ -36,7 +34,6 @@ class CounterFactory { if (propType.equals(Long.class) || propType.equals(long.class)) { return longCounter; } - int type = getType(propType); return new GeneratedCounter(type); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java index 319e6e40a..38f0085fb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounter.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * A general number counter for various number types. */ -public class GeneratedCounter implements GeneratedProperty { +final class GeneratedCounter implements GeneratedProperty { private final int numberType; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterInteger.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterInteger.java index 88cd3a866..4031465e8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterInteger.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterInteger.java @@ -6,11 +6,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Used to create a counter version column for Integer. */ -public class GeneratedCounterInteger implements GeneratedProperty { - - public GeneratedCounterInteger() { - - } +final class GeneratedCounterInteger implements GeneratedProperty { /** * Always returns a 1. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLong.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLong.java index 310242465..5282bec11 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLong.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedCounterLong.java @@ -6,11 +6,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Used to create a counter version column for Long. */ -public class GeneratedCounterLong implements GeneratedProperty { - - public GeneratedCounterLong() { - - } +final class GeneratedCounterLong implements GeneratedProperty { /** * Always returns a 1. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertDate.java index 2bb206e3d..57ff0c9bd 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertDate.java @@ -8,7 +8,7 @@ import java.util.Date; /** * Used to generate a (java.util.Date) timestamp when a bean is inserted. */ -public class GeneratedInsertDate implements GeneratedProperty, GeneratedWhenCreated { +final class GeneratedInsertDate implements GeneratedProperty, GeneratedWhenCreated { /** * Return the current time as a Timestamp. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJavaTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJavaTime.java index 3b95b4e0d..f71aaccfd 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJavaTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJavaTime.java @@ -6,9 +6,9 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Support java.time types as GeneratedProperty. */ -public class GeneratedInsertJavaTime { +final class GeneratedInsertJavaTime { - public static abstract class Base implements GeneratedProperty, GeneratedWhenCreated { + static abstract class Base implements GeneratedProperty, GeneratedWhenCreated { @Override public boolean includeInUpdate() { @@ -39,7 +39,7 @@ public class GeneratedInsertJavaTime { /** * Instant support. */ - public static class InstantDT extends Base { + static final class InstantDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { @@ -50,7 +50,7 @@ public class GeneratedInsertJavaTime { /** * LocalDateTime support. */ - public static class LocalDT extends Base { + static final class LocalDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { @@ -61,7 +61,7 @@ public class GeneratedInsertJavaTime { /** * OffsetDateTime support. */ - public static class OffsetDT extends Base { + static final class OffsetDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { @@ -73,7 +73,7 @@ public class GeneratedInsertJavaTime { /** * ZonedDateTime support. */ - public static class ZonedDT extends Base { + static final class ZonedDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJodaTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJodaTime.java index f346be035..5a4c11550 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJodaTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertJodaTime.java @@ -8,9 +8,9 @@ import org.joda.time.LocalDateTime; /** * Support joda time types as GeneratedProperty. */ -public class GeneratedInsertJodaTime { +final class GeneratedInsertJodaTime { - public static abstract class Base implements GeneratedProperty, GeneratedWhenCreated { + static abstract class Base implements GeneratedProperty, GeneratedWhenCreated { @Override public boolean includeInUpdate() { @@ -41,7 +41,7 @@ public class GeneratedInsertJodaTime { /** * LocalDateTime support. */ - public static class LocalDT extends Base { + static final class LocalDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { @@ -52,7 +52,7 @@ public class GeneratedInsertJodaTime { /** * DateTime support. */ - public static class DateTimeDT extends Base { + static final class DateTimeDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertLong.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertLong.java index f56f97490..5e3e0d2f1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertLong.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertLong.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Used to generate a (Long) timestamp when a bean is inserted. */ -public class GeneratedInsertLong implements GeneratedProperty { +final class GeneratedInsertLong implements GeneratedProperty { /** * Return the current time as a Timestamp. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertTimestamp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertTimestamp.java index abc7f963c..028f71a10 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertTimestamp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedInsertTimestamp.java @@ -8,7 +8,7 @@ import java.sql.Timestamp; /** * Used to generate a timestamp when a bean is inserted. */ -public class GeneratedInsertTimestamp implements GeneratedProperty, GeneratedWhenCreated { +final class GeneratedInsertTimestamp implements GeneratedProperty, GeneratedWhenCreated { /** * Return the current time as a Timestamp. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedPropertyFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedPropertyFactory.java index b395732b0..e876fb379 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedPropertyFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedPropertyFactory.java @@ -17,24 +17,16 @@ import java.util.Map; /** * Default implementation of GeneratedPropertyFactory. */ -public class GeneratedPropertyFactory { +public final class GeneratedPropertyFactory { private final CounterFactory counterFactory = new CounterFactory(); - private final InsertTimestampFactory insertFactory; - private final UpdateTimestampFactory updateFactory; - private final HashSet numberTypes = new HashSet<>(); - private final UuidGeneratedProperty generatedUuid = new UuidGeneratedProperty(); - private final GeneratedWhoModified generatedWhoModified; - private final GeneratedWhoCreated generatedWhoCreated; - private final ClassLoadConfig classLoadConfig; - private final Map idGeneratorMap = new HashMap<>(); public GeneratedPropertyFactory(boolean offlineMode, DatabaseConfig config, List idGenerators) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateDate.java index f9cd94659..f8ec8effe 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateDate.java @@ -9,7 +9,7 @@ import java.util.Date; * Generate a (java.util.Date) Timestamp whenever the bean is inserted or * updated. */ -public class GeneratedUpdateDate implements GeneratedProperty { +final class GeneratedUpdateDate implements GeneratedProperty { /** * Return now as a Timestamp. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJavaTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJavaTime.java index 8592425df..6abbf2c6b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJavaTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJavaTime.java @@ -6,9 +6,9 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Support java.time DateTime types as GeneratedProperty. */ -public class GeneratedUpdateJavaTime { +final class GeneratedUpdateJavaTime { - public static abstract class Base implements GeneratedProperty, GeneratedWhenModified { + static abstract class Base implements GeneratedProperty, GeneratedWhenModified { @Override public boolean includeInUpdate() { @@ -34,7 +34,7 @@ public class GeneratedUpdateJavaTime { /** * Instant support. */ - public static class InstantDT extends Base { + static final class InstantDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { @@ -50,7 +50,7 @@ public class GeneratedUpdateJavaTime { /** * LocalDateTime support. */ - public static class LocalDT extends Base { + static final class LocalDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { @@ -66,7 +66,7 @@ public class GeneratedUpdateJavaTime { /** * OffsetDateTime support. */ - public static class OffsetDT extends Base { + static final class OffsetDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { @@ -82,7 +82,7 @@ public class GeneratedUpdateJavaTime { /** * ZonedDateTime support. */ - public static class ZonedDT extends Base { + static final class ZonedDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJodaTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJodaTime.java index de4cc1878..ab95ce24a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJodaTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateJodaTime.java @@ -8,9 +8,9 @@ import org.joda.time.LocalDateTime; /** * Support java.time DateTime types as GeneratedProperty. */ -public class GeneratedUpdateJodaTime { +final class GeneratedUpdateJodaTime { - public static abstract class Base implements GeneratedProperty, GeneratedWhenModified { + static abstract class Base implements GeneratedProperty, GeneratedWhenModified { @Override public boolean includeInUpdate() { @@ -36,7 +36,7 @@ public class GeneratedUpdateJodaTime { /** * LocalDateTime support. */ - public static class LocalDT extends Base { + static final class LocalDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { @@ -52,7 +52,7 @@ public class GeneratedUpdateJodaTime { /** * OffsetDateTime support. */ - public static class DateTimeDT extends Base { + static final class DateTimeDT extends Base { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateLong.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateLong.java index 2d4c85192..72c2b9079 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateLong.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateLong.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Generate a (Long) Timestamp whenever the bean is inserted or updated. */ -public class GeneratedUpdateLong implements GeneratedProperty { +final class GeneratedUpdateLong implements GeneratedProperty { /** * Return now as a Timestamp. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateTimestamp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateTimestamp.java index f493401d8..3ee658eb2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateTimestamp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedUpdateTimestamp.java @@ -8,7 +8,7 @@ import java.sql.Timestamp; /** * Generate a Timestamp whenever the bean is inserted or updated. */ -public class GeneratedUpdateTimestamp implements GeneratedProperty, GeneratedWhenModified { +final class GeneratedUpdateTimestamp implements GeneratedProperty, GeneratedWhenModified { /** * Return now as a Timestamp. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedWhoCreated.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedWhoCreated.java index cdb719014..404f31049 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedWhoCreated.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedWhoCreated.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Used to populate @WhoCreated bean properties. */ -public class GeneratedWhoCreated implements GeneratedProperty { +final class GeneratedWhoCreated implements GeneratedProperty { private final CurrentUserProvider currentUserProvider; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedWhoModified.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedWhoModified.java index e4e68a373..c9aa65537 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedWhoModified.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/GeneratedWhoModified.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; /** * Used to populate @WhoModified bean properties. */ -public class GeneratedWhoModified implements GeneratedProperty { +final class GeneratedWhoModified implements GeneratedProperty { private final CurrentUserProvider currentUserProvider; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactory.java index ee2c88a66..f5083c632 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/InsertTimestampFactory.java @@ -15,7 +15,7 @@ import java.util.Map; /** * Helper for creating Insert timestamp GeneratedProperty objects. */ -class InsertTimestampFactory { +final class InsertTimestampFactory { private final Map, GeneratedProperty> map = new HashMap<>(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/JavaTimeUtils.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/JavaTimeUtils.java index bf3f6db12..cea0a6e86 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/JavaTimeUtils.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/JavaTimeUtils.java @@ -9,7 +9,7 @@ import java.time.ZonedDateTime; /** * Helper methods for Java time conversion. */ -class JavaTimeUtils { +final class JavaTimeUtils { /** * Return the system millis time as a LocalDateTime. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactory.java index d405f2ec7..d08b75cc6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/UpdateTimestampFactory.java @@ -15,7 +15,7 @@ import java.util.Map; /** * Helper for creating Update timestamp GeneratedProperty objects. */ -class UpdateTimestampFactory { +final class UpdateTimestampFactory { private final Map, GeneratedProperty> map = new HashMap<>(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/UuidGeneratedProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/UuidGeneratedProperty.java index 2090fac13..6eff4c21a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/UuidGeneratedProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/generatedproperty/UuidGeneratedProperty.java @@ -5,7 +5,7 @@ import io.ebeaninternal.server.deploy.BeanProperty; import java.util.UUID; -public class UuidGeneratedProperty implements GeneratedProperty { +final class UuidGeneratedProperty implements GeneratedProperty { @Override public Object getInsertValue(BeanProperty prop, EntityBean bean, long now) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderFactory.java index 70f8a1175..b9bf6f6e6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderFactory.java @@ -7,12 +7,11 @@ import io.ebeaninternal.server.persist.platform.MultiValueBind; /** * Creates the appropriate IdConvertSet depending on the type of Id property(s). */ -public class IdBinderFactory { +public final class IdBinderFactory { private static final IdBinderEmpty EMPTY = new IdBinderEmpty(); private final boolean idInExpandedForm; - private final MultiValueBind multiValueBind; public IdBinderFactory(boolean idInExpandedForm, MultiValueBind multiValueBind) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderSimple.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderSimple.java index cb9e6f9aa..6541b3fa5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderSimple.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/IdBinderSimple.java @@ -26,13 +26,9 @@ import java.util.List; public final class IdBinderSimple implements IdBinder { private final BeanProperty idProperty; - private final String bindIdSql; - private final Class expectedType; - private final MultiValueBind multiValueBind; - @SuppressWarnings("rawtypes") private final ScalarType scalarType; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/ImportedIdEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/ImportedIdEmbedded.java index 537575ae8..d0f888582 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/ImportedIdEmbedded.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/ImportedIdEmbedded.java @@ -18,12 +18,10 @@ import java.sql.SQLException; /** * Imported Embedded id. */ -public class ImportedIdEmbedded implements ImportedId { +public final class ImportedIdEmbedded implements ImportedId { private final BeanPropertyAssoc owner; - private final BeanPropertyAssocOne foreignAssocOne; - private final ImportedIdSimple[] imported; public ImportedIdEmbedded(BeanPropertyAssoc owner, BeanPropertyAssocOne foreignAssocOne, ImportedIdSimple[] imported) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/ImportedIdSimple.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/ImportedIdSimple.java index ea9844ec1..83f615994 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/ImportedIdSimple.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/id/ImportedIdSimple.java @@ -36,23 +36,11 @@ public final class ImportedIdSimple implements ImportedId, Comparable owner; - final String localDbColumn; - private final String localSqlFormula; - final BeanProperty foreignProperty; - private final int position; - - /** - * If true include in insert. - */ private final boolean insertable; - - /** - * If true include in update. - */ private final boolean updateable; public ImportedIdSimple(BeanPropertyAssoc owner, String localDbColumn, String localSqlFormula, BeanProperty foreignProperty, int position, From 0413d89a9e8cf7a86b0acedd00578d860b8f40ce Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 23:19:02 +1200 Subject: [PATCH 23/68] #2318 - Refactor internals - final classes in expression packages --- .../server/expression/AbstractExpression.java | 4 +--- .../expression/AbstractTextExpression.java | 2 +- .../expression/AbstractValueExpression.java | 2 +- .../server/expression/AllEqualsExpression.java | 17 ++--------------- .../expression/ArrayContainsExpression.java | 4 +--- .../expression/ArrayIsEmptyExpression.java | 2 +- .../server/expression/BetweenExpression.java | 3 +-- .../expression/BetweenPropertyExpression.java | 6 ++---- .../server/expression/BitwiseExpression.java | 9 +++------ .../CaseInsensitiveEqualExpression.java | 4 +--- .../expression/DefaultExampleExpression.java | 4 ++-- .../expression/DefaultExpressionList.java | 5 ----- .../expression/DefaultExpressionRequest.java | 11 +---------- .../expression/ExistsQueryExpression.java | 16 +++++----------- .../server/expression/FilterExprPath.java | 2 +- .../server/expression/FilterExpressionList.java | 4 +--- .../server/expression/IdExpression.java | 2 +- .../server/expression/IdInExpression.java | 3 +-- .../server/expression/InExpression.java | 2 +- .../server/expression/InPairsExpression.java | 8 +------- .../server/expression/InQueryExpression.java | 5 +---- .../server/expression/InRangeExpression.java | 3 +-- .../server/expression/IsEmptyExpression.java | 4 +--- .../server/expression/JsonPathExpression.java | 10 +++++----- .../server/expression/JunctionExpression.java | 7 +++---- .../server/expression/LikeExpression.java | 6 +----- .../server/expression/LogicExpression.java | 6 ++---- .../server/expression/NamedParamHelp.java | 2 +- .../expression/NativeILikeExpression.java | 2 +- .../expression/NestedPathWrapperExpression.java | 7 +++---- .../server/expression/NoopExpression.java | 4 ++-- .../server/expression/NullExpression.java | 5 +---- .../server/expression/PrepareDocNested.java | 2 +- .../server/expression/RawExpression.java | 3 +-- .../server/expression/RawExpressionBuilder.java | 2 +- .../ebeaninternal/server/expression/Same.java | 11 +++++------ .../server/expression/SimpleExpression.java | 2 +- .../expression/TextCommonTermsExpression.java | 3 +-- .../server/expression/TextMatchExpression.java | 5 ++--- .../expression/TextMultiMatchExpression.java | 5 ++--- .../expression/TextQueryStringExpression.java | 5 ++--- .../server/expression/TextSimpleExpression.java | 5 ++--- .../expression/platform/BaseDbExpression.java | 2 -- .../expression/platform/BasicDbExpression.java | 2 +- .../platform/DbExpressionHandlerFactory.java | 3 +-- .../expression/platform/H2DbExpression.java | 2 +- .../expression/platform/HanaDbExpression.java | 2 +- .../expression/platform/MariaDbExpression.java | 2 +- .../expression/platform/MySqlDbExpression.java | 2 +- .../expression/platform/OracleDbExpression.java | 3 +-- .../expression/platform/PostgresCast.java | 7 +++---- .../platform/PostgresDbExpression.java | 5 +---- .../platform/SqlServerDbExpression.java | 2 +- 53 files changed, 80 insertions(+), 166 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractExpression.java index c3090e38f..f3c9d5aae 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractExpression.java @@ -14,7 +14,7 @@ import io.ebeaninternal.api.NaturalKeyQueryData; /** * Base class for simple expressions. */ -public abstract class AbstractExpression implements SpiExpression { +abstract class AbstractExpression implements SpiExpression { protected String propName; @@ -66,7 +66,6 @@ public abstract class AbstractExpression implements SpiExpression { @Override public void containsMany(BeanDescriptor desc, ManyWhereJoins manyWhereJoin) { - propertyContainsMany(propName, desc, manyWhereJoin); } @@ -103,7 +102,6 @@ public abstract class AbstractExpression implements SpiExpression { } protected final ElPropertyValue getElProp(SpiExpressionRequest request) { - return request.getBeanDescriptor().getElGetValue(propName); } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java index 363bcb08d..272e557d7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractTextExpression.java @@ -10,7 +10,7 @@ import io.ebeaninternal.api.SpiExpressionRequest; * This means they can not be part of a SQL query nor do they use the built in query plan cache etc. *

*/ -public abstract class AbstractTextExpression extends AbstractExpression { +abstract class AbstractTextExpression extends AbstractExpression { AbstractTextExpression(String propName) { super(propName); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractValueExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractValueExpression.java index 7adb2729b..a758dcd10 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractValueExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AbstractValueExpression.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.expression; /** * Abstract expression that helps with named parameter use. */ -public abstract class AbstractValueExpression extends AbstractExpression { +abstract class AbstractValueExpression extends AbstractExpression { protected final Object bindValue; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AllEqualsExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AllEqualsExpression.java index 56761dcf2..fafb3bc96 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/AllEqualsExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/AllEqualsExpression.java @@ -13,7 +13,7 @@ import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; -class AllEqualsExpression extends NonPrepareExpression { +final class AllEqualsExpression extends NonPrepareExpression { private final Map propMap; @@ -21,7 +21,7 @@ class AllEqualsExpression extends NonPrepareExpression { this.propMap = propMap; } - protected String name(String propName) { + String name(String propName) { return propName; } @@ -56,7 +56,6 @@ class AllEqualsExpression extends NonPrepareExpression { @Override public void addBindValues(SpiExpressionRequest request) { - if (propMap.isEmpty()) { return; } @@ -70,23 +69,17 @@ class AllEqualsExpression extends NonPrepareExpression { @Override public void addSql(SpiExpressionRequest request) { - if (propMap.isEmpty()) { return; } - request.append("("); - int count = 0; for (Map.Entry entry : propMap.entrySet()) { - Object value = entry.getValue(); String propName = entry.getKey(); - if (count > 0) { request.append("and "); } - request.append(name(propName)); if (value == null) { request.append(" is null "); @@ -106,7 +99,6 @@ class AllEqualsExpression extends NonPrepareExpression { */ @Override public void queryPlanHash(StringBuilder builder) { - builder.append("AllEquals["); for (Entry entry : propMap.entrySet()) { Object value = entry.getValue(); @@ -135,20 +127,16 @@ class AllEqualsExpression extends NonPrepareExpression { if (!(other instanceof AllEqualsExpression)) { return false; } - AllEqualsExpression that = (AllEqualsExpression) other; return isSameByValue(that, true); } private boolean isSameByValue(AllEqualsExpression that, boolean byValue) { - if (propMap.size() != that.propMap.size()) { return false; } - Iterator> thisIt = propMap.entrySet().iterator(); Iterator> thatIt = that.propMap.entrySet().iterator(); - while (thisIt.hasNext() && thatIt.hasNext()) { Entry thisNext = thisIt.next(); Entry thatNext = thatIt.next(); @@ -160,7 +148,6 @@ class AllEqualsExpression extends NonPrepareExpression { return false; } } - return true; } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/ArrayContainsExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/ArrayContainsExpression.java index 7a9e903f6..34fec6037 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/ArrayContainsExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/ArrayContainsExpression.java @@ -9,10 +9,9 @@ import java.io.IOException; /** * Contains expression for ARRAY type. */ -public class ArrayContainsExpression extends AbstractExpression { +final class ArrayContainsExpression extends AbstractExpression { private final boolean contains; - private final Object[] values; ArrayContainsExpression(String propName, boolean contains, Object... values) { @@ -26,7 +25,6 @@ public class ArrayContainsExpression extends AbstractExpression { @Override public void writeDocQuery(DocQueryContext context) throws IOException { - if (values.length == 1) { context.writeEqualTo(propName, values[0]); } else { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/ArrayIsEmptyExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/ArrayIsEmptyExpression.java index f9cd530c8..2234f9500 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/ArrayIsEmptyExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/ArrayIsEmptyExpression.java @@ -9,7 +9,7 @@ import java.io.IOException; /** * IsEmpty expression for ARRAY type. */ -public class ArrayIsEmptyExpression extends AbstractExpression { +final class ArrayIsEmptyExpression extends AbstractExpression { private final boolean empty; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/BetweenExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/BetweenExpression.java index ed3d58d8b..be113e7a5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/BetweenExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/BetweenExpression.java @@ -6,12 +6,11 @@ import io.ebeaninternal.api.SpiExpressionRequest; import java.io.IOException; -class BetweenExpression extends AbstractExpression { +final class BetweenExpression extends AbstractExpression { private static final String _BETWEEN = " between ? and ?"; private final Object valueHigh; - private final Object valueLow; BetweenExpression(String propertyName, Object valueLow, Object valueHigh) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java index 55b08380d..74129849d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/BetweenPropertyExpression.java @@ -14,7 +14,7 @@ import java.io.IOException; /** * Between expression where a value is between two properties. */ -class BetweenPropertyExpression extends NonPrepareExpression { +final class BetweenPropertyExpression extends NonPrepareExpression { private static final String BETWEEN = " between "; @@ -34,7 +34,7 @@ class BetweenPropertyExpression extends NonPrepareExpression { this.highProperty = path + "." + highProperty; } - protected String name(String propName) { + String name(String propName) { return propName; } @@ -62,12 +62,10 @@ class BetweenPropertyExpression extends NonPrepareExpression { @Override public void containsMany(BeanDescriptor desc, ManyWhereJoins manyWhereJoin) { - ElPropertyDeploy elProp = desc.getElPropertyDeploy(name(lowProperty)); if (elProp != null && elProp.containsMany()) { manyWhereJoin.add(elProp); } - elProp = desc.getElPropertyDeploy(name(highProperty)); if (elProp != null && elProp.containsMany()) { manyWhereJoin.add(elProp); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/BitwiseExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/BitwiseExpression.java index 460af37ec..aa68f2662 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/BitwiseExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/BitwiseExpression.java @@ -9,14 +9,11 @@ import java.io.IOException; /** * Bitwise expression. */ -class BitwiseExpression extends AbstractExpression { - - protected final BitwiseOp operator; +final class BitwiseExpression extends AbstractExpression { + private final BitwiseOp operator; private final String compare; - - protected final long flags; - + private final long flags; private final long match; BitwiseExpression(String propertyName, BitwiseOp operator, long flags, String compare, long match) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpression.java index 3a6224d9c..a8075090a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/CaseInsensitiveEqualExpression.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.el.ElPropertyValue; import java.io.IOException; -class CaseInsensitiveEqualExpression extends AbstractValueExpression { +final class CaseInsensitiveEqualExpression extends AbstractValueExpression { private final boolean not; @@ -34,7 +34,6 @@ class CaseInsensitiveEqualExpression extends AbstractValueExpression { @Override public void addBindValues(SpiExpressionRequest request) { - ElPropertyValue prop = getElProp(request); if (prop != null && prop.isDbEncrypted()) { // bind the key as well as the value @@ -47,7 +46,6 @@ class CaseInsensitiveEqualExpression extends AbstractValueExpression { @Override public void addSql(SpiExpressionRequest request) { - String pname = propName; ElPropertyValue prop = getElProp(request); if (prop != null && prop.isDbEncrypted()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java index cd8a59857..ca97b5408 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExampleExpression.java @@ -39,7 +39,7 @@ import java.util.ArrayList; * * } */ -public class DefaultExampleExpression implements SpiExpression, ExampleExpression { +final class DefaultExampleExpression implements SpiExpression, ExampleExpression { /** * The example bean containing the properties. @@ -75,7 +75,7 @@ public class DefaultExampleExpression implements SpiExpression, ExampleExpressio * @param caseInsensitive if true use case insensitive expressions * @param likeType the type of Like wild card used */ - public DefaultExampleExpression(EntityBean entity, boolean caseInsensitive, LikeType likeType) { + DefaultExampleExpression(EntityBean entity, boolean caseInsensitive, LikeType likeType) { this.entity = entity; this.caseInsensitive = caseInsensitive; this.likeType = likeType; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java index ed3f57e14..b9693df6d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionList.java @@ -56,15 +56,10 @@ public class DefaultExpressionList implements SpiExpressionList { private static final String AND = " and "; protected List list; - protected final Query query; - private final ExpressionList parentExprList; - protected final ExpressionFactory expr; - String allDocNestedPath; - /** * Set to true for the "Text" root expression list. */ diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionRequest.java index 557c53996..09ff401af 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/DefaultExpressionRequest.java @@ -13,26 +13,17 @@ import java.sql.SQLException; import java.util.ArrayList; import java.util.List; -public class DefaultExpressionRequest implements SpiExpressionRequest { +public final class DefaultExpressionRequest implements SpiExpressionRequest { private final SpiOrmQueryRequest queryRequest; - private final BeanDescriptor beanDescriptor; - private final StringBuilder sql = new StringBuilder(); - private final List bindValues = new ArrayList<>(); - private final DeployParser deployParser; - private final Binder binder; - private final SpiExpressionList expressionList; - private int paramIndex; - private final boolean enableBindLog; - private StringBuilder bindLog; public DefaultExpressionRequest(SpiOrmQueryRequest queryRequest, DeployParser deployParser, Binder binder, SpiExpressionList expressionList) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java index 71ca665fe..438f1a2d5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/ExistsQueryExpression.java @@ -16,15 +16,12 @@ import io.ebeaninternal.server.query.CQuery; import java.io.IOException; import java.util.List; -class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpression { +final class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpression { - protected final boolean not; - - protected final SpiQuery subQuery; - - protected List bindParams; - - protected String sql; + private final boolean not; + private final SpiQuery subQuery; + private List bindParams; + private String sql; ExistsQueryExpression(SpiQuery subQuery, boolean not) { this.subQuery = subQuery; @@ -67,7 +64,6 @@ class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpress @Override public void prepareExpression(BeanQueryRequest request) { - CQuery subQuery = compileSubQuery(request); this.bindParams = subQuery.getPredicates().getWhereExprBindValues(); this.sql = subQuery.getGeneratedSql().replace('\n', ' '); @@ -99,7 +95,6 @@ class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpress @Override public void addSql(SpiExpressionRequest request) { - if (not) { request.append(" not"); } @@ -110,7 +105,6 @@ class ExistsQueryExpression implements SpiExpression, UnsupportedDocStoreExpress @Override public void addBindValues(SpiExpressionRequest request) { - for (Object bindParam : bindParams) { request.addBindValue(bindParam); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExprPath.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExprPath.java index d7b04de44..5765c7e43 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExprPath.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExprPath.java @@ -9,7 +9,7 @@ import java.io.Serializable; * query that includes the filterMany. *

*/ -public class FilterExprPath implements Serializable { +public final class FilterExprPath implements Serializable { private static final long serialVersionUID = -6420905565372842018L; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java index b6b1874a8..0e8d4ba0b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/FilterExpressionList.java @@ -18,14 +18,12 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -public class FilterExpressionList extends DefaultExpressionList { +public final class FilterExpressionList extends DefaultExpressionList { private static final String notAllowedMessage = "This method is not allowed on a filter"; private final Query rootQuery; - private final FilterExprPath pathPrefix; - private int firstRow; private int maxRows; private String orderByClause; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdExpression.java index 94cab6de7..c61f884a4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdExpression.java @@ -12,7 +12,7 @@ import java.io.IOException; /** * Slightly redundant as Query.setId() ultimately also does the same job. */ -class IdExpression extends NonPrepareExpression implements SpiExpression { +final class IdExpression extends NonPrepareExpression implements SpiExpression { private final Object value; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java index edf56b443..c1bd76db0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IdInExpression.java @@ -20,10 +20,9 @@ import java.util.Set; /** * In a collection of Id values. */ -public class IdInExpression extends NonPrepareExpression { +public final class IdInExpression extends NonPrepareExpression { private final List idCollection; - private boolean multiValueIdSupported; public IdInExpression(Collection idCollection) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InExpression.java index 0bc5a4588..1a84d87eb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InExpression.java @@ -16,7 +16,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; -class InExpression extends AbstractExpression { +final class InExpression extends AbstractExpression { private final boolean not; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InPairsExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InPairsExpression.java index e5bd27413..b5533b7ad 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InPairsExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InPairsExpression.java @@ -13,20 +13,14 @@ import java.io.IOException; import java.util.ArrayList; import java.util.List; -class InPairsExpression extends AbstractExpression { +final class InPairsExpression extends AbstractExpression { private final boolean not; - private final String property0, property1; - private List entries; - private boolean multiValueSupported; - private final String separator; - private final String suffix; - private List concatBindValues; InPairsExpression(Pairs pairs, boolean not) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java index a2d6d787c..e53792550 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InQueryExpression.java @@ -15,14 +15,11 @@ import java.util.List; /** * In expression using a sub query. */ -class InQueryExpression extends AbstractExpression implements UnsupportedDocStoreExpression { +final class InQueryExpression extends AbstractExpression implements UnsupportedDocStoreExpression { private final boolean not; - private final SpiQuery subQuery; - private List bindParams; - private String sql; InQueryExpression(String propertyName, SpiQuery subQuery, boolean not) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InRangeExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InRangeExpression.java index 04b242ba8..8bcdb12a8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/InRangeExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/InRangeExpression.java @@ -6,10 +6,9 @@ import io.ebeaninternal.api.SpiExpressionRequest; import java.io.IOException; -class InRangeExpression extends AbstractExpression { +final class InRangeExpression extends AbstractExpression { private final Object valueHigh; - private final Object valueLow; InRangeExpression(String propertyName, Object valueLow, Object valueHigh) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java index d6b878bfa..fc3be3e34 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/IsEmptyExpression.java @@ -10,12 +10,10 @@ import io.ebean.util.SplitName; import java.io.IOException; -class IsEmptyExpression extends AbstractExpression { +final class IsEmptyExpression extends AbstractExpression { private final boolean empty; - private final String propertyPath; - private String nestedPath; IsEmptyExpression(String propertyName, boolean empty) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/JsonPathExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/JsonPathExpression.java index 1d954dcc1..a6e8f128b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/JsonPathExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/JsonPathExpression.java @@ -16,27 +16,27 @@ import java.util.Objects; * The value passed in is expected to be a valid JSON type so string, number, boolean. *

*/ -class JsonPathExpression extends AbstractExpression { +final class JsonPathExpression extends AbstractExpression { /** * The path in the JSON document in dot notation form. */ - protected final String path; + private final String path; /** * The expression operator. */ - protected final Op operator; + private final Op operator; /** * The bind value used to compare against the document path value. */ - protected final Object value; + private final Object value; /** * For Between this is the upper bind value. */ - protected final Object upperValue; + private final Object upperValue; /** * Construct for Operator (not BETWEEN though). diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java index 5637fba7f..a408b5e74 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/JunctionExpression.java @@ -48,11 +48,10 @@ import java.util.function.Predicate; /** * Junction implementation. */ -class JunctionExpression implements SpiJunction, SpiExpression, ExpressionList { +final class JunctionExpression implements SpiJunction, SpiExpression, ExpressionList { - protected DefaultExpressionList exprList; - - protected Junction.Type type; + DefaultExpressionList exprList; + Junction.Type type; JunctionExpression(Junction.Type type, Query query, ExpressionList parent) { this.type = type; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/LikeExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/LikeExpression.java index f40501929..bf3871c23 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/LikeExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/LikeExpression.java @@ -8,10 +8,9 @@ import io.ebeaninternal.server.el.ElPropertyValue; import java.io.IOException; -class LikeExpression extends AbstractValueExpression { +final class LikeExpression extends AbstractValueExpression { private final boolean caseInsensitive; - private final LikeType type; LikeExpression(String propertyName, Object value, boolean caseInsensitive, LikeType type) { @@ -27,7 +26,6 @@ class LikeExpression extends AbstractValueExpression { @Override public void addBindValues(SpiExpressionRequest request) { - ElPropertyValue prop = getElProp(request); if (prop != null && prop.isDbEncrypted()) { // bind the key as well as the value @@ -40,7 +38,6 @@ class LikeExpression extends AbstractValueExpression { @Override public void addSql(SpiExpressionRequest request) { - String pname = propName; ElPropertyValue prop = getElProp(request); if (prop != null && prop.isDbEncrypted()) { @@ -98,7 +95,6 @@ class LikeExpression extends AbstractValueExpression { return "%" + value + "%"; case EQUAL_TO: return value; - default: throw new RuntimeException("LikeType " + type + " missed?"); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java index a66e2e88a..b0ef74f03 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/LogicExpression.java @@ -21,7 +21,7 @@ abstract class LogicExpression implements SpiExpression { static final String AND = " and "; static final String OR = " or "; - static class And extends LogicExpression { + static final class And extends LogicExpression { And(Expression expOne, Expression expTwo) { super(true, expOne, expTwo); @@ -34,7 +34,7 @@ abstract class LogicExpression implements SpiExpression { } - static class Or extends LogicExpression { + static final class Or extends LogicExpression { Or(Expression expOne, Expression expTwo) { super(false, expOne, expTwo); @@ -47,9 +47,7 @@ abstract class LogicExpression implements SpiExpression { } SpiExpression expOne; - SpiExpression expTwo; - private final boolean conjunction; LogicExpression(boolean conjunction, Expression expOne, Expression expTwo) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NamedParamHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NamedParamHelp.java index 5487cffbf..3a56ec7de 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NamedParamHelp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NamedParamHelp.java @@ -8,7 +8,7 @@ import java.util.List; /** * Helper for evaluating named parameters. */ -class NamedParamHelp { +final class NamedParamHelp { /** * Return the bind value taking into account named parameters. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NativeILikeExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NativeILikeExpression.java index f64933df5..110442365 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NativeILikeExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NativeILikeExpression.java @@ -8,7 +8,7 @@ import io.ebeaninternal.server.el.ElPropertyValue; import java.io.IOException; -class NativeILikeExpression extends AbstractExpression { +final class NativeILikeExpression extends AbstractExpression { private final String val; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NestedPathWrapperExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NestedPathWrapperExpression.java index b76bfef4d..0bb63f1ed 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NestedPathWrapperExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NestedPathWrapperExpression.java @@ -14,11 +14,10 @@ import java.io.IOException; /** * Wraps a single expression with nestedPath for document queries. */ -class NestedPathWrapperExpression implements SpiExpression { +final class NestedPathWrapperExpression implements SpiExpression { - protected final String nestedPath; - - protected final SpiExpression delegate; + final String nestedPath; + final SpiExpression delegate; NestedPathWrapperExpression(String nestedPath, SpiExpression delegate) { this.nestedPath = nestedPath; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java index 6c8d709e7..079f26874 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NoopExpression.java @@ -14,9 +14,9 @@ import java.io.IOException; /** * Effectively an expression that has no effect. */ -class NoopExpression implements SpiExpression { +final class NoopExpression implements SpiExpression { - protected static final NoopExpression INSTANCE = new NoopExpression(); + static final NoopExpression INSTANCE = new NoopExpression(); @Override public void prefixProperty(String path) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NullExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NullExpression.java index 2808acce7..4a4a81201 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/NullExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/NullExpression.java @@ -17,14 +17,11 @@ import java.io.IOException; * Note that for OneToMany/ManyToMany this effectively gets translated into isEmpty()/isNotEmpty(). *

*/ -class NullExpression extends AbstractExpression { +final class NullExpression extends AbstractExpression { private final boolean notNull; - private ElPropertyValue elProperty; - private boolean assocMany; - private String propertyPath; NullExpression(String propertyName, boolean notNull) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/PrepareDocNested.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/PrepareDocNested.java index ebc2d794b..8f1f48d38 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/PrepareDocNested.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/PrepareDocNested.java @@ -13,7 +13,7 @@ import java.util.Map; /** * Prepare nested path expressions for */ -class PrepareDocNested { +final class PrepareDocNested { /** * Prepare the top level expressions for nested path handling. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpression.java index 9e1c3e8dc..53571cad7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpression.java @@ -11,10 +11,9 @@ import io.ebeaninternal.server.persist.MultiValueWrapper; import java.io.IOException; import java.util.Collection; -class RawExpression extends NonPrepareExpression { +final class RawExpression extends NonPrepareExpression { final String sql; - final Object[] values; RawExpression(String sql, Object[] values) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpressionBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpressionBuilder.java index 73a4da911..40aa47271 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpressionBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/RawExpressionBuilder.java @@ -4,7 +4,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; -class RawExpressionBuilder { +final class RawExpressionBuilder { private static final String BP_1 = "?1"; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/Same.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/Same.java index 931e3e3e3..104d27969 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/Same.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/Same.java @@ -7,26 +7,26 @@ import java.util.Objects; /** * Utility to help isSame methods. */ -public class Same { +final class Same { /** * Return true if both values are null or both an not null. */ - public static boolean sameByNull(Object v1, Object v2) { + static boolean sameByNull(Object v1, Object v2) { return (v1 == null) == (v2 == null); } /** * Null safe equals check. */ - public static boolean sameByValue(Object v1, Object v2) { + static boolean sameByValue(Object v1, Object v2) { return Objects.equals(v1, v2); } /** * Return true if both collections are the same by value and order is taken into account. */ - public static boolean sameByValue(Collection v1, Collection v2) { + static boolean sameByValue(Collection v1, Collection v2) { if (v1 == null) { return v2 == null; } @@ -46,8 +46,7 @@ public class Same { /** * Null safe check by sameByValue or sameByNull based on byValue. */ - public static boolean sameBy(boolean byValue, Object value, Object value1) { - + static boolean sameBy(boolean byValue, Object value, Object value1) { if (byValue) { return sameByValue(value, value1); } else { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java index bc23b84f2..87b0ed3bf 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/SimpleExpression.java @@ -11,7 +11,7 @@ import io.ebeaninternal.api.NaturalKeyQueryData; import java.io.IOException; import java.util.Arrays; -public class SimpleExpression extends AbstractValueExpression { +public final class SimpleExpression extends AbstractValueExpression { private final Op type; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextCommonTermsExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextCommonTermsExpression.java index 8cc5fb5bb..3f289edb5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextCommonTermsExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextCommonTermsExpression.java @@ -7,10 +7,9 @@ import java.io.IOException; /** * Full text common terms expression. */ -class TextCommonTermsExpression extends AbstractTextExpression { +final class TextCommonTermsExpression extends AbstractTextExpression { private final String search; - private final TextCommonTerms options; public TextCommonTermsExpression(String search, TextCommonTerms options) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextMatchExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextMatchExpression.java index d36f491b7..f7cb06e6a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextMatchExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextMatchExpression.java @@ -7,13 +7,12 @@ import java.io.IOException; /** * Full text MATCH expression. */ -public class TextMatchExpression extends AbstractTextExpression { +final class TextMatchExpression extends AbstractTextExpression { private final String search; - private final Match options; - public TextMatchExpression(String propertyName, String search, Match options) { + TextMatchExpression(String propertyName, String search, Match options) { super(propertyName); this.search = search; this.options = options; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextMultiMatchExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextMultiMatchExpression.java index e51538e9f..f9fe1e909 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextMultiMatchExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextMultiMatchExpression.java @@ -7,13 +7,12 @@ import java.io.IOException; /** * Full text Multi-Match expression. */ -public class TextMultiMatchExpression extends AbstractTextExpression { +final class TextMultiMatchExpression extends AbstractTextExpression { private final String search; - private final MultiMatch options; - public TextMultiMatchExpression(String search, MultiMatch options) { + TextMultiMatchExpression(String search, MultiMatch options) { super(null); this.search = search; this.options = options; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextQueryStringExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextQueryStringExpression.java index 2a44e39d5..dcd46a240 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextQueryStringExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextQueryStringExpression.java @@ -7,13 +7,12 @@ import java.io.IOException; /** * Full text query string expression. */ -class TextQueryStringExpression extends AbstractTextExpression { +final class TextQueryStringExpression extends AbstractTextExpression { private final String search; - private final TextQueryString options; - public TextQueryStringExpression(String search, TextQueryString options) { + TextQueryStringExpression(String search, TextQueryString options) { super(null); this.search = search; this.options = options; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextSimpleExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextSimpleExpression.java index 9faa7d1a7..ec6702c2a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextSimpleExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/TextSimpleExpression.java @@ -7,13 +7,12 @@ import java.io.IOException; /** * Full text Multi-Match expression. */ -class TextSimpleExpression extends AbstractTextExpression { +final class TextSimpleExpression extends AbstractTextExpression { private final String search; - private final TextSimple options; - public TextSimpleExpression(String search, TextSimple options) { + TextSimpleExpression(String search, TextSimple options) { super(null); this.search = search; this.options = options; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/BaseDbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/BaseDbExpression.java index 2c85e7963..a8d4d6adc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/BaseDbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/BaseDbExpression.java @@ -10,7 +10,6 @@ abstract class BaseDbExpression implements DbExpressionHandler { @Override public void bitwise(SpiExpressionRequest request, String propName, BitwiseOp operator, long flags, String compare, long match) { - String bitOp = bitOp(operator); request.append("(").append(propName).append(" ").append(bitOp).append(" ? ").append(compare).append(" ?)"); } @@ -30,7 +29,6 @@ abstract class BaseDbExpression implements DbExpressionHandler { * Common alternative where the bitwise operation is a function (specifically bitand is used - H2 and Oracle). */ protected void bitwiseFunction(SpiExpressionRequest request, String propName, BitwiseOp operator, String compare) { - String funcName = functionName(operator); request.append(funcName).append("(").append(propName).append(", ?) ").append(compare).append(" ?"); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/BasicDbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/BasicDbExpression.java index 8b5ab8d70..edecf8230 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/BasicDbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/BasicDbExpression.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.expression.Op; /** * Not supported JSON or ARRAY expression handler. */ -public class BasicDbExpression extends BaseDbExpression { +class BasicDbExpression extends BaseDbExpression { @Override public void json(SpiExpressionRequest request, String propName, String path, Op operator, Object value) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/DbExpressionHandlerFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/DbExpressionHandlerFactory.java index c4b24fc84..6f773b270 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/DbExpressionHandlerFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/DbExpressionHandlerFactory.java @@ -4,13 +4,12 @@ import io.ebean.annotation.Platform; import io.ebean.config.dbplatform.DatabasePlatform; -public class DbExpressionHandlerFactory { +public final class DbExpressionHandlerFactory { /** * Create and return the appropriate platform specific handing of expressions. */ public static DbExpressionHandler from(DatabasePlatform databasePlatform) { - Platform platform = databasePlatform.getPlatform(); switch (platform) { case H2: diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/H2DbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/H2DbExpression.java index 0c7e43b65..5eddb5d11 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/H2DbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/H2DbExpression.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.expression.BitwiseOp; /** * H2 handling of platform specific expressions. */ -class H2DbExpression extends BasicDbExpression { +final class H2DbExpression extends BasicDbExpression { @Override public void bitwise(SpiExpressionRequest request, String propName, BitwiseOp operator, long flags, String compare, long match) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/HanaDbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/HanaDbExpression.java index a6633edfa..43919c1a0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/HanaDbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/HanaDbExpression.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.expression.Op; /** * HANA handling of platform specific expressions. */ -public class HanaDbExpression extends BaseDbExpression { +final class HanaDbExpression extends BaseDbExpression { @Override public void bitwise(SpiExpressionRequest request, String propName, BitwiseOp operator, long flags, String compare, long match) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/MariaDbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/MariaDbExpression.java index 8e4c0be1d..8116b2c4e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/MariaDbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/MariaDbExpression.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.expression.Op; /** * MariaDB specific handling of platform specific expressions. */ -class MariaDbExpression extends BasicDbExpression { +final class MariaDbExpression extends BasicDbExpression { @Override public void json(SpiExpressionRequest request, String propName, String path, Op operator, Object value) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/MySqlDbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/MySqlDbExpression.java index 8ea2595fe..b0721a44e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/MySqlDbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/MySqlDbExpression.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.expression.Op; /** * MySql specific handling of platform specific expressions. */ -class MySqlDbExpression extends BasicDbExpression { +final class MySqlDbExpression extends BasicDbExpression { @Override public void json(SpiExpressionRequest request, String propName, String path, Op operator, Object value) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/OracleDbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/OracleDbExpression.java index 3ec4b4071..f1fbaef7a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/OracleDbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/OracleDbExpression.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.expression.Op; /** * Oracle handling of platform specific expressions. ARRAY expressions not supported. */ -public class OracleDbExpression extends BaseDbExpression { +final class OracleDbExpression extends BaseDbExpression { @Override public String concat(String property0, String separator, String property1, String suffix) { @@ -16,7 +16,6 @@ public class OracleDbExpression extends BaseDbExpression { @Override public void json(SpiExpressionRequest request, String propName, String path, Op operator, Object value) { - if (operator == Op.EXISTS) { request.append("json_exists(").append(propName).append(", '$.").append(path).append("')"); } else if (operator == Op.NOT_EXISTS) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/PostgresCast.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/PostgresCast.java index 3e833cb12..595acb6cd 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/PostgresCast.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/PostgresCast.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.expression.platform; /** * Helper for determining type casting for JSON and ARRAY expressions. */ -public class PostgresCast { +final class PostgresCast { /** * Postgres CAST the type if necessary. @@ -11,15 +11,14 @@ public class PostgresCast { * This is generally necessary for JSON expressions as text values always returned from the json operators used. *

*/ - protected static String cast(Object value) { + static String cast(Object value) { return cast(value, false); } /** * Postgres CAST the type if necessary additionally specify if DB ARRAY is used. */ - protected static String cast(Object value, boolean asArray) { - + static String cast(Object value, boolean asArray) { if (value == null) { // for exists and not-exists expressions return ""; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/PostgresDbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/PostgresDbExpression.java index 54270ee5c..a3f044072 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/PostgresDbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/PostgresDbExpression.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.expression.Op; /** * Postgres JSON and ARRAY expression handler */ -public class PostgresDbExpression extends BaseDbExpression { +final class PostgresDbExpression extends BaseDbExpression { @Override public String concat(String property0, String separator, String property1, String suffix) { @@ -15,7 +15,6 @@ public class PostgresDbExpression extends BaseDbExpression { @Override public void json(SpiExpressionRequest request, String propName, String path, Op operator, Object value) { - StringBuilder sb = new StringBuilder(50); String[] paths = path.split("\\."); if (paths.length == 1) { @@ -41,7 +40,6 @@ public class PostgresDbExpression extends BaseDbExpression { @Override public void arrayContains(SpiExpressionRequest request, String propName, boolean contains, Object... values) { - if (!contains) { request.append("not ("); } @@ -58,7 +56,6 @@ public class PostgresDbExpression extends BaseDbExpression { @Override public void arrayIsEmpty(SpiExpressionRequest request, String propName, boolean empty) { - request.append("coalesce(cardinality(").append(propName).append("),0)"); if (empty) { request.append(" = 0"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/SqlServerDbExpression.java b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/SqlServerDbExpression.java index 98d76ec43..78838a81e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/SqlServerDbExpression.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/expression/platform/SqlServerDbExpression.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.expression.Op; /** * Microsoft SQL Server JSON. ARRAY expressions not supported. */ -public class SqlServerDbExpression extends BaseDbExpression { +final class SqlServerDbExpression extends BaseDbExpression { @Override public void json(final SpiExpressionRequest request, final String propName, From 9ee63144e57721ec49a9cd3c54c5de88f99678e6 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 23:32:05 +1200 Subject: [PATCH 24/68] #2318 - Refactor internals - final classes in core packages --- .../server/core/DScriptRunner.java | 2 +- .../server/core/DefaultBeanLoader.java | 19 +- .../server/core/DefaultBeanState.java | 2 +- .../server/core/DefaultCallOriginFactory.java | 2 +- .../server/core/DefaultCallableSql.java | 2 +- .../server/core/DefaultContainer.java | 2 +- .../server/core/DefaultMetaInfoManager.java | 2 +- .../server/core/DefaultQueryPlanListener.java | 2 +- .../server/core/DefaultSlowQueryListener.java | 3 +- .../ebeaninternal/server/core/DiffHelp.java | 6 +- .../server/core/DumpMetrics.java | 4 +- .../server/core/DumpMetricsData.java | 4 +- .../server/core/DumpMetricsJson.java | 7 +- .../server/core/InitDataSource.java | 3 +- .../server/core/InternalConfigXmlMap.java | 2 +- .../server/core/InternalConfiguration.java | 2 +- .../server/core/JndiDataSourceLookup.java | 6 +- .../core/MultiTenantDbCatalogSupplier.java | 3 +- .../core/MultiTenantDbSchemaSupplier.java | 3 +- .../server/core/MultiTenantDbSupplier.java | 3 +- .../server/core/NoopCallOriginFactory.java | 2 +- .../core/PersistDeferredRelationship.java | 2 +- .../server/core/RefreshHelp.java | 215 ------------------ .../server/core/SimpleDataSourceProvider.java | 3 +- .../server/core/SpiResultSet.java | 2 +- 25 files changed, 24 insertions(+), 279 deletions(-) delete mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/core/RefreshHelp.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java index 8bf649438..cb78076bc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DScriptRunner.java @@ -17,7 +17,7 @@ import java.sql.Connection; import java.sql.SQLException; import java.util.Map; -class DScriptRunner implements ScriptRunner { +final class DScriptRunner implements ScriptRunner { private static final String NEWLINE = "\n"; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java index 34417ed14..4d0409d4c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java @@ -26,12 +26,11 @@ import java.util.List; /** * Helper to handle lazy loading and refreshing of beans. */ -class DefaultBeanLoader { +final class DefaultBeanLoader { private static final Logger logger = LoggerFactory.getLogger(DefaultBeanLoader.class); private final DefaultServer server; - private final boolean onIterateUseExtraTxn; DefaultBeanLoader(DefaultServer server) { @@ -40,17 +39,14 @@ class DefaultBeanLoader { } void loadMany(LoadManyRequest loadRequest) { - SpiQuery query = loadRequest.createQuery(server); executeQuery(loadRequest, query); loadRequest.postLoad(); } void loadMany(BeanCollection bc, boolean onlyIds) { - EntityBean parentBean = bc.getOwnerBean(); String propertyName = bc.getPropertyName(); - loadManyInternal(parentBean, propertyName, null, false, onlyIds); } @@ -59,13 +55,10 @@ class DefaultBeanLoader { } private void loadManyInternal(EntityBean parentBean, String propertyName, Transaction t, boolean refresh, boolean onlyIds) { - EntityBeanIntercept ebi = parentBean._ebean_getIntercept(); PersistenceContext pc = ebi.getPersistenceContext(); - BeanDescriptor parentDesc = server.getBeanDescriptor(parentBean.getClass()); BeanPropertyAssocMany many = (BeanPropertyAssocMany) parentDesc.getBeanProperty(propertyName); - BeanCollection beanCollection = null; ExpressionList filterMany = null; @@ -126,7 +119,6 @@ class DefaultBeanLoader { } server.findOne(query, t); - if (beanCollection != null) { if (beanCollection.checkEmptyLazyLoad()) { if (logger.isDebugEnabled()) { @@ -142,7 +134,6 @@ class DefaultBeanLoader { * Load a batch of beans for +query or +lazy loading. */ void loadBean(LoadBeanRequest loadRequest) { - List batch = loadRequest.getBatch(); if (batch.isEmpty()) { throw new RuntimeException("Nothing in batch?"); @@ -190,7 +181,6 @@ class DefaultBeanLoader { } private void refreshBeanInternal(EntityBean bean, SpiQuery.Mode mode, int embeddedOwnerIndex) { - EntityBeanIntercept ebi = bean._ebean_getIntercept(); PersistenceContext pc = ebi.getPersistenceContext(); if (Mode.REFRESH_BEAN == mode) { @@ -203,12 +193,10 @@ class DefaultBeanLoader { // lazy loading on an embedded bean property EntityBean embeddedOwner = (EntityBean) ebi.getEmbeddedOwner(); int ownerIndex = ebi.getEmbeddedOwnerIndex(); - refreshBeanInternal(embeddedOwner, mode, ownerIndex); } Object id = desc.getId(bean); - if (pc == null) { // a reference with no existing persistenceContext pc = new DefaultPersistenceContext(); @@ -216,7 +204,6 @@ class DefaultBeanLoader { ebi.setPersistenceContext(pc); } boolean draft = desc.isDraftInstance(bean); - if (embeddedOwnerIndex == -1) { if (desc.lazyLoadMany(ebi)) { return; @@ -246,16 +233,13 @@ class DefaultBeanLoader { query.setPersistenceContext(pc); query.setMode(mode); query.setId(id); - if (embeddedOwnerIndex > -1 || mode == Mode.REFRESH_BEAN) { // make sure the query doesn't use the cache query.setUseCache(false); } - if (ebi.isReadOnly()) { query.setReadOnly(true); } - if (Mode.REFRESH_BEAN == mode) { // explicitly state to load all properties on REFRESH. // Lobs default to fetch lazy so this forces lobs to be @@ -268,7 +252,6 @@ class DefaultBeanLoader { String msg = "Bean not found during lazy load or refresh." + " id[" + id + "] type[" + desc.getBeanType() + "]"; throw new EntityNotFoundException(msg); } - desc.resetManyProperties(dbBean); } } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java index 22f2b7ae8..332b4fc0d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanState.java @@ -11,7 +11,7 @@ import java.util.Set; /** * Default implementation of BeanState. */ -public class DefaultBeanState implements BeanState { +public final class DefaultBeanState implements BeanState { private final EntityBeanIntercept intercept; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallOriginFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallOriginFactory.java index 249f4dbdb..233a2a920 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallOriginFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallOriginFactory.java @@ -8,7 +8,7 @@ import java.util.Arrays; /** * Default CallStackFactory where the Hash function for StackTraceElement includes the line number. */ -public class DefaultCallOriginFactory implements CallOriginFactory { +public final class DefaultCallOriginFactory implements CallOriginFactory { private static final int IGNORE_LEADING_ELEMENTS = 5; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallableSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallableSql.java index f41919ce2..fe7b18392 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallableSql.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultCallableSql.java @@ -12,7 +12,7 @@ import java.sql.CallableStatement; import java.sql.SQLException; -public class DefaultCallableSql implements Serializable, SpiCallableSql { +public final class DefaultCallableSql implements Serializable, SpiCallableSql { private static final long serialVersionUID = 8984272253185424701L; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java index e912b8cbb..348fd2f32 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultContainer.java @@ -32,7 +32,7 @@ import java.util.concurrent.locks.ReentrantLock; /** * Default Server side implementation of ServerFactory. */ -public class DefaultContainer implements SpiContainer { +public final class DefaultContainer implements SpiContainer { private static final Logger logger = LoggerFactory.getLogger("io.ebean.DB"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java index a6a65e19d..a1775e818 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultMetaInfoManager.java @@ -19,7 +19,7 @@ import java.util.List; /** * DefaultServer based implementation of MetaInfoManager. */ -public class DefaultMetaInfoManager implements MetaInfoManager { +final class DefaultMetaInfoManager implements MetaInfoManager { private final DefaultServer server; 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 20d7ec223..ba2e99bda 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 @@ -6,7 +6,7 @@ import io.ebean.meta.MetaQueryPlan; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -class DefaultQueryPlanListener implements QueryPlanListener { +final class DefaultQueryPlanListener implements QueryPlanListener { static final QueryPlanListener INSTANT = new DefaultQueryPlanListener(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java index b271a513e..64c813213 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultSlowQueryListener.java @@ -9,13 +9,12 @@ import org.slf4j.LoggerFactory; /** * Default slow query listener implementation that logs a warning message. */ -class DefaultSlowQueryListener implements SlowQueryListener { +final class DefaultSlowQueryListener implements SlowQueryListener { private static final Logger log = LoggerFactory.getLogger("io.ebean.SlowQuery"); @Override public void process(SlowQueryEvent event) { - String firstStack = ""; ObjectGraphNode node = event.getOriginNode(); if (node != null) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DiffHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DiffHelp.java index b879727db..9eca59e19 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DiffHelp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DiffHelp.java @@ -12,7 +12,7 @@ import java.util.Map; * This intentionally does not include any OneToMany or ManyToMany properties. *

*/ -public class DiffHelp { +public final class DiffHelp { private DiffHelp() { } @@ -28,11 +28,9 @@ public class DiffHelp { *

*/ public static Map diff(Object newBean, Object oldBean, BeanDescriptor desc) { - if (!(newBean instanceof EntityBean)) { throw new IllegalArgumentException("First bean expected to be an enhanced EntityBean? bean:" + newBean); } - if (oldBean != null) { if (!(oldBean instanceof EntityBean)) { throw new IllegalArgumentException("Second bean expected to be an enhanced EntityBean? bean:" + oldBean); @@ -41,11 +39,9 @@ public class DiffHelp { throw new IllegalArgumentException("Second bean not assignable to the first bean?"); } } - if (oldBean == null) { return ((EntityBean) newBean)._ebean_getIntercept().getDirtyValues(); } - return desc.diff((EntityBean) newBean, (EntityBean) oldBean); } 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 5274b4ced..9b5a1afa7 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 @@ -10,14 +10,12 @@ import io.ebeaninternal.api.SpiEbeanServer; import java.util.Comparator; import java.util.List; -class DumpMetrics { +final class DumpMetrics { private final SpiEbeanServer server; private final String options; - private final String nameFormat; private final String nameFormatTimed; - private boolean dumpHash; private boolean dumpSql; private boolean dumpLoc; 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 4bc1e5035..712521ce0 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 @@ -14,10 +14,9 @@ import java.util.List; /** * Dump the metrics into a list of MetricData. */ -class DumpMetricsData { +final class DumpMetricsData { private final Database database; - private final List list = new ArrayList<>(); DumpMetricsData(Database database) { @@ -30,7 +29,6 @@ class DumpMetricsData { } private void collect(ServerMetrics serverMetrics) { - final List timedMetrics = serverMetrics.timedMetrics(); final List countMetrics = serverMetrics.countMetrics(); final List queryMetrics = serverMetrics.queryMetrics(); 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 90200f79b..190af0af4 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 @@ -14,23 +14,18 @@ import java.io.StringWriter; import java.util.Comparator; import java.util.List; -class DumpMetricsJson implements ServerMetricsAsJson { +final class DumpMetricsJson implements ServerMetricsAsJson { private final Database database; - private Appendable writer; - /** * By default include sql and location attributes for the initial collection only. */ private int includeExtraAttributes = 1; - private boolean withHeader = true; private boolean withHash = true; private String newLine = "\n"; - private Comparator sortBy = SortMetric.NAME; - private int listCounter; private int objKeyCounter; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java index 3a03c7361..f65cb0823 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InitDataSource.java @@ -12,10 +12,9 @@ import javax.sql.DataSource; /** * Initialise the main DataSource and read-only DataSource. */ -class InitDataSource { +final class InitDataSource { private final JndiDataSourceLookup jndiDataSourceFactory = new JndiDataSourceLookup(); - private final DatabaseConfig config; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java index ccfa08de3..594a9f29d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfigXmlMap.java @@ -14,7 +14,7 @@ import java.util.Map; /** * Reads the Xml deployment information. */ -class InternalConfigXmlMap { +final class InternalConfigXmlMap { private static final Logger log = LoggerFactory.getLogger(InternalConfigXmlMap.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java index dca8e3059..96ab21aa2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/InternalConfiguration.java @@ -113,7 +113,7 @@ import java.util.ServiceLoader; * Used to extend the DatabaseConfig with additional objects used to configure and * construct an Database. */ -public class InternalConfiguration { +public final class InternalConfiguration { private static final Logger logger = LoggerFactory.getLogger(InternalConfiguration.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/JndiDataSourceLookup.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/JndiDataSourceLookup.java index 0e541fadd..09b2f7a9c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/JndiDataSourceLookup.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/JndiDataSourceLookup.java @@ -9,10 +9,7 @@ import javax.sql.DataSource; /** * Helper to lookup a DataSource from JNDI. */ -public class JndiDataSourceLookup { - - public JndiDataSourceLookup() { - } +class JndiDataSourceLookup { /** * Return the DataSource by JNDI lookup. @@ -21,7 +18,6 @@ public class JndiDataSourceLookup { *

*/ public DataSource lookup(String jndiName) { - try { Context ctx = new InitialContext(); DataSource ds = (DataSource) ctx.lookup(jndiName); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java index 8b369d25a..abe20b1ca 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbCatalogSupplier.java @@ -15,11 +15,10 @@ import java.util.logging.Logger; /** * DataSource supplier that changes DB catalog based on current Tenant Id. */ -public class MultiTenantDbCatalogSupplier implements DataSourceSupplier { +final class MultiTenantDbCatalogSupplier implements DataSourceSupplier { private final DataSource dataSource; private final DataSource readOnlyDataSource; - private final CatalogDataSource catalogDataSource; private final CatalogDataSource readOnly; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java index f37ce202e..2a1af6016 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSchemaSupplier.java @@ -15,11 +15,10 @@ import java.util.logging.Logger; /** * DataSource supplier that changes DB schema based on current Tenant Id. */ -class MultiTenantDbSchemaSupplier implements DataSourceSupplier { +final class MultiTenantDbSchemaSupplier implements DataSourceSupplier { private final DataSource dataSource; private final DataSource readOnlyDataSource; - private final SchemaDataSource schemaDataSource; private final SchemaDataSource readOnly; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java index b985c7864..e6237abfa 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/MultiTenantDbSupplier.java @@ -11,10 +11,9 @@ import java.sql.SQLException; /** * DataSource supplier based on DataSource per Tenant. */ -class MultiTenantDbSupplier implements DataSourceSupplier { +final class MultiTenantDbSupplier implements DataSourceSupplier { private final CurrentTenantProvider tenantProvider; - private final TenantDataSourceProvider dataSourceProvider; MultiTenantDbSupplier(CurrentTenantProvider tenantProvider, TenantDataSourceProvider dataSourceProvider) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/NoopCallOriginFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/NoopCallOriginFactory.java index eee313bc3..a95e507ea 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/NoopCallOriginFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/NoopCallOriginFactory.java @@ -6,7 +6,7 @@ import io.ebean.bean.CallStack; /** * A CallOriginFactory we can use when we don't use AutoTune. */ -class NoopCallOriginFactory implements CallOriginFactory { +final class NoopCallOriginFactory implements CallOriginFactory { private static final StackTraceElement E0 = new StackTraceElement("none", "none", "none", 0); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistDeferredRelationship.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistDeferredRelationship.java index ff81f49da..41bbb20ef 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistDeferredRelationship.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/PersistDeferredRelationship.java @@ -11,7 +11,7 @@ import io.ebeaninternal.server.deploy.id.ImportedId; * Deferred update of a relationship where an Id value is not initially available * so instead we execute this later as a SqlUpdate statement. */ -public class PersistDeferredRelationship { +public final class PersistDeferredRelationship { private final SpiEbeanServer ebeanServer; private final BeanDescriptor beanDescriptor; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/RefreshHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/RefreshHelp.java deleted file mode 100644 index 24ff1d117..000000000 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/RefreshHelp.java +++ /dev/null @@ -1,215 +0,0 @@ -package io.ebeaninternal.server.core; - - -/** - * Helper for performing a 'refresh' on an Entity bean. - *

- * Note that this does not 'refresh' any OnetoMany or ManyToMany properties. It - * refreshes all the other properties though. - *

- */ -public class RefreshHelp { -// -// /** -// * Helper for debug of lazy loading. -// */ -// private final DebugLazyLoad debugLazyLoad; -// -// private final MAdminLoggingMBean logControl; -// -// public RefreshHelp(MAdminLoggingMBean logControl, boolean debugLazyLoad){ -// this.logControl = logControl; -// this.debugLazyLoad = new DebugLazyLoad(debugLazyLoad); -// } -// -// /** -// * Refresh the bean from property values in dbBean. -// */ -// public void refresh(Object o, Object dbBean, BeanDescriptor desc, EntityBeanIntercept ebi, Object id, boolean isLazyLoad) { -// -// Object originalOldValues = null; -// boolean setOriginalOldValues = false; -// -// // set of properties to exclude from the refresh because it is -// // not a refresh but rather a lazyLoading event. -// Set excludes = null; -// -// // turn off intercepting so lazy loading is -// // not invoked when populating the bean -// // with PropertyChangeSupport -// ebi.setIntercepting(false); -// -// boolean readOnly = ebi.isReadOnly(); -// boolean sharedInstance = ebi.isSharedInstance(); -// -// if (isLazyLoad){ -// excludes = ebi.getLoadedProps(); -// if (excludes != null){ -// // lazy loading a "Partial Object"... which already -// // contains some properties and perhaps some oldValues -// // and these will need to be maintained... -// originalOldValues = ebi.getOldValues(); -// setOriginalOldValues = originalOldValues != null; -// } -// -// if (logControl.isDebugLazyLoad()){ -// debug(desc, ebi, id, excludes); -// } -// } -// -// -// BeanProperty[] props = desc.propertiesBaseScalar(); -// for (int i = 0; i < props.length; i++) { -// BeanProperty prop = props[i]; -// if (excludes != null && excludes.contains(prop.getName())){ -// // ignore this property (partial bean lazy loading) -// -// } else { -// Object dbVal = prop.getValue(dbBean); -// if (isLazyLoad) { -// prop.setValue(o, dbVal); -// } else { -// prop.setValueIntercept(o, dbVal); -// } -// if (setOriginalOldValues){ -// // maintain original oldValues for partially loaded bean -// prop.setValue(originalOldValues, dbVal); -// } -// } -// } -// -// BeanPropertyAssocOne[] ones = desc.propertiesOne(); -// for (int i = 0; i < ones.length; i++) { -// BeanProperty prop = ones[i]; -// if (excludes != null && excludes.contains(prop.getName())){ -// // ignore this property (partial bean lazy loading) -// -// } else { -// Object dbVal = prop.getValue(dbBean); -// if (isLazyLoad){ -// prop.setValue(o, dbVal); -// } else { -// prop.setValueIntercept(o, dbVal); -// } -// if (setOriginalOldValues){ -// // maintain original oldValues for partially loaded bean -// prop.setValue(originalOldValues, dbVal); -// } -// if (dbVal != null){ -// if (sharedInstance){ -// // propagate sharedInstance status to associated beans -// ((EntityBean)dbVal)._ebean_getIntercept().setSharedInstance(); -// } else if (readOnly) { -// // propagate readOnly status to associated beans -// ((EntityBean)dbVal)._ebean_getIntercept().setReadOnly(true); -// } -// } -// -// } -// } -// -// refreshEmbedded(o, dbBean, desc, excludes, readOnly); -// -// // set a lazy loading many proxy if required -// BeanPropertyAssocMany[] manys = desc.propertiesMany(); -// for (int i = 0; i < manys.length; i++) { -// BeanPropertyAssocMany prop = manys[i]; -// if (excludes != null && excludes.contains(prop.getName())){ -// // the many already existed on the bean -// -// } else { -// // set a lazy loading proxy -// prop.createReference(o, null, readOnly, sharedInstance); -// } -// } -// -// // the refreshed/lazy loaded bean is always fully -// // populated so set loadedProps to null -// ebi.setLoadedProps(null); -// -// -// // reset the loaded status -// ebi.setLoaded(); -// } -// -// /** -// * Refresh the Embedded beans. -// */ -// private void refreshEmbedded(Object o, Object dbBean, BeanDescriptor desc, Set excludes, boolean propagateReadOnly) { -// -// BeanPropertyAssocOne[] embeds = desc.propertiesEmbedded(); -// for (int i = 0; i < embeds.length; i++) { -// BeanPropertyAssocOne prop = embeds[i]; -// if (excludes != null && excludes.contains(prop.getName())){ -// // ignore this property -// } else { -// // the original embedded bean -// Object oEmb = prop.getValue(o); -// -// // the new one from the database -// Object dbEmb = prop.getValue(dbBean); -// -// if (oEmb == null){ -// // original embedded bean was null -// // so just replace the entire embedded bean -// prop.setValueIntercept(o, dbEmb); -// if (propagateReadOnly && dbEmb != null){ -// // propagate readOnly status to embedded beans -// ((EntityBean)dbEmb)._ebean_getIntercept().setReadOnly(true); -// } -// -// } else { -// // refresh each property of the original -// // embedded bean -// if (oEmb instanceof EntityBean){ -// // turn off interception to stop invoking lazy loading -// // but allow PropertyChangeSupport -// ((EntityBean) oEmb)._ebean_getIntercept().setIntercepting(false); -// } -// -// BeanProperty[] props = prop.getProperties(); -// for (int j = 0; j < props.length; j++) { -// Object v = props[j].getValue(dbEmb); -// props[j].setValueIntercept(oEmb, v); -// } -// -// // No longer calling setLoaded() on embedded bean -// // as the EntityBean itself -// // .. calls setEmbeddedLoaded() on each of -// // .. its embedded beans itself. -// } -// } -// } -// } -// -// -// /** -// * Output some debug to describe the lazy loading event. -// */ -// private void debug(BeanDescriptor desc, EntityBeanIntercept ebi, Object id, Set excludes) { -// -// -// Class beanType = desc.getBeanType(); -// -// StackTraceElement cause = debugLazyLoad.getStackTraceElement(beanType); -// -// String lazyLoadProperty = ebi.getLazyLoadProperty(); -// String msg = "debug.lazyLoad ["+desc+"] id["+id+"] lazyLoadProperty["+lazyLoadProperty+"]"; -// if (excludes != null){ -// msg += " partialProps"+excludes; -// } -// if (cause != null){ -// String causeLine = cause.toString(); -// if (causeLine.indexOf(".groovy:") > -1){ -// // eclipse console does not like finding groovy source at the moment -// causeLine = StringHelper.replaceString(causeLine, ".groovy:", ".groovy :"); -// } -// msg += " at: "+causeLine; -// } -// System.err.println(msg); -// } -// -// -// - -} diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java index f9a11f14d..7680dd086 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/SimpleDataSourceProvider.java @@ -10,10 +10,9 @@ import java.sql.SQLException; /** * Simple DataSource supplier when no multi-tenancy used. */ -class SimpleDataSourceProvider implements DataSourceSupplier { +final class SimpleDataSourceProvider implements DataSourceSupplier { private final DataSource dataSource; - private final DataSource readOnlyDataSource; SimpleDataSourceProvider(DataSource dataSource, DataSource readOnlyDataSource) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java index 6c539e564..e95c0d461 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/SpiResultSet.java @@ -8,7 +8,7 @@ import java.sql.ResultSet; * * These both must be closed properly when done. */ -public class SpiResultSet { +public final class SpiResultSet { private final PreparedStatement statement; From cd407ee467ffc18321dc517b4bae8069e1149141 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Mon, 16 Aug 2021 23:32:26 +1200 Subject: [PATCH 25/68] #2318 - Refactor internals - final classes in changelog packages --- .../server/changelog/ChangeJsonBuilder.java | 18 ++---------------- .../changelog/DefaultChangeLogListener.java | 5 ++--- .../changelog/DefaultChangeLogPrepare.java | 2 +- .../changelog/DefaultChangeLogRegister.java | 3 +-- .../changelog/ChangeJsonBuilderTest.java | 3 +-- 5 files changed, 7 insertions(+), 24 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/ChangeJsonBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/ChangeJsonBuilder.java index 372de9589..f399b78ad 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/ChangeJsonBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/ChangeJsonBuilder.java @@ -14,21 +14,14 @@ import java.util.Map; /** * Builds JSON document for a bean change. */ -class ChangeJsonBuilder { +final class ChangeJsonBuilder { - protected final JsonFactory jsonFactory = new JsonFactory(); - - protected final JsonContext json; - - ChangeJsonBuilder(JsonContext json) { - this.json = json; - } + private final JsonFactory jsonFactory = new JsonFactory(); /** * Write the bean change as JSON. */ void writeBeanJson(Writer writer, BeanChange bean, ChangeSet changeSet) throws IOException { - try (JsonGenerator generator = jsonFactory.createGenerator(writer)) { writeBeanChange(generator, bean, changeSet); generator.flush(); @@ -39,9 +32,7 @@ class ChangeJsonBuilder { * Write the bean change as JSON document containing the transaction header details. */ private void writeBeanChange(JsonGenerator gen, BeanChange bean, ChangeSet changeSet) throws IOException { - gen.writeStartObject(); - gen.writeNumberField("ts", bean.getEventTime()); gen.writeStringField("change", bean.getEvent().getCode()); gen.writeStringField("type", bean.getType()); @@ -49,9 +40,7 @@ class ChangeJsonBuilder { if (bean.getTenantId() != null) { gen.writeStringField("tenantId", bean.getTenantId().toString()); } - writeBeanTransactionDetails(gen, changeSet); - writeBeanValues(gen, bean); gen.writeEndObject(); } @@ -60,7 +49,6 @@ class ChangeJsonBuilder { * Denormalise by writing the transaction header details. */ private void writeBeanTransactionDetails(JsonGenerator gen, ChangeSet changeSet) throws IOException { - String source = changeSet.getSource(); if (source != null) { gen.writeStringField("source", source); @@ -87,12 +75,10 @@ class ChangeJsonBuilder { * For insert and update write the new/old values. */ private void writeBeanValues(JsonGenerator gen, BeanChange bean) throws IOException { - if (bean.getEvent() != ChangeType.DELETE) { gen.writeFieldName("data"); gen.writeRaw(":"); gen.writeRaw(bean.getData()); - String oldData = bean.getOldData(); if (oldData != null) { gen.writeRaw(",\"oldData\":"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java index 0168fa222..ee8e75424 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogListener.java @@ -15,7 +15,7 @@ import java.util.Properties; /** * Simply logs the change sets in JSON form to logger named io.ebean.ChangeLog. */ -public class DefaultChangeLogListener implements ChangeLogListener, Plugin { +public final class DefaultChangeLogListener implements ChangeLogListener, Plugin { /** * The usual application specific logger. @@ -45,8 +45,7 @@ public class DefaultChangeLogListener implements ChangeLogListener, Plugin { */ @Override public void configure(SpiServer server) { - jsonBuilder = new ChangeJsonBuilder(server.json()); - + jsonBuilder = new ChangeJsonBuilder(); Properties properties = server.getServerConfig().getProperties(); if (properties != null) { String bufferSize = properties.getProperty("ebean.changeLog.bufferSize"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogPrepare.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogPrepare.java index 16af27424..596d4d331 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogPrepare.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogPrepare.java @@ -11,7 +11,7 @@ import io.ebean.event.changelog.ChangeSet; * on the changeSet. *

*/ -public class DefaultChangeLogPrepare implements ChangeLogPrepare { +public final class DefaultChangeLogPrepare implements ChangeLogPrepare { /** * Just return true to send change set through to the logger. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogRegister.java b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogRegister.java index a6208a703..d9f962969 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogRegister.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/changelog/DefaultChangeLogRegister.java @@ -14,10 +14,9 @@ import java.util.Set; /** * Default implementation of ChangeLogRegister. */ -public class DefaultChangeLogRegister implements ChangeLogRegister { +public final class DefaultChangeLogRegister implements ChangeLogRegister { private static final BasicFilter INCLUDE_INSERTS = new BasicFilter(true); - private static final BasicFilter EXCLUDE_INSERTS = new BasicFilter(false); private final boolean defaultInsertsInclude; diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/changelog/ChangeJsonBuilderTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/changelog/ChangeJsonBuilderTest.java index f87405087..0e608f3e1 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/changelog/ChangeJsonBuilderTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/changelog/ChangeJsonBuilderTest.java @@ -20,8 +20,7 @@ public class ChangeJsonBuilderTest extends BaseTestCase { @Test public void testToJson() throws Exception { - JsonContext jsonContext = Ebean.getDefaultServer().json(); - ChangeJsonBuilder builder = new ChangeJsonBuilder(jsonContext); + ChangeJsonBuilder builder = new ChangeJsonBuilder(); ChangeSet changeSet = helper.createChangeSet("ABCD", 10); changeSet.getUserContext().put("altUser", "role user"); From b4f4ef3c1b307926956f8c85e58170506e96ade0 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Tue, 17 Aug 2021 18:24:28 +1200 Subject: [PATCH 26/68] #2318 - Refactor internals - final classes in server packages --- .../server/DContainerFactory.java | 2 +- .../server/loadcontext/DLoadBeanContext.java | 4 +--- .../server/loadcontext/DLoadContext.java | 10 +--------- .../server/loadcontext/DLoadManyContext.java | 7 ++----- .../server/logger/DLogManager.java | 2 +- .../server/logger/DLoggerFactory.java | 2 +- .../server/logger/DSpiLogger.java | 2 +- .../server/profile/DCountMetric.java | 3 +-- .../server/profile/DMetricFactory.java | 2 +- .../server/profile/DProfileLocation.java | 1 - .../profile/DProfileLocationFactory.java | 2 +- .../server/profile/DQueryPlanMeta.java | 2 +- .../server/profile/DQueryPlanMetric.java | 2 +- .../server/profile/DTimeMetricStats.java | 3 +-- .../server/profile/DTimedMetric.java | 6 +----- .../server/profile/DTimedProfileLocation.java | 5 +---- .../profile/TimedProfileLocationRegistry.java | 2 +- .../properties/BeanPropertiesReader.java | 1 - .../properties/EnhanceBeanPropertyAccess.java | 19 ++++++++---------- .../ebeaninternal/server/rawsql/DRawSql.java | 4 +--- .../server/rawsql/DRawSqlBuilder.java | 4 +--- .../server/rawsql/DRawSqlColumnsParser.java | 1 - .../server/rawsql/DRawSqlParser.java | 7 +------ .../server/rawsql/DRawSqlService.java | 6 +----- .../server/text/json/DJsonBeanReader.java | 3 +-- .../server/text/json/DJsonContext.java | 6 +----- .../server/text/json/DJsonScalar.java | 3 +-- .../server/text/json/PathStack.java | 4 +--- .../server/text/json/ReadJson.java | 20 +------------------ .../server/text/json/WriteJson.java | 9 +-------- .../ebeaninternal/server/util/ArrayStack.java | 4 +--- .../server/util/BindParamsParser.java | 6 +----- .../server/util/DSelectColumnsParser.java | 2 -- .../io/ebeaninternal/server/util/Str.java | 2 +- .../ebeaninternal/util/ParamTypeHelper.java | 11 ++-------- .../io/ebeaninternal/util/SortByClause.java | 6 +----- .../java/io/ebeaninternal/util/UrlHelper.java | 3 +-- .../java/io/ebeaninternal/util/ValueUtil.java | 2 +- .../docstore/none/NoneDocStore.java | 2 +- .../none/NoneDocStoreBeanAdapter.java | 2 +- .../docstore/none/NoneDocStoreFactory.java | 4 ++-- .../none/NoneDocStoreUpdateProcessor.java | 2 +- 42 files changed, 48 insertions(+), 142 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/DContainerFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/DContainerFactory.java index ea9f0b109..77d0a1f72 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/DContainerFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/DContainerFactory.java @@ -8,7 +8,7 @@ import io.ebeaninternal.server.core.DefaultContainer; /** * Default container factory found via service loader. */ -public class DContainerFactory implements SpiContainerFactory { +public final class DContainerFactory implements SpiContainerFactory { @Override public SpiContainer create(ContainerConfig containerConfig) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBeanContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBeanContext.java index 25fffe5b7..ac871e5eb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBeanContext.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadBeanContext.java @@ -23,12 +23,10 @@ import java.util.concurrent.locks.ReentrantLock; /** * ToOne bean load context. */ -class DLoadBeanContext extends DLoadBaseContext implements LoadBeanContext { +final class DLoadBeanContext extends DLoadBaseContext implements LoadBeanContext { private final boolean cache; - private List bufferList; - private LoadBuffer currentBuffer; DLoadBeanContext(DLoadContext parent, BeanDescriptor desc, String path, OrmQueryProperties queryProps) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java index 060633073..a7ec0e0c8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadContext.java @@ -31,17 +31,13 @@ import java.util.Map; /** * Default implementation of LoadContext. */ -public class DLoadContext implements LoadContext { +public final class DLoadContext implements LoadContext { private final SpiEbeanServer ebeanServer; - private final BeanDescriptor rootDescriptor; - private final Map beanMap = new HashMap<>(); private final Map manyMap = new HashMap<>(); - private final DLoadBeanContext rootBeanContext; - private final boolean asDraft; private final Timestamp asOf; private final Boolean readOnly; @@ -60,13 +56,9 @@ public class DLoadContext implements LoadContext { private final String planLabel; private final ProfileLocation profileLocation; private final ProfilingListener profilingListener; - private final Map nodePathMap = new HashMap<>(); - private PersistenceContext persistenceContext; - private List secQuery; - private Object tenantId; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java index 5d2b781c7..b830dc96d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/loadcontext/DLoadManyContext.java @@ -21,14 +21,11 @@ import java.util.concurrent.locks.ReentrantLock; /** * ToMany bean load context. */ -class DLoadManyContext extends DLoadBaseContext implements LoadManyContext { - - protected final BeanPropertyAssocMany property; +final class DLoadManyContext extends DLoadBaseContext implements LoadManyContext { + private final BeanPropertyAssocMany property; private final boolean docStoreMapped; - private List bufferList; - private LoadBuffer currentBuffer; DLoadManyContext(DLoadContext parent, BeanPropertyAssocMany property, String path, OrmQueryProperties queryProps) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/logger/DLogManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/logger/DLogManager.java index 79ece19fc..31c42f2fd 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/logger/DLogManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/logger/DLogManager.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.logger; import io.ebeaninternal.api.SpiLogManager; import io.ebeaninternal.api.SpiLogger; -public class DLogManager implements SpiLogManager { +public final class DLogManager implements SpiLogManager { private final SpiLogger sql; private final SpiLogger summary; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/logger/DLoggerFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/logger/DLoggerFactory.java index 65dbef013..90f6cbafa 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/logger/DLoggerFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/logger/DLoggerFactory.java @@ -7,7 +7,7 @@ import org.slf4j.LoggerFactory; /** * Default SpiLoggerFactory implementation. */ -public class DLoggerFactory implements SpiLoggerFactory { +public final class DLoggerFactory implements SpiLoggerFactory { /** * Just use a standard slf4j Logger. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/logger/DSpiLogger.java b/ebean-core/src/main/java/io/ebeaninternal/server/logger/DSpiLogger.java index 87b78052f..e921d5aa3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/logger/DSpiLogger.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/logger/DSpiLogger.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.logger; import io.ebeaninternal.api.SpiLogger; import org.slf4j.Logger; -public class DSpiLogger implements SpiLogger { +public final class DSpiLogger implements SpiLogger { private final Logger logger; 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 d93e0dbdb..693aa5de8 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 @@ -9,10 +9,9 @@ import java.util.concurrent.atomic.LongAdder; /** * Used to collect counter metrics. */ -class DCountMetric implements CountMetric { +final class DCountMetric implements CountMetric { private final String name; - private final LongAdder count = new LongAdder(); DCountMetric(String name) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DMetricFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DMetricFactory.java index 633c4c505..d51ff2198 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DMetricFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DMetricFactory.java @@ -10,7 +10,7 @@ import io.ebean.metric.TimedMetricMap; /** * Default metric factory implementation. */ -public class DMetricFactory implements MetricFactory { +public final class DMetricFactory implements MetricFactory { @Override public TimedMetricMap createTimedMetricMap(String name) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DProfileLocation.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DProfileLocation.java index 63fa0e11a..df4c44c56 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DProfileLocation.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DProfileLocation.java @@ -13,7 +13,6 @@ class DProfileLocation implements ProfileLocation { private String fullLocation; private String location; private String label; - private final int lineNumber; private int traceCount; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DProfileLocationFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DProfileLocationFactory.java index ebf5e78c0..cc6e19bd3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/DProfileLocationFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/DProfileLocationFactory.java @@ -8,7 +8,7 @@ import io.ebean.service.SpiProfileLocationFactory; /** * Default implementation of the profile location factory. */ -public class DProfileLocationFactory implements SpiProfileLocationFactory { +public final class DProfileLocationFactory implements SpiProfileLocationFactory { @Override public ProfileLocation create() { 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 67f724051..879d2ee6c 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 @@ -3,7 +3,7 @@ package io.ebeaninternal.server.profile; import io.ebean.ProfileLocation; import io.ebeaninternal.server.util.Md5; -class DQueryPlanMeta { +final class DQueryPlanMeta { private final Class type; private final String label; 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 e24da73c7..723c24511 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 @@ -6,7 +6,7 @@ import io.ebean.metric.QueryPlanMetric; import io.ebean.metric.TimedMetric; import io.ebean.metric.TimedMetricStats; -class DQueryPlanMetric implements QueryPlanMetric { +final class DQueryPlanMetric implements QueryPlanMetric { private final DQueryPlanMeta meta; private final DTimedMetric metric; 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 a4243e31a..900f47aae 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 @@ -5,13 +5,12 @@ import io.ebean.metric.TimedMetricStats; /** * Snapshot of the current statistics for a Counter or TimeCounter. */ -class DTimeMetricStats implements TimedMetricStats { +final class DTimeMetricStats implements TimedMetricStats { private final boolean collected; private final long count; private final long total; private final long max; - private String name; private String location; 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 cc344c3e6..a62fef911 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 @@ -12,16 +12,12 @@ import java.util.concurrent.atomic.LongAdder; * It is intended for high concurrent updates to the statistics and relatively infrequent reads. *

*/ -class DTimedMetric implements TimedMetric { +final class DTimedMetric implements TimedMetric { private final String name; - private final LongAdder count = new LongAdder(); - private final LongAdder total = new LongAdder(); - private final LongAccumulator max = new LongAccumulator(Math::max, Long.MIN_VALUE); - private boolean collected; DTimedMetric(String name) { 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 27537737f..2164f86c7 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 @@ -7,14 +7,11 @@ import io.ebean.metric.TimedMetricStats; /** * Default profile location that uses stack trace. */ -class DTimedProfileLocation extends DProfileLocation implements TimedProfileLocation { +final class DTimedProfileLocation extends DProfileLocation implements TimedProfileLocation { private final String label; - private final TimedMetric timedMetric; - private final boolean overrideMetricName; - private String fullName; DTimedProfileLocation(int lineNumber, String label, TimedMetric timedMetric) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/profile/TimedProfileLocationRegistry.java b/ebean-core/src/main/java/io/ebeaninternal/server/profile/TimedProfileLocationRegistry.java index 1a5f8ff07..350dd6688 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/profile/TimedProfileLocationRegistry.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/profile/TimedProfileLocationRegistry.java @@ -7,7 +7,7 @@ import java.util.List; /** * Global registry of the TimedProfileLocation instances created. */ -public class TimedProfileLocationRegistry { +public final class TimedProfileLocationRegistry { private static final List list = Collections.synchronizedList(new ArrayList<>()); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/properties/BeanPropertiesReader.java b/ebean-core/src/main/java/io/ebeaninternal/server/properties/BeanPropertiesReader.java index a283a42ea..ec56da19d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/properties/BeanPropertiesReader.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/properties/BeanPropertiesReader.java @@ -37,7 +37,6 @@ public final class BeanPropertiesReader { try { Field field = clazz.getField("_ebean_props"); return (String[]) field.get(null); - } catch (Exception e) { throw new IllegalStateException("Error getting _ebean_props field on type " + clazz, e); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/properties/EnhanceBeanPropertyAccess.java b/ebean-core/src/main/java/io/ebeaninternal/server/properties/EnhanceBeanPropertyAccess.java index e4d9e9839..e7e48b6f0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/properties/EnhanceBeanPropertyAccess.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/properties/EnhanceBeanPropertyAccess.java @@ -9,23 +9,20 @@ public final class EnhanceBeanPropertyAccess implements BeanPropertyAccess { private static final int CACHE_SIZE = 30; - private final BeanPropertyGetter[] getters = initGetters(CACHE_SIZE); - private final BeanPropertySetter[] setters = initSetters(CACHE_SIZE); + private final BeanPropertyGetter[] getters = initGetters(); + private final BeanPropertySetter[] setters = initSetters(); - public EnhanceBeanPropertyAccess() { - } - - private BeanPropertyGetter[] initGetters(int count) { - BeanPropertyGetter[] getters = new BeanPropertyGetter[count]; - for (int i = 0; i < count; i++) { + private BeanPropertyGetter[] initGetters() { + BeanPropertyGetter[] getters = new BeanPropertyGetter[CACHE_SIZE]; + for (int i = 0; i < CACHE_SIZE; i++) { getters[i] = new Getter(i); } return getters; } - private BeanPropertySetter[] initSetters(int count) { - BeanPropertySetter[] setters = new BeanPropertySetter[count]; - for (int i = 0; i < count; i++) { + private BeanPropertySetter[] initSetters() { + BeanPropertySetter[] setters = new BeanPropertySetter[CACHE_SIZE]; + for (int i = 0; i < CACHE_SIZE; i++) { setters[i] = new Setter(i); } return setters; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSql.java index 9f7e6627d..c58b8bc11 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSql.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSql.java @@ -8,9 +8,7 @@ import java.sql.ResultSet; public final class DRawSql implements SpiRawSql { private final ResultSet resultSet; - private final Sql sql; - private final ColumnMapping columnMapping; /** @@ -22,7 +20,7 @@ public final class DRawSql implements SpiRawSql { this.columnMapping = new ColumnMapping(propertyNames); } - protected DRawSql(ResultSet resultSet, Sql sql, ColumnMapping columnMapping) { + DRawSql(ResultSet resultSet, Sql sql, ColumnMapping columnMapping) { this.resultSet = resultSet; this.sql = sql; this.columnMapping = columnMapping; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlBuilder.java index 40160e873..a42c8035d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlBuilder.java @@ -5,12 +5,10 @@ import io.ebean.RawSqlBuilder; import java.sql.ResultSet; -public class DRawSqlBuilder implements RawSqlBuilder { +public final class DRawSqlBuilder implements RawSqlBuilder { private final ResultSet resultSet; - private final SpiRawSql.Sql sql; - private final SpiRawSql.ColumnMapping columnMapping; DRawSqlBuilder(SpiRawSql.Sql sql, SpiRawSql.ColumnMapping columnMapping) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlColumnsParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlColumnsParser.java index 74c02badd..48e61789b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlColumnsParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlColumnsParser.java @@ -17,7 +17,6 @@ final class DRawSqlColumnsParser { private static final Pattern COLINFO_SPLIT = Pattern.compile("\\s(?=[^\\)]*(?:\\(|$))"); private final String sqlSelect; - private int indexPos; public static ColumnMapping parse(String sqlSelect) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlParser.java index 0e46cbe10..033aa0755 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/rawsql/DRawSqlParser.java @@ -7,20 +7,15 @@ import io.ebeaninternal.server.rawsql.SpiRawSql.Sql; * Parses sql-select queries to try and determine the location where WHERE and * HAVING clauses can be added dynamically to the sql. */ -class DRawSqlParser { +final class DRawSqlParser { private static final String $_AND_HAVING = "${andHaving}"; - private static final String $_HAVING = "${having}"; - private static final String $_AND_WHERE = "${andWhere}"; - private static final String $_WHERE = "${where}"; private final SimpleTextParser textParser; - private String sql; - private int placeHolderWhere; private int placeHolderAndWhere; private int placeHolderHaving; 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 5a405dbc4..11b80da38 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 @@ -11,7 +11,7 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; -public class DRawSqlService implements SpiRawSqlService { +final class DRawSqlService implements SpiRawSqlService { @Override public RawSql resultSet(ResultSet resultSet, String... propertyNames) { @@ -20,10 +20,8 @@ public class DRawSqlService implements SpiRawSqlService { @Override public RawSqlBuilder parsed(String sql) { - SpiRawSql.Sql sql2 = DRawSqlParser.parse(sql); String select = sql2.getPreFrom(); - SpiRawSql.ColumnMapping mapping = DRawSqlColumnsParser.parse(select); return new DRawSqlBuilder(sql2, mapping); } @@ -36,7 +34,6 @@ public class DRawSqlService implements SpiRawSqlService { @Override public SqlRow sqlRow(ResultSet resultSet, String dbTrueValue, boolean binaryOptimizedUUID) throws SQLException { - ResultSetMetaData meta = resultSet.getMetaData(); int estCap = (int) (meta.getColumnCount() / 0.7f) + 1; DefaultSqlRow ret = new DefaultSqlRow(estCap, 0.75f, dbTrueValue, binaryOptimizedUUID); @@ -77,7 +74,6 @@ public class DRawSqlService implements SpiRawSqlService { * Combine schema table and column names allowing for null schema and table. */ String combine(String schemaName, String tableName, String name) { - StringBuilder sb = new StringBuilder(); if (schemaName != null) { sb.append(schemaName).append("."); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java index ecfa3af8c..8193d397c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonBeanReader.java @@ -15,10 +15,9 @@ import java.io.IOException; * This is used such that a load context and persistence context can be used to span multiple marshalling requests. *

*/ -public class DJsonBeanReader implements JsonBeanReader { +public final class DJsonBeanReader implements JsonBeanReader { private final BeanDescriptor desc; - private final SpiJsonReader readJson; public DJsonBeanReader(BeanDescriptor desc, SpiJsonReader readJson) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonContext.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonContext.java index 6a94bd31d..b0706173c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonContext.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonContext.java @@ -43,18 +43,14 @@ import java.util.Set; /** * Default implementation of JsonContext. */ -public class DJsonContext implements SpiJsonContext { +public final class DJsonContext implements SpiJsonContext { private static final PrettyPrinter PRETTY_PRINTER = new Pretty(); private final SpiEbeanServer server; - private final JsonFactory jsonFactory; - private final Object defaultObjectMapper; - private final JsonConfig.Include defaultInclude; - private final DJsonScalar jsonScalar; private static class Pretty extends DefaultPrettyPrinter { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonScalar.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonScalar.java index fed4c5945..d0ef82204 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonScalar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/DJsonScalar.java @@ -10,7 +10,7 @@ import java.util.List; /** * Default implementation of JsonScalar. */ -public class DJsonScalar { +public final class DJsonScalar { private final TypeManager typeManager; @@ -20,7 +20,6 @@ public class DJsonScalar { @SuppressWarnings({ "unchecked", "rawtypes" }) public void write(JsonGenerator gen, Object value) throws IOException { - if (value instanceof String) { gen.writeString((String) value); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/PathStack.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/PathStack.java index 7da49f6ad..6cb3b2b67 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/PathStack.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/PathStack.java @@ -2,10 +2,9 @@ package io.ebeaninternal.server.text.json; import io.ebeaninternal.server.util.ArrayStack; -public class PathStack extends ArrayStack { +public final class PathStack extends ArrayStack { public String peekFullPath(String key) { - String prefix = peekWithNull(); if (prefix != null) { return prefix + "." + key; @@ -15,7 +14,6 @@ public class PathStack extends ArrayStack { } public void pushPathKey(String key) { - String prefix = peekWithNull(); if (prefix != null) { key = prefix + "." + key; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java index 74c85a770..f685188b6 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/ReadJson.java @@ -20,42 +20,28 @@ import java.util.Map; /** * Context for JSON read processing. */ -public class ReadJson implements SpiJsonReader { +public final class ReadJson implements SpiJsonReader { private final BeanDescriptor rootDesc; - - /** - * Jackson parser. - */ private final JsonParser parser; - - /** - * Stack of the path - used to find the appropriate JsonReadBeanVisitor. - */ private final PathStack pathStack; - /** * Map of the JsonReadBeanVisitor keyed by path. */ private final Map> visitorMap; - private final Object objectMapper; - private final PersistenceContext persistenceContext; - private final LoadContext loadContext; /** * Construct with parser and readOptions. */ public ReadJson(BeanDescriptor desc, JsonParser parser, JsonReadOptions readOptions, Object objectMapper) { - this.rootDesc = desc; this.parser = parser; this.objectMapper = objectMapper; this.persistenceContext = initPersistenceContext(readOptions); this.loadContext = initLoadContext(desc, readOptions); - // only create visitorMap, pathStack if needed ... this.visitorMap = (readOptions == null) ? null : readOptions.getVisitorMap(); this.pathStack = (visitorMap == null && loadContext == null) ? null : new PathStack(); @@ -119,7 +105,6 @@ public class ReadJson implements SpiJsonReader { */ @Override public void persistenceContextPut(Object beanId, T currentBean) { - persistenceContextPutIfAbsent(beanId, (EntityBean) currentBean, rootDesc); } @@ -129,16 +114,13 @@ public class ReadJson implements SpiJsonReader { */ @Override public Object persistenceContextPutIfAbsent(Object id, EntityBean bean, BeanDescriptor beanDesc) { - if (persistenceContext == null) { // no persistenceContext means no lazy loading either return null; } - Object existing = beanDesc.contextPutIfAbsent(persistenceContext, id, bean); if (existing != null) { beanDesc.merge(bean, (EntityBean) existing); - } else { if (loadContext != null) { EntityBeanIntercept ebi = bean._ebean_getIntercept(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/WriteJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/WriteJson.java index d7914f587..4ae521e16 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/text/json/WriteJson.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/text/json/WriteJson.java @@ -21,22 +21,15 @@ import java.util.Collection; import java.util.Map; import java.util.Set; -public class WriteJson implements SpiJsonWriter { +public final class WriteJson implements SpiJsonWriter { private final SpiEbeanServer server; - private final JsonGenerator generator; - private final FetchPath fetchPath; - private final Map> visitors; - private final PathStack pathStack; - private final ArrayStack parentBeans; - private final Object objectMapper; - private final JsonConfig.Include include; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/util/ArrayStack.java b/ebean-core/src/main/java/io/ebeaninternal/server/util/ArrayStack.java index 9e1107ee5..8e824f664 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/util/ArrayStack.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/util/ArrayStack.java @@ -6,10 +6,8 @@ import java.util.List; /** * Stack based on ArrayList. - * - * @author rbygrave */ -public class ArrayStack { +public final class ArrayStack { private final List list; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/util/BindParamsParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/util/BindParamsParser.java index c7ae703d5..b28f6b80f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/util/BindParamsParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/util/BindParamsParser.java @@ -15,19 +15,16 @@ import java.util.Collection; * This is a thread safe implementation. *

*/ -public class BindParamsParser { +public final class BindParamsParser { private static final String ENCRYPTKEY_PREFIX = "encryptkey_"; private static final String ENCRYPTKEY_GAP = "___"; - private static final int ENCRYPTKEY_PREFIX_LEN = ENCRYPTKEY_PREFIX.length(); private static final int ENCRYPTKEY_GAP_LEN = ENCRYPTKEY_GAP.length(); - /** * Used to parse sql looking for named parameters. */ private static final String quote = "'"; - /** * Used to parse sql looking for named parameters. */ @@ -35,7 +32,6 @@ public class BindParamsParser { private final BindParams params; private final String sql; - private final BeanDescriptor beanDescriptor; public static String parse(BindParams params, String sql) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/util/DSelectColumnsParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/util/DSelectColumnsParser.java index b4ec33a67..9ec13815b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/util/DSelectColumnsParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/util/DSelectColumnsParser.java @@ -9,9 +9,7 @@ import java.util.Set; public final class DSelectColumnsParser { private final int end; - private final String selectClause; - private int pos; public static Set parse(String sqlSelect) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/util/Str.java b/ebean-core/src/main/java/io/ebeaninternal/server/util/Str.java index 56788dc98..c49032c86 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/util/Str.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/util/Str.java @@ -5,7 +5,7 @@ package io.ebeaninternal.server.util; *

* Predicts a decent buffer size to append the strings into. */ -public class Str { +public final class Str { /** * Append strings together. diff --git a/ebean-core/src/main/java/io/ebeaninternal/util/ParamTypeHelper.java b/ebean-core/src/main/java/io/ebeaninternal/util/ParamTypeHelper.java index 85de3d4d5..68f8de4a4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/util/ParamTypeHelper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/util/ParamTypeHelper.java @@ -6,13 +6,13 @@ import java.util.List; import java.util.Map; import java.util.Set; -public class ParamTypeHelper { +public final class ParamTypeHelper { public enum ManyType { LIST, SET, MAP, NONE } - public static class TypeInfo { + public static final class TypeInfo { private final ManyType manyType; private final Class beanType; @@ -46,11 +46,9 @@ public class ParamTypeHelper { } public static TypeInfo getTypeInfo(Type genericType) { - if (genericType instanceof ParameterizedType) { return getParamTypeInfo((ParameterizedType) genericType); } - Class entityType = getBeanType(genericType); if (entityType != null) { return new TypeInfo(ManyType.NONE, entityType); @@ -62,16 +60,12 @@ public class ParamTypeHelper { * For Lists Sets and Maps of beans. */ private static TypeInfo getParamTypeInfo(ParameterizedType paramType) { - Type rawType = paramType.getRawType(); - ManyType manyType = getManyType(rawType); if (ManyType.NONE == manyType) { return null; } - Type[] typeArguments = paramType.getActualTypeArguments(); - if (typeArguments.length == 1) { Type argType = typeArguments[0]; Class beanType = getBeanType(argType); @@ -79,7 +73,6 @@ public class ParamTypeHelper { return new TypeInfo(manyType, beanType); } } - return null; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/util/SortByClause.java b/ebean-core/src/main/java/io/ebeaninternal/util/SortByClause.java index 02884990e..764e67b8a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/util/SortByClause.java +++ b/ebean-core/src/main/java/io/ebeaninternal/util/SortByClause.java @@ -10,23 +10,19 @@ import java.util.List; * Primarily used to support sorting of Lists. *

*/ -public class SortByClause { +public final class SortByClause { static final String NULLSHIGH = "nullshigh"; - static final String NULLSLOW = "nullslow"; - /** * The ascending keyword. */ static final String ASC = "asc"; - /** * The descending keyword. */ static final String DESC = "desc"; - private final List properties = new ArrayList<>(); /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/util/UrlHelper.java b/ebean-core/src/main/java/io/ebeaninternal/util/UrlHelper.java index 443273c6b..0779908c9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/util/UrlHelper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/util/UrlHelper.java @@ -8,13 +8,12 @@ import java.net.URLConnection; /** * Helper to open URL content without file descriptor caching (by underlying JDK JarURLConnection). */ -public class UrlHelper { +public final class UrlHelper { /** * Open the URL content without using caching returning the resulting InputStream. */ public static InputStream openNoCache(URL url) throws IOException { - URLConnection urlConnection = url.openConnection(); urlConnection.setUseCaches(false); return urlConnection.getInputStream(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/util/ValueUtil.java b/ebean-core/src/main/java/io/ebeaninternal/util/ValueUtil.java index a93da76cf..2cf7f73ba 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/util/ValueUtil.java +++ b/ebean-core/src/main/java/io/ebeaninternal/util/ValueUtil.java @@ -3,7 +3,7 @@ package io.ebeaninternal.util; import java.math.BigDecimal; import java.net.URL; -public class ValueUtil { +public final class ValueUtil { /** * Helper method to check if two objects are equal. diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStore.java b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStore.java index a7dda71d4..d4932791e 100644 --- a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStore.java +++ b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStore.java @@ -16,7 +16,7 @@ import java.util.function.Predicate; /** * DocumentStore that barfs it is used. */ -public class NoneDocStore implements DocumentStore { +public final class NoneDocStore implements DocumentStore { public static IllegalStateException implementationNotInClassPath() { throw new IllegalStateException("DocStore implementation not included in the classPath. You need to add the maven dependency for io.ebean:ebean-elastic"); diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreBeanAdapter.java b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreBeanAdapter.java index d187af169..2be5d1c13 100644 --- a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreBeanAdapter.java +++ b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreBeanAdapter.java @@ -12,7 +12,7 @@ import java.io.IOException; /** * DocStoreBeanBaseAdapter that barfs if it is used. */ -public class NoneDocStoreBeanAdapter extends DocStoreBeanBaseAdapter { +public final class NoneDocStoreBeanAdapter extends DocStoreBeanBaseAdapter { public NoneDocStoreBeanAdapter(BeanDescriptor desc, DeployBeanDescriptor deploy) { super(desc, deploy); diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreFactory.java b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreFactory.java index 7a9d18568..8f0244cb5 100644 --- a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreFactory.java +++ b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreFactory.java @@ -12,7 +12,7 @@ import io.ebeanservice.docstore.api.DocStoreUpdateProcessor; /** * A stub implementation of DocStoreFactory that will barf if the docStore features are used. */ -public class NoneDocStoreFactory implements DocStoreFactory { +public final class NoneDocStoreFactory implements DocStoreFactory { @Override public DocStoreIntegration create(SpiServer server) { @@ -24,7 +24,7 @@ public class NoneDocStoreFactory implements DocStoreFactory { return new NoneDocStoreBeanAdapter<>(desc, deploy); } - static class NoneIntegration implements DocStoreIntegration { + static final class NoneIntegration implements DocStoreIntegration { @Override public DocStoreUpdateProcessor updateProcessor() { diff --git a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreUpdateProcessor.java b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreUpdateProcessor.java index c5c3d7854..b6a642718 100644 --- a/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreUpdateProcessor.java +++ b/ebean-core/src/main/java/io/ebeanservice/docstore/none/NoneDocStoreUpdateProcessor.java @@ -11,7 +11,7 @@ import java.io.IOException; /** * DocStoreUpdateProcessor that barfs if it is used. */ -class NoneDocStoreUpdateProcessor implements DocStoreUpdateProcessor { +final class NoneDocStoreUpdateProcessor implements DocStoreUpdateProcessor { @Override public DocStoreQueryUpdate createQueryUpdate(BeanType beanType, int bulkBatchSize) throws IOException { From 16a05528b76a3e1c96d8449e2c1f40c23a062160 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Tue, 17 Aug 2021 19:00:55 +1200 Subject: [PATCH 27/68] #2318 - Refactor internals - final classes in deploy packages etc --- .../deploy/AssocOneHelpRefExported.java | 2 +- .../server/deploy/AssocOneHelpRefInherit.java | 2 +- .../server/deploy/AssocOneHelpRefSimple.java | 2 +- .../server/deploy/BeanCascadeInfo.java | 2 +- .../server/deploy/BeanChangeJson.java | 5 +--- .../deploy/BeanCollectionHelpFactory.java | 7 ++---- .../server/deploy/BeanCollectionUtil.java | 3 +-- .../server/deploy/BeanDescriptorJsonHelp.java | 14 +---------- .../server/deploy/BeanDescriptorManager.java | 2 +- .../server/deploy/BeanEmbeddedMeta.java | 3 +-- .../deploy/BeanEmbeddedMetaFactory.java | 2 +- .../server/deploy/BeanFinderManager.java | 2 +- .../server/deploy/BeanFkeyProperty.java | 1 - .../server/deploy/BeanIudMetrics.java | 3 +-- .../deploy/BeanLifecycleAdapterFactory.java | 16 +++++-------- .../server/deploy/BeanListHelpElement.java | 2 +- .../server/deploy/BeanManager.java | 3 +-- .../server/deploy/BeanManagerFactory.java | 2 +- .../server/deploy/BeanMapHelpElement.java | 2 +- .../server/deploy/BeanMapQueryHelp.java | 2 +- .../server/deploy/BeanNaturalKey.java | 2 +- .../server/deploy/BeanPropertyIdClass.java | 2 +- .../deploy/BeanPropertyOrderColumn.java | 2 +- .../server/deploy/BeanPropertyOverride.java | 2 +- .../deploy/BeanPropertySimpleCollection.java | 2 +- .../deploy/BeanQueryAdapterManager.java | 2 +- .../server/deploy/BeanSetHelpElement.java | 2 +- .../server/deploy/BeanTable.java | 8 +------ .../deploy/ChainedBeanPersistController.java | 2 +- .../deploy/ChainedBeanPersistListener.java | 3 +-- .../ChainedBeanPostConstructListener.java | 3 +-- .../server/deploy/ChainedBeanPostLoad.java | 3 +-- .../deploy/ChainedBeanQueryAdapter.java | 3 +-- .../server/deploy/DCacheControl.java | 2 +- .../server/deploy/DCacheControlNone.java | 2 +- .../server/deploy/DCacheRegion.java | 2 +- .../server/deploy/DCacheRegionNone.java | 2 +- .../server/deploy/DbMigrationInfo.java | 2 +- .../deploy/DeployDocPropertyOptions.java | 5 +--- .../server/deploy/DetermineAggPath.java | 2 +- .../server/deploy/DetermineManyType.java | 5 +--- .../DynamicPropertyAggregationFormulaMTO.java | 2 +- .../server/deploy/ElementEntityBean.java | 4 +--- .../server/deploy/ElementHelpList.java | 2 +- .../server/deploy/ElementHelpMap.java | 2 +- .../server/deploy/ElementHelpSet.java | 2 +- .../server/deploy/ExportedProperty.java | 4 +--- .../server/deploy/IdentityMode.java | 2 +- .../server/deploy/IndexDefinition.java | 2 +- .../server/deploy/InheritInfo.java | 24 +------------------ .../server/deploy/IntersectionBuilder.java | 2 +- .../server/deploy/IntersectionRow.java | 5 +--- .../server/deploy/IntersectionTable.java | 2 +- .../server/deploy/PartitionMeta.java | 3 +-- .../deploy/PersistControllerManager.java | 2 +- .../server/deploy/PersistListenerManager.java | 2 +- .../server/deploy/PersistenceContextUtil.java | 2 +- .../server/deploy/PostConstructManager.java | 2 +- .../server/deploy/PostLoadManager.java | 2 +- .../server/deploy/PropertyForeignKey.java | 2 +- .../server/deploy/TableJoinColumn.java | 2 +- .../meta/BeanPropertyElementSetter.java | 2 +- .../deploy/meta/DeployBeanEmbedded.java | 2 +- .../deploy/meta/DeployBeanObtainJackson.java | 2 +- .../meta/DeployBeanPropertyAssocOne.java | 2 +- .../deploy/meta/DeployBeanPropertyLists.java | 2 +- .../DeployBeanPropertySimpleCollection.java | 2 +- .../server/deploy/meta/DeployBeanTable.java | 2 +- .../deploy/meta/DeployIdentityMode.java | 2 +- .../server/deploy/meta/DeployOrderColumn.java | 2 +- .../server/deploy/meta/DeployTableJoin.java | 8 +++---- .../deploy/meta/DeployTableJoinColumn.java | 2 +- .../deploy/parse/AnnotationAssocManys.java | 2 +- .../deploy/parse/AnnotationAssocOnes.java | 2 +- .../server/deploy/parse/AnnotationClass.java | 2 +- .../server/deploy/parse/AnnotationFields.java | 2 +- .../server/deploy/parse/AnnotationFind.java | 2 +- .../server/deploy/parse/AnnotationSql.java | 2 +- .../server/deploy/parse/DeployBeanInfo.java | 2 +- .../deploy/parse/DeployCreateProperties.java | 2 +- .../server/deploy/parse/DeployInherit.java | 2 +- .../deploy/parse/DeployInheritInfo.java | 2 +- .../server/deploy/parse/DeployUtil.java | 2 +- .../parse/InitMetaJacksonAnnotation.java | 2 +- .../deploy/parse/ReadAnnotationConfig.java | 2 +- .../server/deploy/parse/ReadAnnotations.java | 2 +- .../ReadValidationAnnotationsJakarta.java | 2 +- .../parse/ReadValidationAnnotationsJavax.java | 2 +- .../deploy/parse/TransientProperties.java | 8 +------ .../server/rawsql/DRawSqlService.java | 2 +- .../ebeaninternal/server/util/ArrayStack.java | 2 +- .../deploy/parse/AnnotationClassTest.java | 9 ++++--- .../model/visitor/VisitAllUsing.java | 2 +- 93 files changed, 106 insertions(+), 182 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java index 874231645..0aad172c3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefExported.java @@ -5,7 +5,7 @@ import io.ebeaninternal.server.query.SqlJoinType; /** * Helper for BeanPropertyAssocOne for OneToOne exported reference - not so common. */ -class AssocOneHelpRefExported extends AssocOneHelp { +final class AssocOneHelpRefExported extends AssocOneHelp { private final boolean softDelete; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java index 1d619507b..7204a2cf1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefInherit.java @@ -9,7 +9,7 @@ import java.sql.SQLException; /** * Helper for BeanPropertyAssocOne imported reference but with inheritance. */ -class AssocOneHelpRefInherit extends AssocOneHelp { +final class AssocOneHelpRefInherit extends AssocOneHelp { private final InheritInfo inherit; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefSimple.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefSimple.java index 967d7d492..cf6b09798 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefSimple.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/AssocOneHelpRefSimple.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.deploy; /** * Helper for BeanPropertyAssocOne imported reference - this is the common case. */ -class AssocOneHelpRefSimple extends AssocOneHelp { +final class AssocOneHelpRefSimple extends AssocOneHelp { AssocOneHelpRefSimple(BeanPropertyAssocOne property, String embeddedPrefix) { super(property, embeddedPrefix); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCascadeInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCascadeInfo.java index 36b7b2152..c5df36975 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCascadeInfo.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCascadeInfo.java @@ -8,7 +8,7 @@ import javax.persistence.CascadeType; * This is set to associated Beans, Table joins and List. *

*/ -public class BeanCascadeInfo { +public final class BeanCascadeInfo { private boolean delete; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanChangeJson.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanChangeJson.java index e2a6938ff..2e9b9cc69 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanChangeJson.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanChangeJson.java @@ -11,16 +11,13 @@ import java.io.StringWriter; /** * Builds the 'new values' and 'old values' in JSON form for ChangeLog. */ -class BeanChangeJson implements BeanDiffVisitor { +final class BeanChangeJson implements BeanDiffVisitor { private final StringWriter newData; private final StringWriter oldData; - private final SpiJsonWriter newJson; private final SpiJsonWriter oldJson; - private final ArrayStack> stack = new ArrayStack<>(); - private BeanDescriptor descriptor; BeanChangeJson(BeanDescriptor descriptor, boolean statelessUpdate) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java index a3376cd2e..e46bd2908 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionHelpFactory.java @@ -9,7 +9,7 @@ import io.ebeaninternal.server.query.CQueryCollectionAdd; /** * Creates Helpers specific to the type of the property (List Set or Map). */ -public class BeanCollectionHelpFactory { +public final class BeanCollectionHelpFactory { @SuppressWarnings("rawtypes") private static final BeanListHelp LIST_HELP = new BeanListHelp(); @@ -21,7 +21,6 @@ public class BeanCollectionHelpFactory { * Create the helper based on the many property. */ public static BeanCollectionHelp create(BeanPropertyAssocMany many) { - boolean elementCollection = many.isElementCollection(); ManyType manyType = many.getManyType(); switch (manyType) { @@ -30,7 +29,7 @@ public class BeanCollectionHelpFactory { case SET: return elementCollection ? new BeanSetHelpElement<>(many) : new BeanSetHelp<>(many); case MAP: - return elementCollection ? new BeanMapHelpElement<>(many) :new BeanMapHelp<>(many); + return elementCollection ? new BeanMapHelpElement<>(many) : new BeanMapHelp<>(many); default: throw new RuntimeException("Invalid type " + manyType); } @@ -39,7 +38,6 @@ public class BeanCollectionHelpFactory { @SuppressWarnings("unchecked") public static CQueryCollectionAdd create(SpiQuery.Type manyType, OrmQueryRequest request) { - if (manyType == SpiQuery.Type.LIST) { return LIST_HELP; @@ -56,5 +54,4 @@ public class BeanCollectionHelpFactory { } } - } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java index e632a729c..e1a0d352c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanCollectionUtil.java @@ -9,7 +9,7 @@ import java.util.Map; /** * Utility methods for BeanCollections. */ -public class BeanCollectionUtil { +public final class BeanCollectionUtil { /** * Return true if this is a bean collection and not considered dirty. @@ -66,7 +66,6 @@ public class BeanCollectionUtil { // returns a collection of beans return bc.getActualDetails(); } - if (o instanceof Map) { // yes, we want the entrySet (to set the keys) return ((Map) o).values(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java index 059b368a0..d9b56f215 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorJsonHelp.java @@ -16,10 +16,9 @@ import java.util.Map; import static io.ebeaninternal.server.persist.DmlUtil.isNullOrZero; -class BeanDescriptorJsonHelp { +final class BeanDescriptorJsonHelp { private final BeanDescriptor desc; - private final InheritInfo inheritInfo; BeanDescriptorJsonHelp(BeanDescriptor desc) { @@ -28,21 +27,16 @@ class BeanDescriptorJsonHelp { } void jsonWrite(SpiJsonWriter writeJson, EntityBean bean, String key) throws IOException { - writeJson.writeStartObject(key); - if (inheritInfo == null) { jsonWriteProperties(writeJson, bean); - } else { InheritInfo localInheritInfo = inheritInfo.readType(bean.getClass()); String discValue = localInheritInfo.getDiscriminatorStringValue(); String discColumn = localInheritInfo.getDiscriminatorColumn(); writeJson.gen().writeStringField(discColumn, discValue); - localInheritInfo.desc().jsonWriteProperties(writeJson, bean); } - writeJson.writeEndObject(); } @@ -59,7 +53,6 @@ class BeanDescriptorJsonHelp { } void jsonWriteDirtyProperties(SpiJsonWriter writeJson, EntityBean bean, boolean[] dirtyProps) throws IOException { - writeJson.writeStartObject(null); // render the dirty properties BeanProperty[] props = desc.propertiesNonTransient(); @@ -73,7 +66,6 @@ class BeanDescriptorJsonHelp { @SuppressWarnings("unchecked") T jsonRead(SpiJsonReader jsonRead, String path, boolean withInheritance) throws IOException { - JsonParser parser = jsonRead.getParser(); //noinspection StatementWithEmptyBody if (parser.getCurrentToken() == JsonToken.START_OBJECT) { @@ -115,21 +107,17 @@ class BeanDescriptorJsonHelp { } private T jsonReadObject(SpiJsonReader readJson, String path) throws IOException { - EntityBean bean = desc.createEntityBeanForJson(); return jsonReadProperties(readJson, bean, path); } @SuppressWarnings("unchecked") private T jsonReadProperties(SpiJsonReader readJson, EntityBean bean, String path) throws IOException { - if (path != null) { readJson.pushPath(path); } - // unmapped properties, send to JsonReadBeanVisitor later Map unmappedProperties = null; - do { JsonParser parser = readJson.getParser(); JsonToken event = parser.nextToken(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java index 84b412513..ef1117659 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanDescriptorManager.java @@ -86,7 +86,7 @@ import java.util.concurrent.TimeUnit; /** * Creates BeanDescriptors. */ -public class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeManager { +public final class BeanDescriptorManager implements BeanDescriptorMap, SpiBeanTypeManager { private static final Logger logger = LoggerFactory.getLogger(BeanDescriptorManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMeta.java index cac179b62..57aed6cb3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMeta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMeta.java @@ -1,7 +1,6 @@ package io.ebeaninternal.server.deploy; -public class BeanEmbeddedMeta { - +public final class BeanEmbeddedMeta { private final BeanProperty[] properties; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java index 5def0dc64..d6ee56491 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java @@ -10,7 +10,7 @@ import java.util.Map; * Creates BeanProperties for Embedded beans that have deployment information * such as the actual DB column name and table alias. */ -class BeanEmbeddedMetaFactory { +final class BeanEmbeddedMetaFactory { /** * Create BeanProperties for embedded beans using the deployment specific DB column name and table alias. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java index a1e916310..bb85c3b76 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFinderManager.java @@ -11,7 +11,7 @@ import java.util.List; /** * Default implementation for BeanFinderFactory. */ -class BeanFinderManager { +final class BeanFinderManager { private final Logger logger = LoggerFactory.getLogger(BeanFinderManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java index e651e7fc2..071a0f660 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanFkeyProperty.java @@ -16,7 +16,6 @@ public final class BeanFkeyProperty implements ElPropertyValue { private final String name; private final String dbColumn; private final boolean containsMany; - private final int deployOrder; public BeanFkeyProperty(String name, String dbColumn, int deployOrder) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanIudMetrics.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanIudMetrics.java index 889716aa3..64e4deb8f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanIudMetrics.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanIudMetrics.java @@ -8,7 +8,7 @@ import io.ebeaninternal.server.core.PersistRequest; /** * Metrics for ORM Insert Update and Delete for a given bean type. */ -class BeanIudMetrics { +final class BeanIudMetrics { private final TimedMetric insert; private final TimedMetric update; @@ -21,7 +21,6 @@ class BeanIudMetrics { * Create for a given bean type. */ BeanIudMetrics(String beanShortName) { - MetricFactory metricFactory = MetricFactory.get(); String prefix = "iud." + beanShortName; this.insert = metricFactory.createTimedMetric(prefix + ".insert"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanLifecycleAdapterFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanLifecycleAdapterFactory.java index 7a581e1c8..f754c9060 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanLifecycleAdapterFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanLifecycleAdapterFactory.java @@ -30,7 +30,7 @@ import java.util.List; * lifecycle events. *

*/ -class BeanLifecycleAdapterFactory { +final class BeanLifecycleAdapterFactory { private final boolean postConstructPresent; @@ -42,20 +42,16 @@ class BeanLifecycleAdapterFactory { * Register a BeanPersistController for methods annotated with lifecycle events. */ void addLifecycleMethods(DeployBeanDescriptor deployDesc) { - Method[] methods = deployDesc.getBeanType().getMethods(); - // look for annotated methods MethodsHolder methodHolder = new MethodsHolder(); for (Method m : methods) { methodHolder.checkMethod(m, postConstructPresent); } - if (methodHolder.hasPersistMethods()) { // has pre/post persist annotated methods deployDesc.addPersistController(new PersistAdapter(new PersistMethodsHolder(methodHolder))); } - if (!methodHolder.postLoads.isEmpty()) { // has postLoad methods deployDesc.addPostLoad(new PostLoadAdapter(methodHolder.postLoads)); @@ -69,7 +65,7 @@ class BeanLifecycleAdapterFactory { /** * Holds Methods for the lifecycle events.s */ - private static class MethodsHolder { + private static final class MethodsHolder { private boolean hasPersistMethods; private final List preInserts = new ArrayList<>(); @@ -162,7 +158,7 @@ class BeanLifecycleAdapterFactory { /** * Holds Methods for the lifecycle events.s */ - private static class PersistMethodsHolder { + private static final class PersistMethodsHolder { private final Method[] preInserts; private final Method[] postInserts; @@ -188,7 +184,7 @@ class BeanLifecycleAdapterFactory { /** * BeanPersistAdapter using reflection to invoke lifecycle methods. */ - private static class PersistAdapter extends BeanPersistAdapter { + private static final class PersistAdapter extends BeanPersistAdapter { private final PersistMethodsHolder methodHolder; @@ -264,7 +260,7 @@ class BeanLifecycleAdapterFactory { /** * BeanPostLoad using reflection to invoke lifecycle methods. */ - private static class PostLoadAdapter implements BeanPostLoad { + private static final class PostLoadAdapter implements BeanPostLoad { private final Method[] postLoadMethods; @@ -297,7 +293,7 @@ class BeanLifecycleAdapterFactory { /** * PostConstructAdapter using reflection to invoke lifecycle methods. */ - private static class PostConstructAdapter implements BeanPostConstructListener { + private static final class PostConstructAdapter implements BeanPostConstructListener { private final Method[] postConstructMethods; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanListHelpElement.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanListHelpElement.java index 0e473e4eb..b5f3ae432 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanListHelpElement.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanListHelpElement.java @@ -7,7 +7,7 @@ import io.ebeaninternal.api.json.SpiJsonWriter; /** * Helper for element collection List. */ -public class BeanListHelpElement extends BeanListHelp { +public final class BeanListHelpElement extends BeanListHelp { BeanListHelpElement(BeanPropertyAssocMany many) { super(many); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManager.java index 630c60b4e..d6d605313 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManager.java @@ -5,10 +5,9 @@ import io.ebeaninternal.server.persist.BeanPersister; /** * Holds the BeanDescriptor and its associated BeanPersister. */ -public class BeanManager { +public final class BeanManager { private final BeanPersister persister; - private final BeanDescriptor descriptor; public BeanManager(BeanDescriptor descriptor, BeanPersister persister) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManagerFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManagerFactory.java index e80cff573..3f2f61e14 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManagerFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanManagerFactory.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.persist.dml.DmlBeanPersisterFactory; /** * Creates BeanManagers. */ -class BeanManagerFactory { +final class BeanManagerFactory { private final BeanPersisterFactory persisterFactory; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapHelpElement.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapHelpElement.java index 71cdfb3fa..1c6fb7931 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapHelpElement.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapHelpElement.java @@ -5,7 +5,7 @@ import io.ebean.bean.EntityBean; import io.ebean.common.BeanMap; import io.ebeaninternal.api.json.SpiJsonWriter; -public class BeanMapHelpElement extends BeanMapHelp { +public final class BeanMapHelpElement extends BeanMapHelp { BeanMapHelpElement(BeanPropertyAssocMany many) { super(many); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapQueryHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapQueryHelp.java index e78381b0b..b2e4f0f7d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapQueryHelp.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanMapQueryHelp.java @@ -6,7 +6,7 @@ import io.ebean.common.BeanMap; import io.ebeaninternal.server.el.ElPropertyValue; import io.ebeaninternal.server.query.CQueryCollectionAdd; -class BeanMapQueryHelp implements CQueryCollectionAdd { +final class BeanMapQueryHelp implements CQueryCollectionAdd { private final ElPropertyValue elGetValue; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanNaturalKey.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanNaturalKey.java index 57f6c2512..3d3ed9866 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanNaturalKey.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanNaturalKey.java @@ -6,7 +6,7 @@ import java.util.Set; /** * Natural key for a bean type. */ -public class BeanNaturalKey { +public final class BeanNaturalKey { private final String[] naturalKey; private final BeanProperty[] props; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyIdClass.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyIdClass.java index 45d3614c3..9e0d61684 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyIdClass.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyIdClass.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssocOne; /** * Bean property for an IdClass embeddedId. */ -public class BeanPropertyIdClass extends BeanPropertyAssocOne { +public final class BeanPropertyIdClass extends BeanPropertyAssocOne { @SuppressWarnings("unchecked") public BeanPropertyIdClass(BeanDescriptorMap owner, BeanDescriptor descriptor, DeployBeanPropertyAssocOne deploy) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOrderColumn.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOrderColumn.java index 319c8830b..a6ac913b9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOrderColumn.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOrderColumn.java @@ -8,7 +8,7 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanProperty; * * The value of which is held on the entity bean intercept. */ -public class BeanPropertyOrderColumn extends BeanProperty { +public final class BeanPropertyOrderColumn extends BeanProperty { public BeanPropertyOrderColumn(BeanDescriptor descriptor, DeployBeanProperty deploy) { super(descriptor, deploy); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOverride.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOverride.java index d322c5074..fd938d0d2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOverride.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyOverride.java @@ -9,7 +9,7 @@ import io.ebeaninternal.server.core.InternString; * Typically this is for Embedded Beans. *

*/ -class BeanPropertyOverride { +final class BeanPropertyOverride { private final String dbColumn; private final boolean dbNullable; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertySimpleCollection.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertySimpleCollection.java index d73574379..2fbf41dcc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertySimpleCollection.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertySimpleCollection.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanPropertySimpleCollection; import java.io.IOException; -public class BeanPropertySimpleCollection extends BeanPropertyAssocMany { +public final class BeanPropertySimpleCollection extends BeanPropertyAssocMany { public BeanPropertySimpleCollection(BeanDescriptor descriptor, DeployBeanPropertySimpleCollection deploy) { super(descriptor, deploy); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanQueryAdapterManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanQueryAdapterManager.java index 7a50f2deb..2f8f05317 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanQueryAdapterManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanQueryAdapterManager.java @@ -11,7 +11,7 @@ import java.util.List; /** * Default implementation for creating BeanControllers. */ -class BeanQueryAdapterManager { +final class BeanQueryAdapterManager { private static final Logger logger = LoggerFactory.getLogger(BeanQueryAdapterManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanSetHelpElement.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanSetHelpElement.java index 94ac9e5a5..2201d69aa 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanSetHelpElement.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanSetHelpElement.java @@ -7,7 +7,7 @@ import io.ebeaninternal.api.json.SpiJsonWriter; /** * Helper for element collection List. */ -public class BeanSetHelpElement extends BeanSetHelp { +public final class BeanSetHelpElement extends BeanSetHelp { BeanSetHelpElement(BeanPropertyAssocMany many) { super(many); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanTable.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanTable.java index f2cc09e78..3ccdb8218 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanTable.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanTable.java @@ -17,19 +17,13 @@ import org.slf4j.LoggerFactory; * in a BeanDescriptor. *

*/ -public class BeanTable { +public final class BeanTable { private static final Logger logger = LoggerFactory.getLogger(BeanTable.class); private final BeanDescriptorMap owner; - private final Class beanType; - - /** - * The base table. - */ private final String baseTable; - private final BeanProperty idProperty; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPersistController.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPersistController.java index 404336aca..dfb2c302a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPersistController.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPersistController.java @@ -14,7 +14,7 @@ import java.util.List; *

* Used when multiple BeanPersistController register for the same bean type. */ -public class ChainedBeanPersistController implements BeanPersistController { +public final class ChainedBeanPersistController implements BeanPersistController { private static final Sorter SORTER = new Sorter(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPersistListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPersistListener.java index b92aa4ec7..d49380577 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPersistListener.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPersistListener.java @@ -9,10 +9,9 @@ import java.util.Set; /** * Handles multiple BeanPersistListener's for a given entity type. */ -public class ChainedBeanPersistListener implements BeanPersistListener { +public final class ChainedBeanPersistListener implements BeanPersistListener { private final List list; - private final BeanPersistListener[] chain; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPostConstructListener.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPostConstructListener.java index e9ba81c95..c615f8b20 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPostConstructListener.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPostConstructListener.java @@ -8,10 +8,9 @@ import java.util.List; /** * Handles multiple BeanPostLoad's for a given entity type. */ -public class ChainedBeanPostConstructListener implements BeanPostConstructListener { +public final class ChainedBeanPostConstructListener implements BeanPostConstructListener { private final List list; - private final BeanPostConstructListener[] chain; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPostLoad.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPostLoad.java index 9da1fdd66..4d7cff8ef 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPostLoad.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanPostLoad.java @@ -8,10 +8,9 @@ import java.util.List; /** * Handles multiple BeanPostLoad's for a given entity type. */ -public class ChainedBeanPostLoad implements BeanPostLoad { +public final class ChainedBeanPostLoad implements BeanPostLoad { private final List list; - private final BeanPostLoad[] chain; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanQueryAdapter.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanQueryAdapter.java index 15501ef0e..ca67a0746 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanQueryAdapter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ChainedBeanQueryAdapter.java @@ -11,12 +11,11 @@ import java.util.List; /** * Handles multiple BeanQueryAdapter for a given entity type. */ -public class ChainedBeanQueryAdapter implements BeanQueryAdapter { +public final class ChainedBeanQueryAdapter implements BeanQueryAdapter { private static final Sorter SORTER = new Sorter(); private final List list; - private final BeanQueryAdapter[] chain; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheControl.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheControl.java index a99dabf89..a43f9f749 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheControl.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheControl.java @@ -6,7 +6,7 @@ import io.ebeaninternal.api.SpiCacheRegion; /** * Default implementation of SpiCacheControl. */ -class DCacheControl implements SpiCacheControl { +final class DCacheControl implements SpiCacheControl { private final SpiCacheRegion region; private final boolean bean; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheControlNone.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheControlNone.java index 8f4797f47..1101c180b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheControlNone.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheControlNone.java @@ -5,7 +5,7 @@ import io.ebeaninternal.api.SpiCacheControl; /** * Cache control used when no caching is on the bean type. */ -class DCacheControlNone implements SpiCacheControl { +final class DCacheControlNone implements SpiCacheControl { static final SpiCacheControl INSTANCE = new DCacheControlNone(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheRegion.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheRegion.java index 2056833b7..9f1bd5d59 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheRegion.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheRegion.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.deploy; import io.ebeaninternal.api.SpiCacheRegion; -public class DCacheRegion implements SpiCacheRegion { +public final class DCacheRegion implements SpiCacheRegion { private boolean enabled = true; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheRegionNone.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheRegionNone.java index ff8dfeb17..c7b20095a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheRegionNone.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DCacheRegionNone.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.deploy; import io.ebeaninternal.api.SpiCacheRegion; -class DCacheRegionNone implements SpiCacheRegion { +final class DCacheRegionNone implements SpiCacheRegion { static final SpiCacheRegion INSTANCE = new DCacheRegionNone(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbMigrationInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbMigrationInfo.java index 630ea953b..e6e4a3eef 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbMigrationInfo.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DbMigrationInfo.java @@ -10,7 +10,7 @@ import io.ebean.annotation.Platform; * * @author Roland Praml, FOCONIS AG */ -public class DbMigrationInfo { +public final class DbMigrationInfo { private final List preAdd; private final List postAdd; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DeployDocPropertyOptions.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DeployDocPropertyOptions.java index 81d8ea3f8..e6e00b2e9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DeployDocPropertyOptions.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DeployDocPropertyOptions.java @@ -8,7 +8,7 @@ import io.ebeanservice.docstore.api.mapping.DocPropertyOptions; /** * The options for document property collected when reading deployment mapping. */ -public class DeployDocPropertyOptions { +public final class DeployDocPropertyOptions { private static final DocPropertyOptions EMPTY = new DocPropertyOptions(); @@ -24,7 +24,6 @@ public class DeployDocPropertyOptions { * Read the DocProperty deployment options. */ public void setDocProperty(DocProperty doc) { - createOptions(); mapping.apply(doc); } @@ -33,7 +32,6 @@ public class DeployDocPropertyOptions { * Read the DocSortable deployment options. */ public void setDocSortable(DocSortable doc) { - createOptions(); mapping.setSortable(true); setStore(doc.store()); @@ -45,7 +43,6 @@ public class DeployDocPropertyOptions { * Read the DocCode deployment options. */ public void setDocCode(DocCode doc) { - createOptions(); mapping.setCode(true); setStore(doc.store()); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineAggPath.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineAggPath.java index c2e576b0c..5790377db 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineAggPath.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineAggPath.java @@ -5,7 +5,7 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanProperty; import io.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssocMany; import io.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssocOne; -class DetermineAggPath { +final class DetermineAggPath { /** * Return the many path for the given aggregation formula. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineManyType.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineManyType.java index cfa560310..fc1859074 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineManyType.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DetermineManyType.java @@ -7,10 +7,7 @@ import java.util.Set; /** * Determine the Many Type for a property. */ -public class DetermineManyType { - - public DetermineManyType() { - } +public final class DetermineManyType { public ManyType getManyType(Class type) { if (type.equals(List.class)) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormulaMTO.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormulaMTO.java index eb8ba9997..0021d9636 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormulaMTO.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/DynamicPropertyAggregationFormulaMTO.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.deploy; import io.ebeaninternal.server.query.SqlBeanLoad; -public class DynamicPropertyAggregationFormulaMTO extends DynamicPropertyAggregationFormula { +public final class DynamicPropertyAggregationFormulaMTO extends DynamicPropertyAggregationFormula { private final BeanPropertyAssocOne prop; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementEntityBean.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementEntityBean.java index 49dfccdc8..2f6566bff 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementEntityBean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementEntityBean.java @@ -3,14 +3,12 @@ package io.ebeaninternal.server.deploy; import io.ebean.bean.EntityBean; import io.ebean.bean.EntityBeanIntercept; -class ElementEntityBean implements EntityBean { +final class ElementEntityBean implements EntityBean { private static final long serialVersionUID = 8742536671024715601L; private final String[] properties; - private Object[] data; - private final EntityBeanIntercept intercept; ElementEntityBean(String[] properties) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpList.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpList.java index 5c48b4f19..a9e38699e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpList.java @@ -6,7 +6,7 @@ import io.ebean.common.BeanList; import java.util.ArrayList; import java.util.List; -class ElementHelpList implements ElementHelp { +final class ElementHelpList implements ElementHelp { @Override public ElementCollector createCollector() { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpMap.java index 985ab4248..e00d2ef2f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpMap.java @@ -6,7 +6,7 @@ import io.ebean.common.BeanMap; import java.util.LinkedHashMap; import java.util.Map; -class ElementHelpMap implements ElementHelp { +final class ElementHelpMap implements ElementHelp { @Override public ElementCollector createCollector() { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpSet.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpSet.java index 71c15aee3..e15e74e28 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpSet.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ElementHelpSet.java @@ -6,7 +6,7 @@ import io.ebean.common.BeanSet; import java.util.LinkedHashSet; import java.util.Set; -class ElementHelpSet implements ElementHelp { +final class ElementHelpSet implements ElementHelp { @Override public ElementCollector createCollector() { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ExportedProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ExportedProperty.java index 8c4b789ab..b8ec305a4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ExportedProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/ExportedProperty.java @@ -9,12 +9,10 @@ import io.ebeaninternal.server.core.InternString; * Used to for Assoc Manys to create references etc. *

*/ -class ExportedProperty { +final class ExportedProperty { private final String foreignDbColumn; - private final BeanProperty property; - private final boolean embedded; ExportedProperty(boolean embedded, String foreignDbColumn, BeanProperty property) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IdentityMode.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IdentityMode.java index 0bea99393..9ffd2c2e5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IdentityMode.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IdentityMode.java @@ -4,7 +4,7 @@ import io.ebean.annotation.IdentityGenerated; import io.ebean.config.dbplatform.IdType; import io.ebeaninternal.server.deploy.meta.DeployIdentityMode; -public class IdentityMode { +public final class IdentityMode { public static IdentityMode NONE = new IdentityMode(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IndexDefinition.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IndexDefinition.java index 3fec7ecf4..032452574 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IndexDefinition.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IndexDefinition.java @@ -5,7 +5,7 @@ import io.ebean.annotation.Platform; /** * Holds multiple column unique constraints defined for an entity. */ -public class IndexDefinition { +public final class IndexDefinition { private final String[] columns; private final String name; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java index a8a733a41..1f3e33797 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/InheritInfo.java @@ -17,43 +17,30 @@ import java.util.Set; /** * Represents a node in the Inheritance tree. Holds information regarding Super Subclass support. */ -public class InheritInfo { +public final class InheritInfo { private final String discriminatorStringValue; private final Object discriminatorValue; - private final String discriminatorColumn; - private final int discriminatorType; - private final int discriminatorLength; - private final String columnDefn; - private final String where; - private final Class type; - private final List children = new ArrayList<>(); - /** * Map of discriminator values to InheritInfo. */ private final HashMap discMap; - /** * Map of class types to InheritInfo (taking into account subclass proxy classes). */ private final HashMap typeMap; - private final InheritInfo parent; - private final InheritInfo root; - private BeanDescriptor descriptor; public InheritInfo(InheritInfo r, InheritInfo parent, DeployInheritInfo deploy) { - this.parent = parent; this.type = deploy.getType(); this.discriminatorColumn = InternString.intern(deploy.getColumnName(parent)); @@ -85,7 +72,6 @@ public class InheritInfo { * Visit all the children in the inheritance tree. */ public void visitChildren(InheritInfoVisitor visitor) { - for (InheritInfo child : children) { visitor.visit(child); child.visitChildren(visitor); @@ -96,7 +82,6 @@ public class InheritInfo { * Append check constraint values for the entire inheritance hierarchy. */ public void appendCheckConstraintValues(final String propertyName, final Set checkConstraintValues) { - visitChildren(inheritInfo -> { BeanProperty prop = inheritInfo.desc().getBeanProperty(propertyName); if (prop != null) { @@ -190,9 +175,7 @@ public class InheritInfo { * Get the bean property additionally looking in the sub types. */ BeanProperty findSubTypeProperty(String propertyName) { - BeanProperty prop; - for (InheritInfo childInfo : children) { // recursively search this child bean descriptor prop = childInfo.desc().findProperty(propertyName); @@ -200,7 +183,6 @@ public class InheritInfo { return prop; } } - return null; } @@ -208,7 +190,6 @@ public class InheritInfo { * Add the local properties for each sub class below this one. */ public void addChildrenProperties(SqlTreeProperties selectProps) { - for (InheritInfo childInfo : children) { selectProps.add(childInfo.descriptor.propertiesLocal()); childInfo.addChildrenProperties(selectProps); @@ -226,11 +207,9 @@ public class InheritInfo { * Return the associated InheritInfo for this discriminator value. */ InheritInfo readType(String discValue) { - if (discValue == null) { return null; } - InheritInfo typeInfo = root.getType(discValue); if (typeInfo == null) { throw new PersistenceException("Inheritance type for discriminator value [" + discValue + "] was not found?"); @@ -242,7 +221,6 @@ public class InheritInfo { * Return the associated InheritInfo for this bean type. */ public InheritInfo readType(Class beanType) { - InheritInfo typeInfo = root.getTypeByClass(beanType); if (typeInfo == null) { throw new PersistenceException("Inheritance type for bean type [" + beanType.getName() + "] was not found?"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionBuilder.java index 764c2c700..bbe133838 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionBuilder.java @@ -6,7 +6,7 @@ import java.util.List; /** * Helper to build IntersectionTable. */ -public class IntersectionBuilder { +public final class IntersectionBuilder { private final String publishTable; private final String draftTable; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionRow.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionRow.java index 46d677ad8..3284032bb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionRow.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionRow.java @@ -12,14 +12,11 @@ import java.util.LinkedHashMap; import java.util.List; import java.util.Map; -public class IntersectionRow { +public final class IntersectionRow { private final String tableName; - private final BeanDescriptor targetDescriptor; - private final LinkedHashMap values = new LinkedHashMap<>(); - private List excludeIds; private BeanDescriptor excludeDescriptor; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionTable.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionTable.java index 8f10e3a92..1a3553ed4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionTable.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/IntersectionTable.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.deploy; import io.ebean.Database; import io.ebean.SqlUpdate; -public class IntersectionTable { +public final class IntersectionTable { private final String insertSql; private final String deleteSql; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PartitionMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PartitionMeta.java index d041ae0a1..f146dc86f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PartitionMeta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PartitionMeta.java @@ -2,10 +2,9 @@ package io.ebeaninternal.server.deploy; import io.ebean.annotation.PartitionMode; -public class PartitionMeta { +public final class PartitionMeta { private final PartitionMode mode; - private String property; public PartitionMeta(PartitionMode mode, String property) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistControllerManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistControllerManager.java index f552fc77f..a6d45a12e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistControllerManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistControllerManager.java @@ -11,7 +11,7 @@ import java.util.List; /** * Default implementation for creating BeanControllers. */ -class PersistControllerManager { +final class PersistControllerManager { private static final Logger logger = LoggerFactory.getLogger(PersistControllerManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistListenerManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistListenerManager.java index 0e9c261c7..13ca4e7a5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistListenerManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistListenerManager.java @@ -12,7 +12,7 @@ import java.util.List; * Manages the assignment/registration of BeanPersistListener with their * respective DeployBeanDescriptor's. */ -class PersistListenerManager { +final class PersistListenerManager { private static final Logger logger = LoggerFactory.getLogger(PersistListenerManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistenceContextUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistenceContextUtil.java index 69ad243e8..1a1c5651f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistenceContextUtil.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PersistenceContextUtil.java @@ -5,7 +5,7 @@ import javax.persistence.Entity; /** * Utility to find the root bean type. */ -public class PersistenceContextUtil { +public final class PersistenceContextUtil { /** * Find and return the root bean type for the given class. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostConstructManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostConstructManager.java index 0ef7b7120..6e7bb97c5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostConstructManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostConstructManager.java @@ -11,7 +11,7 @@ import java.util.List; /** * Default implementation for creating BeanControllers. */ -class PostConstructManager { +final class PostConstructManager { private static final Logger logger = LoggerFactory.getLogger(PostConstructManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostLoadManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostLoadManager.java index 0648d788f..f30826b90 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostLoadManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PostLoadManager.java @@ -11,7 +11,7 @@ import java.util.List; /** * Default implementation for creating BeanControllers. */ -class PostLoadManager { +final class PostLoadManager { private static final Logger logger = LoggerFactory.getLogger(PostLoadManager.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PropertyForeignKey.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PropertyForeignKey.java index 480362e2a..6f66d3ed2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PropertyForeignKey.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/PropertyForeignKey.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.deploy; import io.ebean.annotation.ConstraintMode; import io.ebean.annotation.DbForeignKey; -public class PropertyForeignKey { +public final class PropertyForeignKey { private final boolean noIndex; private final boolean noConstraint; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/TableJoinColumn.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/TableJoinColumn.java index a04d72ed6..4878557b2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/TableJoinColumn.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/TableJoinColumn.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.deploy.meta.DeployTableJoinColumn; /** * A join pair of local and foreign properties. */ -public class TableJoinColumn { +public final class TableJoinColumn { /** * The local database column name. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/BeanPropertyElementSetter.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/BeanPropertyElementSetter.java index f20ee47cf..c8a362b60 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/BeanPropertyElementSetter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/BeanPropertyElementSetter.java @@ -6,7 +6,7 @@ import io.ebeaninternal.server.properties.BeanPropertySetter; /** * Setter used for "element beans" with ElementCollection. */ -class BeanPropertyElementSetter implements BeanPropertySetter { +final class BeanPropertyElementSetter implements BeanPropertySetter { private final int pos; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanEmbedded.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanEmbedded.java index 72b541cef..ad70b8d30 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanEmbedded.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanEmbedded.java @@ -10,7 +10,7 @@ import java.util.Map; * Typically collects the overridden column names mapped * to the Embedded bean. */ -public class DeployBeanEmbedded { +public final class DeployBeanEmbedded { /** * A map of property names to dbColumns. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanObtainJackson.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanObtainJackson.java index 20beef7eb..9bbfb6007 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanObtainJackson.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanObtainJackson.java @@ -8,7 +8,7 @@ import io.ebean.config.DatabaseConfig; /** * Used to obtain the Jackson AnnotatedClass for a given bean type utlimately to obtain field level Jackson annotations. */ -class DeployBeanObtainJackson { +final class DeployBeanObtainJackson { private final DatabaseConfig config; private final Class beanType; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyAssocOne.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyAssocOne.java index 79f253b86..1444c69de 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyAssocOne.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyAssocOne.java @@ -7,7 +7,7 @@ import javax.persistence.CascadeType; /** * Property mapped to a joined bean. */ -public class DeployBeanPropertyAssocOne extends DeployBeanPropertyAssoc { +public final class DeployBeanPropertyAssocOne extends DeployBeanPropertyAssoc { private boolean oneToOne; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyLists.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyLists.java index 5466d5bca..a6ed9c330 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyLists.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertyLists.java @@ -15,7 +15,7 @@ import java.util.List; /** * Helper object to classify BeanProperties into appropriate lists. */ -public class DeployBeanPropertyLists { +public final class DeployBeanPropertyLists { private static final Logger logger = LoggerFactory.getLogger(DeployBeanPropertyLists.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertySimpleCollection.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertySimpleCollection.java index 6777dcc4c..870bae89f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertySimpleCollection.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanPropertySimpleCollection.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.deploy.meta; import io.ebean.bean.BeanCollection.ModifyListenMode; import io.ebeaninternal.server.deploy.ManyType; -public class DeployBeanPropertySimpleCollection extends DeployBeanPropertyAssocMany { +public final class DeployBeanPropertySimpleCollection extends DeployBeanPropertyAssocMany { public DeployBeanPropertySimpleCollection(DeployBeanDescriptor desc, Class targetType, ManyType manyType) { super(desc, targetType, manyType); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanTable.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanTable.java index de0166876..960205e0f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanTable.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanTable.java @@ -13,7 +13,7 @@ import io.ebeaninternal.server.deploy.BeanPropertyAssocOne; * in a BeanDescriptor. *

*/ -public class DeployBeanTable { +public final class DeployBeanTable { private final Class beanType; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployIdentityMode.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployIdentityMode.java index 5915dc873..6a20d9145 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployIdentityMode.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployIdentityMode.java @@ -5,7 +5,7 @@ import io.ebean.annotation.IdentityGenerated; import io.ebean.annotation.IdentityType; import io.ebean.config.dbplatform.IdType; -public class DeployIdentityMode { +public final class DeployIdentityMode { public static DeployIdentityMode auto() { return new DeployIdentityMode(IdType.AUTO); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployOrderColumn.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployOrderColumn.java index 26a8402b6..4a8943a8e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployOrderColumn.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployOrderColumn.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.deploy.meta; import javax.persistence.OrderColumn; -public class DeployOrderColumn { +public final class DeployOrderColumn { /** * Logical property name used for order by and available for expression language. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java index c3451f9f4..2a4608358 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoin.java @@ -15,7 +15,7 @@ import java.util.Set; * This gets converted into a immutable TableJoin when complete. *

*/ -public class DeployTableJoin { +public final class DeployTableJoin { /** * The joined table. @@ -33,7 +33,7 @@ public class DeployTableJoin { private ArrayList columns = new ArrayList<>(4); private InheritInfo inheritInfo; - + private String extraWhere; /** @@ -146,11 +146,11 @@ public class DeployTableJoin { public String getExtraWhere() { return extraWhere; } - + public void setExtraWhere(String extraWhere) { this.extraWhere = extraWhere; } - + public DeployTableJoin createInverse(String tableName) { DeployTableJoin inverse = new DeployTableJoin(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoinColumn.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoinColumn.java index da4bf0339..df5c4e0d5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoinColumn.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployTableJoinColumn.java @@ -8,7 +8,7 @@ import javax.persistence.JoinColumn; /** * A join pair of local and foreign properties. */ -public class DeployTableJoinColumn { +public final class DeployTableJoinColumn { /** * The local database column name. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java index 1ca59dbc8..a98867a54 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocManys.java @@ -41,7 +41,7 @@ import java.util.Set; /** * Read the deployment annotation for Assoc Many beans. */ -class AnnotationAssocManys extends AnnotationAssoc { +final class AnnotationAssocManys extends AnnotationAssoc { AnnotationAssocManys(DeployBeanInfo info, ReadAnnotationConfig readConfig, BeanDescriptorManager factory) { super(info, readConfig, factory); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java index 36fa99b57..727fe7c83 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationAssocOnes.java @@ -30,7 +30,7 @@ import javax.persistence.PrimaryKeyJoinColumn; /** * Read the deployment annotations for Associated One beans. */ -public class AnnotationAssocOnes extends AnnotationAssoc { +final class AnnotationAssocOnes extends AnnotationAssoc { private static final Logger log = LoggerFactory.getLogger(AnnotationAssocOnes.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java index 8985fb4ac..44a9d2113 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationClass.java @@ -36,7 +36,7 @@ import static io.ebean.util.AnnotationUtil.typeGet; /** * Read the class level deployment annotations. */ -public class AnnotationClass extends AnnotationParser { +final class AnnotationClass extends AnnotationParser { private static final Logger logger = LoggerFactory.getLogger(AnnotationClass.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java index 5a0caa287..b6d570817 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFields.java @@ -76,7 +76,7 @@ import java.util.UUID; /** * Read the field level deployment annotations. */ -public class AnnotationFields extends AnnotationParser { +final class AnnotationFields extends AnnotationParser { /** * If present read Jackson JsonIgnore. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFind.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFind.java index 0faf59837..386e08e64 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFind.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationFind.java @@ -15,7 +15,7 @@ import java.util.Set; import static io.ebean.util.AnnotationUtil.get; -public class AnnotationFind { +final class AnnotationFind { public static Set joinColumns(Field field) { final JoinColumn col = get(field, JoinColumn.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationSql.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationSql.java index 5001f2f70..955c119db 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationSql.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/AnnotationSql.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.deploy.BeanDescriptor; /** * Read the class level deployment annotations. */ -class AnnotationSql extends AnnotationParser { +final class AnnotationSql extends AnnotationParser { AnnotationSql(DeployBeanInfo info, ReadAnnotationConfig readConfig) { super(info, readConfig); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployBeanInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployBeanInfo.java index 002cb5e0e..e87ff7754 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployBeanInfo.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployBeanInfo.java @@ -9,7 +9,7 @@ import io.ebeaninternal.server.rawsql.SpiRawSql; /** * Wraps information about a bean during deployment parsing. */ -public class DeployBeanInfo { +public final class DeployBeanInfo { private final DeployUtil util; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java index 6fb54b46d..d3d7ddb7d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployCreateProperties.java @@ -35,7 +35,7 @@ import java.lang.reflect.WildcardType; * one or normal scalar property. *

*/ -public class DeployCreateProperties { +public final class DeployCreateProperties { private static final Logger logger = LoggerFactory.getLogger(DeployCreateProperties.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInherit.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInherit.java index fd9e4641b..7bc0ebd1b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInherit.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInherit.java @@ -15,7 +15,7 @@ import java.util.Map; /** * Builds the InheritInfo deployment information. */ -public class DeployInherit { +public final class DeployInherit { private final Map, DeployInheritInfo> deployMap = new LinkedHashMap<>(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java index fb1a65a54..d1af77c8c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployInheritInfo.java @@ -12,7 +12,7 @@ import java.util.List; * Represents a node in the Inheritance tree. * Holds information regarding Super Subclass support. */ -public class DeployInheritInfo { +public final class DeployInheritInfo { /** * the default discriminator column according to the JPA 1.0 spec. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java index 68cb1c741..276ff8d33 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/DeployUtil.java @@ -26,7 +26,7 @@ import java.sql.Types; /** * Utility object to help processing deployment information. */ -public class DeployUtil { +public final class DeployUtil { /** * Assumes CLOB rather than LONGVARCHAR. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/InitMetaJacksonAnnotation.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/InitMetaJacksonAnnotation.java index 08435de62..f283055ae 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/InitMetaJacksonAnnotation.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/InitMetaJacksonAnnotation.java @@ -1,6 +1,6 @@ package io.ebeaninternal.server.deploy.parse; -class InitMetaJacksonAnnotation { +final class InitMetaJacksonAnnotation { static void init(ReadAnnotationConfig readConfig) { readConfig.addMetaAnnotation(com.fasterxml.jackson.annotation.JacksonAnnotation.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotationConfig.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotationConfig.java index 1daf37564..81b5576e9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotationConfig.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotationConfig.java @@ -15,7 +15,7 @@ import java.util.Set; /** * Configuration used when reading the deployment annotations. */ -class ReadAnnotationConfig { +final class ReadAnnotationConfig { private final GeneratedPropertyFactory generatedPropFactory; private final String asOfViewSuffix; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotations.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotations.java index da2bc6030..c4ab55a1b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotations.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadAnnotations.java @@ -8,7 +8,7 @@ import io.ebeaninternal.server.deploy.generatedproperty.GeneratedPropertyFactory /** * Read the deployment annotations for the bean. */ -public class ReadAnnotations { +public final class ReadAnnotations { private final ReadAnnotationConfig readConfig; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadValidationAnnotationsJakarta.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadValidationAnnotationsJakarta.java index 016e9f13a..95046f25d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadValidationAnnotationsJakarta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadValidationAnnotationsJakarta.java @@ -12,7 +12,7 @@ import java.util.List; /** * Jakarta validation annotations reader. */ -class ReadValidationAnnotationsJakarta implements ReadValidationAnnotations { +final class ReadValidationAnnotationsJakarta implements ReadValidationAnnotations { ReadValidationAnnotationsJakarta(ReadAnnotationConfig readConfig) { readConfig.addMetaAnnotation(Size.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadValidationAnnotationsJavax.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadValidationAnnotationsJavax.java index a690e69de..4704bf766 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadValidationAnnotationsJavax.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/ReadValidationAnnotationsJavax.java @@ -12,7 +12,7 @@ import java.util.List; /** * Javax validation annotations reader. */ -class ReadValidationAnnotationsJavax implements ReadValidationAnnotations { +final class ReadValidationAnnotationsJavax implements ReadValidationAnnotations { ReadValidationAnnotationsJavax(ReadAnnotationConfig readConfig) { readConfig.addMetaAnnotation(Size.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/TransientProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/TransientProperties.java index e7896b96a..be5b10aee 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/TransientProperties.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/parse/TransientProperties.java @@ -8,28 +8,22 @@ import io.ebeaninternal.server.deploy.meta.DeployBeanPropertyAssocOne; /** * Mark transient properties. */ -public class TransientProperties { - - public TransientProperties() { - } +public final class TransientProperties { /** * Mark any additional properties as transient. */ public void process(DeployBeanDescriptor desc) { - for (DeployBeanProperty prop : desc.propertiesBase()) { if (!prop.isDbRead() && !prop.isDbInsertable() && !prop.isDbUpdateable()) { prop.setTransient(); } } - for (DeployBeanPropertyAssocOne prop : desc.propertiesAssocOne()) { if (prop.getBeanTable() == null && !prop.isEmbedded()) { prop.setTransient(); } } - for (DeployBeanPropertyAssocMany prop : desc.propertiesAssocMany()) { if (prop.getBeanTable() == null) { prop.setTransient(); 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 11b80da38..8ffef8a33 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 @@ -11,7 +11,7 @@ import java.sql.ResultSetMetaData; import java.sql.SQLException; import java.sql.Types; -final class DRawSqlService implements SpiRawSqlService { +public final class DRawSqlService implements SpiRawSqlService { @Override public RawSql resultSet(ResultSet resultSet, String... propertyNames) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/util/ArrayStack.java b/ebean-core/src/main/java/io/ebeaninternal/server/util/ArrayStack.java index 8e824f664..4e76caea8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/util/ArrayStack.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/util/ArrayStack.java @@ -7,7 +7,7 @@ import java.util.List; /** * Stack based on ArrayList. */ -public final class ArrayStack { +public class ArrayStack { private final List list; diff --git a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/parse/AnnotationClassTest.java b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/parse/AnnotationClassTest.java index 73aa23ced..5b543e764 100644 --- a/ebean-core/src/test/java/io/ebeaninternal/server/deploy/parse/AnnotationClassTest.java +++ b/ebean-core/src/test/java/io/ebeaninternal/server/deploy/parse/AnnotationClassTest.java @@ -1,12 +1,16 @@ package io.ebeaninternal.server.deploy.parse; +import io.ebean.config.DatabaseConfig; import io.ebean.config.ServerConfig; import io.ebean.config.dbplatform.sqlserver.SqlServer17Platform; import io.ebeaninternal.server.core.bootup.BootupClasses; +import io.ebeaninternal.server.deploy.generatedproperty.GeneratedPropertyFactory; import io.ebeaninternal.server.deploy.meta.DeployBeanDescriptor; import io.ebeaninternal.server.type.DefaultTypeManager; import org.junit.Test; +import java.util.Collections; + import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.Mockito.mock; @@ -46,9 +50,8 @@ public class AnnotationClassTest { DeployUtil deployUtil = new DeployUtil(new DefaultTypeManager(config, new BootupClasses()), config); - DeployBeanInfo deployBeanInfo = new DeployBeanInfo(deployUtil, mock(DeployBeanDescriptor.class)); - ReadAnnotationConfig readAnnotationConfig = mock(ReadAnnotationConfig.class); - + DeployBeanInfo deployBeanInfo = new DeployBeanInfo(deployUtil, new DeployBeanDescriptor<>(null, null, null)); + ReadAnnotationConfig readAnnotationConfig = new ReadAnnotationConfig(new GeneratedPropertyFactory(true, new DatabaseConfig(), Collections.emptyList()), "","", new DatabaseConfig()); return new AnnotationClass(deployBeanInfo, readAnnotationConfig); } diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/visitor/VisitAllUsing.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/visitor/VisitAllUsing.java index 6ffbe1fd4..0cb6db92d 100644 --- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/visitor/VisitAllUsing.java +++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/visitor/VisitAllUsing.java @@ -11,7 +11,7 @@ import java.util.List; * Makes use of BeanVisitor and PropertyVisitor to navigate BeanDescriptors * and their properties. */ -public class VisitAllUsing extends VisitProperties { +public final class VisitAllUsing extends VisitProperties { private final BeanVisitor visitor; From 285a94e5fe96d8f540da94afbe8c3cefec9797ce Mon Sep 17 00:00:00 2001 From: rbygrave Date: Tue, 17 Aug 2021 19:06:54 +1200 Subject: [PATCH 28/68] #2318 - Refactor internals - final classes in dto packages --- .../io/ebeaninternal/server/dto/DtoBeanDescriptor.java | 5 +---- .../java/io/ebeaninternal/server/dto/DtoBeanManager.java | 5 ++--- .../main/java/io/ebeaninternal/server/dto/DtoColumn.java | 2 +- .../io/ebeaninternal/server/dto/DtoMappingRequest.java | 7 +------ .../main/java/io/ebeaninternal/server/dto/DtoMeta.java | 8 +------- .../java/io/ebeaninternal/server/dto/DtoMetaBuilder.java | 5 +---- .../io/ebeaninternal/server/dto/DtoMetaConstructor.java | 5 +---- .../java/io/ebeaninternal/server/dto/DtoMetaProperty.java | 2 +- .../java/io/ebeaninternal/server/dto/DtoNamedQueries.java | 4 ++-- .../io/ebeaninternal/server/dto/DtoQueryPlanConPlus.java | 4 +--- .../ebeaninternal/server/dto/DtoQueryPlanConSetter.java | 4 +--- .../ebeaninternal/server/dto/DtoQueryPlanConstructor.java | 2 +- .../io/ebeaninternal/server/dto/DtoReadSetColumnSkip.java | 2 +- 13 files changed, 15 insertions(+), 40 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoBeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoBeanDescriptor.java index 10f2a2cdc..041ac7d45 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoBeanDescriptor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoBeanDescriptor.java @@ -8,14 +8,11 @@ import java.util.concurrent.ConcurrentHashMap; /** * Manages the query plans for a given DTO bean type. */ -public class DtoBeanDescriptor { +public final class DtoBeanDescriptor { private final Map plans = new ConcurrentHashMap<>(); - private final Class dtoType; - private final DtoMeta meta; - private final Map namedQueries; DtoBeanDescriptor(Class dtoType, DtoMeta meta, Map namedQueries) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoBeanManager.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoBeanManager.java index 4388a180d..c11f79843 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoBeanManager.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoBeanManager.java @@ -10,14 +10,13 @@ import java.util.concurrent.ConcurrentHashMap; /** * Manages all the DTO bean descriptors. */ -public class DtoBeanManager { +@SuppressWarnings("rawtypes") +public final class DtoBeanManager { private static final Map EMPTY_NAMED_QUERIES = new HashMap<>(); private final TypeManager typeManager; - private final Map, DtoNamedQueries> namedQueries; - private final Map descriptorMap = new ConcurrentHashMap<>(); public DtoBeanManager(TypeManager typeManager, Map, DtoNamedQueries> namedQueries) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoColumn.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoColumn.java index 187caf97f..9f42f2d0f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoColumn.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoColumn.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.dto; /** * A column in the resultSet that we want to map to a bean property. */ -public class DtoColumn { +public final class DtoColumn { private final String label; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMappingRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMappingRequest.java index b2a72db61..8c882599c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMappingRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMappingRequest.java @@ -8,18 +8,13 @@ import io.ebeaninternal.api.SpiDtoQuery; /** * Request to map a resultSet columns for a query into a DTO bean. */ -public class DtoMappingRequest { +public final class DtoMappingRequest { private final Class type; - private final String label; - private final ProfileLocation profileLocation; - private final String sql; - private final boolean relaxedMode; - private final DtoColumn[] columnMeta; public DtoMappingRequest(SpiDtoQuery query, String sql, DtoColumn[] columnMeta) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java index 09bc441e9..9582c160e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMeta.java @@ -10,23 +10,19 @@ import java.util.Map; * * Uses this to map a mapping request (columns) to a 'query plan' (constructor and setters). */ -class DtoMeta { +final class DtoMeta { private final Class dtoType; private final Map propMap = new LinkedHashMap<>(); - private final Map constructorMap = new LinkedHashMap<>(); - private final DtoMetaConstructor defaultConstructor; private final DtoMetaConstructor maxArgConstructor; DtoMeta(Class dtoType, List constructors, List properties) { this.dtoType = dtoType; - for (DtoMetaProperty property : properties) { propMap.put(property.getName().toUpperCase(), property); } - int maxArg = 0; DtoMetaConstructor defaultConstructor = null; @@ -47,9 +43,7 @@ class DtoMeta { } public DtoQueryPlan match(DtoMappingRequest request) { - DtoColumn[] cols = request.getColumnMeta(); - int colLen = cols.length; DtoMetaConstructor constructor = constructorMap.get(colLen); if (constructor != null) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaBuilder.java index bc5f900ed..0241c2747 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaBuilder.java @@ -15,16 +15,13 @@ import java.util.List; *

* Use TypeManager to map bean property types to ScalarTypes. */ -class DtoMetaBuilder { +final class DtoMetaBuilder { private static final Logger log = LoggerFactory.getLogger(DtoMetaBuilder.class); private final TypeManager typeManager; - private final Class dtoType; - private final List properties = new ArrayList<>(); - private final List constructorList = new ArrayList<>(); DtoMetaBuilder(Class dtoType, TypeManager typeManager) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaConstructor.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaConstructor.java index 35a736346..efd7c97d2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaConstructor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaConstructor.java @@ -10,22 +10,19 @@ import java.lang.invoke.MethodType; import java.lang.reflect.Constructor; import java.sql.SQLException; -class DtoMetaConstructor { +final class DtoMetaConstructor { private final Class[] types; private final MethodHandle handle; - private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); private final ScalarType[] scalarTypes; DtoMetaConstructor(TypeManager typeManager, Constructor constructor, Class someClass) throws NoSuchMethodException, IllegalAccessException { - this.types = constructor.getParameterTypes(); this.scalarTypes = new ScalarType[types.length]; for (int i = 0; i < types.length; i++) { scalarTypes[i] = typeManager.getScalarType(types[i]); } - this.handle = LOOKUP.findConstructor(someClass, typeFor(types)); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaProperty.java index c4beae172..fe7d794a1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoMetaProperty.java @@ -10,7 +10,7 @@ import java.lang.invoke.MethodType; import java.lang.reflect.Method; import java.sql.SQLException; -class DtoMetaProperty implements DtoReadSet { +final class DtoMetaProperty implements DtoReadSet { private static final MethodHandles.Lookup LOOKUP = MethodHandles.lookup(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoNamedQueries.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoNamedQueries.java index 7b455de3d..6e92b010a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoNamedQueries.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoNamedQueries.java @@ -6,9 +6,9 @@ import java.util.Map; /** * Collection of named queries for a single Dto bean type. */ -public class DtoNamedQueries { +public final class DtoNamedQueries { - private Map namedRawSql = new HashMap<>(); + private final Map namedRawSql = new HashMap<>(); /** * Add the named query from deployment XML. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConPlus.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConPlus.java index 1bc530b78..3ea144604 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConPlus.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConPlus.java @@ -7,10 +7,9 @@ import java.sql.SQLException; /** * Plan based on Constructor plus some setter methods. */ -class DtoQueryPlanConPlus extends DtoQueryPlanBase { +final class DtoQueryPlanConPlus extends DtoQueryPlanBase { private final DtoMetaConstructor maxArgConstructor; - private final DtoReadSet[] setterProps; DtoQueryPlanConPlus(DtoMappingRequest request, DtoMetaConstructor maxArgConstructor, DtoReadSet[] setterProps) { @@ -21,7 +20,6 @@ class DtoQueryPlanConPlus extends DtoQueryPlanBase { @Override public Object readRow(DataReader dataReader) throws SQLException { - Object bean = maxArgConstructor.process(dataReader); for (DtoReadSet setterProp : setterProps) { setterProp.readSet(bean, dataReader); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConSetter.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConSetter.java index 70629e8da..a5aa905a9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConSetter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConSetter.java @@ -7,10 +7,9 @@ import java.sql.SQLException; /** * Plan based on default constructor and setter methods. */ -class DtoQueryPlanConSetter extends DtoQueryPlanBase { +final class DtoQueryPlanConSetter extends DtoQueryPlanBase { private final DtoMetaConstructor defaultConstructor; - private final DtoReadSet[] setterProps; DtoQueryPlanConSetter(DtoMappingRequest request, DtoMetaConstructor defaultConstructor, DtoReadSet[] setterProps) { @@ -21,7 +20,6 @@ class DtoQueryPlanConSetter extends DtoQueryPlanBase { @Override public Object readRow(DataReader dataReader) throws SQLException { - Object bean = defaultConstructor.defaultConstructor(); for (DtoReadSet setterProp : setterProps) { setterProp.readSet(bean, dataReader); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConstructor.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConstructor.java index 912b41cd2..e0d39faa7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConstructor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoQueryPlanConstructor.java @@ -7,7 +7,7 @@ import java.sql.SQLException; /** * Plan based on mapping via single constructor only. */ -class DtoQueryPlanConstructor extends DtoQueryPlanBase { +final class DtoQueryPlanConstructor extends DtoQueryPlanBase { private final DtoMetaConstructor constructor; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoReadSetColumnSkip.java b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoReadSetColumnSkip.java index 9fda8b81f..d2743e59d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoReadSetColumnSkip.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/dto/DtoReadSetColumnSkip.java @@ -5,7 +5,7 @@ import io.ebean.core.type.DataReader; /** * Placeholder to skip reading a column that isn't mapped to a bean property. */ -class DtoReadSetColumnSkip implements DtoReadSet { +final class DtoReadSetColumnSkip implements DtoReadSet { static final DtoReadSet INSTANCE = new DtoReadSetColumnSkip(); From 55587b12aa5456c98db619a630efc6f1078aa33c Mon Sep 17 00:00:00 2001 From: rbygrave Date: Tue, 17 Aug 2021 19:15:35 +1200 Subject: [PATCH 29/68] #2318 - Refactor internals - final classes in el packages --- .../server/el/ElComparatorNoop.java | 2 +- .../server/el/ElComparatorProperty.java | 2 -- .../io/ebeaninternal/server/el/ElFilter.java | 3 -- .../server/el/ElMatchBuilder.java | 36 +++++++++---------- .../server/el/ElPropertyChain.java | 16 +-------- .../server/el/ElPropertyChainBuilder.java | 5 +-- .../executor/DaemonScheduleThreadPool.java | 2 -- .../server/executor/DaemonThreadFactory.java | 3 +- .../executor/DefaultBackgroundExecutor.java | 2 +- .../readaudit/DefaultReadAuditLogger.java | 13 ------- 10 files changed, 22 insertions(+), 62 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElComparatorNoop.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElComparatorNoop.java index 9377aa91c..9fa68b481 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElComparatorNoop.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElComparatorNoop.java @@ -6,7 +6,7 @@ package io.ebeaninternal.server.el; * @author Roland Praml, FOCONIS AG * */ -public class ElComparatorNoop implements ElComparator { +public final class ElComparatorNoop implements ElComparator { private static final long serialVersionUID = -9060871822183687180L; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElComparatorProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElComparatorProperty.java index a1093473f..56576d947 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElComparatorProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElComparatorProperty.java @@ -12,9 +12,7 @@ public final class ElComparatorProperty implements Comparator, ElComparato private static final long serialVersionUID = -2735738237263956073L; private final ElPropertyValue elGetValue; - private final int nullOrder; - private final int asc; public ElComparatorProperty(ElPropertyValue elGetValue, boolean ascending, boolean nullsHigh) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java index 4b205fb19..470345a31 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElFilter.java @@ -14,11 +14,8 @@ import java.util.regex.Pattern; public final class ElFilter implements Filter { private final BeanDescriptor beanDescriptor; - private final ArrayList> matches = new ArrayList<>(); - private int maxRows; - private String sortByClause; public ElFilter(BeanDescriptor beanDescriptor) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElMatchBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElMatchBuilder.java index 0cccfb9f4..66e966cfb 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElMatchBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElMatchBuilder.java @@ -8,12 +8,12 @@ import java.util.regex.Pattern; /** * Contains the various ElMatcher implementations. */ -class ElMatchBuilder { +final class ElMatchBuilder { /** * Case insensitive equals. */ - static class RegularExpr implements ElMatcher { + static final class RegularExpr implements ElMatcher { final ElPropertyValue elGetValue; final String value; @@ -49,7 +49,7 @@ class ElMatchBuilder { public abstract boolean isMatch(T bean); } - static class Ieq extends BaseString { + static final class Ieq extends BaseString { Ieq(ElPropertyValue elGetValue, String value) { super(elGetValue, value); } @@ -64,7 +64,7 @@ class ElMatchBuilder { /** * Case insensitive starts with matcher. */ - static class IStartsWith implements ElMatcher { + static final class IStartsWith implements ElMatcher { final ElPropertyValue elGetValue; final CharMatch charMatch; @@ -85,7 +85,7 @@ class ElMatchBuilder { /** * Case insensitive ends with matcher. */ - static class IEndsWith implements ElMatcher { + static final class IEndsWith implements ElMatcher { final ElPropertyValue elGetValue; final CharMatch charMatch; @@ -103,7 +103,7 @@ class ElMatchBuilder { } } - static class StartsWith extends BaseString { + static final class StartsWith extends BaseString { StartsWith(ElPropertyValue elGetValue, String value) { super(elGetValue, value); } @@ -115,7 +115,7 @@ class ElMatchBuilder { } } - static class EndsWith extends BaseString { + static final class EndsWith extends BaseString { EndsWith(ElPropertyValue elGetValue, String value) { super(elGetValue, value); } @@ -127,7 +127,7 @@ class ElMatchBuilder { } } - static class IsNull implements ElMatcher { + static final class IsNull implements ElMatcher { final ElPropertyValue elGetValue; @@ -141,7 +141,7 @@ class ElMatchBuilder { } } - static class IsNotNull implements ElMatcher { + static final class IsNotNull implements ElMatcher { final ElPropertyValue elGetValue; @@ -170,7 +170,7 @@ class ElMatchBuilder { public abstract boolean isMatch(T value); } - static class InSet implements ElMatcher { + static final class InSet implements ElMatcher { final Set set; final ElPropertyValue elGetValue; @@ -183,7 +183,6 @@ class ElMatchBuilder { @Override public boolean isMatch(T bean) { - Object value = elGetValue.pathGet(bean); return value != null && set.contains(value); } @@ -192,7 +191,7 @@ class ElMatchBuilder { /** * Equal To. */ - static class Eq extends Base { + static final class Eq extends Base { public Eq(Object filterValue, ElComparator comparator) { super(filterValue, comparator); @@ -207,7 +206,7 @@ class ElMatchBuilder { /** * Not Equal To. */ - static class Ne extends Base { + static final class Ne extends Base { public Ne(Object filterValue, ElComparator comparator) { super(filterValue, comparator); @@ -222,7 +221,7 @@ class ElMatchBuilder { /** * Between. */ - static class Between implements ElMatcher { + static final class Between implements ElMatcher { final Object min; final Object max; @@ -236,7 +235,6 @@ class ElMatchBuilder { @Override public boolean isMatch(T value) { - return (comparator.compareValue(min, value) <= 0 && comparator.compareValue(max, value) >= 0); } @@ -245,7 +243,7 @@ class ElMatchBuilder { /** * Greater Than. */ - static class Gt extends Base { + static final class Gt extends Base { Gt(Object filterValue, ElComparator comparator) { super(filterValue, comparator); } @@ -259,7 +257,7 @@ class ElMatchBuilder { /** * Greater Than or Equal To. */ - static class Ge extends Base { + static final class Ge extends Base { Ge(Object filterValue, ElComparator comparator) { super(filterValue, comparator); } @@ -273,7 +271,7 @@ class ElMatchBuilder { /** * Less Than or Equal To. */ - static class Le extends Base { + static final class Le extends Base { Le(Object filterValue, ElComparator comparator) { super(filterValue, comparator); } @@ -287,7 +285,7 @@ class ElMatchBuilder { /** * Less Than. */ - static class Lt extends Base { + static final class Lt extends Base { Lt(Object filterValue, ElComparator comparator) { super(filterValue, comparator); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChain.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChain.java index 2effb1703..16d0e3808 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChain.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChain.java @@ -22,30 +22,22 @@ import java.util.Arrays; * no further processing of the chain occurs. *

*/ -public class ElPropertyChain implements ElPropertyValue { +public final class ElPropertyChain implements ElPropertyValue { private final String prefix; - private final String placeHolder; private final String placeHolderEncrypted; - private final String name; - private final String expression; - private final boolean containsMany; - private final ElPropertyValue[] chain; - private final boolean assocId; private final int last; private final BeanProperty lastBeanProperty; private final ScalarType scalarType; - private final ElPropertyValue lastElPropertyValue; public ElPropertyChain(boolean containsMany, boolean embedded, String expression, ElPropertyValue[] chain) { - this.containsMany = containsMany; this.chain = chain; this.expression = expression; @@ -119,15 +111,12 @@ public class ElPropertyChain implements ElPropertyValue { if (!expression.startsWith(sinceProperty)) { return containsMany; } - int i = 1 + SplitName.count(sinceProperty); - for (; i < chain.length; i++) { if (chain[i].getBeanProperty().containsMany()) { return true; } } - return false; } @@ -281,7 +270,6 @@ public class ElPropertyChain implements ElPropertyValue { @Override public Object pathGetNested(Object bean) { - Object prevBean = bean; for (int i = 0; i < last; i++) { // always return non null prevBean @@ -293,7 +281,6 @@ public class ElPropertyChain implements ElPropertyValue { @Override public void pathSet(Object bean, Object value) { - Object prevBean = bean; for (int i = 0; i < last; i++) { prevBean = chain[i].pathGetNested(prevBean); @@ -310,5 +297,4 @@ public class ElPropertyChain implements ElPropertyValue { } } - } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChainBuilder.java b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChainBuilder.java index 93b17b708..fd69bdd9c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChainBuilder.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/el/ElPropertyChainBuilder.java @@ -13,14 +13,11 @@ import java.util.List; * order.customer.name. *

*/ -public class ElPropertyChainBuilder { +public final class ElPropertyChainBuilder { private final String expression; - private final List chain = new ArrayList<>(); - private boolean embedded; - private boolean containsMany; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonScheduleThreadPool.java b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonScheduleThreadPool.java index 3bdf15777..983800061 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonScheduleThreadPool.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonScheduleThreadPool.java @@ -15,9 +15,7 @@ public final class DaemonScheduleThreadPool extends ScheduledThreadPoolExecutor private static final Logger logger = LoggerFactory.getLogger(DaemonScheduleThreadPool.class); private final ReentrantLock lock = new ReentrantLock(); - private final String namePrefix; - private final int shutdownWaitSeconds; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonThreadFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonThreadFactory.java index d1bbf3ee1..c2e14195b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonThreadFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DaemonThreadFactory.java @@ -13,10 +13,9 @@ import java.util.concurrent.atomic.AtomicInteger; * on shutdown or register with the JVM shutdown hook to perform a nice shutdown * of the daemon threads etc. */ -public class DaemonThreadFactory implements ThreadFactory { +public final class DaemonThreadFactory implements ThreadFactory { private final AtomicInteger threadNumber = new AtomicInteger(1); - private final String namePrefix; public DaemonThreadFactory(String namePrefix) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java index 28bb50765..305da21ca 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/executor/DefaultBackgroundExecutor.java @@ -13,7 +13,7 @@ import java.util.concurrent.TimeUnit; /** * The default implementation of the BackgroundExecutor. */ -public class DefaultBackgroundExecutor implements SpiBackgroundExecutor { +public final class DefaultBackgroundExecutor implements SpiBackgroundExecutor { private final ScheduledExecutorService executor; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/readaudit/DefaultReadAuditLogger.java b/ebean-core/src/main/java/io/ebeaninternal/server/readaudit/DefaultReadAuditLogger.java index 64a9072eb..9e1403836 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/readaudit/DefaultReadAuditLogger.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/readaudit/DefaultReadAuditLogger.java @@ -19,15 +19,11 @@ import java.util.Map; public class DefaultReadAuditLogger implements ReadAuditLogger { private static final Logger appLogger = LoggerFactory.getLogger(DefaultReadAuditLogger.class); - private static final Logger queryLogger = LoggerFactory.getLogger("io.ebean.ReadAuditQuery"); - private static final Logger auditLogger = LoggerFactory.getLogger("io.ebean.ReadAudit"); protected final JsonFactory jsonFactory = new JsonFactory(); - protected int defaultQueryBuffer = 500; - protected int defaultReadBuffer = 150; /** @@ -37,7 +33,6 @@ public class DefaultReadAuditLogger implements ReadAuditLogger { public void queryPlan(ReadAuditQueryPlan queryPlan) { StringWriter writer = new StringWriter(defaultQueryBuffer); try (JsonGenerator gen = jsonFactory.createGenerator(writer)) { - gen.writeStartObject(); String beanType = queryPlan.getBeanType(); if (beanType != null) { @@ -53,9 +48,7 @@ public class DefaultReadAuditLogger implements ReadAuditLogger { } gen.writeEndObject(); gen.flush(); - queryLogger.info(writer.toString()); - } catch (IOException e) { appLogger.error("Error writing Read audit event", e); } @@ -66,7 +59,6 @@ public class DefaultReadAuditLogger implements ReadAuditLogger { */ @Override public void auditBean(ReadEvent beanEvent) { - writeEvent(beanEvent); } @@ -79,14 +71,11 @@ public class DefaultReadAuditLogger implements ReadAuditLogger { } protected void writeEvent(ReadEvent event) { - try { StringWriter writer = new StringWriter(defaultReadBuffer); JsonGenerator gen = jsonFactory.createGenerator(writer); writeDetails(gen, event); - auditLogger.info(writer.toString()); - } catch (IOException e) { appLogger.error("Error writing Read audit event", e); } @@ -96,7 +85,6 @@ public class DefaultReadAuditLogger implements ReadAuditLogger { * Write the details for the read bean or read many beans event. */ protected void writeDetails(JsonGenerator gen, ReadEvent event) throws IOException { - gen.writeStartObject(); String source = event.getSource(); if (source != null) { @@ -130,7 +118,6 @@ public class DefaultReadAuditLogger implements ReadAuditLogger { gen.writeFieldName("ids"); EJson.writeCollection(event.getIds(), gen); } - gen.writeEndObject(); gen.flush(); gen.close(); From 826e8518eadb21d9befc11a7a3ca133faa940931 Mon Sep 17 00:00:00 2001 From: rbygrave Date: Tue, 17 Aug 2021 19:46:08 +1200 Subject: [PATCH 30/68] #2318 - Refactor internals - final classes in type packages --- .../type/AttributeConverterAdapter.java | 2 +- .../ebeaninternal/server/type/DataBind.java | 45 +++++++++---------- .../server/type/DataBindCapture.java | 2 +- .../server/type/DataEncryptSupport.java | 2 +- .../server/type/DecimalUtils.java | 5 --- .../server/type/DefaultTypeFactory.java | 4 +- .../server/type/EnumToDbIntegerMap.java | 2 +- .../server/type/EnumToDbStringMap.java | 2 +- .../server/type/EnumToDbValueMap.java | 4 -- .../server/type/InitObjectMapper.java | 2 +- .../server/type/IsoJsonDateTimeParser.java | 2 +- .../server/type/JacksonTypeHelper.java | 2 +- .../server/type/LongToTimestampConverter.java | 5 +-- .../server/type/PostgresHelper.java | 3 +- .../server/type/RsetDataReaderIndexed.java | 2 +- .../ebeaninternal/server/type/ScalarHelp.java | 4 +- .../server/type/bindcapture/BindCapture.java | 2 +- .../bindcapture/BindCaptureStatement.java | 2 +- .../type/bindcapture/BindCaptureTypes.java | 39 ++++++++-------- 19 files changed, 56 insertions(+), 75 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/AttributeConverterAdapter.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/AttributeConverterAdapter.java index e358dd891..242b657f3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/AttributeConverterAdapter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/AttributeConverterAdapter.java @@ -7,7 +7,7 @@ import javax.persistence.AttributeConverter; /** * Adapter from ScalarTypeConverter to AttributeConverter. */ -class AttributeConverterAdapter implements ScalarTypeConverter { +final class AttributeConverterAdapter implements ScalarTypeConverter { private final AttributeConverter converter; private final B nullValue; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBind.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBind.java index a1a9ec8cf..89603122b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBind.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBind.java @@ -26,15 +26,10 @@ public class DataBind implements DataBinder { private static final Logger log = LoggerFactory.getLogger(DataBind.class); private final DataTimeZone dataTimeZone; - private final PreparedStatement pstmt; - private final Connection connection; - private final StringBuilder bindLog = new StringBuilder(); - private List inputStreams; - protected int pos; private String json; @@ -45,35 +40,35 @@ public class DataBind implements DataBinder { } @Override - public void pushJson(String json) { + public final void pushJson(String json) { assert this.json == null; // we can only push one value this.json = json; } @Override - public String popJson() { + public final String popJson() { String ret = json; json = null; return ret; } @Override - public StringBuilder append(Object entry) { + public final StringBuilder append(Object entry) { return bindLog.append(entry); } @Override - public StringBuilder log() { + public final StringBuilder log() { return bindLog; } @Override - public void close() throws SQLException { + public final void close() throws SQLException { pstmt.close(); } @Override - public int currentPos() { + public final int currentPos() { return pos; } @@ -83,7 +78,7 @@ public class DataBind implements DataBinder { } @Override - public void setObject(Object value, int sqlType) throws SQLException { + public final void setObject(Object value, int sqlType) throws SQLException { pstmt.setObject(++pos, value, sqlType); } @@ -93,17 +88,17 @@ public class DataBind implements DataBinder { } @Override - public int nextPos() { + public final int nextPos() { return ++pos; } @Override - public void decrementPos() { + public final void decrementPos() { --pos; } @Override - public int executeUpdate() throws SQLException { + public final int executeUpdate() throws SQLException { try { return pstmt.executeUpdate(); } finally { @@ -125,7 +120,7 @@ public class DataBind implements DataBinder { } @Override - public PreparedStatement getPstmt() { + public final PreparedStatement getPstmt() { return pstmt; } @@ -135,37 +130,37 @@ public class DataBind implements DataBinder { } @Override - public void setInt(int i) throws SQLException { + public final void setInt(int i) throws SQLException { pstmt.setInt(++pos, i); } @Override - public void setLong(long i) throws SQLException { + public final void setLong(long i) throws SQLException { pstmt.setLong(++pos, i); } @Override - public void setShort(short i) throws SQLException { + public final void setShort(short i) throws SQLException { pstmt.setShort(++pos, i); } @Override - public void setFloat(float i) throws SQLException { + public final void setFloat(float i) throws SQLException { pstmt.setFloat(++pos, i); } @Override - public void setDouble(double i) throws SQLException { + public final void setDouble(double i) throws SQLException { pstmt.setDouble(++pos, i); } @Override - public void setBigDecimal(BigDecimal v) throws SQLException { + public final void setBigDecimal(BigDecimal v) throws SQLException { pstmt.setBigDecimal(++pos, v); } @Override - public void setDate(java.sql.Date v) throws SQLException { + public final void setDate(java.sql.Date v) throws SQLException { Calendar timeZone = dataTimeZone.getDateTimeZone(); if (timeZone != null) { pstmt.setDate(++pos, v, timeZone); @@ -175,7 +170,7 @@ public class DataBind implements DataBinder { } @Override - public void setTimestamp(Timestamp v) throws SQLException { + public final void setTimestamp(Timestamp v) throws SQLException { Calendar timeZone = dataTimeZone.getTimeZone(); if (timeZone != null) { pstmt.setTimestamp(++pos, v, timeZone); @@ -185,7 +180,7 @@ public class DataBind implements DataBinder { } @Override - public void setTime(Time v) throws SQLException { + public final void setTime(Time v) throws SQLException { Calendar timeZone = dataTimeZone.getTimeZone(); if (timeZone != null) { pstmt.setTime(++pos, v, timeZone); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBindCapture.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBindCapture.java index e87ebf471..659d0ef06 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBindCapture.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DataBindCapture.java @@ -7,7 +7,7 @@ import io.ebeaninternal.server.type.bindcapture.BindCaptureStatement; /** * Special DataBind used to capture bind values for obtaining explain plans. */ -public class DataBindCapture extends DataBind { +public final class DataBindCapture extends DataBind { private final BindCaptureStatement captureStatement; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataEncryptSupport.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DataEncryptSupport.java index 32d87cd91..791d3e78e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DataEncryptSupport.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DataEncryptSupport.java @@ -4,7 +4,7 @@ import io.ebean.config.EncryptKey; import io.ebean.config.EncryptKeyManager; import io.ebean.config.Encryptor; -public class DataEncryptSupport { +public final class DataEncryptSupport { private final EncryptKeyManager encryptKeyManager; private final Encryptor encryptor; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DecimalUtils.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DecimalUtils.java index 60e3f6d6e..72f2d4e96 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DecimalUtils.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DecimalUtils.java @@ -38,10 +38,8 @@ public final class DecimalUtils { } public static Duration toDuration(BigDecimal value) { - long seconds = value.longValue(); int nanoseconds = extractNanosecondDecimal(value, seconds); - return Duration.ofSeconds(seconds, nanoseconds); } @@ -50,10 +48,8 @@ public final class DecimalUtils { } public static Timestamp toTimestamp(BigDecimal value) { - long seconds = value.longValue(); int nanoseconds = extractNanosecondDecimal(value, seconds); - Timestamp ts = new Timestamp(seconds * 1000); ts.setNanos(nanoseconds); return ts; @@ -66,7 +62,6 @@ public final class DecimalUtils { } public static Instant toInstant(BigDecimal value) { - long seconds = value.longValue(); int nanoseconds = extractNanosecondDecimal(value, seconds); return Instant.ofEpochSecond(seconds, nanoseconds); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeFactory.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeFactory.java index 22f50b937..6c2f3b860 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeFactory.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/DefaultTypeFactory.java @@ -14,7 +14,7 @@ import java.util.Date; * Helper to create some default ScalarType objects for Booleans, * java.util.Date, java.util.Calendar etc. */ -public class DefaultTypeFactory { +public final class DefaultTypeFactory { private final DatabaseConfig config; @@ -22,7 +22,7 @@ public class DefaultTypeFactory { this.config = config; } - protected ScalarTypeBool createBoolean(String trueValue, String falseValue) { + ScalarTypeBool createBoolean(String trueValue, String falseValue) { try { // first try Integer based boolean Integer intTrue = BasicTypeConverter.toInteger(trueValue); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbIntegerMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbIntegerMap.java index 7d62a8391..419d8f53a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbIntegerMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbIntegerMap.java @@ -10,7 +10,7 @@ import java.sql.Types; /** * Used to map enum values to database integer values. */ -public class EnumToDbIntegerMap extends EnumToDbValueMap { +public final class EnumToDbIntegerMap extends EnumToDbValueMap { @Override public int getDbType() { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbStringMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbStringMap.java index 05b0f8991..c7dc4bc89 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbStringMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbStringMap.java @@ -9,7 +9,7 @@ import java.sql.Types; /** * Used to map Enum values to database string/varchar values. */ -public class EnumToDbStringMap extends EnumToDbValueMap { +public final class EnumToDbStringMap extends EnumToDbValueMap { @Override public int getDbType() { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbValueMap.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbValueMap.java index 08240cabc..57ab47ef5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbValueMap.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/EnumToDbValueMap.java @@ -22,13 +22,9 @@ public abstract class EnumToDbValueMap { } final LinkedHashMap keyMap; - final LinkedHashMap valueMap; - final HashMap nameMap; - final boolean allowNulls; - final boolean isIntegerType; /** 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 index 90a86ec79..7daee8bd5 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/InitObjectMapper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/InitObjectMapper.java @@ -9,7 +9,7 @@ import java.util.Set; /** * Initialise the Jackson ObjectMapper. */ -class InitObjectMapper { +final class InitObjectMapper { /** * Create and return the default ObjectMapper. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/IsoJsonDateTimeParser.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/IsoJsonDateTimeParser.java index a6f8a8636..fd4373062 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/IsoJsonDateTimeParser.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/IsoJsonDateTimeParser.java @@ -4,7 +4,7 @@ import java.time.Instant; import java.time.format.DateTimeFormatter; import java.time.format.DateTimeFormatterBuilder; -class IsoJsonDateTimeParser { +final class IsoJsonDateTimeParser { private static final DateTimeFormatter ISO_MILLIS = new DateTimeFormatterBuilder() .parseCaseInsensitive() diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/JacksonTypeHelper.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/JacksonTypeHelper.java index 1e1db244d..7d2d5b3e1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/JacksonTypeHelper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/JacksonTypeHelper.java @@ -3,7 +3,7 @@ package io.ebeaninternal.server.type; import com.fasterxml.jackson.databind.*; import com.fasterxml.jackson.databind.introspect.AnnotatedField; -class JacksonTypeHelper { +final class JacksonTypeHelper { private final AnnotatedField field; private final ObjectMapper objectMapper; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/LongToTimestampConverter.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/LongToTimestampConverter.java index e396602d4..83d55871d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/LongToTimestampConverter.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/LongToTimestampConverter.java @@ -4,7 +4,7 @@ import io.ebean.config.ScalarTypeConverter; import java.sql.Timestamp; -public class LongToTimestampConverter implements ScalarTypeConverter { +public final class LongToTimestampConverter implements ScalarTypeConverter { @Override public Long getNullValue() { @@ -13,15 +13,12 @@ public class LongToTimestampConverter implements ScalarTypeConverter entries = new ArrayList<>(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatement.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatement.java index e8cda7b13..916c1c355 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatement.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureStatement.java @@ -12,7 +12,7 @@ import java.util.Calendar; /** * Special PreparedStatement used to capture bind values used to obtain explain plans. */ -public class BindCaptureStatement extends BindCaptureStatementBase implements PreparedStatement { +public final class BindCaptureStatement extends BindCaptureStatementBase implements PreparedStatement { private final BindCapture capture = new BindCapture(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureTypes.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureTypes.java index 1c859c8fb..b2e36f828 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureTypes.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/bindcapture/BindCaptureTypes.java @@ -13,9 +13,9 @@ import java.sql.Timestamp; import java.util.Arrays; import java.util.Calendar; -class BindCaptureTypes { +final class BindCaptureTypes { - static class Null implements BindCaptureEntry { + static final class Null implements BindCaptureEntry { private final int parameterIndex; private final int sqlType; @@ -36,7 +36,7 @@ class BindCaptureTypes { } } - static class Boolean implements BindCaptureEntry { + static final class Boolean implements BindCaptureEntry { private final int parameterIndex; private final boolean x; @@ -57,7 +57,7 @@ class BindCaptureTypes { } } - static class Byte implements BindCaptureEntry { + static final class Byte implements BindCaptureEntry { private final int parameterIndex; private final byte x; @@ -78,7 +78,7 @@ class BindCaptureTypes { } } - static class Bytes implements BindCaptureEntry { + static final class Bytes implements BindCaptureEntry { private final int parameterIndex; private final byte[] x; @@ -99,7 +99,7 @@ class BindCaptureTypes { } } - static class TShort implements BindCaptureEntry { + static final class TShort implements BindCaptureEntry { private final int parameterIndex; private final short value; @@ -120,7 +120,7 @@ class BindCaptureTypes { } } - static class TInt implements BindCaptureEntry { + static final class TInt implements BindCaptureEntry { private final int parameterIndex; private final int value; @@ -141,7 +141,7 @@ class BindCaptureTypes { } } - static class TLong implements BindCaptureEntry { + static final class TLong implements BindCaptureEntry { private final int parameterIndex; private final long value; @@ -162,7 +162,7 @@ class BindCaptureTypes { } } - static class TFloat implements BindCaptureEntry { + static final class TFloat implements BindCaptureEntry { private final int parameterIndex; private final float value; @@ -183,7 +183,7 @@ class BindCaptureTypes { } } - static class TDouble implements BindCaptureEntry { + static final class TDouble implements BindCaptureEntry { private final int parameterIndex; private final double value; @@ -204,7 +204,7 @@ class BindCaptureTypes { } } - static class TBigDecimal implements BindCaptureEntry { + static final class TBigDecimal implements BindCaptureEntry { private final int parameterIndex; private final BigDecimal value; @@ -226,7 +226,7 @@ class BindCaptureTypes { } - static class TString implements BindCaptureEntry { + static final class TString implements BindCaptureEntry { private final int parameterIndex; private final String value; @@ -247,7 +247,7 @@ class BindCaptureTypes { } } - static class TDate implements BindCaptureEntry { + static final class TDate implements BindCaptureEntry { private final int parameterIndex; private final Date value; @@ -268,7 +268,7 @@ class BindCaptureTypes { } } - static class TTime implements BindCaptureEntry { + static final class TTime implements BindCaptureEntry { private final int parameterIndex; private final Time value; @@ -289,7 +289,7 @@ class BindCaptureTypes { } } - static class TTimestamp implements BindCaptureEntry { + static final class TTimestamp implements BindCaptureEntry { private final int parameterIndex; private final Timestamp value; @@ -316,7 +316,7 @@ class BindCaptureTypes { } } - static class TObject implements BindCaptureEntry { + static final class TObject implements BindCaptureEntry { private final int parameterIndex; private final Object value; @@ -337,13 +337,12 @@ class BindCaptureTypes { } } - static class TArray implements BindCaptureEntry { + static final class TArray implements BindCaptureEntry { private final int parameterIndex; private final String arrayType; private final Object[] elements; - TArray(int parameterIndex, String arrayType, Object[] elements) { this.parameterIndex = parameterIndex; this.arrayType = arrayType; @@ -362,7 +361,7 @@ class BindCaptureTypes { } } - static class CharacterStream implements BindCaptureEntry { + static final class CharacterStream implements BindCaptureEntry { private static final String dummy = "hi"; @@ -383,7 +382,7 @@ class BindCaptureTypes { } } - static class BinaryStream implements BindCaptureEntry { + static final class BinaryStream implements BindCaptureEntry { private static final byte[] dummy = "hi".getBytes(Charset.defaultCharset()); From 183416a6402471230a094603d1eccd291e5df84c Mon Sep 17 00:00:00 2001 From: rbygrave Date: Tue, 17 Aug 2021 20:09:02 +1200 Subject: [PATCH 31/68] #2318 - Delete unused ScalarTypeLongToTimestamp --- .../server/type/ScalarTypeLongToTimestamp.java | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongToTimestamp.java diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongToTimestamp.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongToTimestamp.java deleted file mode 100644 index 3a48dd786..000000000 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongToTimestamp.java +++ /dev/null @@ -1,12 +0,0 @@ -package io.ebeaninternal.server.type; - -import io.ebean.config.JsonConfig; - -import java.sql.Timestamp; - -public class ScalarTypeLongToTimestamp extends ScalarTypeWrapper { - - public ScalarTypeLongToTimestamp(JsonConfig.DateTime mode) { - super(Long.class, new ScalarTypeTimestamp(mode), new LongToTimestampConverter()); - } -} From dde9b507ceaf60e5f070cbc8a3e47ac87af7d79a Mon Sep 17 00:00:00 2001 From: rbygrave Date: Tue, 17 Aug 2021 20:09:27 +1200 Subject: [PATCH 32/68] #2318 - Refactor internals - final classes in type packages --- .../server/type/ScalarTypeArrayListH2.java | 2 +- .../server/type/ScalarTypeArraySetH2.java | 2 +- .../server/type/ScalarTypeBoolean.java | 10 +++++----- .../server/type/ScalarTypeByte.java | 2 +- .../server/type/ScalarTypeBytesBinary.java | 2 +- .../server/type/ScalarTypeBytesBlob.java | 2 +- .../server/type/ScalarTypeBytesEncrypted.java | 3 +-- .../type/ScalarTypeBytesLongVarbinary.java | 2 +- .../server/type/ScalarTypeBytesVarbinary.java | 2 +- .../server/type/ScalarTypeCalendar.java | 2 +- .../server/type/ScalarTypeChar.java | 2 +- .../server/type/ScalarTypeCharArray.java | 2 +- .../server/type/ScalarTypeCidr.java | 4 ++-- .../server/type/ScalarTypeClass.java | 5 +---- .../server/type/ScalarTypeCurrency.java | 2 +- .../server/type/ScalarTypeDate.java | 2 +- .../server/type/ScalarTypeDayOfWeek.java | 2 +- .../server/type/ScalarTypeDouble.java | 2 +- .../type/ScalarTypeDurationWithNanos.java | 2 +- .../type/ScalarTypeEncryptedWrapper.java | 4 +--- .../server/type/ScalarTypeEnumStandard.java | 9 +++------ .../type/ScalarTypeEnumWithMapping.java | 2 -- .../server/type/ScalarTypeFile.java | 5 +---- .../server/type/ScalarTypeFloat.java | 2 +- .../server/type/ScalarTypeInet.java | 4 ++-- .../server/type/ScalarTypeInetAddress.java | 2 +- .../type/ScalarTypeInetAddressPostgres.java | 2 +- .../server/type/ScalarTypeInstant.java | 2 +- .../server/type/ScalarTypeInteger.java | 2 +- .../type/ScalarTypeJodaDateMidnight.java | 2 +- .../server/type/ScalarTypeJodaDateTime.java | 2 +- .../server/type/ScalarTypeJodaLocalDate.java | 2 +- .../type/ScalarTypeJodaLocalDateTime.java | 2 +- .../type/ScalarTypeJodaLocalTimeUTC.java | 2 +- .../server/type/ScalarTypeJodaPeriod.java | 2 +- .../server/type/ScalarTypeJsonList.java | 2 +- .../server/type/ScalarTypeJsonNode.java | 4 ++-- .../type/ScalarTypeJsonNodePostgres.java | 4 ++-- .../type/ScalarTypeJsonObjectMapper.java | 2 +- .../server/type/ScalarTypeLocalDate.java | 2 +- .../server/type/ScalarTypeLocalDateTime.java | 2 +- .../type/ScalarTypeLocalTimeWithNanos.java | 2 +- .../server/type/ScalarTypeLocale.java | 2 +- .../server/type/ScalarTypeLong.java | 2 +- .../server/type/ScalarTypeLongVarchar.java | 2 +- .../server/type/ScalarTypeMathBigInteger.java | 2 +- .../server/type/ScalarTypeMonth.java | 2 +- .../server/type/ScalarTypeMonthDay.java | 14 ++------------ .../server/type/ScalarTypeOffsetDateTime.java | 4 ++-- .../server/type/ScalarTypeOffsetTime.java | 4 ++-- .../server/type/ScalarTypePath.java | 4 ++-- .../server/type/ScalarTypePeriod.java | 4 ++-- .../server/type/ScalarTypePostgresHstore.java | 4 ++-- .../server/type/ScalarTypeShort.java | 4 ++-- .../server/type/ScalarTypeString.java | 2 +- .../server/type/ScalarTypeStringBase.java | 2 +- .../server/type/ScalarTypeTime.java | 4 ++-- .../server/type/ScalarTypeTimeZone.java | 4 ++-- .../server/type/ScalarTypeTimestamp.java | 4 ++-- .../server/type/ScalarTypeURI.java | 4 ++-- .../server/type/ScalarTypeURL.java | 4 ++-- .../server/type/ScalarTypeUUIDBase.java | 4 ++-- .../server/type/ScalarTypeUUIDBinary.java | 4 ++-- .../server/type/ScalarTypeUUIDNative.java | 4 ++-- .../server/type/ScalarTypeUUIDVarchar.java | 4 ++-- .../server/type/ScalarTypeUtilDate.java | 10 +++++----- .../server/type/ScalarTypeWrapper.java | 3 --- .../server/type/ScalarTypeYear.java | 4 ++-- .../server/type/ScalarTypeYearMonthDate.java | 9 +++++---- .../server/type/ScalarTypeZoneId.java | 4 ++-- .../server/type/ScalarTypeZoneOffset.java | 4 ++-- .../server/type/ScalarTypeZonedDateTime.java | 4 ++-- .../server/type/SimpleAesEncryptor.java | 19 +------------------ .../server/type/TypeJsonManager.java | 2 +- .../server/type/TypeReflectHelper.java | 3 +-- .../server/type/TypeResolver.java | 6 +----- .../server/type/UtilDateParser.java | 2 +- 77 files changed, 113 insertions(+), 161 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2.java index f8b30a7a0..c9bc3a3f2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeArrayListH2.java @@ -19,7 +19,7 @@ import static java.util.Collections.EMPTY_LIST; * H2 database support for DB ARRAY. */ @SuppressWarnings("rawtypes") -class ScalarTypeArrayListH2 extends ScalarTypeArrayList { +final class ScalarTypeArrayListH2 extends ScalarTypeArrayList { static PlatformArrayTypeFactory factory() { return new ScalarTypeArrayListH2.Factory(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2.java index cd7f7cf98..1d5c78553 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeArraySetH2.java @@ -19,7 +19,7 @@ import static java.util.Collections.EMPTY_SET; * H2 database support for DB ARRAY. */ @SuppressWarnings("rawtypes") -class ScalarTypeArraySetH2 extends ScalarTypeArraySet { +final class ScalarTypeArraySetH2 extends ScalarTypeArraySet { static PlatformArrayTypeFactory factory() { return new ScalarTypeArraySetH2.Factory(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java index 93a688e94..56bc180a9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBoolean.java @@ -21,9 +21,9 @@ import java.sql.Types; * This may or may not be a native jdbc type depending on the database and jdbc driver. *

*/ -public class ScalarTypeBoolean { +public final class ScalarTypeBoolean { - public static class Native extends BooleanBase { + public static final class Native extends BooleanBase { /** * Native Boolean database type. @@ -75,7 +75,7 @@ public class ScalarTypeBoolean { * type.boolean.dbtype="bit" in the ebean configuration *

*/ - static class BitBoolean extends BooleanBase { + static final class BitBoolean extends BooleanBase { /** * Native Boolean database type. @@ -124,7 +124,7 @@ public class ScalarTypeBoolean { /** * Converted to/from an Integer in the Database. */ - static class IntBoolean extends BooleanBase { + static final class IntBoolean extends BooleanBase { private final Integer trueValue; private final Integer falseValue; @@ -211,7 +211,7 @@ public class ScalarTypeBoolean { /** * Converted to/from an Integer in the Database. */ - static class StringBoolean extends BooleanBase { + static final class StringBoolean extends BooleanBase { private final String trueValue; private final String falseValue; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java index 5d0660930..3a64f421f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeByte.java @@ -18,7 +18,7 @@ import java.sql.Types; /** * ScalarType for Byte. */ -public class ScalarTypeByte extends ScalarTypeBase { +public final class ScalarTypeByte extends ScalarTypeBase { public ScalarTypeByte() { super(Byte.class, true, Types.TINYINT); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBinary.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBinary.java index 8567c808f..18cdb096e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBinary.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBinary.java @@ -8,7 +8,7 @@ import java.sql.Types; /** * ScalarType for Types.BINARY to byte[]. */ -public class ScalarTypeBytesBinary extends ScalarTypeBytesBase { +public final class ScalarTypeBytesBinary extends ScalarTypeBytesBase { public ScalarTypeBytesBinary() { super(true, Types.BINARY); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBlob.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBlob.java index 5ad02618f..5cc3e2afc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBlob.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesBlob.java @@ -8,7 +8,7 @@ import java.sql.Types; /** * ScalarType for BLOB. */ -public class ScalarTypeBytesBlob extends ScalarTypeBytesBase { +public final class ScalarTypeBytesBlob extends ScalarTypeBytesBase { public ScalarTypeBytesBlob() { super(true, Types.BLOB); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java index 9b81acfde..df8b32ba9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesEncrypted.java @@ -16,10 +16,9 @@ import java.sql.SQLException; /** * Encrypted ScalarType that wraps a byte[] types. */ -public class ScalarTypeBytesEncrypted implements ScalarType { +public final class ScalarTypeBytesEncrypted implements ScalarType { private final ScalarTypeBytesBase baseType; - private final DataEncryptSupport dataEncryptSupport; public ScalarTypeBytesEncrypted(ScalarTypeBytesBase baseType, DataEncryptSupport dataEncryptSupport) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesLongVarbinary.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesLongVarbinary.java index 8d1b87cf9..fef593e12 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesLongVarbinary.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesLongVarbinary.java @@ -8,7 +8,7 @@ import java.sql.Types; /** * ScalarType for Longvarbinary. */ -public class ScalarTypeBytesLongVarbinary extends ScalarTypeBytesBase { +public final class ScalarTypeBytesLongVarbinary extends ScalarTypeBytesBase { public ScalarTypeBytesLongVarbinary() { super(true, Types.LONGVARBINARY); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesVarbinary.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesVarbinary.java index 3e9b68790..dea5cc1a1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesVarbinary.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeBytesVarbinary.java @@ -8,7 +8,7 @@ import java.sql.Types; /** * ScalarType for Types.VARBINARY to byte[]. */ -public class ScalarTypeBytesVarbinary extends ScalarTypeBytesBase { +public final class ScalarTypeBytesVarbinary extends ScalarTypeBytesBase { public ScalarTypeBytesVarbinary() { super(true, Types.VARBINARY); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCalendar.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCalendar.java index c0c67e7f8..bbefa5a83 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCalendar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCalendar.java @@ -16,7 +16,7 @@ import static io.ebeaninternal.server.type.IsoJsonDateTimeParser.formatIso; /** * ScalarType for java.util.Calendar. */ -public class ScalarTypeCalendar extends ScalarTypeBaseDateTime { +public final class ScalarTypeCalendar extends ScalarTypeBaseDateTime { public ScalarTypeCalendar(JsonConfig.DateTime mode, int jdbcType) { super(mode, Calendar.class, false, jdbcType); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeChar.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeChar.java index 509506298..f5fe00954 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeChar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeChar.java @@ -10,7 +10,7 @@ import java.sql.Types; /** * ScalarType for char. */ -public class ScalarTypeChar extends ScalarTypeBaseVarchar { +public final class ScalarTypeChar extends ScalarTypeBaseVarchar { public ScalarTypeChar() { super(char.class, false, Types.VARCHAR); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCharArray.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCharArray.java index dedb38838..ebfd69a6f 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCharArray.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCharArray.java @@ -13,7 +13,7 @@ import java.sql.Types; /** * ScalarType for char[]. */ -public class ScalarTypeCharArray extends ScalarTypeBaseVarchar { +public final class ScalarTypeCharArray extends ScalarTypeBaseVarchar { public ScalarTypeCharArray() { super(char[].class, false, Types.VARCHAR); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCidr.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCidr.java index 1d303a157..390ac22c7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCidr.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCidr.java @@ -42,7 +42,7 @@ public abstract class ScalarTypeCidr extends ScalarTypeBaseVarchar { /** * Cidr to Varchar. */ - public static class Varchar extends ScalarTypeCidr { + public static final class Varchar extends ScalarTypeCidr { @Override public void bind(DataBinder binder, Cidr value) throws SQLException { @@ -57,7 +57,7 @@ public abstract class ScalarTypeCidr extends ScalarTypeBaseVarchar { /** * Cidr to Postgres CIDR. */ - public static class Postgres extends ScalarTypeCidr { + public static final class Postgres extends ScalarTypeCidr { @Override public void bind(DataBinder binder, Cidr value) throws SQLException { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeClass.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeClass.java index 112e08459..78f4a19de 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeClass.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeClass.java @@ -4,12 +4,9 @@ import javax.persistence.PersistenceException; /** * ScalarType for Class that persists it to VARCHAR column. - * - * @author emcgreal - * @author rbygrave */ @SuppressWarnings({"rawtypes"}) -public class ScalarTypeClass extends ScalarTypeBaseVarchar { +public final class ScalarTypeClass extends ScalarTypeBaseVarchar { public ScalarTypeClass() { super(Class.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCurrency.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCurrency.java index 6ed58b133..0eaeb8602 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCurrency.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeCurrency.java @@ -5,7 +5,7 @@ import java.util.Currency; /** * ScalarType for java.util.Currency which converts to and from a VARCHAR database column. */ -public class ScalarTypeCurrency extends ScalarTypeBaseVarchar { +public final class ScalarTypeCurrency extends ScalarTypeBaseVarchar { public ScalarTypeCurrency() { super(Currency.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDate.java index b9d49586f..b69571c11 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDate.java @@ -12,7 +12,7 @@ import java.sql.Types; /** * ScalarType for java.sql.Date. */ -public class ScalarTypeDate extends ScalarTypeBaseDate { +public final class ScalarTypeDate extends ScalarTypeBaseDate { public ScalarTypeDate(JsonConfig.Date mode) { super(mode, Date.class, true, Types.DATE); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDayOfWeek.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDayOfWeek.java index 39c8ada61..1cee17865 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDayOfWeek.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDayOfWeek.java @@ -11,7 +11,7 @@ import java.time.DayOfWeek; /** * ScalarType mapping for Month enum. */ -public class ScalarTypeDayOfWeek extends ScalarTypeEnumWithMapping { +public final class ScalarTypeDayOfWeek extends ScalarTypeEnumWithMapping { static final EnumToDbIntegerMap beanDbMap = new EnumToDbIntegerMap(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDouble.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDouble.java index 14f825413..02adb9de8 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDouble.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDouble.java @@ -16,7 +16,7 @@ import java.sql.Types; /** * ScalarType for Double and double. */ -public class ScalarTypeDouble extends ScalarTypeBase { +public final class ScalarTypeDouble extends ScalarTypeBase { public ScalarTypeDouble() { super(Double.class, true, Types.DOUBLE); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanos.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanos.java index faeca10a5..2f99708b3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanos.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeDurationWithNanos.java @@ -15,7 +15,7 @@ import java.time.Duration; * Stored in the DB as DECIMAL value. *

*/ -public class ScalarTypeDurationWithNanos extends ScalarTypeDuration { +public final class ScalarTypeDurationWithNanos extends ScalarTypeDuration { public ScalarTypeDurationWithNanos() { super(Types.DECIMAL); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java index ba9a44b20..1a552d11a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEncryptedWrapper.java @@ -12,12 +12,10 @@ import java.io.DataOutput; import java.io.IOException; import java.sql.SQLException; -public class ScalarTypeEncryptedWrapper implements ScalarType, LocalEncryptedType { +public final class ScalarTypeEncryptedWrapper implements ScalarType, LocalEncryptedType { private final ScalarType wrapped; - private final DataEncryptSupport dataEncryptSupport; - private final ScalarTypeBytesBase byteArrayType; public ScalarTypeEncryptedWrapper(ScalarType wrapped, ScalarTypeBytesBase byteArrayType, DataEncryptSupport dataEncryptSupport) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java index 4c8a5e645..dcdc8d42a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumStandard.java @@ -28,10 +28,10 @@ import java.util.Set; * Ebean specific @EnumMapping. *

*/ -public class ScalarTypeEnumStandard { +public final class ScalarTypeEnumStandard { @SuppressWarnings({"rawtypes", "unchecked"}) - public static class StringEnum extends EnumBase implements ScalarTypeEnum { + public static final class StringEnum extends EnumBase implements ScalarTypeEnum { private final int length; @@ -63,15 +63,12 @@ public class ScalarTypeEnumStandard { } private int maxValueLength(Class enumType) { - int maxLen = 0; - Object[] ea = enumType.getEnumConstants(); for (Object anEa : ea) { Enum e = (Enum) anEa; maxLen = Math.max(maxLen, e.name().length()); } - return maxLen; } @@ -120,7 +117,7 @@ public class ScalarTypeEnumStandard { } @SuppressWarnings({"rawtypes", "unchecked"}) - public static class OrdinalEnum extends EnumBase implements ScalarTypeEnum { + public static final class OrdinalEnum extends EnumBase implements ScalarTypeEnum { private final Object[] enumArray; diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java index 598889f49..6960d4d09 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeEnumWithMapping.java @@ -17,9 +17,7 @@ import java.util.Set; public class ScalarTypeEnumWithMapping extends ScalarTypeEnumStandard.EnumBase implements ScalarType, ScalarTypeEnum { private final EnumToDbValueMap beanDbMap; - private final int length; - private final boolean withConstraint; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java index 4dfa68a24..d6f694672 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFile.java @@ -25,16 +25,13 @@ import java.sql.Types; /** * ScalarType for streaming between a File and the database. */ -public class ScalarTypeFile extends ScalarTypeBase { +public final class ScalarTypeFile extends ScalarTypeBase { private static final Logger logger = LoggerFactory.getLogger(ScalarTypeFile.class); private final String prefix; - private final String suffix; - private final File directory; - private final int bufferSize; /** diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFloat.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFloat.java index e9f8e1306..d468b74ef 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFloat.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeFloat.java @@ -16,7 +16,7 @@ import java.sql.Types; /** * ScalarType for Float and float. */ -public class ScalarTypeFloat extends ScalarTypeBase { +public final class ScalarTypeFloat extends ScalarTypeBase { public ScalarTypeFloat() { super(Float.class, true, Types.REAL); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInet.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInet.java index 9252afe6e..9a7b884f4 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInet.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInet.java @@ -42,7 +42,7 @@ public abstract class ScalarTypeInet extends ScalarTypeBaseVarchar { /** * Inet to Varchar. */ - public static class Varchar extends ScalarTypeInet { + public static final class Varchar extends ScalarTypeInet { Varchar() { super(Types.VARCHAR); @@ -61,7 +61,7 @@ public abstract class ScalarTypeInet extends ScalarTypeBaseVarchar { /** * Inet to Postgres INET. */ - public static class Postgres extends ScalarTypeInet { + public static final class Postgres extends ScalarTypeInet { Postgres() { super(ExtraDbTypes.INET); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInetAddress.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInetAddress.java index 1de5e1db7..419f52cd3 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInetAddress.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInetAddress.java @@ -7,7 +7,7 @@ import java.net.InetAddress; /** * ScalarType for java.net.URI which converts to and from a VARCHAR database column. */ -public class ScalarTypeInetAddress extends ScalarTypeBaseVarchar { +public final class ScalarTypeInetAddress extends ScalarTypeBaseVarchar { public ScalarTypeInetAddress() { super(InetAddress.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInetAddressPostgres.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInetAddressPostgres.java index 086f4fd45..aba3aa4c9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInetAddressPostgres.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInetAddressPostgres.java @@ -11,7 +11,7 @@ import java.sql.Types; /** * ScalarType for InetAddress to Postgres INET. */ -public class ScalarTypeInetAddressPostgres extends ScalarTypeBaseVarchar { +public final class ScalarTypeInetAddressPostgres extends ScalarTypeBaseVarchar { public ScalarTypeInetAddressPostgres() { super(InetAddress.class, false, ExtraDbTypes.INET); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInstant.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInstant.java index dd78f4a65..0d84af6e1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInstant.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInstant.java @@ -9,7 +9,7 @@ import java.time.Instant; /** * ScalarType for java.sql.Timestamp. */ -public class ScalarTypeInstant extends ScalarTypeBaseDateTime { +public final class ScalarTypeInstant extends ScalarTypeBaseDateTime { public ScalarTypeInstant(JsonConfig.DateTime mode) { super(mode, Instant.class, false, Types.TIMESTAMP); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInteger.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInteger.java index 0d343d05b..cae0de91b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInteger.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeInteger.java @@ -17,7 +17,7 @@ import java.sql.Types; /** * ScalarType for Integer and int. */ -public class ScalarTypeInteger extends ScalarTypeBase { +public final class ScalarTypeInteger extends ScalarTypeBase { public static ScalarTypeInteger INSTANCE = new ScalarTypeInteger(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java index bebd64de7..c108b99f1 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateMidnight.java @@ -11,7 +11,7 @@ import java.sql.Types; * ScalarType for Joda DateMidnight. This maps to a JDBC Date. */ @SuppressWarnings("deprecation") -public class ScalarTypeJodaDateMidnight extends ScalarTypeBaseDate { +public final class ScalarTypeJodaDateMidnight extends ScalarTypeBaseDate { /** * Instantiates a new scalar type joda date midnight. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateTime.java index f8d9816ae..2ca296ed0 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaDateTime.java @@ -11,7 +11,7 @@ import java.time.Instant; /** * ScalarType for Joda DateTime. This maps to a JDBC Timestamp. */ -public class ScalarTypeJodaDateTime extends ScalarTypeBaseDateTime { +public final class ScalarTypeJodaDateTime extends ScalarTypeBaseDateTime { public ScalarTypeJodaDateTime(JsonConfig.DateTime mode) { super(mode, DateTime.class, false, Types.TIMESTAMP); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java index 4727f1d58..09acb797e 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDate.java @@ -11,7 +11,7 @@ import java.sql.Types; /** * ScalarType for Joda LocalDate. This maps to a JDBC Date. */ -public class ScalarTypeJodaLocalDate extends ScalarTypeBaseDate { +public final class ScalarTypeJodaLocalDate extends ScalarTypeBaseDate { public ScalarTypeJodaLocalDate(JsonConfig.Date mode) { super(mode, LocalDate.class, false, Types.DATE); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java index bb5db7e37..5d537dc9c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalDateTime.java @@ -11,7 +11,7 @@ import java.time.Instant; /** * ScalarType for Joda LocalDateTime. This maps to a JDBC Timestamp. */ -public class ScalarTypeJodaLocalDateTime extends ScalarTypeBaseDateTime { +public final class ScalarTypeJodaLocalDateTime extends ScalarTypeBaseDateTime { public ScalarTypeJodaLocalDateTime(JsonConfig.DateTime mode) { super(mode, LocalDateTime.class, false, Types.TIMESTAMP); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeUTC.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeUTC.java index 1cf2656a0..4de3c513a 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeUTC.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaLocalTimeUTC.java @@ -13,7 +13,7 @@ import java.sql.Types; /** * ScalarType for Joda LocalTime. This maps to a JDBC Time. */ -public class ScalarTypeJodaLocalTimeUTC extends ScalarTypeJodaLocalTime { +public final class ScalarTypeJodaLocalTimeUTC extends ScalarTypeJodaLocalTime { public ScalarTypeJodaLocalTimeUTC() { super(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriod.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriod.java index 5d3e3ee4e..2dc09a233 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriod.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJodaPeriod.java @@ -5,7 +5,7 @@ import org.joda.time.Period; /** * ScalarType for Joda Period stored as DB VARCHAR */ -public class ScalarTypeJodaPeriod extends ScalarTypeBaseVarchar { +public final class ScalarTypeJodaPeriod extends ScalarTypeBaseVarchar { public ScalarTypeJodaPeriod() { super(Period.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java index d3c700443..71179dba7 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonList.java @@ -19,7 +19,7 @@ import java.util.List; /** * Types for mapping List in JSON format to DB types VARCHAR, JSON and JSONB. */ -class ScalarTypeJsonList { +final class ScalarTypeJsonList { /** * Return the appropriate ScalarType based requested dbType and if Postgres. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNode.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNode.java index 5ff3ef99a..9c3950b94 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNode.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNode.java @@ -27,7 +27,7 @@ public abstract class ScalarTypeJsonNode extends ScalarTypeBase { /** * Clob storage based implementation. */ - public static class Clob extends ScalarTypeJsonNode { + public static final class Clob extends ScalarTypeJsonNode { public Clob(ObjectMapper objectMapper) { super(objectMapper, Types.CLOB); @@ -46,7 +46,7 @@ public abstract class ScalarTypeJsonNode extends ScalarTypeBase { /** * Varchar storage based implementation. */ - public static class Varchar extends ScalarTypeJsonNode { + public static final class Varchar extends ScalarTypeJsonNode { public Varchar(ObjectMapper objectMapper) { super(objectMapper, Types.VARCHAR); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNodePostgres.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNodePostgres.java index f24178aab..94d46a67d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNodePostgres.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonNodePostgres.java @@ -31,7 +31,7 @@ public abstract class ScalarTypeJsonNodePostgres extends ScalarTypeJsonNode { /** * ScalarType mapping JsonNode to Postgres JSON database type. */ - public static class JSON extends ScalarTypeJsonNodePostgres { + public static final class JSON extends ScalarTypeJsonNodePostgres { public JSON(ObjectMapper objectMapper) { super(objectMapper, DbPlatformType.JSON, PostgresHelper.JSON_TYPE); @@ -41,7 +41,7 @@ public abstract class ScalarTypeJsonNodePostgres extends ScalarTypeJsonNode { /** * ScalarType mapping JsonNode to Postgres JSONB database type. */ - public static class JSONB extends ScalarTypeJsonNodePostgres { + public static final class JSONB extends ScalarTypeJsonNodePostgres { public JSONB(ObjectMapper objectMapper) { super(objectMapper, DbPlatformType.JSONB, PostgresHelper.JSONB_TYPE); 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 65cb88cdc..5cda3f921 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 @@ -25,7 +25,7 @@ import java.sql.Types; /** * Supports @DbJson properties using Jackson ObjectMapper. */ -class ScalarTypeJsonObjectMapper { +final class ScalarTypeJsonObjectMapper { /** * Create and return the appropriate ScalarType. diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDate.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDate.java index eca6102fa..4fd228459 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDate.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDate.java @@ -13,7 +13,7 @@ import java.time.ZonedDateTime; /** * ScalarType for java.time.LocalDate. This maps to a JDBC Date. */ -public class ScalarTypeLocalDate extends ScalarTypeBaseDate { +public final class ScalarTypeLocalDate extends ScalarTypeBaseDate { public ScalarTypeLocalDate(JsonConfig.Date mode) { super(mode, LocalDate.class, false, Types.DATE); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTime.java index 12b884e82..e03c67898 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalDateTime.java @@ -14,7 +14,7 @@ import java.time.ZoneId; /** * ScalarType for java.sql.Timestamp. */ -public class ScalarTypeLocalDateTime extends ScalarTypeBaseDateTime { +public final class ScalarTypeLocalDateTime extends ScalarTypeBaseDateTime { public ScalarTypeLocalDateTime(JsonConfig.DateTime mode) { super(mode, LocalDateTime.class, false, Types.TIMESTAMP); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanos.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanos.java index 0633fe19c..2a86abbfa 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanos.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocalTimeWithNanos.java @@ -11,7 +11,7 @@ import java.time.LocalTime; /** * ScalarType for java.time.LocalTime stored with Nanos as DB BIGINT type. */ -public class ScalarTypeLocalTimeWithNanos extends ScalarTypeLocalTime { +public final class ScalarTypeLocalTimeWithNanos extends ScalarTypeLocalTime { public ScalarTypeLocalTimeWithNanos() { super(Types.BIGINT); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocale.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocale.java index 438ddaf6a..cc1a4c166 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocale.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLocale.java @@ -5,7 +5,7 @@ import java.util.Locale; /** * ScalarType for java.util.Currency which converts to and from a VARCHAR database column. */ -public class ScalarTypeLocale extends ScalarTypeBaseVarchar { +public final class ScalarTypeLocale extends ScalarTypeBaseVarchar { public ScalarTypeLocale() { super(Locale.class); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLong.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLong.java index 26c272f54..697e84376 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLong.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLong.java @@ -16,7 +16,7 @@ import java.sql.Types; /** * ScalarType for Long and long. */ -public class ScalarTypeLong extends ScalarTypeBase { +public final class ScalarTypeLong extends ScalarTypeBase { public ScalarTypeLong() { super(Long.class, true, Types.BIGINT); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongVarchar.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongVarchar.java index 9bde5947f..9dd621d36 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongVarchar.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeLongVarchar.java @@ -5,7 +5,7 @@ import java.sql.Types; /** * ScalarType for String. */ -public class ScalarTypeLongVarchar extends ScalarTypeClob { +public final class ScalarTypeLongVarchar extends ScalarTypeClob { public ScalarTypeLongVarchar() { super(true, Types.LONGVARCHAR); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMathBigInteger.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMathBigInteger.java index bb101706f..3c5b99255 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMathBigInteger.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMathBigInteger.java @@ -17,7 +17,7 @@ import java.sql.Types; /** * ScalarType for java.math.BigInteger. */ -public class ScalarTypeMathBigInteger extends ScalarTypeBase { +public final class ScalarTypeMathBigInteger extends ScalarTypeBase { public ScalarTypeMathBigInteger() { super(BigInteger.class, false, Types.BIGINT); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonth.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonth.java index 2707c88f1..a04925ebc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonth.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonth.java @@ -11,7 +11,7 @@ import java.time.Month; /** * ScalarType mapping for Month enum. */ -public class ScalarTypeMonth extends ScalarTypeEnumWithMapping { +public final class ScalarTypeMonth extends ScalarTypeEnumWithMapping { static final EnumToDbIntegerMap beanDbMap = new EnumToDbIntegerMap(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonthDay.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonthDay.java index acebb04e9..eb26a84b9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonthDay.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeMonthDay.java @@ -21,24 +21,14 @@ import java.time.MonthDay; * Note that the year used should be a leap year. *

*/ -public class ScalarTypeMonthDay extends ScalarTypeBase { - - protected final int year; - - /** - * Construct with a year of 2000 (which is a leap year). - */ - public ScalarTypeMonthDay() { - this(2000); // Year 2000 is a leap year - } +final class ScalarTypeMonthDay extends ScalarTypeBase { /** * Construct with a base year. The year should be a leap year to * allow the 29th Feb value. */ - public ScalarTypeMonthDay(int year) { + ScalarTypeMonthDay() { super(MonthDay.class, false, Types.DATE); - this.year = year; } private MonthDay convertFromDate(Date ts) { 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 b68f3eba9..f7e151238 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 @@ -13,11 +13,11 @@ import static io.ebeaninternal.server.type.IsoJsonDateTimeParser.formatIso; /** * ScalarType for java.sql.Timestamp. */ -public class ScalarTypeOffsetDateTime extends ScalarTypeBaseDateTime { +final class ScalarTypeOffsetDateTime extends ScalarTypeBaseDateTime { private final ZoneId zoneId; - public ScalarTypeOffsetDateTime(JsonConfig.DateTime mode, ZoneId zoneId) { + ScalarTypeOffsetDateTime(JsonConfig.DateTime mode, ZoneId zoneId) { super(mode, OffsetDateTime.class, false, Types.TIMESTAMP); this.zoneId = zoneId; } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeOffsetTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeOffsetTime.java index 2cb3a6f35..e1f241b51 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeOffsetTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeOffsetTime.java @@ -5,9 +5,9 @@ import java.time.OffsetTime; /** * ScalarType for java.time.OffsetTime stored as DB VARCHAR */ -public class ScalarTypeOffsetTime extends ScalarTypeBaseVarchar { +final class ScalarTypeOffsetTime extends ScalarTypeBaseVarchar { - public ScalarTypeOffsetTime() { + ScalarTypeOffsetTime() { super(OffsetTime.class); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePath.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePath.java index c5ca8951d..a5e318881 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePath.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePath.java @@ -8,9 +8,9 @@ import java.nio.file.Paths; /** * ScalarType for java.nio.file.Path which converts to and from a VARCHAR database column. */ -public class ScalarTypePath extends ScalarTypeBaseVarchar { +final class ScalarTypePath extends ScalarTypeBaseVarchar { - public ScalarTypePath() { + ScalarTypePath() { super(Path.class); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePeriod.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePeriod.java index 573ba6e5c..9b0175173 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePeriod.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePeriod.java @@ -5,9 +5,9 @@ import java.time.Period; /** * ScalarType for Joda Period stored as DB VARCHAR */ -public class ScalarTypePeriod extends ScalarTypeBaseVarchar { +final class ScalarTypePeriod extends ScalarTypeBaseVarchar { - public ScalarTypePeriod() { + ScalarTypePeriod() { super(Period.class); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePostgresHstore.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePostgresHstore.java index 14d2c50d3..69b3d8a5b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePostgresHstore.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypePostgresHstore.java @@ -20,9 +20,9 @@ import java.util.Map; * Postgres Hstore type which maps Map to a single 'HStore column' in the DB. */ @SuppressWarnings("rawtypes") -public class ScalarTypePostgresHstore extends ScalarTypeBase { +final class ScalarTypePostgresHstore extends ScalarTypeBase { - public ScalarTypePostgresHstore() { + ScalarTypePostgresHstore() { super(Map.class, false, DbPlatformType.HSTORE); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java index 43d7dac80..b3205b747 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeShort.java @@ -17,9 +17,9 @@ import java.sql.Types; /** * ScalarType for Short and short. */ -public class ScalarTypeShort extends ScalarTypeBase { +final class ScalarTypeShort extends ScalarTypeBase { - public ScalarTypeShort() { + ScalarTypeShort() { super(Short.class, true, Types.SMALLINT); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeString.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeString.java index 3ee87d9d9..d57bf253b 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeString.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeString.java @@ -5,7 +5,7 @@ import java.sql.Types; /** * ScalarType for String. */ -public class ScalarTypeString extends ScalarTypeStringBase { +public final class ScalarTypeString extends ScalarTypeStringBase { public static final ScalarTypeString INSTANCE = new ScalarTypeString(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java index 50b0d980d..d0ea5a278 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeStringBase.java @@ -16,7 +16,7 @@ import java.sql.Types; /** * Base ScalarType for String type using Varchar, Clob and LongVarchar. */ -public abstract class ScalarTypeStringBase extends ScalarTypeBase { +abstract class ScalarTypeStringBase extends ScalarTypeBase { ScalarTypeStringBase(boolean jdbcNative, int jdbcType) { super(String.class, jdbcNative, jdbcType); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTime.java b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTime.java index 4664d79ed..8328edfbe 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTime.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/type/ScalarTypeTime.java @@ -17,9 +17,9 @@ import java.sql.Types; /** * ScalarType for java.sql.Time. */ -public class ScalarTypeTime extends ScalarTypeBase