You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by am...@apache.org on 2013/05/13 12:16:02 UTC
svn commit: r1481773 - in
/hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse:
AliasReplacer.java CubeQueryContext.java HQLParser.java
Author: amareshwari
Date: Mon May 13 10:16:02 2013
New Revision: 1481773
URL: http://svn.apache.org/r1481773
Log:
Fix aggregate expressions in alias replacer
Modified:
hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/AliasReplacer.java
hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java
hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/HQLParser.java
Modified: hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/AliasReplacer.java
URL: http://svn.apache.org/viewvc/hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/AliasReplacer.java?rev=1481773&r1=1481772&r2=1481773&view=diff
==============================================================================
--- hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/AliasReplacer.java (original)
+++ hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/AliasReplacer.java Mon May 13 10:16:02 2013
@@ -67,6 +67,12 @@ public class AliasReplacer implements Co
if (StringUtils.isNotBlank(rewritWhere)) {
cubeql.setWhereTree(rewritWhere);
}
+
+ // Update the aggregate expression set
+ System.out.println("AggrSet Before:" + cubeql.aggregateExprs.toString());
+ updateAggregates(selectAST, cubeql);
+ updateAggregates(havingAST, cubeql);
+ System.out.println("AggrSet After:" + cubeql.aggregateExprs.toString());
}
private void replaceAliases(ASTNode node, int nodePos, Map<String, String> colToTableAlias) {
@@ -118,4 +124,19 @@ public class AliasReplacer implements Co
}
}
+ private void updateAggregates(ASTNode root, CubeQueryContext cubeql) {
+ if (root == null) {
+ return;
+ }
+
+ if (HQLParser.isAggregateAST(root)) {
+ cubeql.addAggregateExpr(HQLParser.getString(root).trim().toLowerCase());
+ } else {
+ for (int i = 0; i < root.getChildCount(); i++) {
+ ASTNode child = (ASTNode) root.getChild(i);
+ updateAggregates(child, cubeql);
+ }
+ }
+ }
+
}
Modified: hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java
URL: http://svn.apache.org/viewvc/hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java?rev=1481773&r1=1481772&r2=1481773&view=diff
==============================================================================
--- hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java (original)
+++ hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/CubeQueryContext.java Mon May 13 10:16:02 2013
@@ -1020,7 +1020,7 @@ public class CubeQueryContext {
}
public boolean isAggregateExpr(String expr) {
- return aggregateExprs.contains(expr);
+ return aggregateExprs.contains(expr == null ? expr : expr.toLowerCase());
}
public boolean hasAggregates() {
Modified: hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/HQLParser.java
URL: http://svn.apache.org/viewvc/hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/HQLParser.java?rev=1481773&r1=1481772&r2=1481773&view=diff
==============================================================================
--- hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/HQLParser.java (original)
+++ hive/branches/HIVE-4115/ql/src/java/org/apache/hadoop/hive/ql/cube/parse/HQLParser.java Mon May 13 10:16:02 2013
@@ -31,7 +31,9 @@ import java.util.Queue;
import java.util.Set;
import org.antlr.runtime.tree.Tree;
+import org.apache.hadoop.hive.ql.exec.FunctionRegistry;
import org.apache.hadoop.hive.ql.parse.ASTNode;
+import org.apache.hadoop.hive.ql.parse.BaseSemanticAnalyzer;
import org.apache.hadoop.hive.ql.parse.HiveParser;
import org.apache.hadoop.hive.ql.parse.ParseDriver;
import org.apache.hadoop.hive.ql.parse.ParseException;
@@ -315,4 +317,22 @@ public class HQLParser {
return colname;
}
+
+ public static boolean isAggregateAST(ASTNode node) {
+ int exprTokenType = node.getToken().getType();
+ if (exprTokenType == HiveParser.TOK_FUNCTION
+ || exprTokenType == HiveParser.TOK_FUNCTIONDI
+ || exprTokenType == HiveParser.TOK_FUNCTIONSTAR) {
+ assert (node.getChildCount() != 0);
+ if (node.getChild(0).getType() == HiveParser.Identifier) {
+ String functionName = BaseSemanticAnalyzer.unescapeIdentifier(
+ node.getChild(0).getText());
+ if (FunctionRegistry.getGenericUDAFResolver(functionName) != null) {
+ return true;
+ }
+ }
+ }
+
+ return false;
+ }
}
\ No newline at end of file