Laurent Goujon created DRILL-4467:
-------------------------------------
Summary: 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: Laurent Goujon
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)