mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#566 - Refactor internals - SpiExpression, add prepareExpression() to merge queryAutoTuneHash() and queryPlanHash() - move to protected calculateQueryPlanHash()
This commit is contained in:
@@ -3,9 +3,6 @@ package com.avaje.ebeaninternal.server.querydefn;
|
||||
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.FetchConfig;
|
||||
import com.avaje.ebeaninternal.api.HashQueryPlan;
|
||||
import com.avaje.ebeaninternal.api.HashQueryPlanBuilder;
|
||||
import com.avaje.ebeaninternal.api.SpiQuery;
|
||||
import com.avaje.tests.model.basic.Order;
|
||||
import org.junit.Test;
|
||||
|
||||
@@ -14,51 +11,65 @@ import static org.assertj.core.api.Assertions.assertThat;
|
||||
public class DefaultOrmQueryTest {
|
||||
|
||||
@Test
|
||||
public void testQueryAutofetchHash() throws Exception {
|
||||
public void when_addWhere_then_planChanges() {
|
||||
|
||||
SpiQuery<?> query1 = (SpiQuery<?>)Ebean.find(Order.class)
|
||||
DefaultOrmQuery<Order> q1 = (DefaultOrmQuery<Order>)Ebean.find(Order.class).where().in("name", "a","b","c").query();
|
||||
DefaultOrmQuery<Order> q2 = (DefaultOrmQuery<Order>)Ebean.find(Order.class).where().in("id", 2,2,3).query();
|
||||
|
||||
assertThat(q1.calculateQueryPlanHash()).isNotEqualTo(q2.calculateQueryPlanHash());
|
||||
assertThat(q1.queryBindHash()).isNotEqualTo(q2.queryBindHash());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void when_sameWhereWithDiffBindValues_then_planSame_bindDiff() {
|
||||
|
||||
DefaultOrmQuery<Order> q1 = (DefaultOrmQuery<Order>)Ebean.find(Order.class).where().in("id", 1,2,3).query();
|
||||
DefaultOrmQuery<Order> q2 = (DefaultOrmQuery<Order>)Ebean.find(Order.class).where().in("id", 2,2,3).query();
|
||||
|
||||
assertThat(q1.calculateQueryPlanHash()).isEqualTo(q2.calculateQueryPlanHash());
|
||||
assertThat(q1.queryBindHash()).isNotEqualTo(q2.queryBindHash());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void when_sameWhereAndBindValues_then_planSameAndBind() {
|
||||
|
||||
DefaultOrmQuery<Order> q1 = (DefaultOrmQuery<Order>)Ebean.find(Order.class).where().in("id", 1,2,3).query();
|
||||
DefaultOrmQuery<Order> q2 = (DefaultOrmQuery<Order>)Ebean.find(Order.class).where().in("id", 1,2,3).query();
|
||||
|
||||
assertThat(q1.calculateQueryPlanHash()).isEqualTo(q2.calculateQueryPlanHash());
|
||||
assertThat(q1.queryBindHash()).isEqualTo(q2.queryBindHash());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void when_FetchConfig_then_differentPlan() throws Exception {
|
||||
|
||||
DefaultOrmQuery<?> query1 = (DefaultOrmQuery<?>)Ebean.find(Order.class)
|
||||
.select("status, shipDate")
|
||||
.fetch("details", "orderQty, unitPrice", new FetchConfig().query())
|
||||
.fetch("details.product", "sku, name");
|
||||
|
||||
HashQueryPlanBuilder b1 = new HashQueryPlanBuilder();
|
||||
query1.queryAutoTuneHash(b1);
|
||||
HashQueryPlan hash1 = b1.build();
|
||||
|
||||
SpiQuery<?> query2 = (SpiQuery<?>)Ebean.find(Order.class)
|
||||
DefaultOrmQuery<?> query2 = (DefaultOrmQuery<?>)Ebean.find(Order.class)
|
||||
.select("status, shipDate")
|
||||
.fetch("details", "orderQty, unitPrice")
|
||||
.fetch("details.product", "sku, name");
|
||||
|
||||
HashQueryPlanBuilder b2 = new HashQueryPlanBuilder();
|
||||
query2.queryAutoTuneHash(b2);
|
||||
HashQueryPlan hash2 = b2.build();
|
||||
|
||||
assertThat(hash1).isNotEqualTo(hash2);
|
||||
|
||||
assertThat(query1.calculateQueryPlanHash()).isNotEqualTo(query2.calculateQueryPlanHash());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void test_AutofetchHash_diffFirstRows() throws Exception {
|
||||
public void when_diffFirstMaxRows_then_differentPlan() throws Exception {
|
||||
|
||||
SpiQuery<?> query1 = (SpiQuery<?>)Ebean.find(Order.class)
|
||||
DefaultOrmQuery<?> query1 = (DefaultOrmQuery<?>)Ebean.find(Order.class)
|
||||
.setFirstRow(0)
|
||||
.setMaxRows(31);
|
||||
|
||||
HashQueryPlanBuilder b1 = new HashQueryPlanBuilder();
|
||||
query1.queryAutoTuneHash(b1);
|
||||
HashQueryPlan hash1 = b1.build();
|
||||
|
||||
SpiQuery<?> query2 = (SpiQuery<?>)Ebean.find(Order.class)
|
||||
DefaultOrmQuery<?> query2 = (DefaultOrmQuery<?>)Ebean.find(Order.class)
|
||||
.setFirstRow(1)
|
||||
.setMaxRows(0);
|
||||
|
||||
HashQueryPlanBuilder b2 = new HashQueryPlanBuilder();
|
||||
query2.queryAutoTuneHash(b2);
|
||||
HashQueryPlan hash2 = b2.build();
|
||||
|
||||
assertThat(hash1).isNotEqualTo(hash2);
|
||||
|
||||
assertThat(query1.calculateQueryPlanHash()).isNotEqualTo(query2.calculateQueryPlanHash());
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user