Skip to content

Commit

Permalink
The duration part in INTERVAL expressions can contain a column and no…
Browse files Browse the repository at this point in the history
…t only a constant - now supporting that use case
  • Loading branch information
tomershay committed Jul 26, 2019
1 parent 1314cd0 commit 5492f51
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 2 deletions.
11 changes: 9 additions & 2 deletions src/main/jjtree/net/sf/jsqlparser/parser/JSqlParserCC.jjt
Original file line number Diff line number Diff line change
Expand Up @@ -2955,13 +2955,20 @@ JsonExpression JsonExpression() : {

IntervalExpression IntervalExpression() : {
IntervalExpression interval;
Column col;
Token token;
boolean signed = false;
}
{
{ interval = new IntervalExpression(); }
<K_INTERVAL> ["-" {signed=true;}] (token=<S_LONG> | token=<S_DOUBLE> | token=<S_CHAR_LITERAL> )
{ interval.setParameter((signed?"-":"") + token.image); }
<K_INTERVAL> ["-" {signed=true;}]
(
((token=<S_LONG> | token=<S_DOUBLE> | token=<S_CHAR_LITERAL> )
{ interval.setParameter((signed?"-":"") + token.image); })
|
(col=Column()
{ interval.setExpression(col); })
)
[ LOOKAHEAD(2) (token = <S_IDENTIFIER> | token = <K_DATE_LITERAL>) { interval.setIntervalType(token.image); } ]
{
return interval;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2177,6 +2177,12 @@ public void testValues6BothVariants() throws JSQLParserException {
assertSqlCanBeParsedAndDeparsed(stmt);
}

@Test
public void testIntervalWithColumn() throws JSQLParserException {
String stmt = "SELECT DATE_ADD(start_date, INTERVAL duration MINUTE) AS end_datetime FROM appointment";
assertSqlCanBeParsedAndDeparsed(stmt);
}

@Test
public void testInterval1() throws JSQLParserException {
String stmt = "SELECT 5 + INTERVAL '3 days'";
Expand Down

0 comments on commit 5492f51

Please sign in to comment.