From 5b7739b26b4ccb937e164a04da93d32d454f0d7a Mon Sep 17 00:00:00 2001 From: Redkale <22250530@qq.com> Date: Mon, 7 Nov 2016 19:15:27 +0800 Subject: [PATCH] --- src/org/redkale/source/FilterExpress.java | 2 ++ src/org/redkale/source/FilterNode.java | 31 ++++++++++++++++++++++ src/org/redkale/source/FilterNodeBean.java | 2 ++ 3 files changed, 35 insertions(+) diff --git a/src/org/redkale/source/FilterExpress.java b/src/org/redkale/source/FilterExpress.java index c5e8fc2d4..92df8f5bc 100644 --- a/src/org/redkale/source/FilterExpress.java +++ b/src/org/redkale/source/FilterExpress.java @@ -43,6 +43,8 @@ public enum FilterExpress { NOTIN("NOT IN"), ISNULL("IS NULL"), ISNOTNULL("IS NOT NULL"), + ISEMPTY("="),//值为空 + ISNOTEMPTY("<>"), //值不为空 OPAND("&"), //与运算 > 0 OPOR("|"), //或运算 > 0 OPANDNO("&"), //与运算 == 0 diff --git a/src/org/redkale/source/FilterNode.java b/src/org/redkale/source/FilterNode.java index 33c038374..551435cd8 100644 --- a/src/org/redkale/source/FilterNode.java +++ b/src/org/redkale/source/FilterNode.java @@ -344,6 +344,9 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则 if (express == ISNULL || express == ISNOTNULL) { return new StringBuilder().append(info.getSQLColumn(talis, column)).append(' ').append(express.value()); } + if (express == ISEMPTY || express == ISNOTEMPTY) { + return new StringBuilder().append(info.getSQLColumn(talis, column)).append(' ').append(express.value()).append(" ''"); + } if (val0 == null) return null; if (express == FV_MOD || express == FV_DIV) { FilterValue fv = (FilterValue) val0; @@ -585,6 +588,32 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则 return field + " != null"; } }; + if (express == ISEMPTY) return new Predicate() { + + @Override + public boolean test(T t) { + Object v = attr.get(t); + return v == null || v.toString().isEmpty(); + } + + @Override + public String toString() { + return field + " = ''"; + } + }; + if (express == ISNOTEMPTY) return new Predicate() { + + @Override + public boolean test(T t) { + Object v = attr.get(t); + return v != null && !v.toString().isEmpty(); + } + + @Override + public String toString() { + return field + " != ''"; + } + }; if (val0 == null) return null; final Class atype = attr.type(); @@ -1737,6 +1766,8 @@ public class FilterNode { //FilterNode 不能实现Serializable接口, 否则 String col = prefix == null ? column : (prefix + "." + column); if (express == ISNULL || express == ISNOTNULL) { sb.append(col).append(' ').append(express.value()); + } else if (express == ISEMPTY || express == ISNOTEMPTY) { + sb.append(col).append(' ').append(express.value()).append(" ''"); } else if (ev != null) { boolean lower = (express == IGNORECASELIKE || express == IGNORECASENOTLIKE || express == IGNORECASECONTAIN || express == IGNORECASENOTCONTAIN); sb.append(lower ? ("LOWER(" + col + ')') : col).append(' ').append(express.value()).append(' ').append(formatToString(express, ev)); diff --git a/src/org/redkale/source/FilterNodeBean.java b/src/org/redkale/source/FilterNodeBean.java index a1e82a720..f29ecea76 100644 --- a/src/org/redkale/source/FilterNodeBean.java +++ b/src/org/redkale/source/FilterNodeBean.java @@ -353,6 +353,8 @@ public final class FilterNodeBean implements Comparable