[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 <gatorsmile@gmail.com> Closes #12975 from gatorsmile/dropBuildInFunction.
This commit is contained in:
parent
beb16ec556
commit
b1e01fd519
|
@ -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.
|
||||
|
|
|
@ -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"),
|
||||
|
|
Loading…
Reference in a new issue