Repository: spark Updated Branches: refs/heads/master beb16ec55 -> b1e01fd51
[SPARK-15199][SQL] Disallow Dropping Build-in Functions #### What changes were proposed in this pull request? As Hive and the major RDBMS behave, the built-in functions are not allowed to drop. In the current implementation, users can drop the built-in functions. However, after dropping the built-in functions, users are unable to add them back. #### How was this patch tested? Added a test case. Author: gatorsmile <gatorsm...@gmail.com> Closes #12975 from gatorsmile/dropBuildInFunction. Project: http://git-wip-us.apache.org/repos/asf/spark/repo Commit: http://git-wip-us.apache.org/repos/asf/spark/commit/b1e01fd5 Tree: http://git-wip-us.apache.org/repos/asf/spark/tree/b1e01fd5 Diff: http://git-wip-us.apache.org/repos/asf/spark/diff/b1e01fd5 Branch: refs/heads/master Commit: b1e01fd519d4d1bc6d9bd2270f9504d757dbd0d2 Parents: beb16ec Author: gatorsmile <gatorsm...@gmail.com> Authored: Mon May 9 10:49:54 2016 -0700 Committer: Andrew Or <and...@databricks.com> Committed: Mon May 9 10:49:54 2016 -0700 ---------------------------------------------------------------------- .../spark/sql/execution/command/functions.scala | 5 ++++- .../spark/sql/execution/command/DDLSuite.scala | 22 ++++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/spark/blob/b1e01fd5/sql/core/src/main/scala/org/apache/spark/sql/execution/command/functions.scala ---------------------------------------------------------------------- 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 79c3648..a9aa8d7 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 @@ -19,7 +19,7 @@ package org.apache.spark.sql.execution.command import org.apache.spark.sql.{AnalysisException, Row, SparkSession} import org.apache.spark.sql.catalyst.FunctionIdentifier -import org.apache.spark.sql.catalyst.analysis.NoSuchFunctionException +import org.apache.spark.sql.catalyst.analysis.{FunctionRegistry, NoSuchFunctionException} import org.apache.spark.sql.catalyst.catalog.CatalogFunction import org.apache.spark.sql.catalyst.expressions.{Attribute, ExpressionInfo} import org.apache.spark.sql.types.{StringType, StructField, StructType} @@ -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)) { + throw new AnalysisException(s"Cannot drop native function '$functionName'") + } catalog.dropTempFunction(functionName, ifExists) } else { // We are dropping a permanent function. http://git-wip-us.apache.org/repos/asf/spark/blob/b1e01fd5/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala ---------------------------------------------------------------------- diff --git a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala index 13074a6..d115567 100644 --- a/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala +++ b/sql/core/src/test/scala/org/apache/spark/sql/execution/command/DDLSuite.scala @@ -927,6 +927,28 @@ class DDLSuite extends QueryTest with SharedSQLContext with BeforeAndAfterEach { } } + test("drop build-in function") { + Seq("true", "false").foreach { caseSensitive => + withSQLConf(SQLConf.CASE_SENSITIVE.key -> caseSensitive) { + // partition to add already exists + var e = intercept[AnalysisException] { + sql("DROP TEMPORARY FUNCTION year") + } + assert(e.getMessage.contains("Cannot drop native function 'year'")) + + e = intercept[AnalysisException] { + sql("DROP TEMPORARY FUNCTION YeAr") + } + assert(e.getMessage.contains("Cannot drop native function 'YeAr'")) + + e = intercept[AnalysisException] { + sql("DROP TEMPORARY FUNCTION `YeAr`") + } + assert(e.getMessage.contains("Cannot drop native function 'YeAr'")) + } + } + } + test("describe function") { checkAnswer( sql("DESCRIBE FUNCTION log"), --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@spark.apache.org For additional commands, e-mail: commits-h...@spark.apache.org