Zhang Jingwang created DRILL-7715:
-------------------------------------
Summary: 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
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)