[jira] [Updated] (CALCITE-4249) JDBC adapter cannot translate NOT LIKE in join condition

2020-09-17 Thread Julian Hyde (Jira)


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

Julian Hyde updated CALCITE-4249:
-
Description: 
JDBC adapter cannot translate NOT LIKE in join condition. Rel2SqlConverter 
throws assertion error for NOT operator in join condition.

The following test shows the bug if you put it in RelToSqlConverter
{code:java}
@Test void testJoinWithNotLikeConditionRel2Sql() {
  final Function 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 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}
 


> JDBC adapter cannot translate NOT LIKE in join condition
> 
>
> Key: CALCITE-4249
> URL: https://issues.apache.org/jira/browse/CALCITE-4249
> Project: Calcite
>  Issue Type: Bug
>Reporter: Steven Talbot
>Assignee: Julian Hyde
>Priority: Major
>
> JDBC adapter cannot translate NOT LIKE in join condition. Rel2SqlConverter 
> throws assertion error for NOT operator in join condition.
> The following test shows the bug if you put it in RelToSqlConverter
> {code:java}
> @Test void testJoinWithNotLikeConditionRel2Sql() {
>   final Function 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 

[jira] [Updated] (CALCITE-4249) JDBC adapter cannot translate NOT LIKE in join condition

2020-09-17 Thread Julian Hyde (Jira)


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

Julian Hyde updated CALCITE-4249:
-
Summary: JDBC adapter cannot translate NOT LIKE in join condition  (was: 
Assertion error for NOT operator in join condition in Rel2SqlConverter)

> JDBC adapter cannot translate NOT LIKE in join condition
> 
>
> Key: CALCITE-4249
> URL: https://issues.apache.org/jira/browse/CALCITE-4249
> Project: Calcite
>  Issue Type: Bug
>Reporter: Steven Talbot
>Assignee: Julian Hyde
>Priority: Major
>
> The following test shows the bug if you put it in RelToSqlConverter
> {code:java}
> @Test void testJoinWithNotLikeConditionRel2Sql() {
>   final Function 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)