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

Reply via email to