[ 
https://issues.apache.org/jira/browse/CALCITE-3877?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17308584#comment-17308584
 ] 

Stamatis Zampetakis commented on CALCITE-3877:
----------------------------------------------

[~julianhyde], I totally understand that unbounded ROWS and RANGE are 
functionally equivalent. My previous comment focuses on the translation from 
Calcite to Physical-X.  Let's assume that the translator never had logic to 
support window types with RANGE although they do have the necessary pieces in 
place to treat ROWS. Before upgrading to calcite 1.23.0 their Calcite plan 
never had RANGE in it so there was no problem. After the upgrade unbounded ROWS 
is turned into RANGE so the translator fails to process the new information. In 
order to make the translator work again we would need to detect the case of 
unbounded RANGE and map it differently and this is what I find a bit 
unnecessary.

To create an analogy it is possible to have a COALESCE operator in the plan 
even if it is possible to express the same using CASE. Certainly we have 
mechanisms to transform the former in the latter but we don't have assertions 
in RexCall that forbid the use of COALESCE; it would be very restrictive. 

> In RexWindow, make fields upperBound and lowerBound not-nullable
> ----------------------------------------------------------------
>
>                 Key: CALCITE-3877
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3877
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Steven Talbot
>            Assignee: Julian Hyde
>            Priority: Major
>             Fix For: 1.23.0
>
>
> Null lowerBound/upperBond in RexWindow causes NPE in RexShuttle. Here's a 
> test that can be dropped into RexShuttleTest.java: 
> {code:java}
> @Test public void handlesNullBoundsInRexWindow() {
>   final RelBuilder builder = 
> RelBuilder.create(RelBuilderTest.config().build());
>   final RexNode over = builder.getRexBuilder().makeOver(
>       builder.getTypeFactory().createSqlType(SqlTypeName.BIGINT),
>       SqlStdOperatorTable.ROW_NUMBER,
>       ImmutableList.of(),
>       ImmutableList.of(),
>       ImmutableList.of(),
>       null,
>       null,
>       true,
>       true,
>       true,
>       true,
>        true
>   );
>   assertThat(over.accept(new RexShuttle()), is(over));
> }
> {code}
> That will raise an NPE. Fix is to handle NULLs when doing the child accept on 
> the RexWindowBound[s] in RexShuttle.visitWindow.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to