James Turton created CALCITE-5575:
-------------------------------------
Summary: Incorrect priority of builtinFunctionCallMethods in
Parser.jj
Key: CALCITE-5575
URL: https://issues.apache.org/jira/browse/CALCITE-5575
Project: Calcite
Issue Type: Bug
Components: core
Affects Versions: 1.34.0
Reporter: James Turton
Fix For: 1.34.0
CALCITE-5469 and others have introduced new date and time functions. In
Parser.jj (line 6152) these new functions are handled _above_ the
builtinFunctionCallMethods Freemarker loop that allows applications to add
their own function defintions.
{code:java}
node = DateTimeConstructorCall() { return node; }
|
node = DateDiffFunctionCall() { return node; }
|
node = DateTruncFunctionCall() { return node; }
|
node = TimestampAddFunctionCall() { return node; }
|
node = DatetimeDiffFunctionCall() { return node; }
|
node = TimestampDiffFunctionCall() { return node; }
|
node = TimestampDiff3FunctionCall() { return node; }
|
node = TimestampTruncFunctionCall() { return node; }
|
node = TimeDiffFunctionCall() { return node; }
|
node = TimeTruncFunctionCall() { return node; }
|
<#list
(parser.builtinFunctionCallMethods!default.parser.builtinFunctionCallMethods)
as method>
node = ${method} { return node; }
|
</#list>{code}
This means (I think) that applications are effectively unable to override the
new date and time function definitions with their own definitions. In
particular, Drill cannot override the new three-parameter DATE_DIFF function in
order to provide the parser method needed by its own two-parameter DATE_DIFF
function resulting in a regression in the form of a broken DATE_DIFF function.
If the above is correct then can the builtinFunctionCallMethods Freemarker loop
move above these date and time functions? Could it even move above the special
syntax functions higher up, for that matter?
Incidentally I also noted in Parser.jj that the new date and time functions
mentioned above are also handled seperately in JdbcFunctionCall which
implements JDBC function call syntax. This makes me unsure whether application
overrides provided in builtinFunctionCallMethods will take priority over these
Calcite definitions when they are invoked with JDBC syntax.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)