[
https://issues.apache.org/jira/browse/CALCITE-4545?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17306859#comment-17306859
]
Danny Chen commented on CALCITE-4545:
-------------------------------------
For the old version parser before CALCITE-2282, the parser did can identifies
some builtin no-arg functions, but only for operators from
{{SqlStdOperatorTable}}.
When unparsing a {{SqlIdentifier}}, we can decide whether the {{SqlIdentifier}}
is simple and whether it is quoted in the original SQL statement, one way to
fix is that we never apply the quotes for a simple {{SqlIdentifier}} if it is
not quoted in the original SQL, because that may changes the semantics based on
the fact that a quoted {{SqlIdentifier}}
can never parse to a function.
> Unparse a new function of FUNCTION_ID syntax will be quoted
> -----------------------------------------------------------
>
> Key: CALCITE-4545
> URL: https://issues.apache.org/jira/browse/CALCITE-4545
> Project: Calcite
> Issue Type: Bug
> Components: core
> Reporter: Jark Wu
> Priority: Major
> Fix For: 1.26.0, 1.27.0
>
>
> In Flink, we would like to introduce some new functions of FUNCTION_ID
> syntax, e.g. {{CURRENT_ROW_TIMESTAMP}}. However, when unparsing this new
> function, we will get the quoted string {{`CURRENT_ROW_TIMESTAMP`}} which
> can't be executed anymore, because Calcite think it is a column reference.
> The root cause of it is {{org.apache.calcite.sql.SqlIdentifier#unparse}}
> calls {{org.apache.calcite.sql.SqlUtil#unparseSqlIdentifierSyntax}} where it
> uses a static Calcite {{SqlStdOperatorTable.instance()}} instead of a
> user-defined operator table. Therefore, it thinks it's not a sql function and
> unparse it with quotes.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)