This commit is contained in:
Redkale
2016-07-26 10:36:22 +08:00
parent 3c667d88aa
commit 5db8426553
3 changed files with 67 additions and 6 deletions

View File

@@ -16,17 +16,17 @@ package org.redkale.source;
public enum FilterExpress { public enum FilterExpress {
EQUAL("="), EQUAL("="),
IGNORECASEEQUAL("="),//不区分大小写的 =
NOTEQUAL("<>"), NOTEQUAL("<>"),
IGNORECASENOTEQUAL("="),//不区分大小写的 <>
GREATERTHAN(">"), GREATERTHAN(">"),
LESSTHAN("<"), LESSTHAN("<"),
GREATERTHANOREQUALTO(">="), GREATERTHANOREQUALTO(">="),
LESSTHANOREQUALTO("<="), LESSTHANOREQUALTO("<="),
STARTSWITH("LIKE"), STARTSWITH("LIKE"),
NOTSTARTSWITH("NOT LIKE"), NOTSTARTSWITH("NOT LIKE"),
ENDSWITH("LIKE"), ENDSWITH("LIKE"),
NOTENDSWITH("NOT LIKE"), NOTENDSWITH("NOT LIKE"),
LIKE("LIKE"), LIKE("LIKE"),
NOTLIKE("NOT LIKE"), NOTLIKE("NOT LIKE"),
IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE

View File

@@ -332,7 +332,7 @@ public class FilterNode {
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 == IGNORECASELIKE || express == IGNORECASENOTLIKE) { 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 {
@@ -558,7 +558,6 @@ public class FilterNode {
return field + " != null"; return field + " != null";
} }
}; };
if (attr == null) return null;
if (val0 == null) return null; if (val0 == null) return null;
final Class atype = attr.type(); final Class atype = attr.type();
@@ -702,6 +701,36 @@ public class FilterNode {
return field + ' ' + express.value() + ' ' + formatToString(val); return field + ' ' + express.value() + ' ' + formatToString(val);
} }
}; };
case IGNORECASEEQUAL:
return fk ? new Predicate<T>() {
@Override
public boolean test(T t) {
Object rs = attr.get(t);
Object rs2 = fkattr.get(t);
if (rs == null && rs2 == null) return true;
if (rs == null || rs2 == null) return false;
return Objects.equals(rs.toString().toLowerCase(), rs2.toString().toLowerCase());
}
@Override
public String toString() {
return "LOWER(" + field + ") " + express.value() + " LOWER(" + fkattr.field() + ')';
}
} : new Predicate<T>() {
@Override
public boolean test(T t) {
Object rs = attr.get(t);
if (rs == null) return false;
return val.toString().equalsIgnoreCase(rs.toString());
}
@Override
public String toString() {
return "LOWER(" + field + ") " + express.value() + ' ' + formatToString(val);
}
};
case NOTEQUAL: case NOTEQUAL:
return fk ? new Predicate<T>() { return fk ? new Predicate<T>() {
@@ -726,6 +755,36 @@ public class FilterNode {
return field + ' ' + express.value() + ' ' + formatToString(val); return field + ' ' + express.value() + ' ' + formatToString(val);
} }
}; };
case IGNORECASENOTEQUAL:
return fk ? new Predicate<T>() {
@Override
public boolean test(T t) {
Object rs = attr.get(t);
Object rs2 = fkattr.get(t);
if (rs == null && rs2 == null) return false;
if (rs == null || rs2 == null) return true;
return !Objects.equals(rs.toString().toLowerCase(), rs2.toString().toLowerCase());
}
@Override
public String toString() {
return "LOWER(" + field + ") " + express.value() + " LOWER(" + fkattr.field() + ')';
}
} : new Predicate<T>() {
@Override
public boolean test(T t) {
Object rs = attr.get(t);
if (rs == null) return true;
return !val.toString().equalsIgnoreCase(rs.toString());
}
@Override
public String toString() {
return "LOWER(" + field + ") " + express.value() + ' ' + formatToString(val);
}
};
case GREATERTHAN: case GREATERTHAN:
return fk ? new Predicate<T>() { return fk ? new Predicate<T>() {
@@ -1676,7 +1735,8 @@ public class FilterNode {
value = "%" + value; value = "%" + value;
} else if (express == IGNORECASELIKE || express == IGNORECASENOTLIKE) { } else if (express == IGNORECASELIKE || express == IGNORECASENOTLIKE) {
value = "%" + value.toString().toLowerCase() + '%'; value = "%" + value.toString().toLowerCase() + '%';
} else if (express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN) { } else if (express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN
|| express == IGNORECASEEQUAL || express == IGNORECASENOTEQUAL) {
value = value.toString().toLowerCase(); value = value.toString().toLowerCase();
} }
return new StringBuilder().append('\'').append(value.toString().replace("'", "\\'")).append('\''); return new StringBuilder().append('\'').append(value.toString().replace("'", "\\'")).append('\'');

View File

@@ -354,7 +354,8 @@ public final class FilterNodeBean<T extends FilterBean> implements Comparable<Fi
if (express == ISNULL || express == ISNOTNULL) { if (express == ISNULL || express == ISNOTNULL) {
sb.append(col).append(' ').append(express.value()); sb.append(col).append(' ').append(express.value());
} else { } else {
boolean lower = (express == IGNORECASELIKE || express == IGNORECASENOTLIKE || express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN); boolean lower = (express == IGNORECASEEQUAL || express == IGNORECASENOTEQUAL || express == IGNORECASELIKE
|| express == IGNORECASENOTLIKE || express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN);
sb.append(lower ? ("LOWER(" + col + ')') : col).append(' ').append(express.value()).append(" ?"); sb.append(lower ? ("LOWER(" + col + ')') : col).append(' ').append(express.value()).append(" ?");
} }
} }