[
https://issues.apache.org/jira/browse/DRILL-4467?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jacques Nadeau resolved DRILL-4467.
-----------------------------------
Resolution: Fixed
Fixed with edea8b1cf4e5476d803e8b87c79e08e8c3263e04
> Invalid projection created using PrelUtil.getColumns
> ----------------------------------------------------
>
> Key: DRILL-4467
> URL: https://issues.apache.org/jira/browse/DRILL-4467
> Project: Apache Drill
> Issue Type: Bug
> Reporter: Laurent Goujon
> Assignee: Jacques Nadeau
> Priority: Critical
> Fix For: 1.6.0
>
>
> In {{DrillPushProjIntoScan}}, a new scan and a new projection are created
> using {{PrelUtil#getColumn(RelDataType, List<RexNode>)}}.
> The returned {{ProjectPushInfo}} instance has several fields, one of them is
> {{desiredFields}} which is the list of projected fields. There's one instance
> per {{RexNode}} but because instances were initially added to a set, they
> might not be in the same order as the order they were created.
> The issue happens in the following code:
> {code:java}
> List<RexNode> newProjects = Lists.newArrayList();
> for (RexNode n : proj.getChildExps()) {
> newProjects.add(n.accept(columnInfo.getInputRewriter()));
> }
> {code}
> This code creates a new list of projects out of the initial ones, by mapping
> the indices from the old projects to the new projects, but the indices of the
> new RexNode instances might be out of order (because of the ordering of
> desiredFields). And if indices are out of order, the check
> {{ProjectRemoveRule.isTrivial(newProj)}} will fail.
> My guess is that desiredFields ordering should be preserved when instances
> are added, to satisfy the condition above.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)