diff --git a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRelFieldTrimmer.java b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRelFieldTrimmer.java index f677f68..9f7f8a4 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRelFieldTrimmer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/rules/HiveRelFieldTrimmer.java @@ -42,6 +42,8 @@ import org.apache.commons.logging.LogFactory; import org.apache.hadoop.hive.ql.optimizer.calcite.reloperators.HiveMultiJoin; +import com.google.common.collect.Lists; + public class HiveRelFieldTrimmer extends RelFieldTrimmer { protected static final Log LOG = LogFactory.getLog(HiveRelFieldTrimmer.class); @@ -61,6 +63,7 @@ public TrimResult trimFields( Set extraFields) { final int fieldCount = join.getRowType().getFieldCount(); final RexNode conditionExpr = join.getCondition(); + final List joinFilters = join.getJoinFilters(); // Add in fields used in the condition. final Set combinedInputExtraFields = @@ -131,6 +134,12 @@ public TrimResult trimFields( mapping, newInputs.toArray(new RelNode[newInputs.size()])); RexNode newConditionExpr = conditionExpr.accept(shuttle); + List newJoinFilters = Lists.newArrayList(); + + for (RexNode joinFilter : joinFilters) { + newJoinFilters.add(joinFilter.accept(shuttle)); + } + final RelDataType newRowType = RelOptUtil.permute(join.getCluster().getTypeFactory(), join.getRowType(), mapping); final RelNode newJoin = new HiveMultiJoin(join.getCluster(), @@ -139,7 +148,7 @@ public TrimResult trimFields( newRowType, join.getJoinInputs(), join.getJoinTypes(), - join.getJoinFilters()); + newJoinFilters); return new TrimResult(newJoin, mapping); }