diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java index 61ee2bd..8125ea4 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/CalcitePlanner.java @@ -2132,6 +2132,13 @@ private RelNode genGBLogicalPlan(QB qb, RelNode srcRel) throws SemanticException // 8. We create the group_by operator gbRel = genGBRelNode(gbExprNDescLst, aggregations, groupingSets, srcRel); + Map exprToColumnAlias = qb.getParseInfo().getAllExprToColumnAlias(); + for (ASTNode astNode : exprToColumnAlias.keySet()) { + if (groupByOutputRowResolver.getExpression(astNode) != null) { + groupByOutputRowResolver.put("", exprToColumnAlias.get(astNode), + groupByOutputRowResolver.getExpression(astNode)); + } + } relToHiveColNameCalcitePosMap.put(gbRel, buildHiveToCalciteColumnMap(groupByOutputRowResolver, gbRel)); this.relToHiveRR.put(gbRel, groupByOutputRowResolver); diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java index a114281..dd89c16 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/SemanticAnalyzer.java @@ -2609,17 +2609,7 @@ private void extractJoinCondsFromWhereClause(QBJoinTree joinTree, QB qb, String private Operator genHavingPlan(String dest, QB qb, Operator input, Map aliasToOpInfo) throws SemanticException { - ASTNode havingExpr = qb.getParseInfo().getHavingForClause(dest); - - OpParseContext inputCtx = opParseCtx.get(input); - RowResolver inputRR = inputCtx.getRowResolver(); - Map exprToColumnAlias = qb.getParseInfo().getAllExprToColumnAlias(); - for (ASTNode astNode : exprToColumnAlias.keySet()) { - if (inputRR.getExpression(astNode) != null) { - inputRR.put("", exprToColumnAlias.get(astNode), inputRR.getExpression(astNode)); - } - } ASTNode condn = (ASTNode) havingExpr.getChild(0); /* @@ -2627,9 +2617,7 @@ private Operator genHavingPlan(String dest, QB qb, Operator input, * so we invoke genFilterPlan to handle SubQuery algebraic transformation, * just as is done for SubQuery predicates appearing in the Where Clause. */ - Operator output = genFilterPlan(condn, qb, input, aliasToOpInfo, true, false); - output = putOpInsertMap(output, inputRR); - return output; + return genFilterPlan(condn, qb, input, aliasToOpInfo, true, false); } private Operator genPlanForSubQueryPredicate( @@ -8901,12 +8889,22 @@ private Operator genPostGroupByBodyPlan(Operator curr, String dest, QB qb, QBParseInfo qbp = qb.getParseInfo(); + OpParseContext inputCtx = opParseCtx.get(curr); + RowResolver inputRR = inputCtx.getRowResolver(); + Map exprToColumnAlias = qb.getParseInfo().getAllExprToColumnAlias(); + for (ASTNode astNode : exprToColumnAlias.keySet()) { + if (inputRR.getExpression(astNode) != null) { + inputRR.put("", exprToColumnAlias.get(astNode), inputRR.getExpression(astNode)); + } + } + // Insert HAVING plan here if (qbp.getHavingForClause(dest) != null) { if (getGroupByForClause(qbp, dest).size() == 0) { throw new SemanticException("HAVING specified without GROUP BY"); } curr = genHavingPlan(dest, qb, curr, aliasToOpInfo); + curr = putOpInsertMap(curr, inputRR); } diff --git a/ql/src/test/queries/clientnegative/alias_groupby_orderby.q b/ql/src/test/queries/clientnegative/alias_groupby_orderby.q new file mode 100644 index 0000000..dc864b0 --- /dev/null +++ b/ql/src/test/queries/clientnegative/alias_groupby_orderby.q @@ -0,0 +1 @@ +select key as c0, count(*) as c1 from src group by key order by key; diff --git a/ql/src/test/results/clientnegative/alias_groupby_orderby.q.out b/ql/src/test/results/clientnegative/alias_groupby_orderby.q.out new file mode 100644 index 0000000..fafc813 --- /dev/null +++ b/ql/src/test/results/clientnegative/alias_groupby_orderby.q.out @@ -0,0 +1 @@ +FAILED: SemanticException Invalid order by expression: TOK_TABSORTCOLNAMEASC