diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java index 7f5d72a..768174c 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/TypeCheckProcFactory.java @@ -125,6 +125,17 @@ public static ExprNodeDesc processGByExpr(Node nd, Object procCtx) // just // build the exprNodeFuncDesc with recursively built children. ASTNode expr = (ASTNode) nd; + + // Validate the function name if this corresponds to a function + if (expr.getParent().getType() == HiveParser.TOK_FUNCTION && + expr.getParent().getChild(0).equals(expr)) { + String funcName = TypeCheckProcFactory.DefaultExprProcessor + .getFunctionText((ASTNode)expr.getParent(), true); + if (!FunctionRegistry.getFunctionNames().contains(funcName)) { + throw new SemanticException(ErrorMsg.INVALID_FUNCTION.getMsg(expr)); + } + } + TypeCheckCtx ctx = (TypeCheckCtx) procCtx; if (!ctx.isUseCaching()) { diff --git a/ql/src/test/queries/clientnegative/invalid_select_fn.q b/ql/src/test/queries/clientnegative/invalid_select_fn.q new file mode 100644 index 0000000..b01d29b --- /dev/null +++ b/ql/src/test/queries/clientnegative/invalid_select_fn.q @@ -0,0 +1 @@ +explain create table src_invalid as select average(key) as key_avg from src group by value; diff --git a/ql/src/test/results/clientnegative/invalid_select_fn.q.out b/ql/src/test/results/clientnegative/invalid_select_fn.q.out new file mode 100644 index 0000000..ef9029a --- /dev/null +++ b/ql/src/test/results/clientnegative/invalid_select_fn.q.out @@ -0,0 +1 @@ +FAILED: SemanticException [Error 10011]: Line 1:43 Invalid function 'average'