pengzhiwei created CALCITE-2921:
-----------------------------------

             Summary: 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


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) Add a new SqlOperator like "NullifOperator" and disable the translation from 
nullif to case-when.

Any suggestion is welcomed,Thanks!



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

Reply via email to