[ 
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)

Reply via email to