Github user gatorsmile commented on a diff in the pull request: https://github.com/apache/spark/pull/12975#discussion_r62451866 --- Diff: sql/core/src/main/scala/org/apache/spark/sql/execution/command/functions.scala --- @@ -157,6 +157,9 @@ case class DropFunction( throw new AnalysisException(s"Specifying a database in DROP TEMPORARY FUNCTION " + s"is not allowed: '${databaseName.get}'") } + if (FunctionRegistry.builtin.functionExists(functionName)) { --- End diff -- Yeah, you can overwrite it by creating a temporary function, but you are unable to drop it. For example, ``` hive> drop function lower; FAILED: SemanticException [Error 10301]: Cannot drop native function lower hive> CREATE TEMPORARY FUNCTION lower AS 'org.apache.hadoop.hive.ql.udf.generic.GenericUDFUpper'; OK Time taken: 0.005 seconds hive> select lower('a'); OK A Time taken: 0.068 seconds, Fetched: 1 row(s) hive> drop temporary function lower; OK Time taken: 0.01 seconds hive> select lower('a'); OK a Time taken: 0.057 seconds, Fetched: 1 row(s) hive> drop function lower; FAILED: SemanticException [Error 10301]: Cannot drop native function lower ``` In this example, I overwrite the built-in function `lower` by creating the same name temporary function by the implementation of `upper`. Obviously, when I called `lower`, the actual logic is `upper`. That means, we can overwrite the built-in functions. After I dropping the temporary function, the built-in function becomes active again.
--- If your project is set up for it, you can reply to this email and have your reply appear on GitHub as well. If your project does not have this feature enabled and wishes so, or if the feature is enabled but not working, please contact infrastructure at infrastruct...@apache.org or file a JIRA ticket with INFRA. --- --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org