aboutsummaryrefslogtreecommitdiff
path: root/sql/hive/src
diff options
context:
space:
mode:
authorgatorsmile <gatorsmile@gmail.com>2016-09-15 14:43:10 +0800
committerWenchen Fan <wenchen@databricks.com>2016-09-15 14:43:10 +0800
commit6a6adb1673775df63a62270879eac70f5f8d7d75 (patch)
treeef89cd39c929180ca4f899a43037c96d7f85d881 /sql/hive/src
parentbb322943623d14b85283705e74d913e31230387f (diff)
downloadspark-6a6adb1673775df63a62270879eac70f5f8d7d75.tar.gz
spark-6a6adb1673775df63a62270879eac70f5f8d7d75.tar.bz2
spark-6a6adb1673775df63a62270879eac70f5f8d7d75.zip
[SPARK-17440][SPARK-17441] Fixed Multiple Bugs in ALTER TABLE
### What changes were proposed in this pull request? For the following `ALTER TABLE` DDL, we should issue an exception when the target table is a `VIEW`: ```SQL ALTER TABLE viewName SET LOCATION '/path/to/your/lovely/heart' ALTER TABLE viewName SET SERDE 'whatever' ALTER TABLE viewName SET SERDEPROPERTIES ('x' = 'y') ALTER TABLE viewName PARTITION (a=1, b=2) SET SERDEPROPERTIES ('x' = 'y') ALTER TABLE viewName ADD IF NOT EXISTS PARTITION (a='4', b='8') ALTER TABLE viewName DROP IF EXISTS PARTITION (a='2') ALTER TABLE viewName RECOVER PARTITIONS ALTER TABLE viewName PARTITION (a='1', b='q') RENAME TO PARTITION (a='100', b='p') ``` In addition, `ALTER TABLE RENAME PARTITION` is unable to handle data source tables, just like the other `ALTER PARTITION` commands. We should issue an exception instead. ### How was this patch tested? Added a few test cases. Author: gatorsmile <gatorsmile@gmail.com> Closes #15004 from gatorsmile/altertable.
Diffstat (limited to 'sql/hive/src')
-rw-r--r--sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala67
1 files changed, 37 insertions, 30 deletions
diff --git a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala
index 3cba5b2a09..aa35a335fa 100644
--- a/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala
+++ b/sql/hive/src/test/scala/org/apache/spark/sql/hive/execution/HiveDDLSuite.scala
@@ -305,6 +305,16 @@ class HiveDDLSuite
}
}
+ private def assertErrorForAlterTableOnView(sqlText: String): Unit = {
+ val message = intercept[AnalysisException](sql(sqlText)).getMessage
+ assert(message.contains("Cannot alter a view with ALTER TABLE. Please use ALTER VIEW instead"))
+ }
+
+ private def assertErrorForAlterViewOnTable(sqlText: String): Unit = {
+ val message = intercept[AnalysisException](sql(sqlText)).getMessage
+ assert(message.contains("Cannot alter a table with ALTER VIEW. Please use ALTER TABLE instead"))
+ }
+
test("alter views and alter table - misuse") {
val tabName = "tab1"
withTable(tabName) {
@@ -317,45 +327,42 @@ class HiveDDLSuite
assert(catalog.tableExists(TableIdentifier(tabName)))
assert(catalog.tableExists(TableIdentifier(oldViewName)))
+ assert(!catalog.tableExists(TableIdentifier(newViewName)))
- var message = intercept[AnalysisException] {
- sql(s"ALTER VIEW $tabName RENAME TO $newViewName")
- }.getMessage
- assert(message.contains(
- "Cannot alter a table with ALTER VIEW. Please use ALTER TABLE instead"))
+ assertErrorForAlterViewOnTable(s"ALTER VIEW $tabName RENAME TO $newViewName")
- message = intercept[AnalysisException] {
- sql(s"ALTER VIEW $tabName SET TBLPROPERTIES ('p' = 'an')")
- }.getMessage
- assert(message.contains(
- "Cannot alter a table with ALTER VIEW. Please use ALTER TABLE instead"))
+ assertErrorForAlterTableOnView(s"ALTER TABLE $oldViewName RENAME TO $newViewName")
- message = intercept[AnalysisException] {
- sql(s"ALTER VIEW $tabName UNSET TBLPROPERTIES ('p')")
- }.getMessage
- assert(message.contains(
- "Cannot alter a table with ALTER VIEW. Please use ALTER TABLE instead"))
+ assertErrorForAlterViewOnTable(s"ALTER VIEW $tabName SET TBLPROPERTIES ('p' = 'an')")
- message = intercept[AnalysisException] {
- sql(s"ALTER TABLE $oldViewName RENAME TO $newViewName")
- }.getMessage
- assert(message.contains(
- "Cannot alter a view with ALTER TABLE. Please use ALTER VIEW instead"))
+ assertErrorForAlterTableOnView(s"ALTER TABLE $oldViewName SET TBLPROPERTIES ('p' = 'an')")
- message = intercept[AnalysisException] {
- sql(s"ALTER TABLE $oldViewName SET TBLPROPERTIES ('p' = 'an')")
- }.getMessage
- assert(message.contains(
- "Cannot alter a view with ALTER TABLE. Please use ALTER VIEW instead"))
+ assertErrorForAlterViewOnTable(s"ALTER VIEW $tabName UNSET TBLPROPERTIES ('p')")
- message = intercept[AnalysisException] {
- sql(s"ALTER TABLE $oldViewName UNSET TBLPROPERTIES ('p')")
- }.getMessage
- assert(message.contains(
- "Cannot alter a view with ALTER TABLE. Please use ALTER VIEW instead"))
+ assertErrorForAlterTableOnView(s"ALTER TABLE $oldViewName UNSET TBLPROPERTIES ('p')")
+
+ assertErrorForAlterTableOnView(s"ALTER TABLE $oldViewName SET LOCATION '/path/to/home'")
+
+ assertErrorForAlterTableOnView(s"ALTER TABLE $oldViewName SET SERDE 'whatever'")
+
+ assertErrorForAlterTableOnView(s"ALTER TABLE $oldViewName SET SERDEPROPERTIES ('x' = 'y')")
+
+ assertErrorForAlterTableOnView(
+ s"ALTER TABLE $oldViewName PARTITION (a=1, b=2) SET SERDEPROPERTIES ('x' = 'y')")
+
+ assertErrorForAlterTableOnView(
+ s"ALTER TABLE $oldViewName ADD IF NOT EXISTS PARTITION (a='4', b='8')")
+
+ assertErrorForAlterTableOnView(s"ALTER TABLE $oldViewName DROP IF EXISTS PARTITION (a='2')")
+
+ assertErrorForAlterTableOnView(s"ALTER TABLE $oldViewName RECOVER PARTITIONS")
+
+ assertErrorForAlterTableOnView(
+ s"ALTER TABLE $oldViewName PARTITION (a='1') RENAME TO PARTITION (a='100')")
assert(catalog.tableExists(TableIdentifier(tabName)))
assert(catalog.tableExists(TableIdentifier(oldViewName)))
+ assert(!catalog.tableExists(TableIdentifier(newViewName)))
}
}
}