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

Steven Talbot updated CALCITE-4249:
-----------------------------------
    Description: 
The following test shows the bug if you put it in RelToSqlConverter
{code:java}
@Test void testJoinWithNotLikeConditionRel2Sql() {
  final Function<RelBuilder, RelNode> relFn = b -> b
      .scan("EMP")
      .scan("DEPT")
      .join(JoinRelType.LEFT,
          b.and(
              b.call(SqlStdOperatorTable.EQUALS,
                  b.field(2, 0, "DEPTNO"),
                  b.field(2, 1, "DEPTNO")),
              b.call(SqlStdOperatorTable.NOT,
                  b.call(SqlStdOperatorTable.LIKE,
                      b.field(2, 1, "DNAME"),
                      b.literal("ACCOUNTING_FOO"))
              )
          ))
      .build();
  final String expectedSql = "SELECT *\n"
      + "FROM \"scott\".\"EMP\"\n"
      + "LEFT JOIN \"scott\".\"DEPT\" "
      + "ON \"EMP\".\"DEPTNO\" = \"DEPT\".\"DEPTNO\" "
      + "AND \"DEPT\".\"DNAME\" NOT LIKE 'ACCOUNTING'";
  relFn(relFn).ok(expectedSql);
}
{code}
It blows up with the following stacktrace top:
{noformat}
java.lang.AssertionError: NOT(LIKE($9, 'ACCOUNTING_FOO'))
        at 
org.apache.calcite.rel.rel2sql.SqlImplementor.convertConditionToSqlNode(SqlImplementor.java:350)
        at 
org.apache.calcite.rel.rel2sql.SqlImplementor.convertConditionToSqlNode(SqlImplementor.java:286)
        at 
org.apache.calcite.rel.rel2sql.RelToSqlConverter.visit(RelToSqlConverter.java:213)
        at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:524)
        at 
org.apache.calcite.rel.rel2sql.RelToSqlConverter.dispatch(RelToSqlConverter.java:131)
        at 
org.apache.calcite.rel.rel2sql.RelToSqlConverter.visitInput(RelToSqlConverter.java:139){noformat}
 

  was:
The following test shows the bug if you put it in RelToSqlConverter
{code:java}
@Test void testJoinWithNotLikeConditionRel2Sql() {
  final Function<RelBuilder, RelNode> relFn = b -> b
      .scan("EMP")
      .scan("DEPT")
      .join(JoinRelType.LEFT,
          b.and(
              b.call(SqlStdOperatorTable.EQUALS,
                  b.field(2, 0, "DEPTNO"),
                  b.field(2, 1, "DEPTNO")),
              b.call(SqlStdOperatorTable.NOT,
                  b.call(SqlStdOperatorTable.LIKE,
                      b.field(2, 1, "DNAME"),
                      b.literal("ACCOUNTING_FOO"))
              )
          ))
      .build();
  final String expectedSql = "SELECT *\n"
      + "FROM \"scott\".\"EMP\"\n"
      + "LEFT JOIN \"scott\".\"DEPT\" "
      + "ON \"EMP\".\"DEPTNO\" = \"DEPT\".\"DEPTNO\" "
      + "AND \"DEPT\".\"DNAME\" NOT LIKE 'ACCOUNTING'";
  relFn(relFn).ok(expectedSql);
}
{code}
It blows up with the following stacktrace 
{noformat}
java.lang.AssertionError: NOT(LIKE($9, 'ACCOUNTING_FOO'))
        at 
org.apache.calcite.rel.rel2sql.SqlImplementor.convertConditionToSqlNode(SqlImplementor.java:350)
        at 
org.apache.calcite.rel.rel2sql.SqlImplementor.convertConditionToSqlNode(SqlImplementor.java:286)
        at 
org.apache.calcite.rel.rel2sql.RelToSqlConverter.visit(RelToSqlConverter.java:213)
        at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:524)
        at 
org.apache.calcite.rel.rel2sql.RelToSqlConverter.dispatch(RelToSqlConverter.java:131)
        at 
org.apache.calcite.rel.rel2sql.RelToSqlConverter.visitInput(RelToSqlConverter.java:139){noformat}
 


> Assertion error for NOT operator in join condition in Rel2SqlConverter
> ----------------------------------------------------------------------
>
>                 Key: CALCITE-4249
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4249
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Steven Talbot
>            Priority: Major
>
> The following test shows the bug if you put it in RelToSqlConverter
> {code:java}
> @Test void testJoinWithNotLikeConditionRel2Sql() {
>   final Function<RelBuilder, RelNode> relFn = b -> b
>       .scan("EMP")
>       .scan("DEPT")
>       .join(JoinRelType.LEFT,
>           b.and(
>               b.call(SqlStdOperatorTable.EQUALS,
>                   b.field(2, 0, "DEPTNO"),
>                   b.field(2, 1, "DEPTNO")),
>               b.call(SqlStdOperatorTable.NOT,
>                   b.call(SqlStdOperatorTable.LIKE,
>                       b.field(2, 1, "DNAME"),
>                       b.literal("ACCOUNTING_FOO"))
>               )
>           ))
>       .build();
>   final String expectedSql = "SELECT *\n"
>       + "FROM \"scott\".\"EMP\"\n"
>       + "LEFT JOIN \"scott\".\"DEPT\" "
>       + "ON \"EMP\".\"DEPTNO\" = \"DEPT\".\"DEPTNO\" "
>       + "AND \"DEPT\".\"DNAME\" NOT LIKE 'ACCOUNTING'";
>   relFn(relFn).ok(expectedSql);
> }
> {code}
> It blows up with the following stacktrace top:
> {noformat}
> java.lang.AssertionError: NOT(LIKE($9, 'ACCOUNTING_FOO'))
>         at 
> org.apache.calcite.rel.rel2sql.SqlImplementor.convertConditionToSqlNode(SqlImplementor.java:350)
>         at 
> org.apache.calcite.rel.rel2sql.SqlImplementor.convertConditionToSqlNode(SqlImplementor.java:286)
>         at 
> org.apache.calcite.rel.rel2sql.RelToSqlConverter.visit(RelToSqlConverter.java:213)
>         at org.apache.calcite.util.ReflectUtil$2.invoke(ReflectUtil.java:524)
>         at 
> org.apache.calcite.rel.rel2sql.RelToSqlConverter.dispatch(RelToSqlConverter.java:131)
>         at 
> org.apache.calcite.rel.rel2sql.RelToSqlConverter.visitInput(RelToSqlConverter.java:139){noformat}
>  



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to