From 5db84265532c85f4badd863d4bd35ec03e4237fc Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Tue, 26 Jul 2016 10:36:22 +0800 Subject: [PATCH] --- src/org/redkale/source/FilterExpress.java | 4 +- src/org/redkale/source/FilterNode.java | 66 +++++++++++++++++++++- src/org/redkale/source/FilterNodeBean.java | 3 +- 3 files changed, 67 insertions(+), 6 deletions(-) diff --git a/src/org/redkale/source/FilterExpress.java b/src/org/redkale/source/FilterExpress.java index 9a5857b4c..43c2f540f 100644 --- a/src/org/redkale/source/FilterExpress.java +++ b/src/org/redkale/source/FilterExpress.java @@ -16,17 +16,17 @@ package org.redkale.source; public enum FilterExpress { EQUAL("="), + IGNORECASEEQUAL("="),//不区分大小写的 = NOTEQUAL("<>"), + IGNORECASENOTEQUAL("="),//不区分大小写的 <> GREATERTHAN(">"), LESSTHAN("<"), GREATERTHANOREQUALTO(">="), LESSTHANOREQUALTO("<="), - STARTSWITH("LIKE"), NOTSTARTSWITH("NOT LIKE"), ENDSWITH("LIKE"), NOTENDSWITH("NOT LIKE"), - LIKE("LIKE"), NOTLIKE("NOT LIKE"), IGNORECASELIKE("LIKE"), //不区分大小写的 LIKE diff --git a/src/org/redkale/source/FilterNode.java b/src/org/redkale/source/FilterNode.java index 3c9d15a0a..ae3202e12 100644 --- a/src/org/redkale/source/FilterNode.java +++ b/src/org/redkale/source/FilterNode.java @@ -332,7 +332,7 @@ public class FilterNode { 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 == IGNORECASELIKE || express == IGNORECASENOTLIKE) { + 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 { @@ -558,7 +558,6 @@ public class FilterNode { return field + " != null"; } }; - if (attr == null) return null; if (val0 == null) return null; final Class atype = attr.type(); @@ -702,6 +701,36 @@ public class FilterNode { return field + ' ' + express.value() + ' ' + formatToString(val); } }; + case IGNORECASEEQUAL: + return fk ? new Predicate() { + + @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() { + + @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: return fk ? new Predicate() { @@ -726,6 +755,36 @@ public class FilterNode { return field + ' ' + express.value() + ' ' + formatToString(val); } }; + case IGNORECASENOTEQUAL: + return fk ? new Predicate() { + + @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() { + + @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: return fk ? new Predicate() { @@ -1676,7 +1735,8 @@ public class FilterNode { value = "%" + value; } else if (express == IGNORECASELIKE || express == IGNORECASENOTLIKE) { value = "%" + value.toString().toLowerCase() + '%'; - } else if (express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN) { + } else if (express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN + || express == IGNORECASEEQUAL || express == IGNORECASENOTEQUAL) { value = value.toString().toLowerCase(); } return new StringBuilder().append('\'').append(value.toString().replace("'", "\\'")).append('\''); diff --git a/src/org/redkale/source/FilterNodeBean.java b/src/org/redkale/source/FilterNodeBean.java index 673caa3bc..4add23936 100644 --- a/src/org/redkale/source/FilterNodeBean.java +++ b/src/org/redkale/source/FilterNodeBean.java @@ -354,7 +354,8 @@ public final class FilterNodeBean implements Comparable