You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Rui Wang (Jira)" <ji...@apache.org> on 2019/11/18 18:28:00 UTC

[jira] [Comment Edited] (CALCITE-3513) Unify TableFunction implementor's NullPolicy and its beheavior

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

Rui Wang edited comment on CALCITE-3513 at 11/18/19 6:27 PM:
-------------------------------------------------------------

Agree with your analysis. Not sure what is the right fix though, an alternative idea is make the default value not null at: https://github.com/apache/calcite/blob/master/linq4j/src/main/java/org/apache/calcite/linq4j/function/Parameter.java#L83.

Basically it seems more natural to have a "native" default value for types. E.g. "" for string.


was (Author: amaliujia):
Agree your analysis. Not sure what is the right fix though, an alternative idea is make the default value not null at: https://github.com/apache/calcite/blob/master/linq4j/src/main/java/org/apache/calcite/linq4j/function/Parameter.java#L83.

Basically it seems more natural to have a "native" default value for types. E.g. "" for string.

> Unify TableFunction implementor's NullPolicy and its beheavior
> --------------------------------------------------------------
>
>                 Key: CALCITE-3513
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3513
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.21.0
>            Reporter: Feng Zhu
>            Assignee: Feng Zhu
>            Priority: Major
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> *Example:* TableFunctionTest#_testMultipleScannableTableFunctionWithNamedParameters_
> {code:java}
> SQL3:
> select * from table("s"."Maze"(HEIGHT => 3, WIDTH => 5){code}
> *RelNode:*
> {code:java}
> EnumerableTableFunctionScan(invocation=[Maze(5, 3, DEFAULT())], rowType=[RecordType(VARCHAR(12) S)], elementType=[class [Ljava.lang.Object;]){code}
> *Code:*
> {code:java}
> public org.apache.calcite.linq4j.Enumerable bind(final org.apache.calcite.DataContext root) {
>  return org.apache.calcite.runtime.Enumerables.slice0(org.apache.calcite.util.Smalls.MazeTable.generate2(5, 3, null).scan(root));
> }{code}
> *Inconsistency:*
> Current now, _*TableFunctionImpl*_ creats its implementor with _*NullPolicy.ANY*_. If we follow the NullPolicy, it will generate null, rather than MazeTable.generate2(5, 3, null)
> It is not consistent with its definition.
> {code:java}
> /** If any of the arguments are null, return null. */
>  ANY{code}
> *Root Cause:*
> The issue is covered due to current codegen's mechanism, which combines a mutable states (_*NullAs*_) and *_NullPolicy_* together to determine the semantics for null checking.
> The implementation for example query actually do nothing about arguments' null checking.
>   We can ignore this minor case at the moment, but the inconsistency prevents further optimizations. However, under current codegen implementation, I failed to figure out a test case to trigger the problem.



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