From 16ea7700ed83aa1ba40784b9a404f66648315801 Mon Sep 17 00:00:00 2001 From: wenshao Date: Fri, 3 Feb 2017 23:10:21 +0800 Subject: [PATCH] bug fixed for issue #1576 #1577 --- .../druid/sql/parser/SQLStatementParser.java | 10 ++++--- .../com/alibaba/druid/bvt/bug/Issue1576.java | 26 +++++++++++++++++++ 2 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 src/test/java/com/alibaba/druid/bvt/bug/Issue1576.java diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java index 27d20dd455..159d893081 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java @@ -15,6 +15,7 @@ */ package com.alibaba.druid.sql.parser; +import java.sql.SQLException; import java.util.ArrayList; import java.util.List; @@ -2037,10 +2038,11 @@ public class SQLStatementParser extends SQLParser { */ public SQLStatement parseStatement( final boolean tryBest) { List list = new ArrayList(); - if(tryBest){ - this.parseStatementList(list, 1); - }else{ - parseStatementList(list); + this.parseStatementList(list, 1); + if (tryBest) { + if (lexer.token() != Token.EOF) { + throw new ParserException("sql syntax error, no terminated. " + lexer.token()); + } } return list.get(0); } diff --git a/src/test/java/com/alibaba/druid/bvt/bug/Issue1576.java b/src/test/java/com/alibaba/druid/bvt/bug/Issue1576.java new file mode 100644 index 0000000000..f182ea3400 --- /dev/null +++ b/src/test/java/com/alibaba/druid/bvt/bug/Issue1576.java @@ -0,0 +1,26 @@ +package com.alibaba.druid.bvt.bug; + +import com.alibaba.druid.sql.SQLUtils; +import com.alibaba.druid.sql.parser.SQLParserUtils; +import com.alibaba.druid.sql.parser.SQLStatementParser; +import com.alibaba.druid.util.JdbcConstants; +import junit.framework.TestCase; + +/** + * Created by wenshao on 03/02/2017. + */ +public class Issue1576 extends TestCase { + private final String dbType = JdbcConstants.ORACLE; + public void test_for_issue() throws Exception { + String sql = "select * from t whe id = 1"; + SQLStatementParser parser = SQLParserUtils.createSQLStatementParser(sql, dbType); + + Exception error = null; + try { + parser.parseStatement(true); + } catch (Exception ex) { + error = ex; + } + assertNotNull(error); + } +}