Skip to content

Commit 5492f51

Browse files
committed
The duration part in INTERVAL expressions can contain a column and not only a constant - now supporting that use case
1 parent 1314cd0 commit 5492f51

File tree

2 files changed

+15
-2
lines changed

2 files changed

+15
-2
lines changed

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

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2955,13 +2955,20 @@ JsonExpression JsonExpression() : {
29552955

29562956
IntervalExpression IntervalExpression() : {
29572957
IntervalExpression interval;
2958+
Column col;
29582959
Token token;
29592960
boolean signed = false;
29602961
}
29612962
{
29622963
{ interval = new IntervalExpression(); }
2963-
<K_INTERVAL> ["-" {signed=true;}] (token=<S_LONG> | token=<S_DOUBLE> | token=<S_CHAR_LITERAL> )
2964-
{ interval.setParameter((signed?"-":"") + token.image); }
2964+
<K_INTERVAL> ["-" {signed=true;}]
2965+
(
2966+
((token=<S_LONG> | token=<S_DOUBLE> | token=<S_CHAR_LITERAL> )
2967+
{ interval.setParameter((signed?"-":"") + token.image); })
2968+
|
2969+
(col=Column()
2970+
{ interval.setExpression(col); })
2971+
)
29652972
[ LOOKAHEAD(2) (token = <S_IDENTIFIER> | token = <K_DATE_LITERAL>) { interval.setIntervalType(token.image); } ]
29662973
{
29672974
return interval;

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2177,6 +2177,12 @@ public void testValues6BothVariants() throws JSQLParserException {
21772177
assertSqlCanBeParsedAndDeparsed(stmt);
21782178
}
21792179

2180+
@Test
2181+
public void testIntervalWithColumn() throws JSQLParserException {
2182+
String stmt = "SELECT DATE_ADD(start_date, INTERVAL duration MINUTE) AS end_datetime FROM appointment";
2183+
assertSqlCanBeParsedAndDeparsed(stmt);
2184+
}
2185+
21802186
@Test
21812187
public void testInterval1() throws JSQLParserException {
21822188
String stmt = "SELECT 5 + INTERVAL '3 days'";

0 commit comments

Comments
 (0)