[ https://issues.apache.org/jira/browse/CALCITE-2081?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16373345#comment-16373345 ]
Julian Hyde commented on CALCITE-2081: -------------------------------------- Reviewing [PR|https://github.com/apache/calcite/pull/634/commits/71d8256573b2d57180306658aab8764636d36338]. You have the right algorithm, but you're using {{EnumerableRelImplementor.map}} for a purpose it was not intended for. I think you should add a {{int windowCount}} field to {{EnumerableRelImplementor}}. Also, please move the test case from {{JdbcTest}} to {{winagg.iq}}. > 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 > Priority: Major > > 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 (v7.6.3#76005)