You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@calcite.apache.org by "Ruben Q L (Jira)" <ji...@apache.org> on 2022/12/12 09:48:00 UTC
[jira] [Resolved] (CALCITE-5394) RelToSql converter fails when semi-join is under a join node
[ https://issues.apache.org/jira/browse/CALCITE-5394?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Ruben Q L resolved CALCITE-5394.
--------------------------------
Resolution: Fixed
Fixed via https://github.com/apache/calcite/commit/6bea101b664b93d42f171d079a60a67dbbc22607
Thanks [~lchistov1987] for the ticket and [~jiajunbernoulli] for the PR!
> RelToSql converter fails when semi-join is under a join node
> ------------------------------------------------------------
>
> Key: CALCITE-5394
> URL: https://issues.apache.org/jira/browse/CALCITE-5394
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 1.32.0
> Reporter: Leonid Chistov
> Assignee: Jiajun Xie
> Priority: Minor
> Labels: pull-request-available
> Fix For: 1.33.0
>
> Time Spent: 0.5h
> Remaining Estimate: 0h
>
> The following test case would fail if added to RelToSqlConverterTest.java:
> {code:java}
> @Test void testSemiJoinUnderJoin() {
> final RelBuilder builder = relBuilder();
> final RelNode base = builder
> .scan("EMP")
> .scan("EMP")
> .join(
> JoinRelType.SEMI, builder.equals(
> builder.field(2, 0, "EMPNO"),
> builder.field(2, 1, "EMPNO")))
> .build();
> final RelNode root = builder
> .scan("DEPT")
> .push(base)
> .join(
> JoinRelType.INNER, builder.equals(
> builder.field(2, 1, "DEPTNO"),
> builder.field(2, 0, "DEPTNO")))
> .project(builder.field("DEPTNO"))
> .build();
> toSql(root);
> } {code}
> The exception is:
> {code:java}
> alias
> java.lang.NullPointerException: alias
> at java.base/java.util.Objects.requireNonNull(Objects.java:233)
> at org.apache.calcite.rel.rel2sql.SqlImplementor.collectAliases(SqlImplementor.java:493)
> at org.apache.calcite.rel.rel2sql.SqlImplementor.collectAliases(SqlImplementor.java:491)
> at org.apache.calcite.rel.rel2sql.SqlImplementor.result(SqlImplementor.java:476)
> at org.apache.calcite.rel.rel2sql.RelToSqlConverter.visit(RelToSqlConverter.java:246) {code}
> Cause of failure seems to be that `RelToSqlConverter::visitAntiOrSemiJoin` rewrites semi-join as select with no associated alias.
--
This message was sent by Atlassian Jira
(v8.20.10#820010)