[
https://issues.apache.org/jira/browse/PHOENIX-3355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15603603#comment-15603603
]
Maryann Xue edited comment on PHOENIX-3355 at 10/24/16 11:45 PM:
-----------------------------------------------------------------
I just suggested using a temporary map and iterate the BUILT_IN_FUNCTION_MAP
just once. The temporary map will be somewhat mapping a function name to all
its available signatures.
So if we going to register COALESCE as an UDF, we'll have to register all its
overloads. Another option is to skip registering COALESCE since calcite has
support for it already. If you take a look at line 738 of CalciteUtils.java,
you can see there are a few built-in functions already handled by this
translation logic {{EXPRESSION_MAP.put(SqlKind.OTHER_FUNCTION, new
ExpressionFactory()}}. For each of our built-in function that's also supported
in Calcite, we'll have to decide whether to use the Calcite support or override
with our UDF registration. Basically we are free to choose, if it IS
overridable, and if the signatures are identical. But let's just have a static
list, say, in CalciteUtils, "TRANSLATED_BUILT_IN_FUNCTIONS", so that your UDF
registration logic can skip them. And maybe you can COALESCE in this list.
was (Author: maryannxue):
I just suggested using a temporary map and iterate the BUILT_IN_FUNCTION_MAP
just once. The temporary map will be somewhat mapping a function name to all
its available signatures.
So if we going to register COALESCE as an UDF, we'll have to register all its
overloads. Another option is to skip registering COALESCE since calcite has
support for it already. If you take a line 738 of CalciteUtils.java, you can
see there are a few built-in functions already handled by this translation
logic {{EXPRESSION_MAP.put(SqlKind.OTHER_FUNCTION, new ExpressionFactory()}}.
For each of our built-in function that's also supported in Calcite, we'll have
to decide whether to use the Calcite support or override with our UDF
registration. Basically we are free to choose, if it IS overridable, and if the
signatures are identical. But let's just have a static list, say, in
CalciteUtils, "TRANSLATED_BUILT_IN_FUNCTIONS", so that your UDF registration
logic can skip them. And maybe you can COALESCE in this list.
> Register Phoenix built-in functions as Calcite functions
> --------------------------------------------------------
>
> Key: PHOENIX-3355
> URL: https://issues.apache.org/jira/browse/PHOENIX-3355
> Project: Phoenix
> Issue Type: Bug
> Reporter: James Taylor
> Assignee: Eric Lomore
> Labels: calcite
> Attachments: PHOENIX-3355.wip
>
>
> We should register all Phoenix built-in functions that don't exist in Calcite.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)