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

Alessandro Solimando edited comment on CALCITE-6824 at 2/13/25 7:25 AM:
------------------------------------------------------------------------

[~suibianwanwan33], as a rule of thumb, if the ticket is unassigned it means 
it's up for grabs, you can self-assign it and people will know you are working 
on it (don't forget to mark it as "in progress" too, to indicate that you are 
still looking into that, and mark it again as "open" in case you stop working 
on it for a longer time).

If you lack permissions to self-assign tickets, please do let us know, I am 
assigning this to you for now.

Is "JOIN_SUB_QUERY_TO_CORRELATE" needed for the repro to be minimal?


was (Author: asolimando):
[~suibianwanwan33], as a rule of thumb, if the ticket is unassigned it means 
it's up for grabs, you can self-assign it and people will know you are working 
on it. If you lack permissions to do that, please let us know, I am assigning 
this to you.

Is "JOIN_SUB_QUERY_TO_CORRELATE" needed for the repro to be minimal?

> FieldTrimmer corrupts plan in query that compares two BOOLEAN subqueries
> ------------------------------------------------------------------------
>
>                 Key: CALCITE-6824
>                 URL: https://issues.apache.org/jira/browse/CALCITE-6824
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Julian Hyde
>            Assignee: suibianwanwan
>            Priority: Major
>
> Consider a query that asks whether a BOOLEAN value generated by one subquery 
> is in the result set produced by another subquery. This is valid unless you 
> think subqueries should not be allowed to return BOOLEAN values. 
> {noformat}
> SELECT empno
> FROM emp
> WHERE (empno NOT IN (SELECT deptno FROM dept))
>    IN (SELECT deptno = 0 FROM dept)
> {noformat}
> During planning an AssertionError occurs. I believe this occurs just after 
> {{Programs.TrimFieldsProgram}} has been invoked.
> {noformat}
> java.lang.AssertionError: type mismatch:
> ref:
> SMALLINT NOT NULL
> input:
> BOOLEAN NOT NULL
>       at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
>       at 
> org.apache.calcite.plan.RelOptUtil.eqUpToNullability(RelOptUtil.java:2261)
>       at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:131)
>       at org.apache.calcite.rex.RexChecker.visitInputRef(RexChecker.java:62)
>       at org.apache.calcite.rex.RexInputRef.accept(RexInputRef.java:125)
>       at org.apache.calcite.rex.RexChecker.visitCall(RexChecker.java:148)
>       at org.apache.calcite.rex.RexChecker.visitCall(RexChecker.java:62)
>       at org.apache.calcite.rex.RexCall.accept(RexCall.java:208)
>       at org.apache.calcite.rel.core.Join.isValid(Join.java:178)
>       at 
> org.apache.calcite.rel.AbstractRelNode.onRegister(AbstractRelNode.java:287)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1289)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:600)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:615)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:97)
>       at 
> org.apache.calcite.rel.AbstractRelNode.onRegister(AbstractRelNode.java:274)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1289)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.register(VolcanoPlanner.java:600)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:615)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.ensureRegistered(VolcanoPlanner.java:97)
>       at 
> org.apache.calcite.rel.AbstractRelNode.onRegister(AbstractRelNode.java:274)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.registerImpl(VolcanoPlanner.java:1289)
>       at 
> org.apache.calcite.plan.volcano.VolcanoPlanner.setRoot(VolcanoPlanner.java:276)
>       at 
> org.apache.calcite.tools.Programs.lambda$standard$4(Programs.java:298)
>       at 
> org.apache.calcite.tools.Programs$SequenceProgram.run(Programs.java:373)
>       at org.apache.calcite.prepare.Prepare.optimize(Prepare.java:178)
> {noformat}
> The following patch to JdbcTest reproduces; also 
> [RelToSqlConverterTest.testMissingParenthesesWithSubquery3|https://github.com/apache/calcite/blob/f1c370a0cb57675b6e5a442b3d98e29d75a64043/core/src/test/java/org/apache/calcite/rel/rel2sql/RelToSqlConverterTest.java#L1544]:
> {noformat}
> diff --git a/core/src/test/java/org/apache/calcite/test/JdbcTest.java 
> b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
> index 053d7595e..975e67f88 100644
> --- a/core/src/test/java/org/apache/calcite/test/JdbcTest.java
> +++ b/core/src/test/java/org/apache/calcite/test/JdbcTest.java
> @@ -6955,6 +6955,17 @@ private void checkGetTimestamp(Connection con) throws 
> SQLException {
>          .returnsUnordered("EMPNO=7876", "EMPNO=7499", "EMPNO=7698");
>    }
>  
> +  @Test void testFoo() {
> +    final String sql = "SELECT empno\n"
> +        + "FROM emp\n"
> +        + "WHERE (empno NOT IN (SELECT deptno FROM dept))\n"
> +        + " IN (SELECT deptno = 0 FROM dept)";
> +    CalciteAssert.that()
> +        .with(CalciteAssert.Config.JDBC_SCOTT)
> +        .query(sql)
> +        .returnsUnordered("EMPNO=7876", "EMPNO=7499", "EMPNO=7698");
> +  }
> +
>    @Test void testTimestampEqualsComparison() {
>      CalciteAssert.that()
>          .query("select time0 = time1, time0 <> time1"
> {noformat}



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to