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

Reply via email to