-
-
Notifications
You must be signed in to change notification settings - Fork 1.4k
Description
The syntax for interval expression defined in *.jjt file:
IntervalExpression IntervalExpression() : {
IntervalExpression interval = new IntervalExpression();
Token token;
}
{
<K_INTERVAL> token=<S_CHAR_LITERAL> { interval.setParameter(token.image); }
[ LOOKAHEAD(2) token = <S_IDENTIFIER> { interval.setIntervalType(token.image); } ]
{
return interval;
}
}
But per the documentation in mysql official site (http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_date-add), the interval expression syntax format is:
'interval' <expr> <type>
the <expr> can be a numeric value or an expression which results in a numeric value or character literal.
As a workaround without class modification, currently I modify the syntax as follows to avoid the statement parse failure. It should work under most situation.
IntervalExpression IntervalExpression() : {
IntervalExpression interval = new IntervalExpression();
Token token;
}
{
<K_INTERVAL>
(
token=<S_LONG> { interval.setParameter(token.image); }
| token=<S_DOUBLE> { interval.setParameter(token.image); }
| token=<S_CHAR_LITERAL> { interval.setParameter(token.image); }
)
[ LOOKAHEAD(2) token = <S_IDENTIFIER> { interval.setIntervalType(token.image); } ]
{
return interval;
}
}