Refactor SpiEbeanServer for SpiSqlQuery with transaction (vs passing transaction)

This commit is contained in:
Rob Bygrave
2023-08-25 23:51:09 +12:00
parent 6402a346a1
commit 128bd171f5
11 changed files with 44 additions and 62 deletions
@@ -61,9 +61,4 @@ public interface SpiDtoQuery<T> extends DtoQuery<T>, SpiSqlBinding {
*/
SpiQuery<?> ormQuery();
/**
* Return the explicit transaction used to execute the query.
*/
Transaction transaction();
}
@@ -372,24 +372,12 @@ public interface SpiEbeanServer extends SpiServer, ExtendedServer, BeanCollectio
<T> int update(SpiQuery<T> query);
/**
* Deprecated migrate to using {@link Query#usingTransaction(Transaction)}.
*/
List<SqlRow> findList(SpiSqlQuery query, Transaction transaction);
List<SqlRow> findList(SpiSqlQuery query);
/**
* Deprecated migrate to using {@link Query#usingTransaction(Transaction)}.
*/
void findEach(SpiSqlQuery query, Consumer<SqlRow> consumer, Transaction transaction);
void findEach(SpiSqlQuery query, Consumer<SqlRow> consumer);
/**
* Deprecated migrate to using {@link Query#usingTransaction(Transaction)}.
*/
void findEachWhile(SpiSqlQuery query, Predicate<SqlRow> consumer, Transaction transaction);
void findEachWhile(SpiSqlQuery query, Predicate<SqlRow> consumer);
/**
* Deprecated migrate to using {@link SqlQuery#usingTransaction(Transaction)}.
*/
@Nullable
SqlRow findOne(SpiSqlQuery query, Transaction transaction);
SqlRow findOne(SpiSqlQuery query);
}
@@ -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.
*/
@@ -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();
}
@@ -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);
}
@@ -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<SqlRow> list = findList(query, transaction);
List<SqlRow> list = findList(query);
return extractUnique(list);
}
@Override
public void findEach(SpiSqlQuery query, Consumer<SqlRow> consumer, Transaction transaction) {
RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction);
public void findEach(SpiSqlQuery query, Consumer<SqlRow> 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<SqlRow> consumer, Transaction transaction) {
RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction);
public void findEachWhile(SpiSqlQuery query, Predicate<SqlRow> 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<SqlRow> findList(SpiSqlQuery query, Transaction transaction) {
RelationalQueryRequest request = new RelationalQueryRequest(this, relationalQueryEngine, query, transaction);
public List<SqlRow> 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> P executeSqlQuery(Function<RelationalQueryRequest, P> 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);
@@ -33,7 +33,7 @@ public final class DtoQueryRequest<T> extends AbstractSqlQueryRequest {
private DataReader dataReader;
DtoQueryRequest(SpiEbeanServer server, DtoQueryEngine engine, SpiDtoQuery<T> query) {
super(server, query, query.transaction());
super(server, query);
this.queryEngine = engine;
this.query = query;
query.obtainLocation();
@@ -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;
}
@@ -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<T> 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<T> extends AbstractQuery implements SpiDtoQue
@Override
public DtoQuery<T> usingTransaction(Transaction transaction) {
this.transaction = transaction;
this.transaction = (SpiTransaction) transaction;
return this;
}
@@ -227,7 +224,7 @@ public final class DefaultDtoQuery<T> extends AbstractQuery implements SpiDtoQue
}
@Override
public Transaction transaction() {
public SpiTransaction transaction() {
return transaction;
}
@@ -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<SqlRow> consumer) {
server.findEach(this, consumer, transaction);
server.findEach(this, consumer);
}
@Override
public void findEachWhile(Predicate<SqlRow> consumer) {
server.findEachWhile(this, consumer, transaction);
server.findEachWhile(this, consumer);
}
@Override
public List<SqlRow> 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
@@ -706,20 +706,20 @@ public class TDSpiEbeanServer extends TDSpiServer implements SpiEbeanServer {
}
@Override
public List<SqlRow> findList(SpiSqlQuery query, Transaction transaction) {
public List<SqlRow> findList(SpiSqlQuery query) {
return null;
}
@Override
public void findEach(SpiSqlQuery query, Consumer<SqlRow> consumer, Transaction transaction) {
public void findEach(SpiSqlQuery query, Consumer<SqlRow> consumer) {
}
@Override
public void findEachWhile(SpiSqlQuery query, Predicate<SqlRow> consumer, Transaction transaction) {
public void findEachWhile(SpiSqlQuery query, Predicate<SqlRow> consumer) {
}
@Override
public SqlRow findOne(SpiSqlQuery query, Transaction transaction) {
public SqlRow findOne(SpiSqlQuery query) {
return null;
}