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("<"), 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");

View File

@@ -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
@@ -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";