diff --git a/src/main/java/com/alibaba/druid/sql/parser/Lexer.java b/src/main/java/com/alibaba/druid/sql/parser/Lexer.java index bb9377f46f..d53d185da8 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/Lexer.java +++ b/src/main/java/com/alibaba/druid/sql/parser/Lexer.java @@ -15,6 +15,9 @@ */ package com.alibaba.druid.sql.parser; +import com.alibaba.druid.util.StringUtils; +import org.apache.commons.lang.math.NumberUtils; + import static com.alibaba.druid.sql.parser.CharTypes.isFirstIdentifierChar; import static com.alibaba.druid.sql.parser.CharTypes.isIdentifierChar; import static com.alibaba.druid.sql.parser.CharTypes.isWhitespace; @@ -1147,7 +1150,11 @@ public class Lexer { } public BigDecimal decimalValue() { - return new BigDecimal(subString(mark, bufPos).toCharArray()); + String value = subString(mark, bufPos); + if (!NumberUtils.isNumber(value)){ + throw new ParserException(value+" is not a number!"); + } + return new BigDecimal(value.toCharArray()); } public static interface CommentHandler { diff --git a/src/main/java/com/alibaba/druid/util/StringUtils.java b/src/main/java/com/alibaba/druid/util/StringUtils.java index 549c267b56..5252c4d025 100644 --- a/src/main/java/com/alibaba/druid/util/StringUtils.java +++ b/src/main/java/com/alibaba/druid/util/StringUtils.java @@ -95,7 +95,7 @@ public class StringUtils { return a.equalsIgnoreCase(b); } - public static boolean isEmpty(String value) { + public static boolean isEmpty(CharSequence value) { if (value == null || value.length() == 0) { return true; } diff --git a/src/test/java/com/alibaba/druid/mysql/MysqlLimitTest.java b/src/test/java/com/alibaba/druid/mysql/MysqlLimitTest.java new file mode 100644 index 0000000000..206805a27e --- /dev/null +++ b/src/test/java/com/alibaba/druid/mysql/MysqlLimitTest.java @@ -0,0 +1,28 @@ +package com.alibaba.druid.mysql; + +import com.alibaba.druid.sql.ast.SQLStatement; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import junit.framework.TestCase; + +import java.util.List; + +/** + * Created by tianzhen.wtz on 2016/6/7. + * 类说明: + */ +public class MysqlLimitTest extends TestCase{ + + + public void testLimit(){ + String sql = "select * from aaa limit 20exx"; + SQLStatementParser statementParser = SQLParserUtils.createSQLStatementParser(sql, "mysql"); + try { + List sqlStatements = statementParser.parseStatementList(); + } catch (Exception e) { + assertTrue(e.getMessage().contains("is not a number!")); + } + + + } +}