Volodymyr Vysotskyi created CALCITE-2029:
--------------------------------------------

             Summary: Query with "is distinct from" condition in where clause 
fails with AssertionError: Cast for just nullability not allowed
                 Key: CALCITE-2029
                 URL: https://issues.apache.org/jira/browse/CALCITE-2029
             Project: Calcite
          Issue Type: Bug
          Components: core
            Reporter: Volodymyr Vysotskyi
            Assignee: Julian Hyde
            Priority: Major


Query
{code:sql}
select * from "foodmart"."employee" as e1 where e1."last_name" is distinct from 
e1."last_name"
{code}
fails with error:
{noformat}
java.lang.AssertionError: Cast for just nullability not allowed

        at org.apache.calcite.util.Litmus$1.fail(Litmus.java:31)
        at org.apache.calcite.rel.core.Filter.isValid(Filter.java:116)
        at 
org.apache.calcite.rel.AbstractRelNode.onRegister(AbstractRelNode.java:353)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1495)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:863)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:883)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:101)
        at 
org.apache.calcite.rel.AbstractRelNode.onRegister(AbstractRelNode.java:336)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1495)
        at 
org.apache.calcite.plan.volcano.VolcanoPlanner.setRoot(VolcanoPlanner.java:308)
        at org.apache.calcite.tools.Programs$5.run(Programs.java:309)
        at 
org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:387)
        at org.apache.calcite.prepare.Prepare.optimize(Prepare.java:187)
        at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:318)
        at org.apache.calcite.prepare.Prepare.prepareSql(Prepare.java:229)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare2_(CalcitePrepareImpl.java:786)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepare_(CalcitePrepareImpl.java:640)
        at 
org.apache.calcite.prepare.CalcitePrepareImpl.prepareSql(CalcitePrepareImpl.java:610)
        at 
org.apache.calcite.jdbc.CalciteConnectionImpl.parseQuery(CalciteConnectionImpl.java:221)
        at 
org.apache.calcite.jdbc.CalciteMetaImpl.prepareAndExecute(CalciteMetaImpl.java:603)
        at 
org.apache.calcite.avatica.AvaticaConnection.prepareAndExecuteInternal(AvaticaConnection.java:638)
        at 
org.apache.calcite.avatica.AvaticaStatement.executeInternal(AvaticaStatement.java:149)
        at 
org.apache.calcite.avatica.AvaticaStatement.executeQuery(AvaticaStatement.java:218)
        at 
org.apache.calcite.test.CalciteAssert.assertQuery(CalciteAssert.java:564)
        at 
org.apache.calcite.test.CalciteAssert$AssertQuery.runs(CalciteAssert.java:1397)
        at 
org.apache.calcite.test.JdbcTest.testMixedEqualAndIsNotDistinctJoin(JdbcTest.java:1593)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:606)
        at 
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
        at 
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
        at 
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
        at 
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
        at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
        at 
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
        at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
        at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
        at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
        at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
        at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
        at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
        at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
        at 
com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
        at 
com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
        at 
com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
        at 
com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
{noformat}

Method {{RelOptUtil.isDistinctFrom()}} makes an additional cast to NOT NULL 
BOOLEAN during the creation of the condition. This condition is not simplified 
before the time when it is passed into the filter constructor, therefore method 
{{Filter.isValid()}} throws AssertionError.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to