ulysses-you commented on a change in pull request #28840:
URL: https://github.com/apache/spark/pull/28840#discussion_r454711872
##########
File path:
sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala
##########
@@ -3030,6 +3030,47 @@ abstract class DDLSuite extends QueryTest with
SQLTestUtils {
}
}
}
+
+ test("REFRESH FUNCTION") {
+ val msg = intercept[AnalysisException] {
+ sql("REFRESH FUNCTION md5")
+ }.getMessage
+ assert(msg.contains("Cannot refresh builtin function"))
+
+ withUserDefinedFunction("func1" -> true) {
+ sql("CREATE TEMPORARY FUNCTION func1 AS
'test.org.apache.spark.sql.MyDoubleAvg'")
+ val msg = intercept[AnalysisException] {
+ sql("REFRESH FUNCTION func1")
+ }.getMessage
+ assert(msg.contains("Cannot refresh temporary function"))
+ }
+
+ withUserDefinedFunction("func1" -> false) {
+ intercept[NoSuchFunctionException] {
+ sql("REFRESH FUNCTION func1")
+ }
+
+ val func = FunctionIdentifier("func1", Some("default"))
+ sql("CREATE FUNCTION func1 AS 'test.org.apache.spark.sql.MyDoubleAvg'")
+ assert(!spark.sessionState.catalog.isRegisteredFunction(func))
+ sql("REFRESH FUNCTION func1")
+ assert(spark.sessionState.catalog.isRegisteredFunction(func))
+
+ spark.sessionState.catalog.externalCatalog.dropFunction("default",
"func1")
+ assert(spark.sessionState.catalog.isRegisteredFunction(func))
+ sql("REFRESH FUNCTION func1")
+ assert(!spark.sessionState.catalog.isRegisteredFunction(func))
+
+ val function = CatalogFunction(func, "test.non.exists.udf", Seq.empty)
+ spark.sessionState.catalog.createFunction(function, false)
Review comment:
If we make `REFRESH FUNCTION` lazy as `CREATE FUNCTION`, something like
this
```
if (catalog.isRegisteredFunction(identifier)) {
catalog.unregisterFunction(identifier)
}
if (!catalog.isPersistentFunction(identifier)) {
throw new NoSuchFunctionException(identifier.database.get, functionName)
}
```
The different thing is we don't register/check function and the
register/check action happened when user query with this function like `select
func(f)`.
I think it might be better to do the function check right now.
----------------------------------------------------------------
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.
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]