Repository: hive Updated Branches: refs/heads/master 4e162e01f -> 90f2a047a
HIVE-15724 : getPrimaryKeys and getForeignKeys in metastore does not normalize db and table name (Daniel Dai via Pengcheng Xiong) Signed-off-by: Ashutosh Chauhan <hashut...@apache.org> Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/90f2a047 Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/90f2a047 Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/90f2a047 Branch: refs/heads/master Commit: 90f2a047af1788c070900c999a181a4863bfe045 Parents: 4e162e0 Author: Daniel Dai <da...@hortonworks.com> Authored: Tue Jan 24 23:22:00 2017 -0800 Committer: Ashutosh Chauhan <hashut...@apache.org> Committed: Tue Apr 4 09:49:58 2017 -0700 ---------------------------------------------------------------------- .../hadoop/hive/metastore/ObjectStore.java | 19 +++++-- .../hadoop/hive/metastore/hbase/HBaseStore.java | 22 ++++++++ .../clientpositive/create_with_constraints.q | 24 ++++----- .../create_with_constraints.q.out | 56 ++++++++++---------- 4 files changed, 76 insertions(+), 45 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/90f2a047/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java ---------------------------------------------------------------------- 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 a63519a..6b21751 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -1139,6 +1139,9 @@ public class ObjectStore implements RawStore, Configurable { private List<MConstraint> listAllTableConstraintsWithOptionalConstraintName (String dbName, String tableName, String constraintname) { + dbName = HiveStringUtils.normalizeIdentifier(dbName); + tableName = HiveStringUtils.normalizeIdentifier(tableName); + constraintname = constraintname!=null?HiveStringUtils.normalizeIdentifier(constraintname):null; List<MConstraint> mConstraints = null; List<String> constraintNames = new ArrayList<String>(); Query query = null; @@ -8540,10 +8543,12 @@ public class ObjectStore implements RawStore, Configurable { } } - protected List<SQLPrimaryKey> getPrimaryKeysInternal(final String db_name, - final String tbl_name, + protected List<SQLPrimaryKey> getPrimaryKeysInternal(final String db_name_input, + final String tbl_name_input, boolean allowSql, boolean allowJdo) throws MetaException, NoSuchObjectException { + final String db_name = HiveStringUtils.normalizeIdentifier(db_name_input); + final String tbl_name = HiveStringUtils.normalizeIdentifier(tbl_name_input); return new GetListHelper<SQLPrimaryKey>(db_name, tbl_name, allowSql, allowJdo) { @Override @@ -8637,9 +8642,13 @@ public class ObjectStore implements RawStore, Configurable { } } - protected List<SQLForeignKey> getForeignKeysInternal(final String parent_db_name, - final String parent_tbl_name, final String foreign_db_name, final String foreign_tbl_name, - boolean allowSql, boolean allowJdo) throws MetaException, NoSuchObjectException { + protected List<SQLForeignKey> getForeignKeysInternal(final String parent_db_name_input, + final String parent_tbl_name_input, final String foreign_db_name_input, + final String foreign_tbl_name_input, boolean allowSql, boolean allowJdo) throws MetaException, NoSuchObjectException { + final String parent_db_name = parent_db_name_input; + final String parent_tbl_name = parent_tbl_name_input; + final String foreign_db_name = foreign_db_name_input; + final String foreign_tbl_name = foreign_tbl_name_input; return new GetListHelper<SQLForeignKey>(foreign_db_name, foreign_tbl_name, allowSql, allowJdo) { @Override http://git-wip-us.apache.org/repos/asf/hive/blob/90f2a047/metastore/src/java/org/apache/hadoop/hive/metastore/hbase/HBaseStore.java ---------------------------------------------------------------------- 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 6593fa6..f9619e5 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 @@ -2692,6 +2692,8 @@ public class HBaseStore implements RawStore { @Override public List<SQLPrimaryKey> getPrimaryKeys(String db_name, String tbl_name) throws MetaException { + db_name = HiveStringUtils.normalizeIdentifier(db_name); + tbl_name = HiveStringUtils.normalizeIdentifier(tbl_name); boolean commit = false; openTransaction(); try { @@ -2710,6 +2712,10 @@ public class HBaseStore implements RawStore { public List<SQLForeignKey> getForeignKeys(String parent_db_name, String parent_tbl_name, String foreign_db_name, String foreign_tbl_name) throws MetaException { + parent_db_name = parent_db_name!=null?HiveStringUtils.normalizeIdentifier(parent_db_name):null; + parent_tbl_name = parent_tbl_name!=null?HiveStringUtils.normalizeIdentifier(parent_tbl_name):null; + foreign_db_name = HiveStringUtils.normalizeIdentifier(foreign_db_name); + foreign_tbl_name = HiveStringUtils.normalizeIdentifier(foreign_tbl_name); boolean commit = false; openTransaction(); try { @@ -2754,6 +2760,9 @@ public class HBaseStore implements RawStore { // This is something of pain, since we have to search both primary key and foreign key to see // which they want to drop. boolean commit = false; + dbName = HiveStringUtils.normalizeIdentifier(dbName); + tableName = HiveStringUtils.normalizeIdentifier(tableName); + constraintName = HiveStringUtils.normalizeIdentifier(constraintName); openTransaction(); try { List<SQLPrimaryKey> pk = getHBase().getPrimaryKey(dbName, tableName); @@ -2793,6 +2802,12 @@ public class HBaseStore implements RawStore { @Override public void addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException, MetaException { boolean commit = false; + for (SQLPrimaryKey pk : pks) { + pk.setTable_db(HiveStringUtils.normalizeIdentifier(pk.getTable_db())); + pk.setTable_name(HiveStringUtils.normalizeIdentifier(pk.getTable_name())); + pk.setColumn_name(HiveStringUtils.normalizeIdentifier(pk.getColumn_name())); + pk.setPk_name(HiveStringUtils.normalizeIdentifier(pk.getPk_name())); + } openTransaction(); try { List<SQLPrimaryKey> currentPk = @@ -2814,6 +2829,13 @@ public class HBaseStore implements RawStore { @Override public void addForeignKeys(List<SQLForeignKey> fks) throws InvalidObjectException, MetaException { boolean commit = false; + for (SQLForeignKey fk : fks) { + fk.setPktable_db(HiveStringUtils.normalizeIdentifier(fk.getPktable_db())); + fk.setPktable_name(HiveStringUtils.normalizeIdentifier(fk.getPktable_name())); + fk.setFktable_db(HiveStringUtils.normalizeIdentifier(fk.getFktable_db())); + fk.setFktable_name(HiveStringUtils.normalizeIdentifier(fk.getFktable_name())); + fk.setFk_name(HiveStringUtils.normalizeIdentifier(fk.getFk_name())); + } openTransaction(); try { // Fetch the existing keys (if any) and add in these new ones http://git-wip-us.apache.org/repos/asf/hive/blob/90f2a047/ql/src/test/queries/clientpositive/create_with_constraints.q ---------------------------------------------------------------------- diff --git a/ql/src/test/queries/clientpositive/create_with_constraints.q b/ql/src/test/queries/clientpositive/create_with_constraints.q index 10cb1c9..7dc15c1 100644 --- a/ql/src/test/queries/clientpositive/create_with_constraints.q +++ b/ql/src/test/queries/clientpositive/create_with_constraints.q @@ -57,20 +57,20 @@ DESCRIBE FORMATTED table2; DESCRIBE FORMATTED table3; DESCRIBE FORMATTED table6; -CREATE DATABASE dbconstraint; -USE dbconstraint; -CREATE TABLE table2 (a STRING, b STRING, constraint pk1 primary key (a) disable novalidate); +CREATE DATABASE DbConstraint; +USE DbConstraint; +CREATE TABLE Table2 (a STRING, b STRING, constraint Pk1 primary key (a) disable novalidate); USE default; -DESCRIBE EXTENDED dbconstraint.table2; -DESCRIBE FORMATTED dbconstraint.table2; +DESCRIBE EXTENDED DbConstraint.Table2; +DESCRIBE FORMATTED DbConstraint.Table2; -ALTER TABLE dbconstraint.table2 DROP CONSTRAINT pk1; +ALTER TABLE DbConstraint.Table2 DROP CONSTRAINT Pk1; -DESCRIBE EXTENDED dbconstraint.table2; -DESCRIBE FORMATTED dbconstraint.table2; +DESCRIBE EXTENDED DbConstraint.Table2; +DESCRIBE FORMATTED DbConstraint.Table2; -ALTER TABLE dbconstraint.table2 ADD CONSTRAINT pk1 primary key (a) disable novalidate; -DESCRIBE FORMATTED dbconstraint.table2; -ALTER TABLE dbconstraint.table2 ADD CONSTRAINT fkx FOREIGN KEY (b) REFERENCES table1(a) DISABLE NOVALIDATE; -DESCRIBE FORMATTED dbconstraint.table2; +ALTER TABLE DbConstraint.Table2 ADD CONSTRAINT Pk1 primary key (a) disable novalidate; +DESCRIBE FORMATTED DbConstraint.Table2; +ALTER TABLE DbConstraint.Table2 ADD CONSTRAINT fkx FOREIGN KEY (b) REFERENCES table1(a) DISABLE NOVALIDATE; +DESCRIBE FORMATTED DbConstraint.Table2; http://git-wip-us.apache.org/repos/asf/hive/blob/90f2a047/ql/src/test/results/clientpositive/create_with_constraints.q.out ---------------------------------------------------------------------- diff --git a/ql/src/test/results/clientpositive/create_with_constraints.q.out b/ql/src/test/results/clientpositive/create_with_constraints.q.out index 056ca38..64c3ec6 100644 --- a/ql/src/test/results/clientpositive/create_with_constraints.q.out +++ b/ql/src/test/results/clientpositive/create_with_constraints.q.out @@ -1039,36 +1039,36 @@ Parent Column Name:default.table1.a Column Name:y Key Sequence:1 Constraint Name: #### A masked pattern was here #### Parent Column Name:default.table2.a Column Name:x Key Sequence:1 -PREHOOK: query: CREATE DATABASE dbconstraint +PREHOOK: query: CREATE DATABASE DbConstraint PREHOOK: type: CREATEDATABASE -PREHOOK: Output: database:dbconstraint -POSTHOOK: query: CREATE DATABASE dbconstraint +PREHOOK: Output: database:DbConstraint +POSTHOOK: query: CREATE DATABASE DbConstraint POSTHOOK: type: CREATEDATABASE -POSTHOOK: Output: database:dbconstraint -PREHOOK: query: USE dbconstraint +POSTHOOK: Output: database:DbConstraint +PREHOOK: query: USE DbConstraint PREHOOK: type: SWITCHDATABASE PREHOOK: Input: database:dbconstraint -POSTHOOK: query: USE dbconstraint +POSTHOOK: query: USE DbConstraint POSTHOOK: type: SWITCHDATABASE POSTHOOK: Input: database:dbconstraint -PREHOOK: query: CREATE TABLE table2 (a STRING, b STRING, constraint pk1 primary key (a) disable novalidate) +PREHOOK: query: CREATE TABLE Table2 (a STRING, b STRING, constraint Pk1 primary key (a) disable novalidate) PREHOOK: type: CREATETABLE +PREHOOK: Output: DbConstraint@Table2 PREHOOK: Output: database:dbconstraint -PREHOOK: Output: dbconstraint@table2 -POSTHOOK: query: CREATE TABLE table2 (a STRING, b STRING, constraint pk1 primary key (a) disable novalidate) +POSTHOOK: query: CREATE TABLE Table2 (a STRING, b STRING, constraint Pk1 primary key (a) disable novalidate) POSTHOOK: type: CREATETABLE +POSTHOOK: Output: DbConstraint@Table2 POSTHOOK: Output: database:dbconstraint -POSTHOOK: Output: dbconstraint@table2 PREHOOK: query: USE default PREHOOK: type: SWITCHDATABASE PREHOOK: Input: database:default POSTHOOK: query: USE default POSTHOOK: type: SWITCHDATABASE POSTHOOK: Input: database:default -PREHOOK: query: DESCRIBE EXTENDED dbconstraint.table2 +PREHOOK: query: DESCRIBE EXTENDED DbConstraint.Table2 PREHOOK: type: DESCTABLE PREHOOK: Input: dbconstraint@table2 -POSTHOOK: query: DESCRIBE EXTENDED dbconstraint.table2 +POSTHOOK: query: DESCRIBE EXTENDED DbConstraint.Table2 POSTHOOK: type: DESCTABLE POSTHOOK: Input: dbconstraint@table2 a string @@ -1076,10 +1076,10 @@ b string #### A masked pattern was here #### Constraints Primary Key for dbconstraint.table2:[a], Constraint Name: pk1 -PREHOOK: query: DESCRIBE FORMATTED dbconstraint.table2 +PREHOOK: query: DESCRIBE FORMATTED DbConstraint.Table2 PREHOOK: type: DESCTABLE PREHOOK: Input: dbconstraint@table2 -POSTHOOK: query: DESCRIBE FORMATTED dbconstraint.table2 +POSTHOOK: query: DESCRIBE FORMATTED DbConstraint.Table2 POSTHOOK: type: DESCTABLE POSTHOOK: Input: dbconstraint@table2 # col_name data_type comment @@ -1118,24 +1118,24 @@ Storage Desc Params: Table: dbconstraint.table2 Constraint Name: pk1 Column Names: a -PREHOOK: query: ALTER TABLE dbconstraint.table2 DROP CONSTRAINT pk1 +PREHOOK: query: ALTER TABLE DbConstraint.Table2 DROP CONSTRAINT Pk1 PREHOOK: type: ALTERTABLE_DROPCONSTRAINT -POSTHOOK: query: ALTER TABLE dbconstraint.table2 DROP CONSTRAINT pk1 +POSTHOOK: query: ALTER TABLE DbConstraint.Table2 DROP CONSTRAINT Pk1 POSTHOOK: type: ALTERTABLE_DROPCONSTRAINT -PREHOOK: query: DESCRIBE EXTENDED dbconstraint.table2 +PREHOOK: query: DESCRIBE EXTENDED DbConstraint.Table2 PREHOOK: type: DESCTABLE PREHOOK: Input: dbconstraint@table2 -POSTHOOK: query: DESCRIBE EXTENDED dbconstraint.table2 +POSTHOOK: query: DESCRIBE EXTENDED DbConstraint.Table2 POSTHOOK: type: DESCTABLE POSTHOOK: Input: dbconstraint@table2 a string b string #### A masked pattern was here #### -PREHOOK: query: DESCRIBE FORMATTED dbconstraint.table2 +PREHOOK: query: DESCRIBE FORMATTED DbConstraint.Table2 PREHOOK: type: DESCTABLE PREHOOK: Input: dbconstraint@table2 -POSTHOOK: query: DESCRIBE FORMATTED dbconstraint.table2 +POSTHOOK: query: DESCRIBE FORMATTED DbConstraint.Table2 POSTHOOK: type: DESCTABLE POSTHOOK: Input: dbconstraint@table2 # col_name data_type comment @@ -1167,14 +1167,14 @@ Bucket Columns: [] Sort Columns: [] Storage Desc Params: serialization.format 1 -PREHOOK: query: ALTER TABLE dbconstraint.table2 ADD CONSTRAINT pk1 primary key (a) disable novalidate +PREHOOK: query: ALTER TABLE DbConstraint.Table2 ADD CONSTRAINT Pk1 primary key (a) disable novalidate PREHOOK: type: ALTERTABLE_ADDCONSTRAINT -POSTHOOK: query: ALTER TABLE dbconstraint.table2 ADD CONSTRAINT pk1 primary key (a) disable novalidate +POSTHOOK: query: ALTER TABLE DbConstraint.Table2 ADD CONSTRAINT Pk1 primary key (a) disable novalidate POSTHOOK: type: ALTERTABLE_ADDCONSTRAINT -PREHOOK: query: DESCRIBE FORMATTED dbconstraint.table2 +PREHOOK: query: DESCRIBE FORMATTED DbConstraint.Table2 PREHOOK: type: DESCTABLE PREHOOK: Input: dbconstraint@table2 -POSTHOOK: query: DESCRIBE FORMATTED dbconstraint.table2 +POSTHOOK: query: DESCRIBE FORMATTED DbConstraint.Table2 POSTHOOK: type: DESCTABLE POSTHOOK: Input: dbconstraint@table2 # col_name data_type comment @@ -1213,14 +1213,14 @@ Storage Desc Params: Table: dbconstraint.table2 Constraint Name: pk1 Column Names: a -PREHOOK: query: ALTER TABLE dbconstraint.table2 ADD CONSTRAINT fkx FOREIGN KEY (b) REFERENCES table1(a) DISABLE NOVALIDATE +PREHOOK: query: ALTER TABLE DbConstraint.Table2 ADD CONSTRAINT fkx FOREIGN KEY (b) REFERENCES table1(a) DISABLE NOVALIDATE PREHOOK: type: ALTERTABLE_ADDCONSTRAINT -POSTHOOK: query: ALTER TABLE dbconstraint.table2 ADD CONSTRAINT fkx FOREIGN KEY (b) REFERENCES table1(a) DISABLE NOVALIDATE +POSTHOOK: query: ALTER TABLE DbConstraint.Table2 ADD CONSTRAINT fkx FOREIGN KEY (b) REFERENCES table1(a) DISABLE NOVALIDATE POSTHOOK: type: ALTERTABLE_ADDCONSTRAINT -PREHOOK: query: DESCRIBE FORMATTED dbconstraint.table2 +PREHOOK: query: DESCRIBE FORMATTED DbConstraint.Table2 PREHOOK: type: DESCTABLE PREHOOK: Input: dbconstraint@table2 -POSTHOOK: query: DESCRIBE FORMATTED dbconstraint.table2 +POSTHOOK: query: DESCRIBE FORMATTED DbConstraint.Table2 POSTHOOK: type: DESCTABLE POSTHOOK: Input: dbconstraint@table2 # col_name data_type comment