mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
Refactor SpiEbeanServer for SpiSqlQuery with transaction (vs passing transaction)
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
+9
-8
@@ -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;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user