aboutsummaryrefslogtreecommitdiff
path: root/sql/core
diff options
context:
space:
mode:
authorXiao Li <gatorsmile@gmail.com>2017-04-12 09:01:26 -0700
committerXiao Li <gatorsmile@gmail.com>2017-04-12 09:01:26 -0700
commit504e62e2f4b7df7e002ea014a855cebe1ff95193 (patch)
treee24fb9939cf38f1be5590882175a7d33961b81b8 /sql/core
parentceaf77ae43a14e993ac6d1ff34b50256eacd6abb (diff)
downloadspark-504e62e2f4b7df7e002ea014a855cebe1ff95193.tar.gz
spark-504e62e2f4b7df7e002ea014a855cebe1ff95193.tar.bz2
spark-504e62e2f4b7df7e002ea014a855cebe1ff95193.zip
[SPARK-20303][SQL] Rename createTempFunction to registerFunction
### What changes were proposed in this pull request? Session catalog API `createTempFunction` is being used by Hive build-in functions, persistent functions, and temporary functions. Thus, the name is confusing. This PR is to rename it by `registerFunction`. Also we can move construction of `FunctionBuilder` and `ExpressionInfo` into the new `registerFunction`, instead of duplicating the logics everywhere. In the next PRs, the remaining Function-related APIs also need cleanups. ### How was this patch tested? Existing test cases. Author: Xiao Li <gatorsmile@gmail.com> Closes #17615 from gatorsmile/cleanupCreateTempFunction.
Diffstat (limited to 'sql/core')
-rw-r--r--sql/core/src/main/scala/org/apache/spark/sql/execution/command/functions.scala9
-rw-r--r--sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala5
2 files changed, 6 insertions, 8 deletions
diff --git a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/functions.scala b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/functions.scala
index 5687f93324..e0d0029369 100644
--- a/sql/core/src/main/scala/org/apache/spark/sql/execution/command/functions.scala
+++ b/sql/core/src/main/scala/org/apache/spark/sql/execution/command/functions.scala
@@ -51,6 +51,7 @@ case class CreateFunctionCommand(
override def run(sparkSession: SparkSession): Seq[Row] = {
val catalog = sparkSession.sessionState.catalog
+ val func = CatalogFunction(FunctionIdentifier(functionName, databaseName), className, resources)
if (isTemp) {
if (databaseName.isDefined) {
throw new AnalysisException(s"Specifying a database in CREATE TEMPORARY FUNCTION " +
@@ -59,17 +60,13 @@ case class CreateFunctionCommand(
// We first load resources and then put the builder in the function registry.
// Please note that it is allowed to overwrite an existing temp function.
catalog.loadFunctionResources(resources)
- val info = new ExpressionInfo(className, functionName)
- val builder = catalog.makeFunctionBuilder(functionName, className)
- catalog.createTempFunction(functionName, info, builder, ignoreIfExists = false)
+ catalog.registerFunction(func, ignoreIfExists = false)
} else {
// For a permanent, we will store the metadata into underlying external catalog.
// This function will be loaded into the FunctionRegistry when a query uses it.
// We do not load it into FunctionRegistry right now.
// TODO: should we also parse "IF NOT EXISTS"?
- catalog.createFunction(
- CatalogFunction(FunctionIdentifier(functionName, databaseName), className, resources),
- ignoreIfExists = false)
+ catalog.createFunction(func, ignoreIfExists = false)
}
Seq.empty[Row]
}
diff --git a/sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala
index 6469e501c1..8f9c52cb1e 100644
--- a/sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala
+++ b/sql/core/src/test/scala/org/apache/spark/sql/internal/CatalogSuite.scala
@@ -75,9 +75,10 @@ class CatalogSuite
}
private def createTempFunction(name: String): Unit = {
- val info = new ExpressionInfo("className", name)
val tempFunc = (e: Seq[Expression]) => e.head
- sessionCatalog.createTempFunction(name, info, tempFunc, ignoreIfExists = false)
+ val funcMeta = CatalogFunction(FunctionIdentifier(name, None), "className", Nil)
+ sessionCatalog.registerFunction(
+ funcMeta, ignoreIfExists = false, functionBuilder = Some(tempFunc))
}
private def dropFunction(name: String, db: Option[String] = None): Unit = {