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 a1cecc4b6e09..76bcc970c174 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 @@ -141,7 +141,10 @@ object FunctionRegistryBase { .filter(_.getParameterTypes.forall(_ == classOf[Expression])) .map(_.getParameterCount).distinct.sorted throw QueryCompilationErrors.invalidFunctionArgumentNumberError( - validParametersCount, name, params.length) + expressions, + validParametersCount, + name, + params.length) } try { f.newInstance(expressions : _*).asInstanceOf[T] diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/Average.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/Average.scala index ce9fa0575f21..2404efdf62a2 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/Average.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/Average.scala @@ -162,7 +162,8 @@ object TryAverageExpressionBuilder extends ExpressionBuilder { if (numArgs == 1) { Average(expressions.head, EvalMode.TRY) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(1, 2), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(1, 2), funcName, numArgs) } } } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/Sum.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/Sum.scala index 2c8929034378..d54aae2bb00f 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/Sum.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/aggregate/Sum.scala @@ -219,7 +219,8 @@ object TrySumExpressionBuilder extends ExpressionBuilder { if (numArgs == 1) { Sum(expressions.head, EvalMode.TRY) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(1, 2), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(1, 2), funcName, numArgs) } } } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/datetimeExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/datetimeExpressions.scala index e8bad46e84a0..5945cd5bcd0a 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/datetimeExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/datetimeExpressions.scala @@ -172,7 +172,7 @@ object CurDateExpressionBuilder extends ExpressionBuilder { CurrentDate() } else { throw QueryCompilationErrors.invalidFunctionArgumentNumberError( - Seq.empty, funcName, expressions.length) + expressions, Seq.empty, funcName, expressions.length) } } } @@ -1143,7 +1143,8 @@ object ParseToTimestampNTZExpressionBuilder extends ExpressionBuilder { if (numArgs == 1 || numArgs == 2) { ParseToTimestamp(expressions(0), expressions.drop(1).lastOption, TimestampNTZType) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(1, 2), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(1, 2), funcName, numArgs) } } } @@ -1180,7 +1181,8 @@ object ParseToTimestampLTZExpressionBuilder extends ExpressionBuilder { if (numArgs == 1 || numArgs == 2) { ParseToTimestamp(expressions(0), expressions.drop(1).lastOption, TimestampType) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(1, 2), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(1, 2), funcName, numArgs) } } } @@ -1224,7 +1226,8 @@ object TryToTimestampExpressionBuilder extends ExpressionBuilder { SQLConf.get.timestampType, failOnError = false) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(1, 2), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(1, 2), funcName, numArgs) } } } @@ -2518,7 +2521,8 @@ object MakeTimestampNTZExpressionBuilder extends ExpressionBuilder { expressions(5), dataType = TimestampNTZType) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(6), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(6), funcName, numArgs) } } } @@ -2566,7 +2570,8 @@ object MakeTimestampLTZExpressionBuilder extends ExpressionBuilder { expressions.drop(6).lastOption, dataType = TimestampType) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(6), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(6), funcName, numArgs) } } } @@ -2837,7 +2842,8 @@ object DatePartExpressionBuilder extends ExpressionBuilder { val source = expressions(1) Extract(field, source, Extract.createExpr(funcName, field, source)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(2), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(2), funcName, numArgs) } } } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala index 16f081a0cc2d..515cb003eae6 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/mathExpressions.scala @@ -288,7 +288,8 @@ trait CeilFloorExpressionBuilderBase extends ExpressionBuilder { } buildWithTwoParams(expressions(0), scale) } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(2), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(2), funcName, numArgs) } } } diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala index 3a1db2ce1b8b..19558f3ffa61 100755 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/catalyst/expressions/stringExpressions.scala @@ -520,7 +520,8 @@ trait StringBinaryPredicateExpressionBuilderBase extends ExpressionBuilder { createStringPredicate(expressions(0), expressions(1)) } } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(2), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(2), funcName, numArgs) } } @@ -1518,7 +1519,8 @@ trait PadExpressionBuilderBase extends ExpressionBuilder { createStringPad(expressions(0), expressions(1), expressions(2)) } } else { - throw QueryCompilationErrors.invalidFunctionArgumentNumberError(Seq(2, 3), funcName, numArgs) + throw QueryCompilationErrors.invalidFunctionArgumentNumberError( + expressions, Seq(2, 3), funcName, numArgs) } } @@ -2451,7 +2453,8 @@ object Decode { def createExpr(params: Seq[Expression]): Expression = { params.length match { case 0 | 1 => - throw QueryCompilationErrors.invalidFunctionArgumentsError("decode", "2", params.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError( + params, "decode", "2", params.length) case 2 => StringDecode(params.head, params.last) case _ => val input = params.head diff --git a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala index f52a0345bce4..431a5669793d 100644 --- a/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala +++ b/sql/catalyst/src/main/scala/org/apache/spark/sql/errors/QueryCompilationErrors.scala @@ -637,17 +637,21 @@ private[sql] object QueryCompilationErrors extends QueryErrorsBase { } def invalidFunctionArgumentsError( - name: String, expectedNum: String, actualNum: Int): Throwable = { + sqlExpr: Seq[Expression], name: String, expectedNum: String, actualNum: Int): Throwable = { new AnalysisException( errorClass = "WRONG_NUM_ARGS", messageParameters = Map( + "sqlExpr" -> sqlExpr.map(toSQLExpr(_)).mkString(","), "functionName" -> toSQLId(name), "expectedNum" -> expectedNum, "actualNum" -> actualNum.toString)) } def invalidFunctionArgumentNumberError( - validParametersCount: Seq[Int], name: String, actualNumber: Int): Throwable = { + sqlExpr: Seq[Expression], + validParametersCount: Seq[Int], + name: String, + actualNumber: Int): Throwable = { if (validParametersCount.length == 0) { new AnalysisException( errorClass = "_LEGACY_ERROR_TEMP_1043", @@ -658,7 +662,7 @@ private[sql] object QueryCompilationErrors extends QueryErrorsBase { } else { validParametersCount.mkString("[", ", ", "]") } - invalidFunctionArgumentsError(name, expectedNumberOfParameters, actualNumber) + invalidFunctionArgumentsError(sqlExpr, name, expectedNumberOfParameters, actualNumber) } } diff --git a/sql/core/src/main/scala/org/apache/spark/sql/UDFRegistration.scala b/sql/core/src/main/scala/org/apache/spark/sql/UDFRegistration.scala index fb7323a48cc6..d68c4616d122 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/UDFRegistration.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/UDFRegistration.scala @@ -193,7 +193,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 0) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "0", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "0", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -213,7 +213,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 1) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "1", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "1", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -233,7 +233,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 2) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "2", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "2", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -253,7 +253,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 3) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "3", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "3", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -273,7 +273,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 4) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "4", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "4", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -293,7 +293,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 5) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "5", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "5", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -313,7 +313,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 6) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "6", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "6", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -333,7 +333,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 7) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "7", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "7", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -353,7 +353,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 8) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "8", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "8", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -373,7 +373,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 9) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "9", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "9", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -393,7 +393,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 10) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "10", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "10", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -413,7 +413,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 11) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "11", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "11", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -433,7 +433,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 12) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "12", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "12", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -453,7 +453,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 13) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "13", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "13", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -473,7 +473,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 14) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "14", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "14", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -493,7 +493,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 15) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "15", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "15", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -513,7 +513,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 16) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "16", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "16", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -533,7 +533,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 17) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "17", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "17", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -553,7 +553,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 18) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "18", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "18", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -573,7 +573,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 19) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "19", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "19", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -593,7 +593,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 20) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "20", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "20", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -613,7 +613,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 21) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "21", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "21", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -633,7 +633,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 22) { finalUdf.createScalaUDF(e) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "22", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "22", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "scala_udf") finalUdf @@ -740,7 +740,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 0) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "0", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "0", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -755,7 +755,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 1) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "1", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "1", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -770,7 +770,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 2) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "2", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "2", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -785,7 +785,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 3) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "3", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "3", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -800,7 +800,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 4) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "4", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "4", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -815,7 +815,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 5) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "5", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "5", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -830,7 +830,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 6) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "6", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "6", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -845,7 +845,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 7) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "7", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "7", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -860,7 +860,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 8) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "8", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "8", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -875,7 +875,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 9) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "9", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "9", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -890,7 +890,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 10) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "10", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "10", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -905,7 +905,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 11) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "11", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "11", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -920,7 +920,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 12) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "12", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "12", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -935,7 +935,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 13) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "13", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "13", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -950,7 +950,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 14) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "14", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "14", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -965,7 +965,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 15) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "15", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "15", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -980,7 +980,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 16) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "16", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "16", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -995,7 +995,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 17) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "17", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "17", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -1010,7 +1010,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 18) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "18", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "18", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -1025,7 +1025,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 19) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "19", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "19", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -1040,7 +1040,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 20) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "20", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "20", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -1055,7 +1055,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 21) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "21", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "21", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } @@ -1070,7 +1070,7 @@ class UDFRegistration private[sql] (functionRegistry: FunctionRegistry) extends def builder(e: Seq[Expression]) = if (e.length == 22) { ScalaUDF(func, replaced, e, Nil, udfName = Some(name)) } else { - throw QueryCompilationErrors.invalidFunctionArgumentsError(name, "22", e.length) + throw QueryCompilationErrors.invalidFunctionArgumentsError(e, name, "22", e.length) } functionRegistry.createOrReplaceTempFunction(name, builder, "java_udf") } diff --git a/sql/core/src/main/scala/org/apache/spark/sql/internal/BaseSessionStateBuilder.scala b/sql/core/src/main/scala/org/apache/spark/sql/internal/BaseSessionStateBuilder.scala index f81b12796ce9..41d6df2e310b 100644 --- a/sql/core/src/main/scala/org/apache/spark/sql/internal/BaseSessionStateBuilder.scala +++ b/sql/core/src/main/scala/org/apache/spark/sql/internal/BaseSessionStateBuilder.scala @@ -419,7 +419,7 @@ class SparkUDFExpressionBuilder extends FunctionExpressionBuilder { // Check input argument size if (expr.inputTypes.size != input.size) { throw QueryCompilationErrors.invalidFunctionArgumentsError( - name, expr.inputTypes.size.toString, input.size) + Seq(expr), name, expr.inputTypes.size.toString, input.size) } expr } else { diff --git a/sql/core/src/test/resources/sql-tests/results/ansi/string-functions.sql.out b/sql/core/src/test/resources/sql-tests/results/ansi/string-functions.sql.out index 253396694a66..b3080ca05468 100644 --- a/sql/core/src/test/resources/sql-tests/results/ansi/string-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/ansi/string-functions.sql.out @@ -825,7 +825,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "0", "expectedNum" : "2", - "functionName" : "`decode`" + "functionName" : "`decode`", + "sqlExpr" : "" }, "queryContext" : [ { "objectType" : "", @@ -848,7 +849,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "1", "expectedNum" : "2", - "functionName" : "`decode`" + "functionName" : "`decode`", + "sqlExpr" : "\"encode(abc, utf-8)\"" }, "queryContext" : [ { "objectType" : "", diff --git a/sql/core/src/test/resources/sql-tests/results/ceil-floor-with-scale-param.sql.out b/sql/core/src/test/resources/sql-tests/results/ceil-floor-with-scale-param.sql.out index 1d8adce90c42..93bfc1f8a7e4 100644 --- a/sql/core/src/test/resources/sql-tests/results/ceil-floor-with-scale-param.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/ceil-floor-with-scale-param.sql.out @@ -144,7 +144,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "3", "expectedNum" : "2", - "functionName" : "`ceil`" + "functionName" : "`ceil`", + "sqlExpr" : "\"2.5\",\"0\",\"0\"" }, "queryContext" : [ { "objectType" : "", @@ -301,7 +302,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "3", "expectedNum" : "2", - "functionName" : "`floor`" + "functionName" : "`floor`", + "sqlExpr" : "\"2.5\",\"0\",\"0\"" }, "queryContext" : [ { "objectType" : "", diff --git a/sql/core/src/test/resources/sql-tests/results/csv-functions.sql.out b/sql/core/src/test/resources/sql-tests/results/csv-functions.sql.out index c2be9ed7d0ba..39c58f15821e 100644 --- a/sql/core/src/test/resources/sql-tests/results/csv-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/csv-functions.sql.out @@ -109,7 +109,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "0", "expectedNum" : "[2, 3]", - "functionName" : "`from_csv`" + "functionName" : "`from_csv`", + "sqlExpr" : "" }, "queryContext" : [ { "objectType" : "", diff --git a/sql/core/src/test/resources/sql-tests/results/json-functions.sql.out b/sql/core/src/test/resources/sql-tests/results/json-functions.sql.out index 3c98cc6e856f..a14044d83c26 100644 --- a/sql/core/src/test/resources/sql-tests/results/json-functions.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/json-functions.sql.out @@ -113,7 +113,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "0", "expectedNum" : "[1, 2]", - "functionName" : "`to_json`" + "functionName" : "`to_json`", + "sqlExpr" : "" }, "queryContext" : [ { "objectType" : "", @@ -235,7 +236,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "0", "expectedNum" : "[2, 3]", - "functionName" : "`from_json`" + "functionName" : "`from_json`", + "sqlExpr" : "" }, "queryContext" : [ { "objectType" : "", @@ -576,7 +578,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "0", "expectedNum" : "1", - "functionName" : "`json_array_length`" + "functionName" : "`json_array_length`", + "sqlExpr" : "" }, "queryContext" : [ { "objectType" : "", @@ -663,7 +666,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "0", "expectedNum" : "1", - "functionName" : "`json_object_keys`" + "functionName" : "`json_object_keys`", + "sqlExpr" : "" }, "queryContext" : [ { "objectType" : "", 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 index 68e980e7672e..1b58c6790e2f 100644 --- 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 @@ -757,7 +757,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "0", "expectedNum" : "2", - "functionName" : "`decode`" + "functionName" : "`decode`", + "sqlExpr" : "" }, "queryContext" : [ { "objectType" : "", @@ -780,7 +781,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "1", "expectedNum" : "2", - "functionName" : "`decode`" + "functionName" : "`decode`", + "sqlExpr" : "\"encode(abc, utf-8)\"" }, "queryContext" : [ { "objectType" : "", diff --git a/sql/core/src/test/resources/sql-tests/results/timestamp-ntz.sql.out b/sql/core/src/test/resources/sql-tests/results/timestamp-ntz.sql.out index ef47da8c8c7c..e3c3864c2f57 100644 --- a/sql/core/src/test/resources/sql-tests/results/timestamp-ntz.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/timestamp-ntz.sql.out @@ -50,7 +50,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "7", "expectedNum" : "6", - "functionName" : "`make_timestamp_ntz`" + "functionName" : "`make_timestamp_ntz`", + "sqlExpr" : "\"2021\",\"7\",\"11\",\"6\",\"30\",\"45.678\",\"CET\"" }, "queryContext" : [ { "objectType" : "", diff --git a/sql/core/src/test/resources/sql-tests/results/udaf/udaf.sql.out b/sql/core/src/test/resources/sql-tests/results/udaf/udaf.sql.out index c8c5bd286d62..19ef94ff0c54 100644 --- a/sql/core/src/test/resources/sql-tests/results/udaf/udaf.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/udaf/udaf.sql.out @@ -36,7 +36,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "2", "expectedNum" : "1", - "functionName" : "`spark_catalog`.`default`.`mydoubleavg`" + "functionName" : "`spark_catalog`.`default`.`mydoubleavg`", + "sqlExpr" : "\"spark_catalog.default.mydoubleavg(int_col1,3)\"" }, "queryContext" : [ { "objectType" : "", diff --git a/sql/core/src/test/resources/sql-tests/results/udf/udf-udaf.sql.out b/sql/core/src/test/resources/sql-tests/results/udf/udf-udaf.sql.out index 58389f26ea3c..829ab2a392b8 100644 --- a/sql/core/src/test/resources/sql-tests/results/udf/udf-udaf.sql.out +++ b/sql/core/src/test/resources/sql-tests/results/udf/udf-udaf.sql.out @@ -36,7 +36,8 @@ org.apache.spark.sql.AnalysisException "messageParameters" : { "actualNum" : "2", "expectedNum" : "1", - "functionName" : "`spark_catalog`.`default`.`mydoubleavg`" + "functionName" : "`spark_catalog`.`default`.`mydoubleavg`", + "sqlExpr" : "\"spark_catalog.default.mydoubleavg(udf(int_col1),udf(3))\"" }, "queryContext" : [ { "objectType" : "", 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 61f671437f0c..3caeebc21709 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 @@ -4868,6 +4868,7 @@ class DataFrameFunctionsSuite extends QueryTest with SharedSparkSession { }, errorClass = "WRONG_NUM_ARGS", parameters = Map( + "sqlExpr" -> "\"a1\",\"a2\",\"lambdafunction(x, acc, x)\",\"lambdafunction(x, acc, x)\"", "functionName" -> toSQLId("zip_with"), "expectedNum" -> "3", "actualNum" -> "4"), diff --git a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala index d1e6a5df161b..bda8512ca22f 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/SQLQuerySuite.scala @@ -2636,6 +2636,7 @@ class SQLQuerySuite extends QueryTest with SharedSparkSession with AdaptiveSpark }, errorClass = "WRONG_NUM_ARGS", parameters = Map( + "sqlExpr" -> "\"1\",\"2\",\"3\"", "functionName" -> toSQLId("nvl"), "expectedNum" -> "2", "actualNum" -> "3" diff --git a/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala index 2372fe6f78db..871beca00bd7 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/StringFunctionsSuite.scala @@ -581,6 +581,7 @@ class StringFunctionsSuite extends QueryTest with SharedSparkSession { }, errorClass = "WRONG_NUM_ARGS", parameters = Map( + "sqlExpr" -> "", "functionName" -> toSQLId("sentences"), "expectedNum" -> "[1, 2, 3]", "actualNum" -> "0" diff --git a/sql/core/src/test/scala/org/apache/spark/sql/UDFSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/UDFSuite.scala index d158ace7928e..480decfc60b9 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/UDFSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/UDFSuite.scala @@ -107,6 +107,7 @@ class UDFSuite extends QueryTest with SharedSparkSession { }, errorClass = "WRONG_NUM_ARGS", parameters = Map( + "sqlExpr" -> "\"abcd\",\"2\",\"3\",\"4\"", "functionName" -> toSQLId("substr"), "expectedNum" -> "[2, 3]", "actualNum" -> "4" @@ -127,6 +128,7 @@ class UDFSuite extends QueryTest with SharedSparkSession { }, errorClass = "WRONG_NUM_ARGS", parameters = Map( + "sqlExpr" -> "\"2\",\"3\",\"4\"", "functionName" -> toSQLId("foo"), "expectedNum" -> "1", "actualNum" -> "3" diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveUDAFSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveUDAFSuite.scala index d5de8a014327..8f4478901ad4 100644 --- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveUDAFSuite.scala +++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveUDAFSuite.scala @@ -177,6 +177,7 @@ class HiveUDAFSuite extends QueryTest }, errorClass = "WRONG_NUM_ARGS", parameters = Map( + "sqlExpr" -> "\"longProductSum(100)\"", "functionName" -> toSQLId("longProductSum"), "expectedNum" -> "2", "actualNum" -> "1"),