From d20b1f684e8f16a092ad54ce406a0aa85d7f2bd5 Mon Sep 17 00:00:00 2001 From: yakolee Date: Thu, 5 Jun 2014 19:36:52 +0800 Subject: [PATCH] bugfix --- .../sql/visitor/SQLEvalVisitorUtils.java | 24 +++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java index 4a95120d50..a6f626cce2 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java @@ -1330,8 +1330,12 @@ public class SQLEvalVisitorUtils { return new BigInteger(val); } catch (NumberFormatException e) { } - - return new BigDecimal(val); + + try { + return new BigDecimal(val); + } catch (NumberFormatException e) { + return 0; + } } public static Date castToDate(Object val) { @@ -1426,6 +1430,18 @@ public class SQLEvalVisitorUtils { if (a == null || b == null) { return null; } + + if(a == EVAL_VALUE_NULL || b == EVAL_VALUE_NULL) { + return null; + } + + if (a instanceof String) { + a = castToNumber((String) a); + } + + if (b instanceof String) { + b = castToNumber((String) b); + } if (a instanceof Long || b instanceof Long) { return castToLong(a).longValue() | castToLong(b).longValue(); @@ -1660,6 +1676,10 @@ public class SQLEvalVisitorUtils { if (a == null || b == null) { return false; } + + if (a == EVAL_VALUE_NULL || b == EVAL_VALUE_NULL) { + return false; + } if (a.equals(b)) { return true;