You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Volodymyr Vysotskyi (JIRA)" <ji...@apache.org> on 2017/11/02 12:46:01 UTC

[jira] [Created] (CALCITE-2029) Query with "is distinct from" condition in where clause fails with AssertionError: Cast for just nullability not allowed

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)