Skip to content

Commit cbcf0a7

Browse files
thebigunowumpz
authored andcommitted
Fixes 649 to add support for HOUR, MINUTE, SECOND date literals and support for identifiers as the interval parameter. (#756)
1 parent c85e79b commit cbcf0a7

File tree

2 files changed

+17
-2
lines changed

2 files changed

+17
-2
lines changed

src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ TOKEN: /* SQL Keywords. prefixed with K_ to avoid name clashes */
140140
| <K_CROSS:"CROSS">
141141
| <K_CURRENT: "CURRENT">
142142
| <K_DATETIMELITERAL : ("DATE" | "TIME" | "TIMESTAMP") >
143-
| <K_DATE_LITERAL : ( "YEAR" | "MONTH" | "DAY" ) >
143+
| <K_DATE_LITERAL : ( "YEAR" | "MONTH" | "DAY" | "HOUR" | "MINUTE" | "SECOND" ) >
144144
| <K_DEFERRABLE : "DEFERRABLE">
145145
| <K_DELAYED : "DELAYED">
146146
| <K_DELETE:"DELETE">
@@ -2837,7 +2837,7 @@ IntervalExpression IntervalExpression() : {
28372837
[ LOOKAHEAD(2) (token = <S_IDENTIFIER> | token = <K_DATE_LITERAL>) { interval.setIntervalType(token.image); } ]
28382838
|
28392839
{ interval = new IntervalExpression(false); }
2840-
( token=<S_LONG> | token=<S_DOUBLE> | token=<S_CHAR_LITERAL> )
2840+
( token=<S_LONG> | token=<S_DOUBLE> | token=<S_CHAR_LITERAL> | token = <S_IDENTIFIER>)
28412841
{ interval.setParameter((signed?"-":"") + token.image); }
28422842
token = <K_DATE_LITERAL> { interval.setIntervalType(token.image); }
28432843
)

src/test/java/net/sf/jsqlparser/statement/select/SelectTest.java

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3470,6 +3470,21 @@ public void testDateArithmentic5() throws JSQLParserException {
34703470
assertSqlCanBeParsedAndDeparsed("SELECT CASE WHEN CURRENT_DATE BETWEEN (CURRENT_DATE - 1 DAY) AND ('2019-01-01') THEN 1 ELSE 0 END FROM SYSIBM.SYSDUMMY1");
34713471
}
34723472

3473+
@Test
3474+
public void testDateArithmentic6() throws JSQLParserException {
3475+
assertSqlCanBeParsedAndDeparsed("SELECT CURRENT_DATE + HOURS_OFFSET HOUR AS NEXT_DATE FROM SYSIBM.SYSDUMMY1");
3476+
}
3477+
3478+
@Test
3479+
public void testDateArithmentic7() throws JSQLParserException {
3480+
assertSqlCanBeParsedAndDeparsed("SELECT CURRENT_DATE + MINUTE_OFFSET MINUTE AS NEXT_DATE FROM SYSIBM.SYSDUMMY1");
3481+
}
3482+
3483+
@Test
3484+
public void testDateArithmentic8() throws JSQLParserException {
3485+
assertSqlCanBeParsedAndDeparsed("SELECT CURRENT_DATE + SECONDS_OFFSET SECOND AS NEXT_DATE FROM SYSIBM.SYSDUMMY1");
3486+
}
3487+
34733488
@Test
34743489
public void testNotProblemIssue721() throws JSQLParserException {
34753490
assertSqlCanBeParsedAndDeparsed("SELECT * FROM dual WHERE NOT regexp_like('a', '[\\w]+')");

0 commit comments

Comments
 (0)