This commit is contained in:
RedKale
2016-03-15 10:29:05 +08:00
parent 4020ff5c19
commit 36d905e6fa
2 changed files with 55 additions and 19 deletions

View File

@@ -20,7 +20,6 @@ public enum FilterExpress {
LESSTHAN("<"),
GREATERTHANOREQUALTO(">="),
LESSTHANOREQUALTO("<="),
LIKE("LIKE"),
NOTLIKE("NOT LIKE"),
IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE
@@ -40,6 +39,8 @@ public enum FilterExpress {
OPAND("&"), //与运算 > 0
OPOR("|"), //或运算 > 0
OPANDNO("&"), //与运算 == 0
MOD("%"), //取模运算 > 0
MODNO("%"), //取模运算 == 0
AND("AND"),
OR("OR");

View File

@@ -5,17 +5,15 @@
*/
package org.redkale.source;
import static org.redkale.source.FilterExpress.*;
import java.io.*;
import java.lang.reflect.*;
import java.util.*;
import java.util.function.*;
import static org.redkale.source.FilterExpress.*;
import org.redkale.util.*;
/**
* 注意:
* 在调用 createSQLExpress 之前必须先调用 createSQLJoin
* 在调用 createPredicate 之前必须先调用 isCacheUseable
* 注意: 在调用 createSQLExpress 之前必须先调用 createSQLJoin 在调用 createPredicate 之前必须先调用 isCacheUseable
*
* <p>
* 详情见: http://www.redkale.org
@@ -114,10 +112,10 @@ public class FilterNode {
/**
* 该方法需要重载
*
* @param <T> Entity类的泛型
* @param func EntityInfo的加载器
* @param <T> Entity类的泛型
* @param func EntityInfo的加载器
* @param joinTabalis 关联表集合
* @param info Entity类的EntityInfo
* @param info Entity类的EntityInfo
* @return SQL的join语句 不存在返回null
*/
protected <T> CharSequence createSQLJoin(final Function<Class, EntityInfo> func, final Map<Class, String> joinTabalis, final EntityInfo<T> info) {
@@ -176,9 +174,9 @@ public class FilterNode {
/**
* 该方法需要重载
*
* @param <T> Entity类的泛型
* @param <T> Entity类的泛型
* @param joinTabalis 关联表的集合
* @param info EntityInfo
* @param info EntityInfo
* @return JOIN的SQL语句
*/
protected <T> CharSequence createSQLExpress(final EntityInfo<T> info, final Map<Class, String> joinTabalis) {
@@ -234,8 +232,10 @@ public class FilterNode {
switch (express) {
case OPAND:
case OPOR:
case MOD:
sb.append(express.value()).append(' ').append(val).append(" > 0");
break;
case MODNO:
case OPANDNO:
sb.append(express.value()).append(' ').append(val).append(" = 0");
break;
@@ -433,7 +433,8 @@ public class FilterNode {
}
final Serializable val = val0;
switch (express) {
case EQUAL: return new Predicate<T>() {
case EQUAL:
return new Predicate<T>() {
@Override
public boolean test(T t) {
@@ -445,7 +446,8 @@ public class FilterNode {
return field + ' ' + express.value() + ' ' + formatToString(val);
}
};
case NOTEQUAL: return new Predicate<T>() {
case NOTEQUAL:
return new Predicate<T>() {
@Override
public boolean test(T t) {
@@ -457,7 +459,8 @@ public class FilterNode {
return field + ' ' + express.value() + ' ' + formatToString(val);
}
};
case GREATERTHAN: return new Predicate<T>() {
case GREATERTHAN:
return new Predicate<T>() {
@Override
public boolean test(T t) {
@@ -469,7 +472,8 @@ public class FilterNode {
return field + ' ' + express.value() + ' ' + val;
}
};
case LESSTHAN: return new Predicate<T>() {
case LESSTHAN:
return new Predicate<T>() {
@Override
public boolean test(T t) {
@@ -481,7 +485,8 @@ public class FilterNode {
return field + ' ' + express.value() + ' ' + val;
}
};
case GREATERTHANOREQUALTO: return new Predicate<T>() {
case GREATERTHANOREQUALTO:
return new Predicate<T>() {
@Override
public boolean test(T t) {
@@ -493,7 +498,8 @@ public class FilterNode {
return field + ' ' + express.value() + ' ' + val;
}
};
case LESSTHANOREQUALTO: return new Predicate<T>() {
case LESSTHANOREQUALTO:
return new Predicate<T>() {
@Override
public boolean test(T t) {
@@ -506,7 +512,8 @@ public class FilterNode {
}
};
case OPAND: return new Predicate<T>() {
case OPAND:
return new Predicate<T>() {
@Override
public boolean test(T t) {
@@ -518,7 +525,21 @@ public class FilterNode {
return field + " & " + val + " > 0";
}
};
case OPOR: return new Predicate<T>() {
case MOD:
return new Predicate<T>() {
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() % ((Number) val).longValue()) > 0;
}
@Override
public String toString() {
return field + " & " + val + " > 0";
}
};
case OPOR:
return new Predicate<T>() {
@Override
public boolean test(T t) {
@@ -530,13 +551,27 @@ public class FilterNode {
return field + " | " + val + " > 0";
}
};
case OPANDNO: return new Predicate<T>() {
case OPANDNO:
return new Predicate<T>() {
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() & ((Number) val).longValue()) == 0;
}
@Override
public String toString() {
return field + " & " + val + " = 0";
}
};
case MODNO:
return new Predicate<T>() {
@Override
public boolean test(T t) {
return (((Number) attr.get(t)).longValue() % ((Number) val).longValue()) == 0;
}
@Override
public String toString() {
return field + " & " + val + " = 0";