diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java index 68e37f8..4f760a2 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/optiq/reloperators/HiveProjectRel.java @@ -95,6 +95,14 @@ public static HiveProjectRel create(RelOptCluster cluster, RelNode child, List exps, + RelDataType rowType, RelTraitSet traitSet, final List collationList) { + return new HiveProjectRel(cluster, traitSet, child, exps, rowType, Flags.BOXED); + } + + /** * Creates a relational expression which projects the output fields of a * relational expression according to a partial mapping. * @@ -175,10 +183,12 @@ public void implement(Implementor implementor) { @Override public RelNode createProject(RelNode child, List childExprs, List fieldNames) { - RelNode project = HiveProjectRel.create(child, childExprs, fieldNames); + RelOptCluster cluster = child.getCluster(); + RelDataType rowType = RexUtil.createStructType(cluster.getTypeFactory(), childExprs, fieldNames); + RelNode project = HiveProjectRel.create(cluster, child, + childExprs, rowType, + child.getTraitSet(), Collections. emptyList()); - // Make sure extra traits are carried over from the original rel - project = RelOptRule.convert(project, child.getTraitSet()); return project; } }