From df5d834a86ac9bae6f6a511b1c3237a7f16c2a96 Mon Sep 17 00:00:00 2001 From: Yako Date: Fri, 6 Mar 2015 17:31:47 +0800 Subject: [PATCH] bugfix for INTERVAL --- .../druid/sql/parser/SQLExprParser.java | 5 ++++ .../sql/mysql/DateAndTimeFunctionsTest.java | 23 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java index 1423971f0c..57a5b24a68 100644 --- a/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java +++ b/src/main/java/com/alibaba/druid/sql/parser/SQLExprParser.java @@ -458,6 +458,11 @@ public class SQLExprParser extends SQLParser { sqlExpr = new SQLNumberExpr(lexer.decimalValue()); lexer.nextToken(); break; + case IDENTIFIER: // 当+号后面为字段的情况 + sqlExpr = new SQLIdentifierExpr(lexer.stringVal()); + sqlExpr = new SQLUnaryExpr(SQLUnaryOperator.Plus, sqlExpr); + lexer.nextToken(); + break; case LPAREN: lexer.nextToken(); sqlExpr = expr(); diff --git a/src/test/java/com/alibaba/druid/bvt/sql/mysql/DateAndTimeFunctionsTest.java b/src/test/java/com/alibaba/druid/bvt/sql/mysql/DateAndTimeFunctionsTest.java index 3311c2123a..bc2acf0c14 100644 --- a/src/test/java/com/alibaba/druid/bvt/sql/mysql/DateAndTimeFunctionsTest.java +++ b/src/test/java/com/alibaba/druid/bvt/sql/mysql/DateAndTimeFunctionsTest.java @@ -621,6 +621,29 @@ public class DateAndTimeFunctionsTest extends TestCase { Assert.assertEquals("SELECT YEARWEEK('1987-01-01');", text); } + + + public void test_54() throws Exception { + String sql = "SELECT t.c1, DATE_ADD('2008-01-02', INTERVAL +t.c1 DAY) from t"; + + SQLStatementParser parser = new MySqlStatementParser(sql); + List stmtList = parser.parseStatementList(); + + String text = output(stmtList); + + Assert.assertEquals("SELECT t.c1, DATE_ADD('2008-01-02', INTERVAL +t.c1 DAY)\nFROM t;", text); + } + + public void test_55() throws Exception { + String sql = "SELECT t.c1, DATE_ADD('2008-01-02', INTERVAL -t.c1 DAY) from t"; + + SQLStatementParser parser = new MySqlStatementParser(sql); + List stmtList = parser.parseStatementList(); + + String text = output(stmtList); + + Assert.assertEquals("SELECT t.c1, DATE_ADD('2008-01-02', INTERVAL -t.c1 DAY)\nFROM t;", text); + } private String output(List stmtList) { StringBuilder out = new StringBuilder();