[
https://issues.apache.org/jira/browse/DRILL-6815?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Vitalii Diravka updated DRILL-6815:
-----------------------------------
Fix Version/s: Future
> Improve code generation to handle functions with NullHandling.NULL_IF_NULL
> better
> ---------------------------------------------------------------------------------
>
> Key: DRILL-6815
> URL: https://issues.apache.org/jira/browse/DRILL-6815
> Project: Apache Drill
> Issue Type: Improvement
> Components: Execution - Codegen
> Reporter: Bohdan Kazydub
> Priority: Minor
> Fix For: Future
>
>
> If a (simple) function is declared with NULL_IF_NULL null handling strategy
> (`nulls = NullHandling.NULL_IF_NULL`) there is a additional code generated
> which checks if any of the inputs is NULL (not set). In case if there is,
> output is set to be null otherwise function's code is executed and at the end
> output value is marked as set in case if ANY of the inputs is OPTIONAL (see
> https://github.com/apache/drill/blob/8edeb49873d1a1710cfe28e0b49364d07eb1aef4/exec/java-exec/src/main/java/org/apache/drill/exec/expr/fn/DrillSimpleFuncHolder.java#L143).
> The problem is, this behavior makes it impossible to make output value NULL
> from within function's evaluation body. Which may prove useful in certain
> situations, e.g. when input is an empty string and output should be NULL in
> the case etc. Sometimes it may result in creation of two separate functions
> with NullHanling.INTERNAL (one for OPTIONAL and one for REQUIRED inputs)
> instead of one with NULL_IF_NULL. It does not follow a Principle of Least
> Astonishment as effectively it behaves more like "null if and only if null"
> and documentation for NULL_IF_NULL is as follows:
> {code}
> enum NullHandling {
> ...
> /**
> * Null output if any null input:
> * Indicates that a method's associated logical operation returns NULL if
> * either input is NULL, and therefore that the method must not be called
> * with null inputs. (The calling framework must handle NULLs.)
> */
> NULL_IF_NULL
> }
> {code}
> It looks as if this behavior was not intended.
> Intent of this improvement is to allow output NULL values based on function's
> eval() method when NULL_IF_NULL null handling strategy is chosen.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)