#566 - Refactor internals - SpiQuerySecondary and DLoadContext

This commit is contained in:
Robin Bygrave
2016-02-17 19:44:30 +13:00
parent 439858b259
commit c83606c1da
13 changed files with 248 additions and 101 deletions
@@ -5,7 +5,6 @@ import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.FetchConfig;
import com.avaje.ebean.Query;
import com.avaje.ebeaninternal.api.SpiQuery;
import com.avaje.ebeaninternal.server.querydefn.DefaultOrmQuery;
import com.avaje.ebeaninternal.server.querydefn.OrmQueryDetail;
import com.avaje.tests.model.basic.Order;
@@ -15,14 +14,12 @@ import static org.assertj.core.api.Assertions.assertThat;
public class DefaultServer_createOrmQueryRequestTest extends BaseTestCase {
static DefaultServer defaultServer = (DefaultServer) Ebean.getDefaultServer();
Query<Order> query() {
return defaultServer.find(Order.class);
return server().find(Order.class);
}
OrmQueryRequest<Order> queryRequest(Query<Order> query) {
return (OrmQueryRequest<Order>) defaultServer.createQueryRequest(SpiQuery.Type.LIST, query, null);
return OrmQueryRequestTestHelper.queryRequest(query);
}
OrmQueryDetail detail(Query<Order> query) {
@@ -0,0 +1,18 @@
package com.avaje.ebeaninternal.server.core;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.Query;
import com.avaje.ebeaninternal.api.SpiQuery;
public class OrmQueryRequestTestHelper {
static DefaultServer defaultServer = (DefaultServer) Ebean.getDefaultServer();
/**
* Create and return a OrmQueryRequest for the given query.
*/
public static <T> OrmQueryRequest<T> queryRequest(Query<T> query) {
return (OrmQueryRequest<T>) defaultServer.createQueryRequest(SpiQuery.Type.LIST, query, null);
}
}
@@ -0,0 +1,75 @@
package com.avaje.ebeaninternal.server.loadcontext;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.FetchConfig;
import com.avaje.ebean.Query;
import com.avaje.ebeaninternal.server.core.OrmQueryRequest;
import com.avaje.ebeaninternal.server.core.OrmQueryRequestTestHelper;
import com.avaje.tests.model.basic.Order;
import org.junit.Test;
import static org.assertj.core.api.Assertions.assertThat;
public class DLoadContextTest extends BaseTestCase {
OrmQueryRequest<Order> queryRequest(Query<Order> query) {
return OrmQueryRequestTestHelper.queryRequest(query);
}
Query<Order> query() {
return server().find(Order.class);
}
@Test
public void construct_when_defaults_expect_defaultLazyBatchSizeServerDefaults() {
OrmQueryRequest<Order> queryRequest = queryRequest(query());
queryRequest.initTransIfRequired();
DLoadContext graphContext = (DLoadContext)queryRequest.getGraphContext();
DLoadBeanContext customer = graphContext.getBeanContext("customer");
assertThat(customer.firstBatchSize).isEqualTo(10);
assertThat(customer.secondaryBatchSize).isEqualTo(10);
}
@Test
public void construct_when_fetchQuery_expect_100_batchSize() {
OrmQueryRequest<Order> queryRequest = queryRequest(query().fetch("customer",new FetchConfig().query()));
queryRequest.initTransIfRequired();
DLoadContext graphContext = (DLoadContext)queryRequest.getGraphContext();
DLoadBeanContext customer = graphContext.getBeanContext("customer");
assertThat(customer.firstBatchSize).isEqualTo(100);
assertThat(customer.secondaryBatchSize).isEqualTo(100);
}
@Test
public void construct_when_fetchQuery50_expect_50_batchSize() {
OrmQueryRequest<Order> queryRequest = queryRequest(query().fetch("customer",new FetchConfig().query(50)));
queryRequest.initTransIfRequired();
DLoadContext graphContext = (DLoadContext)queryRequest.getGraphContext();
DLoadBeanContext customer = graphContext.getBeanContext("customer");
assertThat(customer.firstBatchSize).isEqualTo(50);
assertThat(customer.secondaryBatchSize).isEqualTo(50);
}
@Test
public void construct_when_fetchQueryFirst20Lazy5_expect_20_5_batchSize() {
OrmQueryRequest<Order> queryRequest = queryRequest(query().fetch("customer",new FetchConfig().queryFirst(20).lazy(5)));
queryRequest.initTransIfRequired();
DLoadContext graphContext = (DLoadContext)queryRequest.getGraphContext();
DLoadBeanContext customer = graphContext.getBeanContext("customer");
assertThat(customer.firstBatchSize).isEqualTo(20);
assertThat(customer.secondaryBatchSize).isEqualTo(5);
}
}