You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "pengzhiwei (JIRA)" <ji...@apache.org> on 2019/03/19 12:01:00 UTC

[jira] [Comment Edited] (CALCITE-2921) nullif(null,y) throws exception in verification

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

pengzhiwei edited comment on CALCITE-2921 at 3/19/19 12:00 PM:
---------------------------------------------------------------

Hi [~julianhyde], I try to  make a pr to support null-literal in function call at [https://github.com/apache/calcite/pull/1117].

In this pr,I mapping the SqlTypeName#Null to a specific java class "Null" and allow null-literal matching any input type in the FamilyOperandTypeChecker. I works well in the test case.

Can you take a look and give some suggestions ?Thanks!

 

 


was (Author: pzw2018):
Hi [~julianhyde], I try to  make a pr to support null-literal in function call at [https://github.com/apache/calcite/pull/1117].

In this pr,I mapping the SqlTypeName#Null to a specific class "Null" and allow null-literal matching any input type in the FamilyOperandTypeChecker. I works well in the test case.

Can you take a look and give some suggestions ?Thanks!

 

 

> nullif(null,y)  throws exception in verification
> ------------------------------------------------
>
>                 Key: CALCITE-2921
>                 URL: https://issues.apache.org/jira/browse/CALCITE-2921
>             Project: Calcite
>          Issue Type: Bug
>          Components: core
>    Affects Versions: 1.18.0
>            Reporter: pengzhiwei
>            Assignee: pengzhiwei
>            Priority: Critical
>              Labels: pull-request-available
>          Time Spent: 10m
>  Remaining Estimate: 0h
>
> Currently calcite will translate "nullif(x,y)" to a case-when expression,just like "case when x = y then null else x".So when "x" is null literal,a exception throws out as follow:
> {code:java}
>  ELSE clause or at least one THEN clause must be non-NULL
> {code}
> I have test in mysql,"nullif(null,y) works well.So I think we should allow this usage of  "nullif".
> There are two ways to fix this issue:
> 1)  Skip the check for "foundNotNull" in SqlCaseOperator#checkOperandTypes:     
> {code:java}
> if (!foundNotNull) {
>   // according to the sql standard we can not have all of the THEN
>   // statements and the ELSE returning null
>   if (throwOnFailure) {
>     throw callBinding.newError(RESOURCE.mustNotNullInElse());
>   }
>   return false;
> }{code}
> However, as the comment says, we cannot have all of the THEN and ELSE returning null.
> 2) Disable the translation from nullif to case-when and keep "nullif" as it is.
> Any suggestion is welcomed,Thanks!



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)