diff --git ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java index 84c6cc8..64d3b1f 100644 --- ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java +++ ql/src/java/org/apache/hadoop/hive/ql/optimizer/calcite/translator/HiveOpConverter.java @@ -906,22 +906,8 @@ private static JoinOperator genJoin(RelNode join, ExprNodeDesc[][] joinExpressio // 3. We populate the filters structure List filtersForInput = new ArrayList(); for (ExprNodeDesc expr : filterExpressions[pos]) { - if (expr instanceof ExprNodeGenericFuncDesc) { - ExprNodeGenericFuncDesc func = (ExprNodeGenericFuncDesc) expr; - List newChildren = new ArrayList(); - for (ExprNodeDesc functionChild : func.getChildren()) { - if (functionChild instanceof ExprNodeColumnDesc) { - newChildren.add(colExprMap.get(functionChild.getExprString())); - } else { - newChildren.add(functionChild); - } - } - func.setChildren(newChildren); - filtersForInput.add(expr); - } - else { - filtersForInput.add(expr); - } + updateExprNode(expr, colExprMap); + filtersForInput.add(expr); } filters.put(tag, filtersForInput); } @@ -930,11 +916,6 @@ private static JoinOperator genJoin(RelNode join, ExprNodeDesc[][] joinExpressio filters, joinExpressions); desc.setReversedExprs(reversedExprs); - // 4. Create and populate filter map - int[][] filterMap = new int[joinExpressions.length][]; - - desc.setFilterMap(filterMap); - JoinOperator joinOp = (JoinOperator) OperatorFactory.getAndMakeChild(desc, new RowSchema( outputColumns), childOps); joinOp.setColumnExprMap(colExprMap); @@ -947,6 +928,22 @@ private static JoinOperator genJoin(RelNode join, ExprNodeDesc[][] joinExpressio return joinOp; } + private static void updateExprNode(ExprNodeDesc expr, Map colExprMap) { + if (expr instanceof ExprNodeGenericFuncDesc) { + ExprNodeGenericFuncDesc func = (ExprNodeGenericFuncDesc) expr; + List newChildren = new ArrayList(); + for (ExprNodeDesc functionChild : func.getChildren()) { + if (functionChild instanceof ExprNodeColumnDesc) { + newChildren.add(colExprMap.get(functionChild.getExprString())); + } else { + updateExprNode(functionChild, colExprMap); + newChildren.add(functionChild); + } + } + func.setChildren(newChildren); + } + } + private static JoinType extractJoinType(HiveJoin join) { // UNIQUE if (join.isDistinct()) {