From b8eabc4241a15c07434ce2291167f9c0062013bf Mon Sep 17 00:00:00 2001 From: panbingkun Date: Thu, 20 Oct 2022 19:18:32 +0800 Subject: [PATCH 1/2] [SPARK-40856][SQL] Update the error template of WRONG_NUM_PARAMS --- core/src/main/resources/error/error-classes.json | 2 +- .../catalyst/expressions/CallMethodViaReflection.scala | 5 ++++- .../spark/sql/catalyst/expressions/arithmetic.scala | 10 ++++++++-- .../sql/catalyst/expressions/jsonExpressions.scala | 5 ++++- .../analysis/ExpressionTypeCheckingSuite.scala | 2 ++ .../org/apache/spark/sql/DataFrameFunctionsSuite.scala | 8 ++++++++ 6 files changed, 27 insertions(+), 5 deletions(-) diff --git a/core/src/main/resources/error/error-classes.json b/core/src/main/resources/error/error-classes.json index 0cfb6861c776..c380162b59a8 100644 --- a/core/src/main/resources/error/error-classes.json +++ b/core/src/main/resources/error/error-classes.json @@ -265,7 +265,7 @@ }, "WRONG_NUM_PARAMS" : { "message" : [ - "wrong number of parameters: ." + "The requires parameters but the actual number is ." ] } } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CallMethodViaReflection.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CallMethodViaReflection.scala index db2053707b52..047ad92b4efe 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CallMethodViaReflection.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CallMethodViaReflection.scala @@ -64,7 +64,10 @@ case class CallMethodViaReflection(children: Seq[Expression]) if (children.size < 2) { DataTypeMismatch( errorSubClass = "WRONG_NUM_PARAMS", - messageParameters = Map("actualNum" -> children.length.toString)) + messageParameters = Map( + "functionName" -> prettyName, + "expectedNum" -> "at least two", + "actualNum" -> children.length.toString)) } else { val unexpectedParameter = children.zipWithIndex.collectFirst { case (e, 0) if !(e.dataType == StringType && e.foldable) => diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala index 3f33a2f06ac4..9f244fe05add 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala @@ -1202,7 +1202,10 @@ case class Least(children: Seq[Expression]) extends ComplexTypeMergingExpression if (children.length <= 1) { DataTypeMismatch( errorSubClass = "WRONG_NUM_PARAMS", - messageParameters = Map("actualNum" -> children.length.toString)) + messageParameters = Map( + "functionName" -> prettyName, + "expectedNum" -> "at least two", + "actualNum" -> children.length.toString)) } else if (!TypeCoercion.haveSameType(inputTypesForMerging)) { DataTypeMismatch( errorSubClass = "DATA_DIFF_TYPES", @@ -1290,7 +1293,10 @@ case class Greatest(children: Seq[Expression]) extends ComplexTypeMergingExpress if (children.length <= 1) { DataTypeMismatch( errorSubClass = "WRONG_NUM_PARAMS", - messageParameters = Map("actualNum" -> children.length.toString)) + messageParameters = Map( + "functionName" -> prettyName, + "expectedNum" -> "at least two", + "actualNum" -> children.length.toString)) } else if (!TypeCoercion.haveSameType(inputTypesForMerging)) { DataTypeMismatch( errorSubClass = "DATA_DIFF_TYPES", diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala index 9087d4a731ed..3fe8d9849fa5 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala @@ -395,7 +395,10 @@ case class JsonTuple(children: Seq[Expression]) if (children.length < 2) { DataTypeMismatch( errorSubClass = "WRONG_NUM_PARAMS", - messageParameters = Map("actualNum" -> children.length.toString)) + messageParameters = Map( + "functionName" -> prettyName, + "expectedNum" -> "at least two", + "actualNum" -> children.length.toString)) } else if (children.forall(child => StringType.acceptsType(child.dataType))) { TypeCheckResult.TypeCheckSuccess } else { diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala index f3b102d1feb4..dd4269454d3d 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala @@ -541,6 +541,8 @@ class ExpressionTypeCheckingSuite extends SparkFunSuite with SQLHelper with Quer expr = expr1, messageParameters = Map( "sqlExpr" -> toSQLExpr(expr1), + "functionName" -> expr1.prettyName, + "expectedNum" -> "at least two", "actualNum" -> "1") ) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala index 74ec36988d79..e12e591f1a44 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala @@ -4237,6 +4237,8 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { sqlState = None, parameters = Map( "sqlExpr" -> "\"greatest()\"", + "functionName" -> "greatest", + "expectedNum" -> "at least two", "actualNum" -> "0") ) @@ -4248,6 +4250,8 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { sqlState = None, parameters = Map( "sqlExpr" -> "\"greatest()\"", + "functionName" -> "greatest", + "expectedNum" -> "at least two", "actualNum" -> "0"), context = ExpectedContext( fragment = "greatest()", @@ -4263,6 +4267,8 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { sqlState = None, parameters = Map( "sqlExpr" -> "\"least()\"", + "functionName" -> "least", + "expectedNum" -> "at least two", "actualNum" -> "0") ) @@ -4274,6 +4280,8 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { sqlState = None, parameters = Map( "sqlExpr" -> "\"least()\"", + "functionName" -> "least", + "expectedNum" -> "at least two", "actualNum" -> "0"), context = ExpectedContext( fragment = "least()", From e04d1c23eea5bb6abfb151ed06dbbc148c7eb127 Mon Sep 17 00:00:00 2001 From: panbingkun Date: Fri, 21 Oct 2022 16:07:44 +0800 Subject: [PATCH 2/2] [SPARK-40856][SQL] Update the error template of WRONG_NUM_PARAMS --- .../catalyst/expressions/CallMethodViaReflection.scala | 2 +- .../spark/sql/catalyst/expressions/arithmetic.scala | 4 ++-- .../spark/sql/catalyst/expressions/jsonExpressions.scala | 2 +- .../catalyst/analysis/ExpressionTypeCheckingSuite.scala | 2 +- .../org/apache/spark/sql/DataFrameFunctionsSuite.scala | 8 ++++---- 5 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CallMethodViaReflection.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CallMethodViaReflection.scala index 047ad92b4efe..1b1d5514b3f2 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CallMethodViaReflection.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/CallMethodViaReflection.scala @@ -66,7 +66,7 @@ case class CallMethodViaReflection(children: Seq[Expression]) errorSubClass = "WRONG_NUM_PARAMS", messageParameters = Map( "functionName" -> prettyName, - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> children.length.toString)) } else { val unexpectedParameter = children.zipWithIndex.collectFirst { diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala index 9f244fe05add..d82108aa3c9f 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/arithmetic.scala @@ -1204,7 +1204,7 @@ case class Least(children: Seq[Expression]) extends ComplexTypeMergingExpression errorSubClass = "WRONG_NUM_PARAMS", messageParameters = Map( "functionName" -> prettyName, - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> children.length.toString)) } else if (!TypeCoercion.haveSameType(inputTypesForMerging)) { DataTypeMismatch( @@ -1295,7 +1295,7 @@ case class Greatest(children: Seq[Expression]) extends ComplexTypeMergingExpress errorSubClass = "WRONG_NUM_PARAMS", messageParameters = Map( "functionName" -> prettyName, - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> children.length.toString)) } else if (!TypeCoercion.haveSameType(inputTypesForMerging)) { DataTypeMismatch( diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala index 3fe8d9849fa5..959edbd1c5ae 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/jsonExpressions.scala @@ -397,7 +397,7 @@ case class JsonTuple(children: Seq[Expression]) errorSubClass = "WRONG_NUM_PARAMS", messageParameters = Map( "functionName" -> prettyName, - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> children.length.toString)) } else if (children.forall(child => StringType.acceptsType(child.dataType))) { TypeCheckResult.TypeCheckSuccess diff --git a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala index dd4269454d3d..991721a55ca3 100644 --- a/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala +++ b/sql/catalyst/src/test/scala/org/apache/spark/sql/catalyst/analysis/ExpressionTypeCheckingSuite.scala @@ -542,7 +542,7 @@ class ExpressionTypeCheckingSuite extends SparkFunSuite with SQLHelper with Quer messageParameters = Map( "sqlExpr" -> toSQLExpr(expr1), "functionName" -> expr1.prettyName, - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> "1") ) diff --git a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala index e12e591f1a44..7dea7799b666 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/DataFrameFunctionsSuite.scala @@ -4238,7 +4238,7 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { parameters = Map( "sqlExpr" -> "\"greatest()\"", "functionName" -> "greatest", - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> "0") ) @@ -4251,7 +4251,7 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { parameters = Map( "sqlExpr" -> "\"greatest()\"", "functionName" -> "greatest", - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> "0"), context = ExpectedContext( fragment = "greatest()", @@ -4268,7 +4268,7 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { parameters = Map( "sqlExpr" -> "\"least()\"", "functionName" -> "least", - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> "0") ) @@ -4281,7 +4281,7 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { parameters = Map( "sqlExpr" -> "\"least()\"", "functionName" -> "least", - "expectedNum" -> "at least two", + "expectedNum" -> "> 1", "actualNum" -> "0"), context = ExpectedContext( fragment = "least()",