Luis Fernando Kauer created CALCITE-2081:
--------------------------------------------

             Summary: NPE in join of 2 subqueries using window functions
                 Key: CALCITE-2081
                 URL: https://issues.apache.org/jira/browse/CALCITE-2081
             Project: Calcite
          Issue Type: Bug
            Reporter: Luis Fernando Kauer
            Assignee: Julian Hyde


NPE when joining 2 subqueries that use window functions.

Testing with a new test case in JdbcTest:
{code}
  /** Tests for a join of subqueries using Window Functions */
  @Test public void testJoinWithWinAgg() {
    final String sql = "select a.*, b.r from\n"
        + "(select \"deptno\", first_value(\"empid\") over \n"
        + "(partition by \"deptno\" order by \"commission\") as r\n"
        + "from \"hr\".\"emps\") a\n"
        + "left join\n"
        + "(select \"deptno\", last_value(\"empid\") over \n"
        + "(partition by \"deptno\" order by \"commission\") as r\n"
        + "from \"hr\".\"emps\") b\n"
        + "on a.\"deptno\" = b.\"deptno\"";
        CalciteAssert.hr()
        .query(sql)
        .runs();
  }
{code}

Debugging this I found out that the NPE occurs at Expressions.declare (line 
2937) in initializer.getType() because initializer is null.  The statement is
{code}
int prevStart;
{code}
This statement does not have an initializer, but the method "declare" is trying 
to get the initializer's type, generating NPE.
This happens when joining 2 subqueries that use window functions because they 
end up using the same variables.  In BlockBuilder.append (line 124) it checks 
if the variable already exists and the problem starts there.




--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to