Interval types (e.g. SECOND) are key words, not an expressions, so calls to 
these functions are not ordinary function call syntax. You will need to modify 
the parser. We could add these functions to Calcite in a mysql compatibility 
mode.

There are some other functions that use interval types, e.g. FLOOR(expression 
TO SECOND). You could use those as examples when modifying the parser.

You may need to add MICROSECOND, QUARTER to enum TimeUnit.

Julian


> On Mar 3, 2016, at 7:17 AM, Arina Yelchiyeva <[email protected]> 
> wrote:
> 
> Hi all!
> 
> I've been implementing timestampadd / timestampdiff functions for Drill and
> noticed that these functions parsing is not fully implemented in Calcite.
> First parameter in these functions is timestamp interval which can be on
> one the following:
> MICROSECOND (MICROSECONDS, FRAC_SECOND (deprecated)), (SQL_TSI_)SECOND,
> (SQL_TSI_)MINUTE, (SQL_TSI_)HOUR, (SQL_TSI_)DAY,
> (SQL_TSI_)WEEK,(SQL_TSI_)MONTH, (SQL_TSI_)QUARTER, (SQL_TSI_)YEAR
> 
> Whenever I call timestampadd / timestampdiff with first parameter one of
> above
> (ex: timestampadd(second, 1, current_datetime). Calcite throws an error:
> 
> Caused by: org.apache.calcite.sql.parser.SqlParseException: Encountered "(
> SECOND" at line 1, column 25.
> Was expecting one of:
>    "(" "*" ...
>    "(" ")" ...
>    "(" "WITH" ...
> and so on.
> 
> I have tried to implement parsing for timestamp[add|diff] in Calcite.
> I have registered all timestamp intervals as tokens to convert them to
> literals whenever they come inside timestamp[add|diff] structure. Also have
> added them into SqlStdOperatorTable.
> 
> But I am not sure if this is correct approach. Is there anybody who can
> take a look at diff?
> Link -
> https://github.com/arina-ielchiieva/calcite/commit/723898d6b1cf222b44edc9c5f6c51072d2ccfe92
> 
> 
> Thank you in advance!
> 
> Kind regards
> Arina

Reply via email to