This commit is contained in:
kamhung
2015-12-04 18:50:21 +08:00
parent bf75aaad96
commit 32a837444a
2 changed files with 46 additions and 8 deletions

View File

@@ -6,7 +6,7 @@
package com.wentch.redkale.source;
import com.wentch.redkale.convert.json.*;
import static com.wentch.redkale.source.FilterExpress.GREATERTHAN;
import static com.wentch.redkale.source.FilterExpress.*;
import com.wentch.redkale.util.*;
import java.util.*;
import java.util.function.*;
@@ -25,19 +25,57 @@ public class FilterNodeTest {
final EntityInfo<UserTestTable> userEntity = EntityInfo.load(UserTestTable.class, 0, false, (t) -> UserTestTable.createList());
final EntityInfo<CarTypeTestTable> typeEntity = EntityInfo.load(CarTypeTestTable.class, 0, false, (t) -> CarTypeTestTable.createList());
FilterNode joinNode1 = FilterJoinNode.create(UserTestTable.class, new String[]{"userid", "username"}, "username", FilterExpress.LIKE, "用户1")
.or(FilterJoinNode.create(UserTestTable.class, new String[]{"userid", "username"}, "createtime", FilterExpress.GREATERTHAN, 500));
FilterNode joinNode2 = FilterJoinNode.create(CarTypeTestTable.class, "cartype", "typename", FilterExpress.LIKE, "法拉利");
FilterNode node = FilterNode.create("carid", GREATERTHAN, 1).and(joinNode1).or(joinNode2);
final CarTestBean bean = new CarTestBean();
bean.carid = 1;
bean.username = "用户1";
bean.createtime = 500;
bean.typename = "法拉利";
FilterNode joinNode1 = FilterJoinNode.create(UserTestTable.class, new String[]{"userid", "username"}, "username", LIKE, bean.username)
.or(FilterJoinNode.create(UserTestTable.class, new String[]{"userid", "username"}, "createtime", GREATERTHAN, bean.createtime));
FilterNode joinNode2 = FilterJoinNode.create(CarTypeTestTable.class, "cartype", "typename", LIKE, bean.typename);
FilterNode node = FilterNode.create("carid", GREATERTHAN, bean.carid).and(joinNode1).or(joinNode2);
FilterNode beanNode = FilterNodeBean.createFilterNode(bean);
System.out.println("bean = " + beanNode);
System.out.println("node = " + node);
Map<Class, String> joinTabalis = node.getJoinTabalis();
CharSequence joinsql = node.createSQLJoin(func, joinTabalis, carEntity);
CharSequence where = node.createSQLExpress(carEntity, joinTabalis, null);
CharSequence where = node.createSQLExpress(carEntity, joinTabalis);
System.out.println("SELECT a.* FROM " + CarTestTable.class.getSimpleName().toLowerCase() + " a" + (joinsql == null ? "" : joinsql) + " WHERE " + where);
assert node.isCacheUseable(func) : "isCacheUseable 应该是true";
assert beanNode.isCacheUseable(func): "isCacheUseable 应该是true";
System.out.println("isCacheUseable = " + node.isCacheUseable(func)); //应该是true
System.out.println(node.createPredicate(carEntity.getCache(), null));
System.out.println(node.createPredicate(carEntity.getCache()));
System.out.println(beanNode.createPredicate(carEntity.getCache()));
System.out.println(carEntity.getCache().querySheet(null, new Flipper(), node));
System.out.println(carEntity.getCache().querySheet(null, new Flipper(), beanNode));
}
public static class CarTestBean implements FilterBean {
@FilterGroup("[OR].[AND]a")
@FilterColumn(express = GREATERTHAN)
//@Transient
public long carid;
@FilterGroup("[OR].[AND]a.[OR]c")
@FilterColumn(express = LIKE)
@FilterJoinColumn(table = UserTestTable.class, columns = {"userid", "username"})
public String username;
@FilterGroup("[OR].[AND]a.[OR]c")
@FilterColumn(express = GREATERTHAN)
@FilterJoinColumn(table = UserTestTable.class, columns = {"userid", "username"})
public long createtime;
@FilterGroup("[OR]")
@FilterColumn(express = LIKE)
@FilterJoinColumn(table = CarTypeTestTable.class, columns = {"cartype"})
public String typename;
@Override
public String toString() {
return JsonFactory.root().getConvert().convertTo(this);
}
}
@AutoLoad

View File

@@ -55,7 +55,7 @@ public class TestSourceCache {
System.out.println("node = " + node);
Sheet<TestEntity> sheet = info.getCache().querySheet(null, flipper, node);
System.out.println(sheet);
System.out.println(info.getCache().querySheet(null, flipper, null, new TestEntityBean(1000, "用户")));
System.out.println(info.getCache().querySheet(null, flipper, FilterNodeBean.createFilterNode(new TestEntityBean(1000, "用户"))));
final CountDownLatch cdl = new CountDownLatch(100);
s = System.currentTimeMillis();
for (int i = 0; i < 100; i++) {