DataSource增加判断字符串字段值长度的FilterExpress
This commit is contained in:
@@ -31,6 +31,11 @@ public enum FilterExpress {
|
|||||||
NOTLIKE("NOT LIKE"),
|
NOTLIKE("NOT LIKE"),
|
||||||
IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE
|
IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE
|
||||||
IGNORECASENOTLIKE("NOT LIKE"), //不区分大小写的 NOT LIKE
|
IGNORECASENOTLIKE("NOT LIKE"), //不区分大小写的 NOT LIKE
|
||||||
|
LENGTH_EQUAL("="), //字符串值的长度
|
||||||
|
LENGTH_LESSTHAN("<"), //字符串值的长度 <
|
||||||
|
LENGTH_LESSTHANOREQUALTO("<="), //字符串值的长度 <=
|
||||||
|
LENGTH_GREATERTHAN(">"), //字符串值的长度 >
|
||||||
|
LENGTH_GREATERTHANOREQUALTO(">="), //字符串值的长度 >=
|
||||||
|
|
||||||
CONTAIN("CONTAIN"), //包含, 相当于反向LIKE
|
CONTAIN("CONTAIN"), //包含, 相当于反向LIKE
|
||||||
NOTCONTAIN("NOT 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 == 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 == 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(')');
|
sb.append("LOWER(").append(info.getSQLColumn(talis, column)).append(')');
|
||||||
if (fk) val = "LOWER(" + info.getSQLColumn(talis, ((FilterKey) val0).getColumn()) + ')';
|
if (fk) val = "LOWER(" + info.getSQLColumn(talis, ((FilterKey) val0).getColumn()) + ')';
|
||||||
} else {
|
} else {
|
||||||
@@ -1406,6 +1409,81 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则
|
|||||||
return "LOWER(" + field + ") " + express.value() + ' ' + formatToString(valstr2);
|
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:
|
case CONTAIN:
|
||||||
return fk ? new Predicate<T>() {
|
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());
|
sb.append(col).append(' ').append(express.value());
|
||||||
} else if (express == ISEMPTY || express == ISNOTEMPTY) {
|
} else if (express == ISEMPTY || express == ISNOTEMPTY) {
|
||||||
sb.append(col).append(' ').append(express.value()).append(" ''");
|
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 {
|
} else {
|
||||||
boolean lower = (express == IGNORECASEEQUAL || express == IGNORECASENOTEQUAL || express == IGNORECASELIKE
|
boolean lower = (express == IGNORECASEEQUAL || express == IGNORECASENOTEQUAL || express == IGNORECASELIKE
|
||||||
|| express == IGNORECASENOTLIKE || express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN);
|
|| express == IGNORECASENOTLIKE || express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN);
|
||||||
|
|||||||
Reference in New Issue
Block a user