mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-10-25 07:57:39 +00:00
#1795 - Refactor bind padding for Id IN expressions (based on internal multiValueSupport and simple id)
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
package io.ebeaninternal.server.core;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class BindPaddingTest {
|
||||
|
||||
@Test
|
||||
public void padIds() {
|
||||
|
||||
final List<Object> input = asList(1, 2);
|
||||
BindPadding.padIds(input);
|
||||
assertThat(input).contains(1,2,1,1,1);
|
||||
assertThat(input).hasSize(5);
|
||||
}
|
||||
|
||||
private List<Object> asList(int... id) {
|
||||
List<Object> list = new ArrayList<>();
|
||||
for (int i : id) {
|
||||
list.add(i);
|
||||
}
|
||||
return list;
|
||||
}
|
||||
|
||||
@Test
|
||||
public void padding() {
|
||||
|
||||
assertEquals(0, BindPadding.padding(1));
|
||||
assertEquals(3, BindPadding.padding(2));
|
||||
assertEquals(2, BindPadding.padding(3));
|
||||
assertEquals(1, BindPadding.padding(4));
|
||||
assertEquals(0, BindPadding.padding(5));
|
||||
assertEquals(4, BindPadding.padding(6));
|
||||
assertEquals(1, BindPadding.padding(9));
|
||||
assertEquals(0, BindPadding.padding(10));
|
||||
assertEquals(9, BindPadding.padding(11));
|
||||
assertEquals(0, BindPadding.padding(20));
|
||||
assertEquals(19, BindPadding.padding(21));
|
||||
assertEquals(0, BindPadding.padding(40));
|
||||
assertEquals(9, BindPadding.padding(41));
|
||||
assertEquals(0, BindPadding.padding(50));
|
||||
assertEquals(49, BindPadding.padding(51));
|
||||
assertEquals(0, BindPadding.padding(100));
|
||||
assertEquals(0, BindPadding.padding(101));
|
||||
}
|
||||
}
|
||||
@@ -20,18 +20,18 @@ public abstract class BaseExpressionTest extends BaseTestCase {
|
||||
}
|
||||
|
||||
protected String hash(SpiExpression expression) {
|
||||
StringBuilder sb = new StringBuilder();
|
||||
StringBuilder sb = new StringBuilder();
|
||||
if (expression != null) {
|
||||
expression.queryPlanHash(sb);
|
||||
}
|
||||
return sb.toString();
|
||||
}
|
||||
|
||||
protected void same(SpiExpression one, SpiExpression two){
|
||||
protected void same(SpiExpression one, SpiExpression two) {
|
||||
assertThat(hash(one)).isEqualTo(hash(two));
|
||||
}
|
||||
|
||||
protected void different(SpiExpression one, SpiExpression two){
|
||||
protected void different(SpiExpression one, SpiExpression two) {
|
||||
assertThat(hash(one)).isNotEqualTo(hash(two));
|
||||
}
|
||||
|
||||
@@ -50,7 +50,7 @@ public abstract class BaseExpressionTest extends BaseTestCase {
|
||||
}
|
||||
|
||||
|
||||
private static final TDQueryRequest<Customer> MULTI_VALUE= new TDQueryRequest<>(true);
|
||||
private static final TDQueryRequest<Customer> MULTI_VALUE = new TDQueryRequest<>(true);
|
||||
private static final TDQueryRequest<Customer> NO_MULTI_VALUE = new TDQueryRequest<>(false);
|
||||
|
||||
static class TDQueryRequest<T> implements BeanQueryRequest<T> {
|
||||
@@ -76,6 +76,11 @@ public abstract class BaseExpressionTest extends BaseTestCase {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isPadInExpression() {
|
||||
return supported;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isMultiValueIdSupported() {
|
||||
return supported;
|
||||
|
||||
+2
-2
@@ -76,7 +76,7 @@ public class TestBeanCache extends BaseTestCase {
|
||||
List<String> sql = LoggedSqlCollector.current();
|
||||
assertThat(sql).hasSize(1);
|
||||
if (isH2()) {
|
||||
assertThat(sql.get(0)).contains("from o_cached_bean t0 where t0.id in (?,?,?)");
|
||||
assertThat(sql.get(0)).contains("from o_cached_bean t0 where t0.id in (?,?,?,?,?)");
|
||||
}
|
||||
|
||||
log.info("All hits (3 of 3) ...");
|
||||
@@ -124,7 +124,7 @@ public class TestBeanCache extends BaseTestCase {
|
||||
assertThat(sql).hasSize(1);
|
||||
if (isH2()) {
|
||||
// fetch the misses from DB
|
||||
assertThat(sql.get(0)).contains("from o_cached_bean t0 where t0.id in (?,?)");
|
||||
assertThat(sql.get(0)).contains("from o_cached_bean t0 where t0.id in (?,?,?,?,?)");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package org.tests.cache;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.DB;
|
||||
import org.junit.Test;
|
||||
import org.tests.model.basic.Customer;
|
||||
import org.tests.model.basic.Order;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static io.ebean.CacheMode.ON;
|
||||
|
||||
public class TestBeanFetchJoinCache extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
// DB.find(Customer.class)
|
||||
// .setBeanCacheMode(ON)
|
||||
// .findList();
|
||||
|
||||
|
||||
DB.find(Customer.class)
|
||||
.where().idIn(1,2,3)
|
||||
//.setBeanCacheMode(ON)
|
||||
.findList();
|
||||
|
||||
List<Order> orders = DB.find(Order.class)
|
||||
.fetchQuery("customer", "name")
|
||||
.findList();
|
||||
|
||||
|
||||
orders = DB.find(Order.class)
|
||||
.fetchQuery("customer", "+cache, name")
|
||||
.findList();
|
||||
|
||||
for (Order order : orders) {
|
||||
order.getCustomer().getName();
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user