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

Leonid Chistov updated CALCITE-5394:
------------------------------------
    Description: 
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.

  was:
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.

 


> 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
>            Priority: Minor
>
> 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)

Reply via email to