From 128bd171f5401acac7ff9b9819040f9332b19aff Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Fri, 25 Aug 2023 23:51:09 +1200 Subject: [PATCH] Refactor SpiEbeanServer for SpiSqlQuery with transaction (vs passing transaction) --- .../io/ebeaninternal/api/SpiDtoQuery.java | 5 ----- .../io/ebeaninternal/api/SpiEbeanServer.java | 20 ++++--------------- .../io/ebeaninternal/api/SpiSqlBinding.java | 8 ++++++++ .../io/ebeaninternal/api/SpiSqlQuery.java | 7 ------- .../server/core/AbstractSqlQueryRequest.java | 4 ++-- .../server/core/DefaultServer.java | 18 ++++++++--------- .../server/core/DtoQueryRequest.java | 2 +- .../server/core/RelationalQueryRequest.java | 6 +++--- .../server/querydefn/DefaultDtoQuery.java | 11 ++++------ .../querydefn/DefaultRelationalQuery.java | 17 ++++++++-------- .../xtest/internal/api/TDSpiEbeanServer.java | 8 ++++---- 11 files changed, 44 insertions(+), 62 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiDtoQuery.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiDtoQuery.java index 77de4f521..d8aa5afcc 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiDtoQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiDtoQuery.java @@ -61,9 +61,4 @@ public interface SpiDtoQuery extends DtoQuery, SpiSqlBinding { */ SpiQuery ormQuery(); - /** - * Return the explicit transaction used to execute the query. - */ - Transaction transaction(); - } diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java index 16ec12fe1..b19001ac2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiEbeanServer.java @@ -372,24 +372,12 @@ public interface SpiEbeanServer extends SpiServer, ExtendedServer, BeanCollectio int update(SpiQuery query); - /** - * Deprecated migrate to using {@link Query#usingTransaction(Transaction)}. - */ - List findList(SpiSqlQuery query, Transaction transaction); + List findList(SpiSqlQuery query); - /** - * Deprecated migrate to using {@link Query#usingTransaction(Transaction)}. - */ - void findEach(SpiSqlQuery query, Consumer consumer, Transaction transaction); + void findEach(SpiSqlQuery query, Consumer consumer); - /** - * Deprecated migrate to using {@link Query#usingTransaction(Transaction)}. - */ - void findEachWhile(SpiSqlQuery query, Predicate consumer, Transaction transaction); + void findEachWhile(SpiSqlQuery query, Predicate consumer); - /** - * Deprecated migrate to using {@link SqlQuery#usingTransaction(Transaction)}. - */ @Nullable - SqlRow findOne(SpiSqlQuery query, Transaction transaction); + SqlRow findOne(SpiSqlQuery query); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiSqlBinding.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiSqlBinding.java index 3f6cfd8fc..8302cd966 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiSqlBinding.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiSqlBinding.java @@ -1,10 +1,18 @@ package io.ebeaninternal.api; +import io.avaje.lang.Nullable; + /** * SQL query binding (for SqlQuery and DtoQuery). */ public interface SpiSqlBinding extends SpiCancelableQuery { + /** + * Return the transaction explicitly associated to the query. + */ + @Nullable + SpiTransaction transaction(); + /** * Return true if this query should not use the read only data source. */ diff --git a/ebean-core/src/main/java/io/ebeaninternal/api/SpiSqlQuery.java b/ebean-core/src/main/java/io/ebeaninternal/api/SpiSqlQuery.java index 35e5d99f7..e289b5b65 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/api/SpiSqlQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/api/SpiSqlQuery.java @@ -1,17 +1,10 @@ package io.ebeaninternal.api; -import io.avaje.lang.Nullable; import io.ebean.SqlQuery; -import io.ebean.Transaction; /** * SQL query - Internal extension to SqlQuery. */ public interface SpiSqlQuery extends SqlQuery, SpiSqlBinding { - /** - * Return the transaction explicitly associated to the query. - */ - @Nullable - Transaction transaction(); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java index 591fc39f2..4acd78ee9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/AbstractSqlQueryRequest.java @@ -33,10 +33,10 @@ public abstract class AbstractSqlQueryRequest implements CancelableQuery { /** * Create the BeanFindRequest. */ - AbstractSqlQueryRequest(SpiEbeanServer server, SpiSqlBinding query, Transaction t) { + AbstractSqlQueryRequest(SpiEbeanServer server, SpiSqlBinding query) { this.server = server; this.query = query; - this.transaction = (SpiTransaction) t; + this.transaction = query.transaction(); this.query.setCancelableQuery(this); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index ce7cc19eb..50a1d5b5d 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -1442,16 +1442,16 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { @Nullable @Override - public SqlRow findOne(SpiSqlQuery query, Transaction transaction) { + public SqlRow findOne(SpiSqlQuery query) { // no findId() method for SqlQuery... // a query that is expected to return either 0 or 1 rows - List list = findList(query, transaction); + List list = findList(query); return extractUnique(list); } @Override - public void findEach(SpiSqlQuery query, Consumer consumer, Transaction transaction) { - RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction); + public void findEach(SpiSqlQuery query, Consumer consumer) { + RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query); try { request.initTransIfRequired(); request.findEach(consumer); @@ -1461,8 +1461,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } @Override - public void findEachWhile(SpiSqlQuery query, Predicate consumer, Transaction transaction) { - RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction); + public void findEachWhile(SpiSqlQuery query, Predicate consumer) { + RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query); try { request.initTransIfRequired(); request.findEachWhile(consumer); @@ -1472,8 +1472,8 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } @Override - public List findList(SpiSqlQuery query, Transaction transaction) { - RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction); + public List findList(SpiSqlQuery query) { + RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query); try { request.initTransIfRequired(); return request.findList(); @@ -1483,7 +1483,7 @@ public final class DefaultServer implements SpiServer, SpiEbeanServer { } private

P executeSqlQuery(Function fun, SpiSqlQuery query) { - RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, query.transaction()); + RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query); try { request.initTransIfRequired(); return fun.apply(request); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java index c4e71c009..3cb56ec27 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DtoQueryRequest.java @@ -33,7 +33,7 @@ public final class DtoQueryRequest extends AbstractSqlQueryRequest { private DataReader dataReader; DtoQueryRequest(SpiEbeanServer server, DtoQueryEngine engine, SpiDtoQuery query) { - super(server, query, query.transaction()); + super(server, query); this.queryEngine = engine; this.query = query; query.obtainLocation(); diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/RelationalQueryRequest.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/RelationalQueryRequest.java index b2e33e57e..b8d744349 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/RelationalQueryRequest.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/RelationalQueryRequest.java @@ -2,7 +2,7 @@ package io.ebeaninternal.server.core; import io.ebean.*; import io.ebeaninternal.api.SpiEbeanServer; -import io.ebeaninternal.api.SpiSqlBinding; +import io.ebeaninternal.api.SpiSqlQuery; import java.sql.ResultSet; import java.sql.ResultSetMetaData; @@ -22,8 +22,8 @@ public final class RelationalQueryRequest extends AbstractSqlQueryRequest { private int estimateCapacity; private int rows; - RelationalQueryRequest(SpiEbeanServer server, RelationalQueryEngine engine, SqlQuery q, Transaction t) { - super(server, (SpiSqlBinding) q, t); + RelationalQueryRequest(SpiEbeanServer server, RelationalQueryEngine engine, SpiSqlQuery q) { + super(server, q); this.queryEngine = engine; } 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 33178afa1..22444a7c5 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 @@ -5,10 +5,7 @@ import io.ebean.DtoQuery; import io.ebean.ProfileLocation; import io.ebean.QueryIterator; import io.ebean.Transaction; -import io.ebeaninternal.api.BindParams; -import io.ebeaninternal.api.SpiDtoQuery; -import io.ebeaninternal.api.SpiEbeanServer; -import io.ebeaninternal.api.SpiQuery; +import io.ebeaninternal.api.*; import io.ebeaninternal.server.dto.DtoBeanDescriptor; import io.ebeaninternal.server.dto.DtoMappingRequest; import io.ebeaninternal.server.dto.DtoQueryPlan; @@ -39,7 +36,7 @@ public final class DefaultDtoQuery extends AbstractQuery implements SpiDtoQue private String label; private ProfileLocation profileLocation; private final BindParams bindParams = new BindParams(); - private Transaction transaction; + private SpiTransaction transaction; /** * Create given an underlying ORM query. @@ -85,7 +82,7 @@ public final class DefaultDtoQuery extends AbstractQuery implements SpiDtoQue @Override public DtoQuery usingTransaction(Transaction transaction) { - this.transaction = transaction; + this.transaction = (SpiTransaction) transaction; return this; } @@ -227,7 +224,7 @@ public final class DefaultDtoQuery extends AbstractQuery implements SpiDtoQue } @Override - public Transaction transaction() { + public SpiTransaction transaction() { return transaction; } 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 89f08b726..e94fcc71f 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 @@ -6,6 +6,7 @@ import io.ebean.*; import io.ebeaninternal.api.BindParams; import io.ebeaninternal.api.SpiEbeanServer; import io.ebeaninternal.api.SpiSqlQuery; +import io.ebeaninternal.api.SpiTransaction; import java.util.List; import java.util.Optional; @@ -28,7 +29,7 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq private int timeout; private int bufferFetchSizeHint; private final BindParams bindParams = new BindParams(); - private Transaction transaction; + private SpiTransaction transaction; /** * Additional supply a query detail object. @@ -39,13 +40,13 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq } @Override - public Transaction transaction() { + public SpiTransaction transaction() { return transaction; } @Override public SqlQuery usingTransaction(Transaction transaction) { - this.transaction = transaction; + this.transaction = (SpiTransaction) transaction; return this; } @@ -61,22 +62,22 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq } private void transaction(Transaction transaction) { - this.transaction = transaction; + this.transaction = (SpiTransaction) transaction; } @Override public void findEach(Consumer consumer) { - server.findEach(this, consumer, transaction); + server.findEach(this, consumer); } @Override public void findEachWhile(Predicate consumer) { - server.findEachWhile(this, consumer, transaction); + server.findEachWhile(this, consumer); } @Override public List findList() { - return server.findList(this, transaction); + return server.findList(this); } @Override @@ -86,7 +87,7 @@ public final class DefaultRelationalQuery extends AbstractQuery implements SpiSq @Override public SqlRow findOne() { - return server.findOne(this, transaction); + return server.findOne(this); } @Override diff --git a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java index ea44d1d0d..0537d38fe 100644 --- a/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java +++ b/ebean-test/src/test/java/io/ebean/xtest/internal/api/TDSpiEbeanServer.java @@ -706,20 +706,20 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer { } @Override - public List findList(SpiSqlQuery query, Transaction transaction) { + public List findList(SpiSqlQuery query) { return null; } @Override - public void findEach(SpiSqlQuery query, Consumer consumer, Transaction transaction) { + public void findEach(SpiSqlQuery query, Consumer consumer) { } @Override - public void findEachWhile(SpiSqlQuery query, Predicate consumer, Transaction transaction) { + public void findEachWhile(SpiSqlQuery query, Predicate consumer) { } @Override - public SqlRow findOne(SpiSqlQuery query, Transaction transaction) { + public SqlRow findOne(SpiSqlQuery query) { return null; }