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 778615d..c744257 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 boolean dropTable(String dbName, String tableName) throws MetaException, private List listAllTableConstraintsWithOptionalConstraintName (String dbName, String tableName, String constraintname) { + dbName = HiveStringUtils.normalizeIdentifier(dbName); + tableName = HiveStringUtils.normalizeIdentifier(tableName); + constraintname = constraintname!=null?HiveStringUtils.normalizeIdentifier(constraintname):null; List mConstraints = null; List constraintNames = new ArrayList(); Query query = null; @@ -8465,10 +8468,12 @@ public static void unCacheDataNucleusClassLoaders() { } } - protected List getPrimaryKeysInternal(final String db_name, - final String tbl_name, + protected List 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(db_name, tbl_name, allowSql, allowJdo) { @Override @@ -8562,9 +8567,13 @@ private String getPrimaryKeyConstraintName(String db_name, String tbl_name) thro } } - protected List 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 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(foreign_db_name, foreign_tbl_name, allowSql, allowJdo) { @Override 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..2a6b8b3 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 void putFileMetadata(List fileIds, List metadata, @Override public List 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 void putFileMetadata(List fileIds, List metadata, public List getForeignKeys(String parent_db_name, String parent_tbl_name, String foreign_db_name, String foreign_tbl_name) throws MetaException { + parent_db_name = HiveStringUtils.normalizeIdentifier(parent_db_name); + parent_tbl_name = HiveStringUtils.normalizeIdentifier(parent_tbl_name); + 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 void dropConstraint(String dbName, String tableName, String constraintNam // 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 pk = getHBase().getPrimaryKey(dbName, tableName); @@ -2793,6 +2802,12 @@ public void dropConstraint(String dbName, String tableName, String constraintNam @Override public void addPrimaryKeys(List 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 currentPk = @@ -2814,6 +2829,13 @@ public void addPrimaryKeys(List pks) throws InvalidObjectExceptio @Override public void addForeignKeys(List 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 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; 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