diff --git a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java index 276bfdd..a6218c4 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/parse/DDLSemanticAnalyzer.java @@ -2325,6 +2325,11 @@ public class DDLSemanticAnalyzer extends BaseSemanticAnalyzer { } for (AddPartitionDesc addPartitionDesc : partitionDescs) { + try { + tab.isValidSpec(addPartitionDesc.getPartSpec()); + } catch (HiveException ex) { + throw new SemanticException(ex.getMessage(), ex); + } rootTasks.add(TaskFactory.get(new DDLWork(getInputs(), getOutputs(), addPartitionDesc), conf)); } diff --git a/ql/src/test/queries/clientnegative/alter_table_add_partition.q b/ql/src/test/queries/clientnegative/alter_table_add_partition.q new file mode 100644 index 0000000..2427c3b --- /dev/null +++ b/ql/src/test/queries/clientnegative/alter_table_add_partition.q @@ -0,0 +1,5 @@ +create table mp (a int) partitioned by (b int); + +-- should fail +alter table mp add partition (b='1', c='1'); + diff --git a/ql/src/test/results/clientnegative/alter_table_add_partition.q.out b/ql/src/test/results/clientnegative/alter_table_add_partition.q.out new file mode 100644 index 0000000..572a439 --- /dev/null +++ b/ql/src/test/results/clientnegative/alter_table_add_partition.q.out @@ -0,0 +1,6 @@ +PREHOOK: query: create table mp (a int) partitioned by (b int) +PREHOOK: type: CREATETABLE +POSTHOOK: query: create table mp (a int) partitioned by (b int) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: default@mp +FAILED: SemanticException table is partitioned but partition spec is not specified or does not fully match table partitioning: {b=1, c=1}