From d75b1104a54f40fa59c51399b2b5ea7749c91297 Mon Sep 17 00:00:00 2001 From: kiki Date: Thu, 6 Jun 2013 14:29:08 +0800 Subject: [PATCH] fix right() bug --- .../com/alibaba/druid/sql/visitor/functions/Right.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Right.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Right.java index 718d554d3f..47f210d3e3 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/functions/Right.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Right.java @@ -22,10 +22,10 @@ import com.alibaba.druid.sql.ast.expr.SQLMethodInvokeExpr; import com.alibaba.druid.sql.visitor.SQLEvalVisitor; import com.alibaba.druid.sql.visitor.SQLEvalVisitorUtils; - public class Right implements Function { + public final static Right instance = new Right(); - + public Object eval(SQLEvalVisitor visitor, SQLMethodInvokeExpr x) { if (x.getParameters().size() != 2) { return SQLEvalVisitor.EVAL_ERROR; @@ -45,7 +45,11 @@ public class Right implements Function { String strValue = param0Value.toString(); int intValue = SQLEvalVisitorUtils.castToInteger(param1Value); - String result = strValue.substring(strValue.length() - intValue, strValue.length()); + int start = strValue.length() - intValue; + if (start < 0) { + start = 0; + } + String result = strValue.substring(start, strValue.length()); return result; } }