bugfix for INTERVAL

This commit is contained in:
Yako
2015-03-06 17:31:47 +08:00
parent a0b30621e2
commit df5d834a86
2 changed files with 28 additions and 0 deletions
@@ -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();
@@ -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<SQLStatement> 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<SQLStatement> 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<SQLStatement> stmtList) {
StringBuilder out = new StringBuilder();