diff --git ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java index 4af09f0c3c..226ba1895f 100644 --- ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java +++ ql/src/java/org/apache/hadoop/hive/ql/ErrorMsg.java @@ -471,6 +471,8 @@ INVALID_JOIN_CONDITION(10407, "Error parsing condition in join"), INVALID_TARGET_COLUMN_IN_SET_CLAUSE(10408, "Target column \"{0}\" of set clause is not found in table \"{1}\".", true), HIVE_GROUPING_FUNCTION_EXPR_NOT_IN_GROUPBY(10409, "Expression in GROUPING function not present in GROUP BY"), + ALTER_TABLE_NON_PARTITIONED_TABLE_CASCADE_NOT_SUPPORTED(10410, + "Alter table with non-partitioned table does not support cascade"), //========================== 20000 range starts here ========================// SCRIPT_INIT_ERROR(20000, "Unable to initialize custom script."), SCRIPT_IO_ERROR(20001, "An error occurred while reading or writing to your custom script. " diff --git ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index e9a4ff0748..55f07afaba 100644 --- ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -1494,6 +1494,12 @@ private void addInputsOutputsAlterTable(String tableName, Map pa } Table tab = getTable(tableName, true); + // cascade only occurs with partitioned table + if (isCascade && !tab.isPartitioned()) { + throw new SemanticException( + ErrorMsg.ALTER_TABLE_NON_PARTITIONED_TABLE_CASCADE_NOT_SUPPORTED); + } + // Determine the lock type to acquire WriteEntity.WriteType writeType = WriteEntity.determineAlterTableWriteType(op); diff --git ql/src/test/queries/clientnegative/alter_table_non_partitioned_table_cascade.q ql/src/test/queries/clientnegative/alter_table_non_partitioned_table_cascade.q new file mode 100644 index 0000000000..47ce383c8c --- /dev/null +++ ql/src/test/queries/clientnegative/alter_table_non_partitioned_table_cascade.q @@ -0,0 +1,4 @@ +drop table if exists alter_table_non_partition_cascade; +create table alter_table_non_partitioned_cascade(c1 string, c2 string); +describe alter_table_non_partitioned_cascade; +alter table alter_table_non_partitioned_cascade add columns (c3 string) cascade; \ No newline at end of file diff --git ql/src/test/results/clientnegative/alter_table_non_partitioned_cascade.q.out ql/src/test/results/clientnegative/alter_table_non_partitioned_cascade.q.out new file mode 100644 index 0000000000..e69de29bb2 diff --git ql/src/test/results/clientnegative/alter_table_non_partitioned_table_cascade.q.out ql/src/test/results/clientnegative/alter_table_non_partitioned_table_cascade.q.out new file mode 100644 index 0000000000..afa648dfde --- /dev/null +++ ql/src/test/results/clientnegative/alter_table_non_partitioned_table_cascade.q.out @@ -0,0 +1,21 @@ +PREHOOK: query: drop table if exists alter_table_non_partition_cascade +PREHOOK: type: DROPTABLE +POSTHOOK: query: drop table if exists alter_table_non_partition_cascade +POSTHOOK: type: DROPTABLE +PREHOOK: query: create table alter_table_non_partitioned_cascade(c1 string, c2 string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@alter_table_non_partitioned_cascade +POSTHOOK: query: create table alter_table_non_partitioned_cascade(c1 string, c2 string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@alter_table_non_partitioned_cascade +PREHOOK: query: describe alter_table_non_partitioned_cascade +PREHOOK: type: DESCTABLE +PREHOOK: Input: default@alter_table_non_partitioned_cascade +POSTHOOK: query: describe alter_table_non_partitioned_cascade +POSTHOOK: type: DESCTABLE +POSTHOOK: Input: default@alter_table_non_partitioned_cascade +c1 string +c2 string +FAILED: SemanticException [Error 10410]: Alter table with non-partitioned table does not support cascade