You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@calcite.apache.org by "Vladimir Ozerov (Jira)" <ji...@apache.org> on 2022/06/01 14:37:00 UTC

[jira] [Created] (CALCITE-5175) IndexOutOfBoundsException when query has IN clause on top of the view column

Vladimir Ozerov created CALCITE-5175:
----------------------------------------

             Summary: IndexOutOfBoundsException when query has IN clause on top of the view column
                 Key: CALCITE-5175
                 URL: https://issues.apache.org/jira/browse/CALCITE-5175
             Project: Calcite
          Issue Type: Improvement
          Components: core
            Reporter: Vladimir Ozerov


A query may contain views. Currently, views are processed using separate validator/converter instances. Both validator and sql-to-rel-converter are stateful and it appears that their state might be important for "parent" validator/converter pair. 

To reproduce the problem, please add the code below to the {{PlannerTest}}. The query with {{IN}} would fail with {{IndexOutOfBoundsException}} because we treat the {{IN}} clause as a subquery that requires access to the context of the child view, which is not propagated when using separate validator/converter instances for views.

{code}
@Test void testViewnViewWithIn() throws Exception {
    final String sql = "select (dname in ('a', 'b')), count(deptno) FROM dept30 group by (dname in ('a', 'b'))";
    final String expected = "LogicalProject(DEPTNO=[$0], DNAME=[$1])\n"
        + "  LogicalValues("
        + "tuples=[[{ 10, 'Sales      ' },"
        + " { 20, 'Marketing  ' },"
        + " { 30, 'Engineering' },"
        + " { 40, 'Empty      ' }]])\n";
    checkView(sql, is(expected));
  }

  @Test void testViewnViewWithOr() throws Exception {
    final String sql = "select (dname = 'a' or dname = 'b'), count(deptno) FROM dept30 group by (dname = 'a' or dname = 'b')";
    final String expected = "LogicalProject(DEPTNO=[$0], DNAME=[$1])\n"
        + "  LogicalValues("
        + "tuples=[[{ 10, 'Sales      ' },"
        + " { 20, 'Marketing  ' },"
        + " { 30, 'Engineering' },"
        + " { 40, 'Empty      ' }]])\n";
    checkView(sql, is(expected));
  }
{code}



--
This message was sent by Atlassian Jira
(v8.20.7#820007)