diff --git a/itests/src/test/resources/testconfiguration.properties b/itests/src/test/resources/testconfiguration.properties index 39ba628..f2c5ac1 100644 --- a/itests/src/test/resources/testconfiguration.properties +++ b/itests/src/test/resources/testconfiguration.properties @@ -93,6 +93,7 @@ minitez.query.files.shared=acid_globallimit.q,\ cbo_union.q,\ cbo_views.q,\ cbo_windowing.q,\ + column_names_with_leading_and_trailing_spaces.q,\ constprog_semijoin.q,\ correlationoptimizer1.q,\ count.q,\ diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java index 70cb618..ec24fe9 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -1339,7 +1339,7 @@ private MTable convertToMTable(Table tbl) throws InvalidObjectException, if (keys != null) { mkeys = new ArrayList(keys.size()); for (FieldSchema part : keys) { - mkeys.add(new MFieldSchema(HiveStringUtils.normalizeIdentifier(part.getName()), + mkeys.add(new MFieldSchema(part.getName().toLowerCase(), part.getType(), part.getComment())); } } diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java b/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java index f7d5735..a73dbeb 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java @@ -298,8 +298,8 @@ private void normalizeColumnNames(Table tbl) { private List normalizeFieldSchemaList(List fieldschemas) { List ret = new ArrayList<>(); for (FieldSchema fieldSchema : fieldschemas) { - ret.add(new FieldSchema(HiveStringUtils.normalizeIdentifier(fieldSchema.getName()), - fieldSchema.getType(), fieldSchema.getComment())); + ret.add(new FieldSchema(fieldSchema.getName().toLowerCase(), fieldSchema.getType(), + fieldSchema.getComment())); } return ret; } diff --git a/ql/src/test/queries/clientpositive/column_names_with_leading_and_trailing_spaces.q b/ql/src/test/queries/clientpositive/column_names_with_leading_and_trailing_spaces.q new file mode 100644 index 0000000..bdd0d21 --- /dev/null +++ b/ql/src/test/queries/clientpositive/column_names_with_leading_and_trailing_spaces.q @@ -0,0 +1,11 @@ +set hive.mapred.mode=nonstrict; + +create table space (` left` string, ` middle ` string, `right ` string); + +insert into space values ("1", "2", "3"); + +select * from space; + +insert into space (` middle `) values("2"); + +select * from space order by ` left`; diff --git a/ql/src/test/results/clientpositive/column_names_with_leading_and_trailing_spaces.q.out b/ql/src/test/results/clientpositive/column_names_with_leading_and_trailing_spaces.q.out new file mode 100644 index 0000000..adc6698 --- /dev/null +++ b/ql/src/test/results/clientpositive/column_names_with_leading_and_trailing_spaces.q.out @@ -0,0 +1,49 @@ +PREHOOK: query: create table space (` left` string, ` middle ` string, `right ` string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@space +POSTHOOK: query: create table space (` left` string, ` middle ` string, `right ` string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@space +PREHOOK: query: insert into space values ("1", "2", "3") +PREHOOK: type: QUERY +PREHOOK: Input: default@values__tmp__table__1 +PREHOOK: Output: default@space +POSTHOOK: query: insert into space values ("1", "2", "3") +POSTHOOK: type: QUERY +POSTHOOK: Input: default@values__tmp__table__1 +POSTHOOK: Output: default@space +POSTHOOK: Lineage: space. left SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +POSTHOOK: Lineage: space. middle SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ] +POSTHOOK: Lineage: space.right SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col3, type:string, comment:), ] +PREHOOK: query: select * from space +PREHOOK: type: QUERY +PREHOOK: Input: default@space +#### A masked pattern was here #### +POSTHOOK: query: select * from space +POSTHOOK: type: QUERY +POSTHOOK: Input: default@space +#### A masked pattern was here #### +1 2 3 +PREHOOK: query: insert into space (` middle `) values("2") +PREHOOK: type: QUERY +PREHOOK: Input: default@values__tmp__table__2 +PREHOOK: Output: default@space +POSTHOOK: query: insert into space (` middle `) values("2") +POSTHOOK: type: QUERY +POSTHOOK: Input: default@values__tmp__table__2 +POSTHOOK: Output: default@space +POSTHOOK: Lineage: space. left SIMPLE [] +POSTHOOK: Lineage: space. middle SIMPLE [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +POSTHOOK: Lineage: space.right SIMPLE [] +PREHOOK: query: select * from space order by ` left` +PREHOOK: type: QUERY +PREHOOK: Input: default@space +#### A masked pattern was here #### +POSTHOOK: query: select * from space order by ` left` +POSTHOOK: type: QUERY +POSTHOOK: Input: default@space +#### A masked pattern was here #### +NULL 2 NULL +1 2 3 diff --git a/ql/src/test/results/clientpositive/tez/column_names_with_leading_and_trailing_spaces.q.out b/ql/src/test/results/clientpositive/tez/column_names_with_leading_and_trailing_spaces.q.out new file mode 100644 index 0000000..adc6698 --- /dev/null +++ b/ql/src/test/results/clientpositive/tez/column_names_with_leading_and_trailing_spaces.q.out @@ -0,0 +1,49 @@ +PREHOOK: query: create table space (` left` string, ` middle ` string, `right ` string) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:default +PREHOOK: Output: default@space +POSTHOOK: query: create table space (` left` string, ` middle ` string, `right ` string) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:default +POSTHOOK: Output: default@space +PREHOOK: query: insert into space values ("1", "2", "3") +PREHOOK: type: QUERY +PREHOOK: Input: default@values__tmp__table__1 +PREHOOK: Output: default@space +POSTHOOK: query: insert into space values ("1", "2", "3") +POSTHOOK: type: QUERY +POSTHOOK: Input: default@values__tmp__table__1 +POSTHOOK: Output: default@space +POSTHOOK: Lineage: space. left SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +POSTHOOK: Lineage: space. middle SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col2, type:string, comment:), ] +POSTHOOK: Lineage: space.right SIMPLE [(values__tmp__table__1)values__tmp__table__1.FieldSchema(name:tmp_values_col3, type:string, comment:), ] +PREHOOK: query: select * from space +PREHOOK: type: QUERY +PREHOOK: Input: default@space +#### A masked pattern was here #### +POSTHOOK: query: select * from space +POSTHOOK: type: QUERY +POSTHOOK: Input: default@space +#### A masked pattern was here #### +1 2 3 +PREHOOK: query: insert into space (` middle `) values("2") +PREHOOK: type: QUERY +PREHOOK: Input: default@values__tmp__table__2 +PREHOOK: Output: default@space +POSTHOOK: query: insert into space (` middle `) values("2") +POSTHOOK: type: QUERY +POSTHOOK: Input: default@values__tmp__table__2 +POSTHOOK: Output: default@space +POSTHOOK: Lineage: space. left SIMPLE [] +POSTHOOK: Lineage: space. middle SIMPLE [(values__tmp__table__2)values__tmp__table__2.FieldSchema(name:tmp_values_col1, type:string, comment:), ] +POSTHOOK: Lineage: space.right SIMPLE [] +PREHOOK: query: select * from space order by ` left` +PREHOOK: type: QUERY +PREHOOK: Input: default@space +#### A masked pattern was here #### +POSTHOOK: query: select * from space order by ` left` +POSTHOOK: type: QUERY +POSTHOOK: Input: default@space +#### A masked pattern was here #### +NULL 2 NULL +1 2 3