diff --git a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java index 3be6b62fef..deef36e75f 100644 --- a/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/dialect/mysql/parser/MySqlExprParser.java @@ -22,7 +22,6 @@ import com.alibaba.druid.sql.ast.SQLOrderBy; import com.alibaba.druid.sql.ast.expr.SQLAggregateExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOpExpr; import com.alibaba.druid.sql.ast.expr.SQLBinaryOperator; -import com.alibaba.druid.sql.ast.expr.SQLBooleanExpr; import com.alibaba.druid.sql.ast.expr.SQLCharExpr; import com.alibaba.druid.sql.ast.expr.SQLHexExpr; import com.alibaba.druid.sql.ast.expr.SQLIdentifierExpr; @@ -484,6 +483,11 @@ public class MySqlExprParser extends SQLExprParser { lexer.nextToken(); return userName; } + + if(lexer.token() == Token.ERROR) { + throw new ParserException("syntax error, token: " + lexer.token() + " " + lexer.stringVal() + ", pos : " + + lexer.pos()); + } return super.primaryRest(expr); } 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 18003fd8a9..4a95120d50 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/SQLEvalVisitorUtils.java @@ -1239,6 +1239,14 @@ public class SQLEvalVisitorUtils { return castToLong(list.get(0)); } } + + if (val instanceof Boolean) { + if (((Boolean) val).booleanValue()) { + return 1l; + } else { + return 0l; + } + } return ((Number) val).longValue(); } @@ -1431,6 +1439,10 @@ public class SQLEvalVisitorUtils { return null; } + if(a == EVAL_VALUE_NULL || b == EVAL_VALUE_NULL) { + return null; + } + if (a instanceof String) { a = castToNumber((String) a); } diff --git a/src/main/java/com/alibaba/druid/sql/visitor/functions/Char.java b/src/main/java/com/alibaba/druid/sql/visitor/functions/Char.java index 27f9146982..301fb4352d 100644 --- a/src/main/java/com/alibaba/druid/sql/visitor/functions/Char.java +++ b/src/main/java/com/alibaba/druid/sql/visitor/functions/Char.java @@ -42,8 +42,11 @@ public class Char implements Function { int charCode = ((Number) paramValue).intValue(); buf.append((char) charCode); } else if (paramValue instanceof String) { - int charCode = new BigDecimal((String)paramValue).intValue(); - buf.append((char) charCode); + try { + int charCode = new BigDecimal((String) paramValue).intValue(); + buf.append((char) charCode); + } catch (NumberFormatException e) { + } } else { return SQLEvalVisitor.EVAL_ERROR; }