pg sql parser support interval <int>

This commit is contained in:
shaojin.wensj
2022-06-12 18:26:10 +08:00
parent e7ffa1b910
commit b0933fcd47
3 changed files with 10 additions and 7 deletions
@@ -156,7 +156,7 @@ public class PGExprParser extends SQLExprParser {
protected SQLExpr parseInterval() {
accept(Token.INTERVAL);
SQLIntervalExpr intervalExpr = new SQLIntervalExpr();
if (lexer.token() != Token.LITERAL_CHARS) {
if (lexer.token() != Token.LITERAL_CHARS && lexer.token() != Token.LITERAL_INT) {
return new SQLIdentifierExpr("INTERVAL");
}
intervalExpr.setValue(new SQLCharExpr(lexer.stringVal()));
@@ -71,6 +71,7 @@ public class PGLexer extends Lexer {
map.put("MERGE", Token.MERGE);
map.put("MATCHED", Token.MATCHED);
map.put("PARTITION", Token.PARTITION);
map.put("INTERVAL", Token.INTERVAL);
DEFAULT_PG_KEYWORDS = new Keywords(map);
}
@@ -37,13 +37,15 @@ public class PGSelectTest86
assertEquals(1, statements.size());
final SQLStatement stmt = statements.get(0);
assertEquals("SELECT *\n" +
"FROM xxx_point point\n" +
"\tINNER JOIN xxx_cc cc ON point.id = cc.point_id"
assertEquals("SELECT COUNT(1) AS res\n" +
"FROM TB_EXPERIENCE exp\n" +
"WHERE exp.creatdate > DATE_SUB(CURDATE(), INTERVAL '1' MONTH)\n" +
"\tAND exp.cstatus = 1"
, stmt.toString());
assertEquals("select *\n" +
"from xxx_point point\n" +
"\tinner join xxx_cc cc on point.id = cc.point_id", stmt.toLowerCaseString());
assertEquals("select count(1) as res\n" +
"from TB_EXPERIENCE exp\n" +
"where exp.creatdate > DATE_SUB(CURDATE(), interval '1' month)\n" +
"\tand exp.cstatus = 1", stmt.toLowerCaseString());
}
}