diff --git a/test/com/wentch/redkale/source/FilterNodeTest.java b/test/com/wentch/redkale/source/FilterNodeTest.java index caae8f4c5..346e7296e 100644 --- a/test/com/wentch/redkale/source/FilterNodeTest.java +++ b/test/com/wentch/redkale/source/FilterNodeTest.java @@ -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 userEntity = EntityInfo.load(UserTestTable.class, 0, false, (t) -> UserTestTable.createList()); final EntityInfo 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 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 diff --git a/test/com/wentch/redkale/test/source/TestSourceCache.java b/test/com/wentch/redkale/test/source/TestSourceCache.java index ac37ce489..967bb3f07 100644 --- a/test/com/wentch/redkale/test/source/TestSourceCache.java +++ b/test/com/wentch/redkale/test/source/TestSourceCache.java @@ -55,7 +55,7 @@ public class TestSourceCache { System.out.println("node = " + node); Sheet 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++) {