[
https://issues.apache.org/jira/browse/CALCITE-7289?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18037944#comment-18037944
]
Mihai Budiu commented on CALCITE-7289:
--------------------------------------
I would try to write a SqlToRelConverterTest with this program as input.
> Select NULL subquery throwing exception
> ---------------------------------------
>
> Key: CALCITE-7289
> URL: https://issues.apache.org/jira/browse/CALCITE-7289
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 1.41.0
> Reporter: Steve Carlin
> Assignee: Mihai Budiu
> Priority: Major
>
> Ok, gonna ask for community help here while I continue to debug this, but
> lemme give the legwork I've done so far. [~mbudiu] , tagging you because git
> blame shows a commit you made as being part of this stack trace.
> The following query is failing in my environment:
> {code:java}
> SELECT 1 from mytbl WHERE NULL IN (SELECT null){code}
> The relevant part of my stack trace is here:
>
> {code:java}
> I20251112 17:02:52.111802 2311327 LogUtil.java:47]
> 4a4ec6519f2d1bff:86f4b29300000000] [Plan after conversion from Abstract
> Syntax Tree]
> LogicalProject(EXPR$0=[1:TINYINT]), id = 6
> LogicalFilter(condition=[IN(null:NULL, {
> LogicalValues(tuples=[[{ null }]])
> })]), id = 4
> LogicalTableScan(table=[[functional, alltypestiny]]), id = 1
> I20251112 17:02:52.189169 2311327 jni-util.cc:321]
> 4a4ec6519f2d1bff:86f4b29300000000] java.lang.AssertionError: Comparison with
> NULL in pulledUpPredicates
> at org.apache.calcite.util.Litmus.lambda$static$0(Litmus.java:31)
> at org.apache.calcite.util.Litmus.check(Litmus.java:76)
> at
> org.apache.calcite.plan.RelOptPredicateList.<init>(RelOptPredicateList.java:128)
> at
> org.apache.calcite.plan.RelOptPredicateList.of(RelOptPredicateList.java:206)
> at
> org.apache.calcite.plan.RelOptPredicateList.of(RelOptPredicateList.java:159)
> at
> org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:325)
> at
> org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates_$(Unknown
> Source)
> at
> org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates(Unknown
> Source)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:914)
> at
> org.apache.calcite.rel.metadata.RelMdPredicates.getPredicates(RelMdPredicates.java:193)
> at
> org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates_$(Unknown
> Source)
> at
> org.apache.calcite.rel.metadata.janino.GeneratedMetadata_PredicatesHandler.getPredicates(Unknown
> Source)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.getPulledUpPredicates(RelMetadataQuery.java:914)
> at
> org.apache.calcite.rel.metadata.RelMdColumnUniqueness.decorateWithConstantColumnsFromPredicates(RelMdColumnUniqueness.java:516)
> at
> org.apache.calcite.rel.metadata.RelMdColumnUniqueness.areColumnsUnique(RelMdColumnUniqueness.java:232)
> at
> org.apache.calcite.rel.metadata.janino.GeneratedMetadata_ColumnUniquenessHandler.areColumnsUnique_$(Unknown
> Source)
> at
> org.apache.calcite.rel.metadata.janino.GeneratedMetadata_ColumnUniquenessHandler.areColumnsUnique(Unknown
> Source)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.areColumnsUnique(RelMetadataQuery.java:615)
> at
> org.apache.calcite.rel.metadata.RelMetadataQuery.areColumnsUnique(RelMetadataQuery.java:595)
> at
> org.apache.calcite.tools.RelBuilder.alreadyUnique(RelBuilder.java:2710)
> at
> org.apache.calcite.tools.RelBuilder.aggregate_(RelBuilder.java:2495)
> at org.apache.calcite.tools.RelBuilder.distinct(RelBuilder.java:2441)
> at
> org.apache.calcite.rel.rules.SubQueryRemoveRule.rewriteIn(SubQueryRemoveRule.java:684)
> {code}
>
> In terms of due diligence I've done so far: I am not very familiar with the
> Calcite build environment and have only used gradlew to build a couple of
> times, so I'm just feeling my way around here. But in the meantime, I did
> some unorthodox ways of trying to reproduce and failed.
> I added this to RelOptRulesTest:
>
> {code:java}
> + /** Test case for testing type created by SubQueryRemoveRule: an
> + * ANY sub-query is non-nullable therefore plan should have cast. */
> + @Test void testSJC() {
> + final String sql = "select 1 from emp where NULL in (SELECT NULL)\n";
> + sql(sql).withSubQueryRules().withLateDecorrelate(true).check();
> + }
> +
> {code}
>
> But this does not reproduce the problem. From my really hacky weird
> debugging, the best I can tell is that maybe it uses a different RelBuilder
> when running so it doesn't come anywhere near the code I'm trying to get to
> crash? So I'm not sure how to reproduce it yet. Still working on it.
> Thanks!
--
This message was sent by Atlassian Jira
(v8.20.10#820010)