From ceee1d748941a3a10a0815c293a0fb436bf1dab6 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Tue, 18 Mar 2025 20:49:26 +1300 Subject: [PATCH] Remove readOnly from Query --- .../src/main/java/io/ebean/QueryBuilder.java | 5 ---- .../java/io/ebeaninternal/api/SpiQuery.java | 5 ---- .../server/query/DefaultFetchGroupQuery.java | 5 ---- .../server/querydefn/DefaultOrmQuery.java | 24 ------------------- .../java/io/ebean/typequery/QueryBean.java | 6 ----- .../java/org/tests/cache/TestBeanCache.java | 2 +- .../cache/TestBeanCacheWithDeleteQuery.java | 4 ++-- .../java/org/tests/cache/TestQueryCache.java | 4 ++-- .../cache/TestQueryCacheTableDependency.java | 20 ++++++++-------- .../org/tests/query/TestQueryFindIterate.java | 6 ++--- .../org/tests/query/TestQueryOrderById.java | 4 ++-- .../query/orderby/TestOrderByWithMany.java | 4 ++-- 12 files changed, 22 insertions(+), 67 deletions(-) diff --git a/ebean-api/src/main/java/io/ebean/QueryBuilder.java b/ebean-api/src/main/java/io/ebean/QueryBuilder.java index 29017241b..b34b6b220 100644 --- a/ebean-api/src/main/java/io/ebean/QueryBuilder.java +++ b/ebean-api/src/main/java/io/ebean/QueryBuilder.java @@ -396,11 +396,6 @@ public interface QueryBuilder, T> extends Que */ SELF setUnmodifiable(boolean unmodifiable); - /** - * When set to true when you want the returned beans to be read only. - */ - SELF setReadOnly(boolean readOnly); - /** * Set a timeout on this query. *

diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQuery.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQuery.java index 7854ac39f..6e32de154 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiQuery.java @@ -779,11 +779,6 @@ public interface SpiQuery extends Query, SpiQueryFetch, TxnProfileEventCod */ CacheMode queryCacheMode(); - /** - * Return true if the beans returned by this query should be read only. - */ - Boolean isReadOnly(); - /** * Return true if the beans returned by this query should be unmodifiable. */ 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 3956d900e..1aeb208eb 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 @@ -508,11 +508,6 @@ final class DefaultFetchGroupQuery implements SpiFetchGroupQuery, SpiQuery throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup"); } - @Override - public Query setReadOnly(boolean readOnly) { - throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup"); - } - @Override public Query setTimeout(int secs) { throw new RuntimeException("EB102: Only select() and fetch() clause is allowed on FetchGroup"); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index c78eb2d56..9ca7b65b0 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 @@ -132,7 +132,6 @@ public class DefaultOrmQuery extends AbstractQuery implements SpiQuery { private boolean usageProfiling = true; private CacheMode useBeanCache = CacheMode.AUTO; private CacheMode useQueryCache = CacheMode.OFF; - private Boolean readOnly; private boolean unmodifiable; private PersistenceContextScope persistenceContextScope; @@ -516,13 +515,8 @@ public class DefaultOrmQuery extends AbstractQuery implements SpiQuery { createExtraJoinsToSupportManyWhereClause(); } if (unmodifiable) { - readOnly = Boolean.TRUE; disableLazyLoading = true; persistenceContextScope = PersistenceContextScope.QUERY; - } else if (disableLazyLoading && Boolean.TRUE.equals(readOnly)) { - // "upgrade" this to unmodifiable? hmmm. - unmodifiable = true; - persistenceContextScope = PersistenceContextScope.QUERY; } return markQueryJoins(); } @@ -774,7 +768,6 @@ public class DefaultOrmQuery extends AbstractQuery implements SpiQuery { copy.useBeanCache = useBeanCache; copy.useQueryCache = useQueryCache; copy.unmodifiable = unmodifiable; - copy.readOnly = readOnly; if (detail != null) { copy.detail = detail.copy(); } @@ -1295,25 +1288,11 @@ public class DefaultOrmQuery extends AbstractQuery implements SpiQuery { return this; } - @Override - public final Boolean isReadOnly() { - return readOnly; - } - @Override public boolean isUnmodifiable() { return unmodifiable; } - @Override - public final Query setReadOnly(boolean readOnly) { - if (unmodifiable && !readOnly) { - throw new IllegalStateException("Not allowed to set readOnly false on query that is unmodifiable"); - } - this.readOnly = readOnly; - return this; - } - @Override public final boolean isBeanCachePut() { return useBeanCache.isPut() && beanDescriptor.isBeanCaching(); @@ -1356,9 +1335,6 @@ public class DefaultOrmQuery extends AbstractQuery implements SpiQuery { public final Query setUseQueryCache(CacheMode useQueryCache) { this.useQueryCache = useQueryCache; if (CacheMode.OFF != useQueryCache) { - if (Boolean.FALSE.equals(readOnly)) { - throw new IllegalStateException("Not allowed to use query cache with readOnly false"); - } unmodifiable = true; } return this; diff --git a/ebean-querybean/src/main/java/io/ebean/typequery/QueryBean.java b/ebean-querybean/src/main/java/io/ebean/typequery/QueryBean.java index b8db86a36..917c391a4 100644 --- a/ebean-querybean/src/main/java/io/ebean/typequery/QueryBean.java +++ b/ebean-querybean/src/main/java/io/ebean/typequery/QueryBean.java @@ -499,12 +499,6 @@ public abstract class QueryBean> implements IQueryB return root; } - @Override - public final R setReadOnly(boolean readOnly) { - query.setReadOnly(readOnly); - return root; - } - @Override public final R setBeanCacheMode(CacheMode beanCacheMode) { query.setBeanCacheMode(beanCacheMode); diff --git a/ebean-test/src/test/java/org/tests/cache/TestBeanCache.java b/ebean-test/src/test/java/org/tests/cache/TestBeanCache.java index 5a18f1aca..7de5b8810 100644 --- a/ebean-test/src/test/java/org/tests/cache/TestBeanCache.java +++ b/ebean-test/src/test/java/org/tests/cache/TestBeanCache.java @@ -51,7 +51,7 @@ public class TestBeanCache extends BaseTestCase { // expect to hit the cache, no SQL LoggedSql.start(); - OCachedBean bean2 = DB.find(OCachedBean.class).setReadOnly(true).setId(String.valueOf(bean.getId())).findOne(); + OCachedBean bean2 = DB.find(OCachedBean.class).setUnmodifiable(true).setId(String.valueOf(bean.getId())).findOne(); sql = LoggedSql.stop(); assertNotNull(bean2); assertThat(sql).isEmpty(); diff --git a/ebean-test/src/test/java/org/tests/cache/TestBeanCacheWithDeleteQuery.java b/ebean-test/src/test/java/org/tests/cache/TestBeanCacheWithDeleteQuery.java index 965e6eddd..59c3a36aa 100644 --- a/ebean-test/src/test/java/org/tests/cache/TestBeanCacheWithDeleteQuery.java +++ b/ebean-test/src/test/java/org/tests/cache/TestBeanCacheWithDeleteQuery.java @@ -40,7 +40,7 @@ public class TestBeanCacheWithDeleteQuery extends BaseTestCase { // expect not to hit the cache, expect SQL LoggedSql.start(); - OCachedBean bean2 = DB.find(OCachedBean.class).setReadOnly(true).setId(String.valueOf(bean.getId())).findOne(); + OCachedBean bean2 = DB.find(OCachedBean.class).setUnmodifiable(true).setId(String.valueOf(bean.getId())).findOne(); sql = LoggedSql.stop(); assertNull(bean2); assertThat(sql).isNotEmpty(); @@ -70,7 +70,7 @@ public class TestBeanCacheWithDeleteQuery extends BaseTestCase { // expect not to hit the cache, expect SQL LoggedSql.start(); - OCachedBean bean2 = DB.find(OCachedBean.class).setReadOnly(true).setId(String.valueOf(bean.getId())).findOne(); + OCachedBean bean2 = DB.find(OCachedBean.class).setUnmodifiable(true).setId(String.valueOf(bean.getId())).findOne(); sql = LoggedSql.stop(); assertNotNull(bean2); assertThat(sql).isNotEmpty(); diff --git a/ebean-test/src/test/java/org/tests/cache/TestQueryCache.java b/ebean-test/src/test/java/org/tests/cache/TestQueryCache.java index 526b78625..83f6b74eb 100644 --- a/ebean-test/src/test/java/org/tests/cache/TestQueryCache.java +++ b/ebean-test/src/test/java/org/tests/cache/TestQueryCache.java @@ -317,7 +317,7 @@ public class TestQueryCache extends BaseTestCase { assertThat(list).isNotEmpty(); assertThat(DB.beanState(list.get(0)).isUnmodifiable()).isTrue(); - List list2 = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + List list2 = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().ilike("name", "Rob") .findList(); @@ -330,7 +330,7 @@ public class TestQueryCache extends BaseTestCase { // readOnly defaults to true for query cache assertSame(list2, list2B); - List list3 = DB.find(Customer.class).setUseQueryCache(true)//.setReadOnly(false) + List list3 = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(false) .where().ilike("name", "Rob") .findList(); diff --git a/ebean-test/src/test/java/org/tests/cache/TestQueryCacheTableDependency.java b/ebean-test/src/test/java/org/tests/cache/TestQueryCacheTableDependency.java index 7b794bb03..0d6188bdb 100644 --- a/ebean-test/src/test/java/org/tests/cache/TestQueryCacheTableDependency.java +++ b/ebean-test/src/test/java/org/tests/cache/TestQueryCacheTableDependency.java @@ -34,13 +34,13 @@ public class TestQueryCacheTableDependency extends BaseTestCase { .where().eq("line2", "St Lukes") .findList(); - int custs = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + int custs = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().eq("billingAddress.line2", "St Lukes") .findCount(); assertThat(custs).isEqualTo(3); - custs = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + custs = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().eq("billingAddress.line2", "St Lukes") .findCount(); @@ -50,14 +50,14 @@ public class TestQueryCacheTableDependency extends BaseTestCase { a1.setLine2("St Lucky"); DB.save(a1); - custs = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + custs = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().eq("billingAddress.line2", "St Lukes") .findCount(); assertThat(custs).isEqualTo(2); - custs = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + custs = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().eq("billingAddress.line2", "St Lucky") .findCount(); @@ -68,13 +68,13 @@ public class TestQueryCacheTableDependency extends BaseTestCase { .where().eq("line2", "St Lucky") .update(); - custs = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + custs = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().eq("billingAddress.line2", "St Lucky") .findCount(); assertThat(custs).isEqualTo(0); - custs = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + custs = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().eq("billingAddress.line2", "St Lucky2") .findCount(); assertThat(custs).isEqualTo(1); @@ -83,12 +83,12 @@ public class TestQueryCacheTableDependency extends BaseTestCase { .setParameters("St Lucky3", "St Lucky2") .execute(); - custs = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + custs = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().eq("billingAddress.line2", "St Lucky2") .findCount(); assertThat(custs).isEqualTo(0); - custs = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + custs = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where().eq("billingAddress.line2", "St Lucky3") .findCount(); @@ -101,7 +101,7 @@ public class TestQueryCacheTableDependency extends BaseTestCase { Customer fi = DB.find(Customer.class).where().eq("name", "Fiona").findOne(); - int custCount0 = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + int custCount0 = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where() .eq("name", "Fiona") .isNull("contacts.phone") @@ -117,7 +117,7 @@ public class TestQueryCacheTableDependency extends BaseTestCase { assertThat(updateRows).isGreaterThan(0); - int custCount1 = DB.find(Customer.class).setUseQueryCache(true).setReadOnly(true) + int custCount1 = DB.find(Customer.class).setUseQueryCache(true) //.setReadOnly(true) .where() .eq("name", "Fiona") .isNull("contacts.phone") diff --git a/ebean-test/src/test/java/org/tests/query/TestQueryFindIterate.java b/ebean-test/src/test/java/org/tests/query/TestQueryFindIterate.java index 817f783aa..3e0f8b305 100644 --- a/ebean-test/src/test/java/org/tests/query/TestQueryFindIterate.java +++ b/ebean-test/src/test/java/org/tests/query/TestQueryFindIterate.java @@ -138,9 +138,9 @@ public class TestQueryFindIterate extends BaseTestCase { List loggedSql = LoggedSql.stop(); assertEquals(3, loggedSql.size()); - assertTrue(trimSql(loggedSql.get(0), 7).contains("select t0.id, t0.status, t0.order_date, t1.id, t1.name from o_order t0 join o_customer t1")); - assertTrue(trimSql(loggedSql.get(1), 7).contains("select t0.order_id, t0.id, t0.order_qty, t0.ship_qty, t0.unit_price")); - assertTrue(trimSql(loggedSql.get(2), 7).contains("select t0.order_id, t0.id, t0.ship_time, t0.cretime, t0.updtime, t0.version, t0.order_id from or_order_ship")); + assertThat(trimSql(loggedSql.get(0), 7)).contains("select t0.id, t0.status, t0.order_date, t1.id, t1.name from o_order t0 join o_customer t1"); + assertThat(trimSql(loggedSql.get(1), 7)).contains("select t0.order_id, t0.id, t0.order_qty, t0.ship_qty, t0.unit_price"); + assertThat(trimSql(loggedSql.get(2), 7)).contains("select t0.order_id, t0.id, t0.ship_time, t0.cretime, t0.updtime, t0.version, t0.order_id from or_order_ship"); } @Test diff --git a/ebean-test/src/test/java/org/tests/query/TestQueryOrderById.java b/ebean-test/src/test/java/org/tests/query/TestQueryOrderById.java index d73c30c51..6f2f9cb01 100644 --- a/ebean-test/src/test/java/org/tests/query/TestQueryOrderById.java +++ b/ebean-test/src/test/java/org/tests/query/TestQueryOrderById.java @@ -160,7 +160,7 @@ class TestQueryOrderById extends BaseTestCase { ResetBasicData.reset(); List result = DB.find(Customer.class) - .setReadOnly(true).setDisableLazyLoading(true) + .setUnmodifiable(true) // .setDisableLazyLoading(true) .select("id,name") .fetch("contacts") .findList(); @@ -185,7 +185,7 @@ class TestQueryOrderById extends BaseTestCase { .setFirstRow(1) .setMaxRows(5); - query.setReadOnly(true).setDisableLazyLoading(true); + query.setUnmodifiable(true); //.setDisableLazyLoading(true); List list = query.findList(); if (isSqlServer() || isDb2()) { assertSql(query).isEqualTo("select t0.id, t0.name from o_customer t0 order by t0.id offset 1 rows fetch next 5 rows only"); diff --git a/ebean-test/src/test/java/org/tests/query/orderby/TestOrderByWithMany.java b/ebean-test/src/test/java/org/tests/query/orderby/TestOrderByWithMany.java index e910ed8a3..6b6126c87 100644 --- a/ebean-test/src/test/java/org/tests/query/orderby/TestOrderByWithMany.java +++ b/ebean-test/src/test/java/org/tests/query/orderby/TestOrderByWithMany.java @@ -53,8 +53,8 @@ public class TestOrderByWithMany extends BaseTestCase { String lazyLoadSql = loggedSql.get(1); // contains the foreign key back to the parent bean (t0.order_id) - assertTrue(trimSql(lazyLoadSql, 2).contains("select t0.order_id, t0.id")); - assertTrue(lazyLoadSql.contains("order by t0.order_id, t0.id, t0.order_qty, t0.cretime desc")); + assertThat(trimSql(lazyLoadSql, 2)).contains("select t0.order_id, t0.id"); + assertThat(lazyLoadSql).contains("order by t0.order_id, t0.id, t0.order_qty, t0.cretime desc"); }