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 945a6d7..27549dc 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 @@ -531,6 +531,10 @@ private void doPhase1GetAllAggregations(ASTNode expressionTree, if (expressionTree.getChild(0).getType() == HiveParser.Identifier) { String functionName = unescapeIdentifier(expressionTree.getChild(0) .getText()); + // Validate the function name + if (FunctionRegistry.getFunctionInfo(functionName) == null) { + throw new SemanticException(ErrorMsg.INVALID_FUNCTION.getMsg(functionName)); + } if(FunctionRegistry.impliesOrder(functionName)) { throw new SemanticException(ErrorMsg.MISSING_OVER_CLAUSE.getMsg(functionName)); } 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..6023f55 --- /dev/null +++ b/ql/src/test/results/clientnegative/invalid_select_fn.q.out @@ -0,0 +1 @@ +FAILED: SemanticException [Error 10011]: Invalid function average