Repository: spark Updated Branches: refs/heads/branch-2.0 4f3f09696 -> 10b36d62a
[SPARK-18430][SQL][BACKPORT-2.0] Fixed Exception Messages when Hitting an Invocation Exception of Function Lookup ### What changes were proposed in this pull request? This PR is to backport https://github.com/apache/spark/pull/15878 When the exception is an invocation exception during function lookup, we return a useless/confusing error message: For example, ```Scala df.selectExpr("concat_ws()") ``` Below is the error message we got: ``` null; line 1 pos 0 org.apache.spark.sql.AnalysisException: null; line 1 pos 0 ``` To get the meaningful error message, we need to get the cause. The fix is exactly the same as what we did in https://github.com/apache/spark/pull/12136. After the fix, the message we got is the exception issued in the constuctor of function implementation: ``` requirement failed: concat_ws requires at least one argument.; line 1 pos 0 org.apache.spark.sql.AnalysisException: requirement failed: concat_ws requires at least one argument.; line 1 pos 0 ``` ### How was this patch tested? Added test cases. Author: gatorsmile <gatorsm...@gmail.com> Closes #15902 from gatorsmile/functionNotFound20. Project: http://git-wip-us.apache.org/repos/asf/spark/repo Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/10b36d62 Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/10b36d62 Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/10b36d62 Branch: refs/heads/branch-2.0 Commit: 10b36d62adeb1ef345d2186ee71fec9db1f17d6e Parents: 4f3f096 Author: gatorsmile <gatorsm...@gmail.com> Authored: Wed Nov 16 06:02:29 2016 -0800 Committer: Herman van Hovell <hvanhov...@databricks.com> Committed: Wed Nov 16 06:02:29 2016 -0800 ---------------------------------------------------------------------- .../catalyst/analysis/FunctionRegistry.scala | 5 ++++- .../sql-tests/inputs/string-functions.sql | 3 +++ .../sql-tests/results/string-functions.sql.out | 20 ++++++++++++++++++++ 3 files changed, 27 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/spark/blob/10b36d62/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala ---------------------------------------------------------------------- diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala index 35fd800..73884d7 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/analysis/FunctionRegistry.scala @@ -445,7 +445,10 @@ object FunctionRegistry { // If there is an apply method that accepts Seq[Expression], use that one. Try(varargCtor.get.newInstance(expressions).asInstanceOf[Expression]) match { case Success(e) => e - case Failure(e) => throw new AnalysisException(e.getMessage) + case Failure(e) => + // the exception is an invocation exception. To get a meaningful message, we need the + // cause. + throw new AnalysisException(e.getCause.getMessage) } } else { // Otherwise, find a constructor method that matches the number of arguments, and use that. http://git-wip-us.apache.org/repos/asf/spark/blob/10b36d62/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql ---------------------------------------------------------------------- diff --git a/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql b/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql new file mode 100644 index 0000000..21a0aa6 --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/inputs/string-functions.sql @@ -0,0 +1,3 @@ +-- Argument number exception +select concat_ws(); +select format_string(); \ No newline at end of file http://git-wip-us.apache.org/repos/asf/spark/blob/10b36d62/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out ---------------------------------------------------------------------- diff --git a/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out b/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out new file mode 100644 index 0000000..6961e9b --- /dev/null +++ b/sql/core/src/test/resources/sql-tests/results/string-functions.sql.out @@ -0,0 +1,20 @@ +-- Automatically generated by SQLQueryTestSuite +-- Number of queries: 2 + + +-- !query 0 +select concat_ws() +-- !query 0 schema +struct<> +-- !query 0 output +org.apache.spark.sql.AnalysisException +requirement failed: concat_ws requires at least one argument.; line 1 pos 7 + + +-- !query 1 +select format_string() +-- !query 1 schema +struct<> +-- !query 1 output +org.apache.spark.sql.AnalysisException +requirement failed: format_string() should take at least 1 argument; line 1 pos 7 --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org