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