diff --git a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java index 0920a9d..f1d29f8 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/metadata/Table.java @@ -196,6 +196,10 @@ public void checkValidity() throws HiveException { List colNames = new ArrayList(); while (iterCols.hasNext()) { String colName = iterCols.next().getName(); + if (!MetaStoreUtils.validateName(colName)) { + throw new HiveException("Invalid column name '" + colName + + "' in the table definition"); + } Iterator iter = colNames.iterator(); while (iter.hasNext()) { String oldColName = iter.next(); diff --git a/ql/src/test/queries/clientnegative/invalid_columns.q b/ql/src/test/queries/clientnegative/invalid_columns.q new file mode 100644 index 0000000..14b3409 --- /dev/null +++ b/ql/src/test/queries/clientnegative/invalid_columns.q @@ -0,0 +1,4 @@ +ADD JAR ../data/files/TestSerDe.jar; +CREATE TABLE DELETEJAR(KEY STRING, VALUE STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.TestSerDe' +STORED AS TEXTFILE +TBLPROPERTIES('columns'='valid_colname,invalid.colname'); diff --git a/ql/src/test/results/clientnegative/invalid_columns.q.out b/ql/src/test/results/clientnegative/invalid_columns.q.out new file mode 100644 index 0000000..ccc17d9 --- /dev/null +++ b/ql/src/test/results/clientnegative/invalid_columns.q.out @@ -0,0 +1,6 @@ +PREHOOK: query: CREATE TABLE DELETEJAR(KEY STRING, VALUE STRING) ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.TestSerDe' +STORED AS TEXTFILE +TBLPROPERTIES('columns'='valid_colname,invalid.colname') +PREHOOK: type: CREATETABLE +FAILED: Error in metadata: org.apache.hadoop.hive.ql.metadata.HiveException: Invalid column name 'invalid.colname' in the table definition +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask