DataSource增加判断字符串字段值长度的FilterExpress
This commit is contained in:
@@ -31,6 +31,11 @@ public enum FilterExpress {
|
||||
NOTLIKE("NOT LIKE"),
|
||||
IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE
|
||||
IGNORECASENOTLIKE("NOT LIKE"), //不区分大小写的 NOT LIKE
|
||||
LENGTH_EQUAL("="), //字符串值的长度
|
||||
LENGTH_LESSTHAN("<"), //字符串值的长度 <
|
||||
LENGTH_LESSTHANOREQUALTO("<="), //字符串值的长度 <=
|
||||
LENGTH_GREATERTHAN(">"), //字符串值的长度 >
|
||||
LENGTH_GREATERTHANOREQUALTO(">="), //字符串值的长度 >=
|
||||
|
||||
CONTAIN("CONTAIN"), //包含, 相当于反向LIKE
|
||||
NOTCONTAIN("NOT CONTAIN"), //不包含, 相当于反向LIKE
|
||||
|
||||
@@ -397,7 +397,10 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则
|
||||
if (express == NOTCONTAIN) return info.notcontainSQL.replace("${column}", info.getSQLColumn(talis, column)).replace("${keystr}", val);
|
||||
if (express == IGNORECASENOTCONTAIN) return info.notcontainSQL.replace("${column}", "LOWER(" + info.getSQLColumn(talis, column) + ")").replace("${keystr}", val);
|
||||
|
||||
if (express == IGNORECASEEQUAL || express == IGNORECASENOTEQUAL || express == IGNORECASELIKE || express == IGNORECASENOTLIKE) {
|
||||
if (express == LENGTH_EQUAL || express == LENGTH_LESSTHAN || express == LENGTH_LESSTHANOREQUALTO
|
||||
|| express == LENGTH_GREATERTHAN || express == LENGTH_GREATERTHANOREQUALTO) {
|
||||
sb.append("LENGTH(").append(info.getSQLColumn(talis, column)).append(')');
|
||||
} else if (express == IGNORECASEEQUAL || express == IGNORECASENOTEQUAL || express == IGNORECASELIKE || express == IGNORECASENOTLIKE) {
|
||||
sb.append("LOWER(").append(info.getSQLColumn(talis, column)).append(')');
|
||||
if (fk) val = "LOWER(" + info.getSQLColumn(talis, ((FilterKey) val0).getColumn()) + ')';
|
||||
} else {
|
||||
@@ -1406,6 +1409,81 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则
|
||||
return "LOWER(" + field + ") " + express.value() + ' ' + formatToString(valstr2);
|
||||
}
|
||||
};
|
||||
case LENGTH_EQUAL:
|
||||
final int intval = ((Number) val).intValue();
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return (rs == null && 0 == intval) || (rs != null && rs.toString().length() == intval);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LENGTH(" + field + ") " + express.value() + ' ' + intval;
|
||||
}
|
||||
};
|
||||
case LENGTH_LESSTHAN:
|
||||
final int intval2 = ((Number) val).intValue();
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return (rs == null && 0 < intval2) || (rs != null && rs.toString().length() < intval2);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LENGTH(" + field + ") " + express.value() + ' ' + intval2;
|
||||
}
|
||||
};
|
||||
case LENGTH_LESSTHANOREQUALTO:
|
||||
final int intval3 = ((Number) val).intValue();
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return (rs == null && 0 <= intval3) || (rs != null && rs.toString().length() <= intval3);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LENGTH(" + field + ") " + express.value() + ' ' + intval3;
|
||||
}
|
||||
};
|
||||
case LENGTH_GREATERTHAN:
|
||||
final int intval4 = ((Number) val).intValue();
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return (rs == null && 0 > intval4) || (rs != null && rs.toString().length() > intval4);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LENGTH(" + field + ") " + express.value() + ' ' + intval4;
|
||||
}
|
||||
};
|
||||
case LENGTH_GREATERTHANOREQUALTO:
|
||||
final int intval5 = ((Number) val).intValue();
|
||||
return new Predicate<T>() {
|
||||
|
||||
@Override
|
||||
public boolean test(T t) {
|
||||
Object rs = attr.get(t);
|
||||
return (rs == null && 0 >= intval5) || (rs != null && rs.toString().length() >= intval5);
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
return "LENGTH(" + field + ") " + express.value() + ' ' + intval5;
|
||||
}
|
||||
};
|
||||
case CONTAIN:
|
||||
return fk ? new Predicate<T>() {
|
||||
|
||||
|
||||
@@ -363,6 +363,9 @@ public final class FilterNodeBean<T extends FilterBean> implements Comparable<Fi
|
||||
sb.append(col).append(' ').append(express.value());
|
||||
} else if (express == ISEMPTY || express == ISNOTEMPTY) {
|
||||
sb.append(col).append(' ').append(express.value()).append(" ''");
|
||||
} else if (express == LENGTH_EQUAL || express == LENGTH_LESSTHAN || express == LENGTH_LESSTHANOREQUALTO
|
||||
|| express == LENGTH_GREATERTHAN || express == LENGTH_GREATERTHANOREQUALTO) {
|
||||
sb.append("LENGTH(").append(col).append(") ").append(express.value()).append(" ?");
|
||||
} else {
|
||||
boolean lower = (express == IGNORECASEEQUAL || express == IGNORECASENOTEQUAL || express == IGNORECASELIKE
|
||||
|| express == IGNORECASENOTLIKE || express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN);
|
||||
|
||||
Reference in New Issue
Block a user