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

[jira] [Resolved] (CALCITE-2029) Query with IS DISTINCT FROM condition in WHERE or JOIN clause fails with AssertionError: "Cast for just nullability not allowed"

     [ https://issues.apache.org/jira/browse/CALCITE-2029?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Julian Hyde resolved CALCITE-2029.
----------------------------------
       Resolution: Fixed
    Fix Version/s: 1.15.0

Fixed in http://git-wip-us.apache.org/repos/asf/calcite/commit/61f1258c; thanks for the PR, [~vvysotskyi]!

> Query with IS DISTINCT FROM condition in WHERE or JOIN 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
>             Fix For: 1.15.0
>
>
> 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)