[ 
https://issues.apache.org/jira/browse/DRILL-7715?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Zhang Jingwang updated DRILL-7715:
----------------------------------
    Priority: Minor  (was: Major)

> SYSTEM ERROR: CompileException: Line 87, Column 32: Expression "right.end" is 
> not an rvalue
> -------------------------------------------------------------------------------------------
>
>                 Key: DRILL-7715
>                 URL: https://issues.apache.org/jira/browse/DRILL-7715
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Execution - Codegen, Functions - Drill
>    Affects Versions: 1.17.0
>            Reporter: Zhang Jingwang
>            Priority: Minor
>
> Reproduce by:
> > select to_date('2019-01-12', `expr$0`) from (values ('yyyy-mm-dd'));
> Error: SYSTEM ERROR: CompileException: Line 87, Column 32: Expression 
> "right.end" is not an rvalue
>  
> I am deeply confused by the assumption of the UDF framework. Take simple 
> functions for example, it has 'setup()' and 'eval()' methods. It seems that 
> 'setup()' is meant to handle some immutable input and state across the entire 
> table processing, and 'eval()' to handle state/output related to each row.
> However there are several problems:
>  # The codegen would only generate argument reference for 'setup()' if the 
> argument is a Constant (a runtime check). However if this is the case, then 
> the check should not be a runtime check, it should be an annotation such as 
> @Param(constant=true). Otherwise when users pass in a column reference 
> instead of a constant, the above error occurs.
>  # a NULL_IF_NULL simple functions could leave the null handling to the 
> framework, so that it can focus on the situation where arguments are 
> non-null. However the null handling code covers only 'eval()' function, it 
> does not cover the 'setup()' function. Which might lead to problem when the 
> argument is a constant OPTIONAL type (though it seems odd, it's possible when 
> using a CASE WHEN expression)
>  # UDF with Nullable parameters should be able to accept arguments of 
> REQUIRED type. However current code of function resolving does not support 
> such cases.
> Could someone please share more information about the UDF framework and the 
> future development direction of it? Such as:
>  # What's the purpose of the 'setup()' method, and should it refer to 
> non-constant parameters?
>  # Should a REQUIRED argument be accepted as a OPTIONAL parameter?
> Thank you very much.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to