ulysses-you commented on a change in pull request #28840: URL: https://github.com/apache/spark/pull/28840#discussion_r443276696
########## File path: sql/core/src/main/scala/org/apache/spark/sql/execution/command/functions.scala ########## @@ -236,6 +236,58 @@ case class ShowFunctionsCommand( } } + +/** + * A command for users to refresh the persistent function. + * The syntax of using this command in SQL is: + * {{{ + * REFRESH FUNCTION functionName + * }}} + */ +case class RefreshFunctionCommand( + databaseName: Option[String], + functionName: String) + extends RunnableCommand { + + override def run(sparkSession: SparkSession): Seq[Row] = { + val catalog = sparkSession.sessionState.catalog + if (FunctionRegistry.builtin.functionExists(FunctionIdentifier(functionName))) { + throw new AnalysisException(s"Cannot refresh native function $functionName") + } else if (catalog.isTemporaryFunction(FunctionIdentifier(functionName, databaseName))) { + throw new AnalysisException(s"Cannot refresh temp function $functionName") + } else { + // we only refresh the permanent function. + // there are 4 cases: + // 1. registry exists externalCatalog exists + // 2. registry exists externalCatalog not exists + // 3. registry not exists externalCatalog exists + // 4. registry not exists externalCatalog not exists + val identifier = FunctionIdentifier( + functionName, Some(databaseName.getOrElse(catalog.getCurrentDatabase))) + val isRegisteredFunction = catalog.isRegisteredFunction(identifier) + val isPersistentFunction = catalog.isPersistentFunction(identifier) + if (isRegisteredFunction && isPersistentFunction) { + // re-register function + catalog.unregisterFunction(identifier) Review comment: Since the `FunctionRegistry` is isolated across session, this will never happen in normal. ---------------------------------------------------------------- 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: us...@infra.apache.org --------------------------------------------------------------------- To unsubscribe, e-mail: reviews-unsubscr...@spark.apache.org For additional commands, e-mail: reviews-h...@spark.apache.org