MaxGekk commented on code in PR #36064:
URL: https://github.com/apache/spark/pull/36064#discussion_r846764249
##########
sql/core/src/test/scala/org/apache/spark/sql/errors/QueryCompilationErrorsSuite.scala:
##########
@@ -171,4 +174,113 @@ class QueryCompilationErrorsSuite extends QueryTest with
SharedSparkSession {
"The feature is not supported: " +
"Pandas UDF aggregate expressions don't support pivot.")
}
+
+ test("NO_HANDLER_FOR_UDAF: No handler for UDAF error") {
+ val functionName = "myCast"
+ withUserDefinedFunction(functionName -> true) {
+ sql(
+ s"""
+ |CREATE TEMPORARY FUNCTION $functionName
+ |AS 'org.apache.spark.sql.errors.MyCastToString'
+ |""".stripMargin)
+
+ val e = intercept[AnalysisException] (
+ sql(s"SELECT $functionName(123) as value")
+ )
+
+ assert(e.errorClass === Some("NO_HANDLER_FOR_UDAF"))
+ assert(e.message ===
+ "No handler for UDAF 'org.apache.spark.sql.errors.MyCastToString'. " +
+ "Use sparkSession.udf.register(...) instead.")
+ }
+ }
+
+ test("UNTYPED_SCALA_UDF: use untyped Scala UDF should fail by default") {
+ val e = intercept[AnalysisException](udf((x: Int) => x, IntegerType))
+
+ assert(e.errorClass === Some("UNTYPED_SCALA_UDF"))
+ assert(e.message ===
+ "You're using untyped Scala UDF, which does not have the input type " +
+ "information. Spark may blindly pass null to the Scala closure with
primitive-type " +
+ "argument, and the closure will see the default value of the Java type
for the null " +
+ "argument, e.g. `udf((x: Int) => x, IntegerType)`, the result is 0 for
null input. " +
+ "To get rid of this error, you could:\n" +
+ "1. use typed Scala UDF APIs(without return type parameter), e.g.
`udf((x: Int) => x)`\n" +
+ "2. use Java UDF APIs, e.g. `udf(new UDF1[String, Integer] { " +
+ "override def call(s: String): Integer = s.length() }, IntegerType)`, " +
+ "if input types are all non primitive\n" +
+ s"3. set ${SQLConf.LEGACY_ALLOW_UNTYPED_SCALA_UDF.key} to true and " +
+ s"use this API with caution")
+ }
+
+ test("NO_UDF_INTERFACE_ERROR: java udf class does not implement any udf
interface") {
+ val className = "org.apache.spark.sql.errors.MyCastToString"
+ val e = intercept[AnalysisException](
+ spark.udf.registerJava(
+ "myCast",
+ className,
+ StringType)
+ )
+
+ assert(e.errorClass === Some("NO_UDF_INTERFACE_ERROR"))
+ assert(e.message ===
+ s"UDF class $className doesn't implement any UDF interface")
+ }
+
+ test("MULTI_UDF_INTERFACE_ERROR: java udf implement multi UDF interface") {
+ val className = "org.apache.spark.sql.errors.MySum"
+ val e = intercept[AnalysisException](
+ spark.udf.registerJava(
+ "mySum",
+ className,
+ StringType)
+ )
+
+ assert(e.errorClass === Some("MULTI_UDF_INTERFACE_ERROR"))
+ assert(e.message ===
+ s"Not allowed to implement multiple UDF interfaces, UDF class
$className")
+ }
+
+ test("UDF_WITH_TOO_MANY_TYPE_ARGUMENT_ERROR: java udf with too many type
arguments") {
Review Comment:
```suggestion
test("UNSUPPORTED_FEATURE: java udf with too many type arguments") {
```
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]