[
https://issues.apache.org/jira/browse/CALCITE-4530?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17299433#comment-17299433
]
Thomas Rebele commented on CALCITE-4530:
----------------------------------------
Sorry for the imprecise wording. The old inputs have been replaced by new
inputs, where some fields have changed their type. Only fields that are not
used by the EnumerableWindow have changed, so the implementation of the window
is not affected.
> EnumerableWindow.copy(...) should adapt the rowType
> ---------------------------------------------------
>
> Key: CALCITE-4530
> URL: https://issues.apache.org/jira/browse/CALCITE-4530
> Project: Calcite
> Issue Type: Bug
> Affects Versions: 1.26.0
> Reporter: Thomas Rebele
> Priority: Minor
>
> The method EnumerableWindow.copy(RelTraitSet, List<RelNode>) copies the row
> type. However, if some input fields have changed their type, then the row
> type of the new EnumerableWindow instance will be wrong.
> The following snippet provides a workaround:
> {code:java}
> private RelNode fixEnumerableWindowType(EnumerableWindow win, List<RelNode>
> newInputs)
> {
> RelDataType winType = win.getRowType();
> RelDataType newType = newInputs.get(0).getRowType();
> RelDataTypeFactory.Builder typeBuilder = new
> RelDataTypeFactory.Builder(win.getCluster().getTypeFactory());
> typeBuilder.addAll(newType.getFieldList());
> for (int i = newType.getFieldCount(); i <
> win.getRowType().getFieldCount(); i++)
> {
> typeBuilder.add(winType.getFieldList().get(i));
> }
> return RelBridge.createWindow(win.getCluster(), win.getTraitSet(),
> newInputs.get(0), win.constants,
> typeBuilder.build(), win.groups);
> }
> {code}
> (The implementation of RelBridge.createWindow is trivial).
--
This message was sent by Atlassian Jira
(v8.3.4#803005)