This commit is contained in:
@@ -20,7 +20,6 @@ public enum FilterExpress {
|
|||||||
LESSTHAN("<"),
|
LESSTHAN("<"),
|
||||||
GREATERTHANOREQUALTO(">="),
|
GREATERTHANOREQUALTO(">="),
|
||||||
LESSTHANOREQUALTO("<="),
|
LESSTHANOREQUALTO("<="),
|
||||||
|
|
||||||
LIKE("LIKE"),
|
LIKE("LIKE"),
|
||||||
NOTLIKE("NOT LIKE"),
|
NOTLIKE("NOT LIKE"),
|
||||||
IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE
|
IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE
|
||||||
@@ -40,6 +39,8 @@ public enum FilterExpress {
|
|||||||
OPAND("&"), //与运算 > 0
|
OPAND("&"), //与运算 > 0
|
||||||
OPOR("|"), //或运算 > 0
|
OPOR("|"), //或运算 > 0
|
||||||
OPANDNO("&"), //与运算 == 0
|
OPANDNO("&"), //与运算 == 0
|
||||||
|
MOD("%"), //取模运算 > 0
|
||||||
|
MODNO("%"), //取模运算 == 0
|
||||||
AND("AND"),
|
AND("AND"),
|
||||||
OR("OR");
|
OR("OR");
|
||||||
|
|
||||||
|
|||||||
@@ -5,17 +5,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.redkale.source;
|
package org.redkale.source;
|
||||||
|
|
||||||
import static org.redkale.source.FilterExpress.*;
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
import java.util.*;
|
import java.util.*;
|
||||||
import java.util.function.*;
|
import java.util.function.*;
|
||||||
|
import static org.redkale.source.FilterExpress.*;
|
||||||
import org.redkale.util.*;
|
import org.redkale.util.*;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 注意:
|
* 注意: 在调用 createSQLExpress 之前必须先调用 createSQLJoin 在调用 createPredicate 之前必须先调用 isCacheUseable
|
||||||
* 在调用 createSQLExpress 之前必须先调用 createSQLJoin
|
|
||||||
* 在调用 createPredicate 之前必须先调用 isCacheUseable
|
|
||||||
*
|
*
|
||||||
* <p>
|
* <p>
|
||||||
* 详情见: http://www.redkale.org
|
* 详情见: http://www.redkale.org
|
||||||
@@ -114,10 +112,10 @@ public class FilterNode {
|
|||||||
/**
|
/**
|
||||||
* 该方法需要重载
|
* 该方法需要重载
|
||||||
*
|
*
|
||||||
* @param <T> Entity类的泛型
|
* @param <T> Entity类的泛型
|
||||||
* @param func EntityInfo的加载器
|
* @param func EntityInfo的加载器
|
||||||
* @param joinTabalis 关联表集合
|
* @param joinTabalis 关联表集合
|
||||||
* @param info Entity类的EntityInfo
|
* @param info Entity类的EntityInfo
|
||||||
* @return SQL的join语句 不存在返回null
|
* @return SQL的join语句 不存在返回null
|
||||||
*/
|
*/
|
||||||
protected <T> CharSequence createSQLJoin(final Function<Class, EntityInfo> func, final Map<Class, String> joinTabalis, final EntityInfo<T> info) {
|
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 joinTabalis 关联表的集合
|
||||||
* @param info EntityInfo
|
* @param info EntityInfo
|
||||||
* @return JOIN的SQL语句
|
* @return JOIN的SQL语句
|
||||||
*/
|
*/
|
||||||
protected <T> CharSequence createSQLExpress(final EntityInfo<T> info, final Map<Class, String> joinTabalis) {
|
protected <T> CharSequence createSQLExpress(final EntityInfo<T> info, final Map<Class, String> joinTabalis) {
|
||||||
@@ -234,8 +232,10 @@ public class FilterNode {
|
|||||||
switch (express) {
|
switch (express) {
|
||||||
case OPAND:
|
case OPAND:
|
||||||
case OPOR:
|
case OPOR:
|
||||||
|
case MOD:
|
||||||
sb.append(express.value()).append(' ').append(val).append(" > 0");
|
sb.append(express.value()).append(' ').append(val).append(" > 0");
|
||||||
break;
|
break;
|
||||||
|
case MODNO:
|
||||||
case OPANDNO:
|
case OPANDNO:
|
||||||
sb.append(express.value()).append(' ').append(val).append(" = 0");
|
sb.append(express.value()).append(' ').append(val).append(" = 0");
|
||||||
break;
|
break;
|
||||||
@@ -433,7 +433,8 @@ public class FilterNode {
|
|||||||
}
|
}
|
||||||
final Serializable val = val0;
|
final Serializable val = val0;
|
||||||
switch (express) {
|
switch (express) {
|
||||||
case EQUAL: return new Predicate<T>() {
|
case EQUAL:
|
||||||
|
return new Predicate<T>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(T t) {
|
public boolean test(T t) {
|
||||||
@@ -445,7 +446,8 @@ public class FilterNode {
|
|||||||
return field + ' ' + express.value() + ' ' + formatToString(val);
|
return field + ' ' + express.value() + ' ' + formatToString(val);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
case NOTEQUAL: return new Predicate<T>() {
|
case NOTEQUAL:
|
||||||
|
return new Predicate<T>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(T t) {
|
public boolean test(T t) {
|
||||||
@@ -457,7 +459,8 @@ public class FilterNode {
|
|||||||
return field + ' ' + express.value() + ' ' + formatToString(val);
|
return field + ' ' + express.value() + ' ' + formatToString(val);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
case GREATERTHAN: return new Predicate<T>() {
|
case GREATERTHAN:
|
||||||
|
return new Predicate<T>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(T t) {
|
public boolean test(T t) {
|
||||||
@@ -469,7 +472,8 @@ public class FilterNode {
|
|||||||
return field + ' ' + express.value() + ' ' + val;
|
return field + ' ' + express.value() + ' ' + val;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
case LESSTHAN: return new Predicate<T>() {
|
case LESSTHAN:
|
||||||
|
return new Predicate<T>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(T t) {
|
public boolean test(T t) {
|
||||||
@@ -481,7 +485,8 @@ public class FilterNode {
|
|||||||
return field + ' ' + express.value() + ' ' + val;
|
return field + ' ' + express.value() + ' ' + val;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
case GREATERTHANOREQUALTO: return new Predicate<T>() {
|
case GREATERTHANOREQUALTO:
|
||||||
|
return new Predicate<T>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(T t) {
|
public boolean test(T t) {
|
||||||
@@ -493,7 +498,8 @@ public class FilterNode {
|
|||||||
return field + ' ' + express.value() + ' ' + val;
|
return field + ' ' + express.value() + ' ' + val;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
case LESSTHANOREQUALTO: return new Predicate<T>() {
|
case LESSTHANOREQUALTO:
|
||||||
|
return new Predicate<T>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(T t) {
|
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
|
@Override
|
||||||
public boolean test(T t) {
|
public boolean test(T t) {
|
||||||
@@ -518,7 +525,21 @@ public class FilterNode {
|
|||||||
return field + " & " + val + " > 0";
|
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
|
@Override
|
||||||
public boolean test(T t) {
|
public boolean test(T t) {
|
||||||
@@ -530,13 +551,27 @@ public class FilterNode {
|
|||||||
return field + " | " + val + " > 0";
|
return field + " | " + val + " > 0";
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
case OPANDNO: return new Predicate<T>() {
|
case OPANDNO:
|
||||||
|
return new Predicate<T>() {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean test(T t) {
|
public boolean test(T t) {
|
||||||
return (((Number) attr.get(t)).longValue() & ((Number) val).longValue()) == 0;
|
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
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return field + " & " + val + " = 0";
|
return field + " & " + val + " = 0";
|
||||||
|
|||||||
Reference in New Issue
Block a user