[ 
https://issues.apache.org/jira/browse/PHOENIX-3355?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15603343#comment-15603343
 ] 

Eric Lomore commented on PHOENIX-3355:
--------------------------------------

[~maryannxue] thanks for the feedback!

For 2. I think I might have miscommunicated the problem a bit. While calcite 
does support default values that isn't the issue I'm facing.The 
BUILT_IN_FUNCTION_MAP in phoenix elects to store every possible signature of 
each function. When registering builtins, as you noted, Calcite wants only the 
original declaration, the one saying 'FuncTest(VARCHAR var1, VARCHAR var2 
(default = null), DATE date (default = TODAY()))'. But in the function map we 
have 3 simplified versions of that function, with 3, 2, and 1 args. Getting the 
signature with 3 arguments is expensive on processing time because it would 
have to do a lengthy iteration to be sure the base signature is found. This 
example method helps demonstrate what I mean:

{code}
    public static List<BuiltInFunctionInfo> getBaseFunction(String 
normalizedName) {
        initBuiltInFunctionMap();
        List<BuiltInFunctionInfo> infos = Lists.newArrayList();
        while(!baseFunction) { // numArgs would be incremented here
            BuiltInFunctionInfo
                    info =
                    BUILT_IN_FUNCTION_MAP.get(new 
BuiltInFunctionKey(normalizedName, numArgs));
            if (info.isBaseFunction()) {
                return info;
            }
        }
        throw new RuntimeException("Couldn't find the base signature for 
builtin function");
    }
{code}

This points me to the tradeoff I was discussing,
- We could do this workaround, but I'm very hesitant
- Could create another function map, only with the largest declaration.
- Could go with the approach in the patch I submitted originally. There's some 
degree of code duplication but it skips over these issues.

For 3. I'm not sure which calcite mechanism you and [~jamestaylor] are 
referring to. I have mulled over the ways we could adjust 
PhoenixScalarFunction.getReturnType(RelDataTypeFactory) but 
PhoenixScalarFunction never sees the input parameters so I think some changes 
would have to be done upstream of this. Will keep exploring, but let me know if 
you have any thoughts!

> 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)

Reply via email to