Dmitry Sysolyatin created CALCITE-7268:
------------------------------------------

             Summary: SqlToRelConverter throws exception if lambda contains IN
                 Key: CALCITE-7268
                 URL: https://issues.apache.org/jira/browse/CALCITE-7268
             Project: Calcite
          Issue Type: Bug
          Components: core
    Affects Versions: 1.41.0
            Reporter: Dmitry Sysolyatin
            Assignee: Dmitry Sysolyatin


Test case [1]

{code}
  @Test void testLambdaExpressionWithIn() {
    final String sql = "select filter_function(ARRAY[1,2,3,4], (n) -> n IN 
(1,3))";
    fixture()
        .withFactory(c ->
            c.withOperatorTable(t -> MockSqlOperatorTable.standard().extend()))
        .withSql(sql)
        .ok();
  }
{code}

Exception:
{code}
while converting `N` = CAST(1 AS BIGINT)
java.lang.RuntimeException: while converting `N` = CAST(1 AS BIGINT)
        at 
org.apache.calcite.sql2rel.ReflectiveConvertletTable.lambda$registerNodeTypeMethod$1(ReflectiveConvertletTable.java:99)
        at 
org.apache.calcite.sql2rel.SqlNodeToRexConverterImpl.convertCall(SqlNodeToRexConverterImpl.java:62)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:5985)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.visit(SqlToRelConverter.java:5148)
        at org.apache.calcite.sql.SqlCall.accept(SqlCall.java:175)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter$Blackboard.convertExpression(SqlToRelConverter.java:5799)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.convertInToOr(SqlToRelConverter.java:1781)
        at 
org.apache.calcite.sql2rel.SqlToRelConverter.substituteSubQuery(SqlToRelConverter.java:1231)
{code}

The reason is that SqlToRelConverter tries to call substituteSubQuery on a 
Blackboard that doesn’t have the lambda parameters in scope. Instead, 
substituteSubQuery should be called on the lambda’s Blackboard [2]

[1] 
https://github.com/apache/calcite/commit/7d78da6a465d05a1e147291af20ee074bf814e88
[2] 
https://github.com/apache/calcite/blob/95350ed1a449bbb2f008fcf2b704544e7d95c410/core/src/main/java/org/apache/calcite/sql2rel/SqlToRelConverter.java#L2283



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to