[
https://issues.apache.org/jira/browse/CALCITE-4530?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17302990#comment-17302990
]
Julian Hyde edited comment on CALCITE-4530 at 3/17/21, 12:24 AM:
-----------------------------------------------------------------
{{ElasticsearchAggregate}} does not support changing the input row type. To do
so, it would have to re-derive the types of the aggregate functions, which
might affect the output row type, and might not even be possible (I'm not sure
that all aggregate functions know how to recompute their type). There are
probably other similar RelNodes.
was (Author: julianhyde):
{{ElasticsearchAggregate}} does not support changing the input row type. To do
so, it would have to re-derive the types of the aggregate functions, which
might affect the
output row type, and might not even be possible (I'm not sure that all
aggregate functions know how to recompute their type).
> 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
> Attachments: copy-methods-084d608.zip
>
>
> 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)