diff --git metastore/scripts/upgrade/hive/hive-schema-4.0.0.hive.sql metastore/scripts/upgrade/hive/hive-schema-4.0.0.hive.sql index e3f5eb9386..5893a1b888 100644 --- metastore/scripts/upgrade/hive/hive-schema-4.0.0.hive.sql +++ metastore/scripts/upgrade/hive/hive-schema-4.0.0.hive.sql @@ -887,6 +887,8 @@ FROM CREATE EXTERNAL TABLE IF NOT EXISTS `KEY_CONSTRAINTS` ( + `CAT_NAME` string, + `DB_NAME` string, `CHILD_CD_ID` bigint, `CHILD_INTEGER_IDX` int, `CHILD_TBL_ID` bigint, @@ -900,13 +902,15 @@ CREATE EXTERNAL TABLE IF NOT EXISTS `KEY_CONSTRAINTS` `DELETE_RULE` string, `ENABLE_VALIDATE_RELY` int, `DEFAULT_VALUE` string, - CONSTRAINT `SYS_PK_KEY_CONSTRAINTS` PRIMARY KEY (`CONSTRAINT_NAME`, `POSITION`) DISABLE + CONSTRAINT `SYS_PK_KEY_CONSTRAINTS` PRIMARY KEY (`CAT_NAME`, `DB_NAME`, `CONSTRAINT_NAME`, `POSITION`) DISABLE ) STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler' TBLPROPERTIES ( "hive.sql.database.type" = "METASTORE", "hive.sql.query" = "SELECT + \"CAT_NAME\", + \"DB_NAME\", \"CHILD_CD_ID\", \"CHILD_INTEGER_IDX\", \"CHILD_TBL_ID\", diff --git ql/src/test/queries/clientnegative/create_with_constraints_duplicate_name.q ql/src/test/queries/clientnegative/create_with_constraints_duplicate_name.q index a0bc7f6142..a26feb128c 100644 --- ql/src/test/queries/clientnegative/create_with_constraints_duplicate_name.q +++ ql/src/test/queries/clientnegative/create_with_constraints_duplicate_name.q @@ -1,2 +1,9 @@ +create database db1; +use db1; +create table t1(x int, constraint pk1 primary key (x) disable); + +-- same constraint name in different db is valid, thus only the second create table should fail +create database db2; +use db2; create table t1(x int, constraint pk1 primary key (x) disable); create table t2(x int, constraint pk1 primary key (x) disable); diff --git ql/src/test/results/clientnegative/constraint_duplicate_name.q.out ql/src/test/results/clientnegative/constraint_duplicate_name.q.out index e66e8c13f8..3d60dddd05 100644 --- ql/src/test/results/clientnegative/constraint_duplicate_name.q.out +++ ql/src/test/results/clientnegative/constraint_duplicate_name.q.out @@ -10,4 +10,4 @@ PREHOOK: query: create table t1(j int constraint c1 default 4) PREHOOK: type: CREATETABLE PREHOOK: Output: database:default PREHOOK: Output: default@t1 -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.ddl.DDLTask. InvalidObjectException(message:Constraint name already exists: c1) +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.ddl.DDLTask. InvalidObjectException(message:Constraint name already exists: default.c1) diff --git ql/src/test/results/clientnegative/create_with_constraints_duplicate_name.q.out ql/src/test/results/clientnegative/create_with_constraints_duplicate_name.q.out index 0320ebb9ae..b99316c885 100644 --- ql/src/test/results/clientnegative/create_with_constraints_duplicate_name.q.out +++ ql/src/test/results/clientnegative/create_with_constraints_duplicate_name.q.out @@ -1,13 +1,45 @@ +PREHOOK: query: create database db1 +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:db1 +POSTHOOK: query: create database db1 +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:db1 +PREHOOK: query: use db1 +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:db1 +POSTHOOK: query: use db1 +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:db1 PREHOOK: query: create table t1(x int, constraint pk1 primary key (x) disable) PREHOOK: type: CREATETABLE -PREHOOK: Output: database:default -PREHOOK: Output: default@t1 +PREHOOK: Output: database:db1 +PREHOOK: Output: db1@t1 POSTHOOK: query: create table t1(x int, constraint pk1 primary key (x) disable) POSTHOOK: type: CREATETABLE -POSTHOOK: Output: database:default -POSTHOOK: Output: default@t1 +POSTHOOK: Output: database:db1 +POSTHOOK: Output: db1@t1 +PREHOOK: query: create database db2 +PREHOOK: type: CREATEDATABASE +PREHOOK: Output: database:db2 +POSTHOOK: query: create database db2 +POSTHOOK: type: CREATEDATABASE +POSTHOOK: Output: database:db2 +PREHOOK: query: use db2 +PREHOOK: type: SWITCHDATABASE +PREHOOK: Input: database:db2 +POSTHOOK: query: use db2 +POSTHOOK: type: SWITCHDATABASE +POSTHOOK: Input: database:db2 +PREHOOK: query: create table t1(x int, constraint pk1 primary key (x) disable) +PREHOOK: type: CREATETABLE +PREHOOK: Output: database:db2 +PREHOOK: Output: db2@t1 +POSTHOOK: query: create table t1(x int, constraint pk1 primary key (x) disable) +POSTHOOK: type: CREATETABLE +POSTHOOK: Output: database:db2 +POSTHOOK: Output: db2@t1 PREHOOK: query: create table t2(x int, constraint pk1 primary key (x) disable) PREHOOK: type: CREATETABLE -PREHOOK: Output: database:default -PREHOOK: Output: default@t2 -FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.ddl.DDLTask. InvalidObjectException(message:Constraint name already exists: pk1) +PREHOOK: Output: database:db2 +PREHOOK: Output: db2@t2 +FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.ddl.DDLTask. InvalidObjectException(message:Constraint name already exists: db2.pk1) diff --git ql/src/test/results/clientpositive/llap/sysdb.q.out ql/src/test/results/clientpositive/llap/sysdb.q.out index 38cadf3603..9e3b9bc812 100644 --- ql/src/test/results/clientpositive/llap/sysdb.q.out +++ ql/src/test/results/clientpositive/llap/sysdb.q.out @@ -651,11 +651,13 @@ hive_locks hl_partition hive_locks hl_table hive_locks hl_txnid hive_locks hl_user +key_constraints cat_name key_constraints child_cd_id key_constraints child_integer_idx key_constraints child_tbl_id key_constraints constraint_name key_constraints constraint_type +key_constraints db_name key_constraints default_value key_constraints delete_rule key_constraints enable_validate_rely diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java index ee9f988294..a830fd3087 100644 --- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java +++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java @@ -2039,7 +2039,7 @@ private void create_table_core(final RawStore ms, final CreateTableRequest req) } if (tbl.isSetId()) { throw new InvalidObjectException("Id shouldn't be set but table " - + tbl.getDbName() + "." + tbl.getTableName() + "has the Id set to " + + tbl.getDbName() + "." + tbl.getTableName() + " has the Id set to " + tbl.getId() + ". It's a read-only option"); } SkewedInfo skew = tbl.getSd().getSkewedInfo(); diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index 317c9cbae9..5129335122 100644 --- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -4596,18 +4596,21 @@ private static int getColumnIndexFromTableColumns(List cols, Strin return -1; } - private boolean constraintNameAlreadyExists(String name) { + private boolean constraintNameAlreadyExists(MDatabase db, String constraintName) { boolean commited = false; - Query constraintExistsQuery = null; + Query constraintExistsQuery = null; String constraintNameIfExists = null; try { openTransaction(); - name = normalizeIdentifier(name); - constraintExistsQuery = pm.newQuery(MConstraint.class, "constraintName == name"); - constraintExistsQuery.declareParameters("java.lang.String name"); + constraintName = normalizeIdentifier(constraintName); + constraintExistsQuery = pm.newQuery(MConstraint.class, + "catalogName == catalogNameP && dbName == dbNameP && constraintName == constraintNameP"); + constraintExistsQuery.declareParameters( + "java.lang.String catalogNameP, java.lang.String dbNameP, java.lang.String constraintNameP"); constraintExistsQuery.setUnique(true); - constraintExistsQuery.setResult("name"); - constraintNameIfExists = (String) constraintExistsQuery.execute(name); + constraintExistsQuery.setResult("constraintName"); + constraintNameIfExists = + (String) constraintExistsQuery.execute(db.getCatalogName(), db.getName(), constraintName); commited = commitTransaction(); } finally { rollbackAndCleanup(commited, constraintExistsQuery); @@ -4615,14 +4618,14 @@ private boolean constraintNameAlreadyExists(String name) { return constraintNameIfExists != null && !constraintNameIfExists.isEmpty(); } - private String generateConstraintName(String... parameters) throws MetaException { + private String generateConstraintName(MDatabase db, String... parameters) throws MetaException { int hashcode = ArrayUtils.toString(parameters).hashCode() & 0xfffffff; int counter = 0; final int MAX_RETRIES = 10; while (counter < MAX_RETRIES) { String currName = (parameters.length == 0 ? "constraint_" : parameters[parameters.length-1]) + "_" + hashcode + "_" + System.currentTimeMillis() + "_" + (counter++); - if (!constraintNameAlreadyExists(currName)) { + if (!constraintNameAlreadyExists(db, currName)) { return currName; } } @@ -4828,13 +4831,15 @@ private String getGuidFromDB() throws MetaException { // However, this scenario can be ignored for practical purposes because of // the uniqueness of the generated constraint name. if (foreignKey.getKey_seq() == 1) { - currentConstraintName = generateConstraintName( + currentConstraintName = generateConstraintName(parentTable.getDatabase(), fkTableDB, fkTableName, pkTableDB, pkTableName, pkColumnName, fkColumnName, "fk"); } } else { currentConstraintName = normalizeIdentifier(foreignKey.getFk_name()); - if(constraintNameAlreadyExists(currentConstraintName)) { - throw new InvalidObjectException("Constraint name already exists: " + currentConstraintName); + if (constraintNameAlreadyExists(parentTable.getDatabase(), currentConstraintName)) { + String fqConstraintName = String.format("%s.%s", parentTable.getDatabase().getName(), + currentConstraintName); + throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName); } } fkNames.add(currentConstraintName); @@ -4842,19 +4847,22 @@ private String getGuidFromDB() throws MetaException { Integer deleteRule = foreignKey.getDelete_rule(); int enableValidateRely = (foreignKey.isEnable_cstr() ? 4 : 0) + (foreignKey.isValidate_cstr() ? 2 : 0) + (foreignKey.isRely_cstr() ? 1 : 0); + MConstraint mpkfk = new MConstraint( - currentConstraintName, - MConstraint.FOREIGN_KEY_CONSTRAINT, - foreignKey.getKey_seq(), - deleteRule, - updateRule, - enableValidateRely, - parentTable, - childTable, - parentCD, - childCD, - childIntegerIndex, - parentIntegerIndex + parentTable.getDatabase().getCatalogName(), + parentTable.getDatabase().getName(), + currentConstraintName, + foreignKey.getKey_seq(), + MConstraint.FOREIGN_KEY_CONSTRAINT, + deleteRule, + updateRule, + enableValidateRely, + parentTable, + childTable, + parentCD, + childCD, + childIntegerIndex, + parentIntegerIndex ); mpkfks.add(mpkfk); @@ -4982,29 +4990,32 @@ private static String generateColNameTypeSignature(String colName, String colTyp } if (pks.get(i).getPk_name() == null) { if (pks.get(i).getKey_seq() == 1) { - constraintName = generateConstraintName(tableDB, tableName, columnName, "pk"); + constraintName = generateConstraintName(parentTable.getDatabase(), tableDB, tableName, columnName, "pk"); } } else { constraintName = normalizeIdentifier(pks.get(i).getPk_name()); - if(constraintNameAlreadyExists(constraintName)) { - throw new InvalidObjectException("Constraint name already exists: " + constraintName); + if (constraintNameAlreadyExists(parentTable.getDatabase(), constraintName)) { + String fqConstraintName = String.format("%s.%s", parentTable.getDatabase().getName(), constraintName); + throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName); } } pkNames.add(constraintName); int enableValidateRely = (pks.get(i).isEnable_cstr() ? 4 : 0) + (pks.get(i).isValidate_cstr() ? 2 : 0) + (pks.get(i).isRely_cstr() ? 1 : 0); MConstraint mpk = new MConstraint( - constraintName, - MConstraint.PRIMARY_KEY_CONSTRAINT, - pks.get(i).getKey_seq(), - null, - null, - enableValidateRely, - parentTable, - null, - parentCD, - null, - null, + parentTable.getDatabase().getCatalogName(), + parentTable.getDatabase().getName(), + constraintName, + pks.get(i).getKey_seq(), + MConstraint.PRIMARY_KEY_CONSTRAINT, + null, + null, + enableValidateRely, + parentTable, + null, + parentCD, + null, + null, parentIntegerIndex); mpks.add(mpk); } @@ -5051,12 +5062,13 @@ private static String generateColNameTypeSignature(String colName, String colTyp } if (uks.get(i).getUk_name() == null) { if (uks.get(i).getKey_seq() == 1) { - constraintName = generateConstraintName(tableDB, tableName, columnName, "uk"); + constraintName = generateConstraintName(parentTable.getDatabase(), tableDB, tableName, columnName, "uk"); } } else { constraintName = normalizeIdentifier(uks.get(i).getUk_name()); - if(constraintNameAlreadyExists(constraintName)) { - throw new InvalidObjectException("Constraint name already exists: " + constraintName); + if (constraintNameAlreadyExists(parentTable.getDatabase(), constraintName)) { + String fqConstraintName = String.format("%s.%s", parentTable.getDatabase().getName(), constraintName); + throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName); } } ukNames.add(constraintName); @@ -5064,18 +5076,20 @@ private static String generateColNameTypeSignature(String colName, String colTyp int enableValidateRely = (uks.get(i).isEnable_cstr() ? 4 : 0) + (uks.get(i).isValidate_cstr() ? 2 : 0) + (uks.get(i).isRely_cstr() ? 1 : 0); MConstraint muk = new MConstraint( - constraintName, - MConstraint.UNIQUE_CONSTRAINT, - uks.get(i).getKey_seq(), - null, - null, - enableValidateRely, - parentTable, - null, - parentCD, - null, - null, - parentIntegerIndex); + parentTable.getDatabase().getCatalogName(), + parentTable.getDatabase().getName(), + constraintName, + uks.get(i).getKey_seq(), + MConstraint.UNIQUE_CONSTRAINT, + null, + null, + enableValidateRely, + parentTable, + null, + parentCD, + null, + null, + parentIntegerIndex); cstrs.add(muk); } pm.makePersistentAll(cstrs); @@ -5146,11 +5160,12 @@ private void addConstraint(String catName, String tableDB, String tableName, Str } } if (ccName == null) { - constraintName = generateConstraintName(tableDB, tableName, columnName, "dc"); + constraintName = generateConstraintName(parentTable.getDatabase(), tableDB, tableName, columnName, "dc"); } else { constraintName = normalizeIdentifier(ccName); - if(constraintNameAlreadyExists(constraintName)) { - throw new InvalidObjectException("Constraint name already exists: " + constraintName); + if (constraintNameAlreadyExists(parentTable.getDatabase(), constraintName)) { + String fqConstraintName = String.format("%s.%s", parentTable.getDatabase().getName(), constraintName); + throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName); } } nnNames.add(constraintName); @@ -5158,9 +5173,11 @@ private void addConstraint(String catName, String tableDB, String tableName, Str int enableValidateRely = (isEnable ? 4 : 0) + (isValidate ? 2 : 0) + (isRely ? 1 : 0); MConstraint muk = new MConstraint( + parentTable.getDatabase().getCatalogName(), + parentTable.getDatabase().getName(), constraintName, - constraintType, - 1, // Not null constraint should reference a single column + 1, + constraintType, // Not null constraint should reference a single column null, null, enableValidateRely, @@ -5228,11 +5245,12 @@ private void addConstraint(String catName, String tableDB, String tableName, Str } } if (nns.get(i).getNn_name() == null) { - constraintName = generateConstraintName(tableDB, tableName, columnName, "nn"); + constraintName = generateConstraintName(parentTable.getDatabase(), tableDB, tableName, columnName, "nn"); } else { constraintName = normalizeIdentifier(nns.get(i).getNn_name()); - if(constraintNameAlreadyExists(constraintName)) { - throw new InvalidObjectException("Constraint name already exists: " + constraintName); + if (constraintNameAlreadyExists(parentTable.getDatabase(), constraintName)) { + String fqConstraintName = String.format("%s.%s", parentTable.getDatabase().getName(), constraintName); + throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName); } } nnNames.add(constraintName); @@ -5240,18 +5258,20 @@ private void addConstraint(String catName, String tableDB, String tableName, Str int enableValidateRely = (nns.get(i).isEnable_cstr() ? 4 : 0) + (nns.get(i).isValidate_cstr() ? 2 : 0) + (nns.get(i).isRely_cstr() ? 1 : 0); MConstraint muk = new MConstraint( - constraintName, - MConstraint.NOT_NULL_CONSTRAINT, - 1, // Not null constraint should reference a single column - null, - null, - enableValidateRely, - parentTable, - null, - parentCD, - null, - null, - parentIntegerIndex); + parentTable.getDatabase().getCatalogName(), + parentTable.getDatabase().getName(), + constraintName, + 1, + MConstraint.NOT_NULL_CONSTRAINT, // Not null constraint should reference a single column + null, + null, + enableValidateRely, + parentTable, + null, + parentCD, + null, + null, + parentIntegerIndex); cstrs.add(muk); } pm.makePersistentAll(cstrs); @@ -10731,7 +10751,7 @@ private String getPrimaryKeyConstraintName(String catName, String dbName, String boolean rely = (enableValidateRely & 1) != 0; checkConstraints.add(new SQLCheckConstraint(catName, dbName, tblName, cols.get(currConstraint.getParentIntegerIndex()).getName(), - currConstraint.getDefaultOrCheckValue(), + currConstraint.getDefaultValue(), currConstraint.getConstraintName(), enable, validate, rely)); } commited = commitTransaction(); @@ -10770,7 +10790,7 @@ private String getPrimaryKeyConstraintName(String catName, String dbName, String boolean validate = (enableValidateRely & 2) != 0; boolean rely = (enableValidateRely & 1) != 0; defaultConstraints.add(new SQLDefaultConstraint(catName, dbName, tblName, - cols.get(currConstraint.getParentIntegerIndex()).getName(), currConstraint.getDefaultOrCheckValue(), + cols.get(currConstraint.getParentIntegerIndex()).getName(), currConstraint.getDefaultValue(), currConstraint.getConstraintName(), enable, validate, rely)); } commited = commitTransaction(); diff --git standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MConstraint.java standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MConstraint.java index 47877d5651..246d8116cb 100644 --- standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MConstraint.java +++ standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MConstraint.java @@ -19,21 +19,24 @@ import java.io.Serializable; +/** Representing a row in the KEY_CONSTARINTS table. */ public class MConstraint { - String constraintName; - int constraintType; - int position; - Integer deleteRule; - Integer updateRule; - MTable parentTable; - MTable childTable; - MColumnDescriptor parentColumn; - MColumnDescriptor childColumn; - Integer childIntegerIndex; - Integer parentIntegerIndex; - int enableValidateRely; - String defaultValue; + private String catalogName; // Primary key of KEY_CONSTARINTS + private String dbName; // Primary key of KEY_CONSTARINTS + private String constraintName; // Primary key of KEY_CONSTARINTS + private int position; // Primary key of KEY_CONSTARINTS + private int constraintType; + private Integer deleteRule; + private Integer updateRule; + private MTable parentTable; + private MTable childTable; + private MColumnDescriptor parentColumn; + private MColumnDescriptor childColumn; + private Integer childIntegerIndex; + private Integer parentIntegerIndex; + private int enableValidateRely; + private String defaultValue; // 0 - Primary Key // 1 - PK-FK relationship @@ -48,18 +51,22 @@ @SuppressWarnings("serial") public static class PK implements Serializable { + public String catalogName; + public String dbName; public String constraintName; public int position; public PK() {} - public PK(String constraintName, int position) { + public PK(String catalogName, String dbName, String constraintName, int position) { + this.catalogName = catalogName; + this.dbName = dbName; this.constraintName = constraintName; this.position = position; } public String toString() { - return constraintName+":"+position; + return String.format("%s:%s:%s:%d", catalogName, dbName, constraintName, position); } public int hashCode() { @@ -69,7 +76,11 @@ public int hashCode() { public boolean equals(Object other) { if (other != null && (other instanceof PK)) { PK otherPK = (PK) other; - return otherPK.constraintName.equals(constraintName) && otherPK.position == position; + return + otherPK.catalogName.equals(catalogName) && + otherPK.dbName.equals(dbName) && + otherPK.constraintName.equals(constraintName) && + otherPK.position == position; } return false; } @@ -77,25 +88,32 @@ public boolean equals(Object other) { public MConstraint() {} - public MConstraint(String constraintName, int constraintType, int position, Integer deleteRule, Integer updateRule, int enableRelyValidate, MTable parentTable, - MTable childTable, MColumnDescriptor parentColumn, MColumnDescriptor childColumn, Integer childIntegerIndex, Integer parentIntegerIndex) { - this.constraintName = constraintName; - this.constraintType = constraintType; - this.parentTable = parentTable; - this.childTable = childTable; - this.parentColumn = parentColumn; - this.childColumn = childColumn; - this.position = position; - this.deleteRule = deleteRule; - this.updateRule = updateRule; - this.enableValidateRely = enableRelyValidate; - this.childIntegerIndex = childIntegerIndex; - this.parentIntegerIndex = parentIntegerIndex; - } - - public MConstraint(String constraintName, int constraintType, int position, Integer deleteRule, Integer updateRule, - int enableRelyValidate, MTable parentTable, MTable childTable, MColumnDescriptor parentColumn, - MColumnDescriptor childColumn, Integer childIntegerIndex, Integer parentIntegerIndex, String defaultValue) { + public MConstraint(String catalogName, String dbName, String constraintName, int position, int constraintType, + Integer deleteRule, Integer updateRule, int enableRelyValidate, MTable parentTable, MTable childTable, + MColumnDescriptor parentColumn, MColumnDescriptor childColumn, Integer childIntegerIndex, + Integer parentIntegerIndex) { + this.catalogName = catalogName; + this.dbName = dbName; + this.constraintName = constraintName; + this.constraintType = constraintType; + this.parentTable = parentTable; + this.childTable = childTable; + this.parentColumn = parentColumn; + this.childColumn = childColumn; + this.position = position; + this.deleteRule = deleteRule; + this.updateRule = updateRule; + this.enableValidateRely = enableRelyValidate; + this.childIntegerIndex = childIntegerIndex; + this.parentIntegerIndex = parentIntegerIndex; + } + + public MConstraint(String catalogName, String dbName, String constraintName, int position, int constraintType, + Integer deleteRule, Integer updateRule, int enableRelyValidate, MTable parentTable, MTable childTable, + MColumnDescriptor parentColumn, MColumnDescriptor childColumn, Integer childIntegerIndex, + Integer parentIntegerIndex, String defaultValue) { + this.catalogName = catalogName; + this.dbName = dbName; this.constraintName = constraintName; this.constraintType = constraintType; this.parentTable = parentTable; @@ -111,104 +129,123 @@ public MConstraint(String constraintName, int constraintType, int position, Inte this.defaultValue = defaultValue; } - public String getDefaultOrCheckValue() { return defaultValue; } + public String getCatalogName() { + return catalogName; + } - public void setDefaultOrCheckValue(String defaultOrCheckValue) { - this.defaultValue= defaultOrCheckValue; + public void setCatalogName(String catalogName) { + this.catalogName = catalogName; } - public String getConstraintName() { - return constraintName; + + public String getDbName() { + return dbName; } - public void setConstraintName(String fkName) { - this.constraintName = fkName; + public void setDb(String dbName) { + this.dbName = dbName; } - public int getConstraintType() { - return constraintType; + public String getConstraintName() { + return constraintName; } - public void setConstraintType(int ct) { - this.constraintType = ct; + public void setConstraintName(String constraintName) { + this.constraintName = constraintName; } public int getPosition() { return position; } - public void setPosition(int po) { - this.position = po; + public void setPosition(int position) { + this.position = position; + } + + public int getConstraintType() { + return constraintType; + } + + public void setConstraintType(int constraintType) { + this.constraintType = constraintType; } public Integer getDeleteRule() { return deleteRule; } - public void setDeleteRule(Integer de) { - this.deleteRule = de; + public void setDeleteRule(Integer deleteRule) { + this.deleteRule = deleteRule; } - public int getEnableValidateRely() { - return enableValidateRely; + public Integer getUpdateRule() { + return updateRule; } - public void setEnableValidateRely(int enableValidateRely) { - this.enableValidateRely = enableValidateRely; + public void setUpdateRule(Integer updateRule) { + this.updateRule = updateRule; } - public Integer getChildIntegerIndex() { - return childIntegerIndex; + public MTable getParentTable() { + return parentTable; } - public void setChildIntegerIndex(Integer childIntegerIndex) { - this.childIntegerIndex = childIntegerIndex; + public void setParentTable(MTable parentTable) { + this.parentTable = parentTable; } - public Integer getParentIntegerIndex() { - return parentIntegerIndex; + public MTable getChildTable() { + return childTable; } - public void setParentIntegerIndex(Integer parentIntegerIndex) { - this.parentIntegerIndex = parentIntegerIndex; + public void setChildTable(MTable childTable) { + this.childTable = childTable; } - public Integer getUpdateRule() { - return updateRule; + public MColumnDescriptor getParentColumn() { + return parentColumn; } - public void setUpdateRule(Integer ur) { - this.updateRule = ur; + public void setParentColumn(MColumnDescriptor parentColumn) { + this.parentColumn = parentColumn; } - public MTable getChildTable() { - return childTable; + public MColumnDescriptor getChildColumn() { + return childColumn; } - public void setChildTable(MTable ft) { - this.childTable = ft; + public void setChildColumn(MColumnDescriptor childColumn) { + this.childColumn = childColumn; } - public MTable getParentTable() { - return parentTable; + public Integer getChildIntegerIndex() { + return childIntegerIndex; } - public void setParentTable(MTable pt) { - this.parentTable = pt; + public void setChildIntegerIndex(Integer childIntegerIndex) { + this.childIntegerIndex = childIntegerIndex; } - public MColumnDescriptor getParentColumn() { - return parentColumn; + public Integer getParentIntegerIndex() { + return parentIntegerIndex; } - public void setParentColumn(MColumnDescriptor name) { - this.parentColumn = name; + public void setParentIntegerIndex(Integer parentIntegerIndex) { + this.parentIntegerIndex = parentIntegerIndex; } - public MColumnDescriptor getChildColumn() { - return childColumn; + public int getEnableValidateRely() { + return enableValidateRely; + } + + public void setEnableValidateRely(int enableValidateRely) { + this.enableValidateRely = enableValidateRely; } - public void setChildColumn(MColumnDescriptor name) { - this.childColumn = name; + public String getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(String defaultValue) { + this.defaultValue = defaultValue; } } diff --git standalone-metastore/metastore-server/src/main/resources/package.jdo standalone-metastore/metastore-server/src/main/resources/package.jdo index 2190ef02ef..d494d78b45 100644 --- standalone-metastore/metastore-server/src/main/resources/package.jdo +++ standalone-metastore/metastore-server/src/main/resources/package.jdo @@ -254,6 +254,12 @@ + + + + + + @@ -273,7 +279,7 @@ - + diff --git standalone-metastore/metastore-server/src/main/sql/derby/hive-schema-4.0.0.derby.sql standalone-metastore/metastore-server/src/main/sql/derby/hive-schema-4.0.0.derby.sql index 3be5707fa0..c7c1966b1d 100644 --- standalone-metastore/metastore-server/src/main/sql/derby/hive-schema-4.0.0.derby.sql +++ standalone-metastore/metastore-server/src/main/sql/derby/hive-schema-4.0.0.derby.sql @@ -183,7 +183,23 @@ CREATE UNIQUE INDEX "APP"."NOTIFICATION_LOG_EVENT_ID" ON "APP"."NOTIFICATION_LOG CREATE TABLE "APP"."NOTIFICATION_SEQUENCE" ("NNI_ID" BIGINT NOT NULL, "NEXT_EVENT_ID" BIGINT NOT NULL); -CREATE TABLE "APP"."KEY_CONSTRAINTS" ("CHILD_CD_ID" BIGINT, "CHILD_INTEGER_IDX" INTEGER, "CHILD_TBL_ID" BIGINT, "PARENT_CD_ID" BIGINT , "PARENT_INTEGER_IDX" INTEGER, "PARENT_TBL_ID" BIGINT NOT NULL, "POSITION" BIGINT NOT NULL, "CONSTRAINT_NAME" VARCHAR(400) NOT NULL, "CONSTRAINT_TYPE" SMALLINT NOT NULL, "UPDATE_RULE" SMALLINT, "DELETE_RULE" SMALLINT, "ENABLE_VALIDATE_RELY" SMALLINT NOT NULL, "DEFAULT_VALUE" VARCHAR(400)); +CREATE TABLE "APP"."KEY_CONSTRAINTS" ( + "CAT_NAME" VARCHAR(256) NOT NULL, + "DB_NAME" VARCHAR(128) NOT NULL, + "CHILD_CD_ID" BIGINT, + "CHILD_INTEGER_IDX" INTEGER, + "CHILD_TBL_ID" BIGINT, + "PARENT_CD_ID" BIGINT, + "PARENT_INTEGER_IDX" INTEGER, + "PARENT_TBL_ID" BIGINT NOT NULL, + "POSITION" BIGINT NOT NULL, + "CONSTRAINT_NAME" VARCHAR(400) NOT NULL, + "CONSTRAINT_TYPE" SMALLINT NOT NULL, + "UPDATE_RULE" SMALLINT, + "DELETE_RULE" SMALLINT, + "ENABLE_VALIDATE_RELY" SMALLINT NOT NULL, + "DEFAULT_VALUE" VARCHAR(400) +); CREATE TABLE "APP"."METASTORE_DB_PROPERTIES" ("PROPERTY_KEY" VARCHAR(255) NOT NULL, "PROPERTY_VALUE" VARCHAR(1000) NOT NULL, "DESCRIPTION" VARCHAR(1000)); @@ -377,7 +393,7 @@ ALTER TABLE "APP"."NOTIFICATION_LOG" ADD CONSTRAINT "NOTIFICATION_LOG_PK" PRIMAR ALTER TABLE "APP"."NOTIFICATION_SEQUENCE" ADD CONSTRAINT "NOTIFICATION_SEQUENCE_PK" PRIMARY KEY ("NNI_ID"); -ALTER TABLE "APP"."KEY_CONSTRAINTS" ADD CONSTRAINT "CONSTRAINTS_PK" PRIMARY KEY ("CONSTRAINT_NAME", "POSITION"); +ALTER TABLE "APP"."KEY_CONSTRAINTS" ADD CONSTRAINT "CONSTRAINTS_PK" PRIMARY KEY ("CAT_NAME", "DB_NAME", "CONSTRAINT_NAME", "POSITION"); ALTER TABLE "APP"."METASTORE_DB_PROPERTIES" ADD CONSTRAINT "PROPERTY_KEY_PK" PRIMARY KEY ("PROPERTY_KEY"); diff --git standalone-metastore/metastore-server/src/main/sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql standalone-metastore/metastore-server/src/main/sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql index a7d8da4e1c..b65df55826 100644 --- standalone-metastore/metastore-server/src/main/sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql +++ standalone-metastore/metastore-server/src/main/sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql @@ -52,7 +52,27 @@ CREATE UNIQUE INDEX SCHEDULED_EXECUTIONS_UNIQUE_ID ON APP.SCHEDULED_EXECUTIONS ( ALTER TABLE COMPACTION_QUEUE ADD CQ_ERROR_MESSAGE clob; ALTER TABLE COMPLETED_COMPACTIONS ADD CC_ERROR_MESSAGE clob; +-- HIVE-22728 +ALTER TABLE "KEY_CONSTRAINTS" ADD "CAT_NAME" VARCHAR(256); +ALTER TABLE "KEY_CONSTRAINTS" ADD "DB_NAME" VARCHAR(128); + +UPDATE "APP"."KEY_CONSTRAINTS" C + SET "CAT_NAME"=(SELECT D."CTLG_NAME" + FROM "APP"."TBLS" T + JOIN "APP"."DBS" D ON D."DB_ID" = T."DB_ID" + WHERE T."TBL_ID" = C."PARENT_TBL_ID"); +UPDATE "APP"."KEY_CONSTRAINTS" C + SET "DB_NAME"=(SELECT D."NAME" + FROM "APP"."TBLS" T + JOIN "APP"."DBS" D ON D."DB_ID" = T."DB_ID" + WHERE T."TBL_ID" = C."PARENT_TBL_ID"); + +ALTER TABLE "KEY_CONSTRAINTS" ALTER COLUMN "CAT_NAME" NOT NULL; +ALTER TABLE "KEY_CONSTRAINTS" ALTER COLUMN "DB_NAME" NOT NULL; + +ALTER TABLE "APP"."KEY_CONSTRAINTS" DROP CONSTRAINT "CONSTRAINTS_PK"; +ALTER TABLE "APP"."KEY_CONSTRAINTS" ADD CONSTRAINT "CONSTRAINTS_PK" PRIMARY KEY ("CAT_NAME", "DB_NAME", "CONSTRAINT_NAME", "POSITION"); + -- This needs to be the last thing done. Insert any changes above this line. UPDATE "APP".VERSION SET SCHEMA_VERSION='4.0.0', VERSION_COMMENT='Hive release version 4.0.0' where VER_ID=1; - diff --git standalone-metastore/metastore-server/src/main/sql/mssql/hive-schema-4.0.0.mssql.sql standalone-metastore/metastore-server/src/main/sql/mssql/hive-schema-4.0.0.mssql.sql index 29b7b3f746..4ada7dd524 100644 --- standalone-metastore/metastore-server/src/main/sql/mssql/hive-schema-4.0.0.mssql.sql +++ standalone-metastore/metastore-server/src/main/sql/mssql/hive-schema-4.0.0.mssql.sql @@ -1138,6 +1138,8 @@ CREATE TABLE AUX_TABLE ( CREATE TABLE KEY_CONSTRAINTS ( + CAT_NAME VARCHAR(256) NOT NULL, + DB_NAME VARCHAR(128) NOT NULL, CHILD_CD_ID BIGINT, CHILD_INTEGER_IDX INT, CHILD_TBL_ID BIGINT, @@ -1151,9 +1153,9 @@ CREATE TABLE KEY_CONSTRAINTS DELETE_RULE SMALLINT, ENABLE_VALIDATE_RELY SMALLINT NOT NULL, DEFAULT_VALUE VARCHAR(400) -) ; +); -ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (CONSTRAINT_NAME, POSITION); +ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (CAT_NAME, DB_NAME, CONSTRAINT_NAME, POSITION); CREATE INDEX CONSTRAINTS_PARENT_TBL_ID__INDEX ON KEY_CONSTRAINTS(PARENT_TBL_ID); diff --git standalone-metastore/metastore-server/src/main/sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql standalone-metastore/metastore-server/src/main/sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql index 72733c98ba..1fa7dfe672 100644 --- standalone-metastore/metastore-server/src/main/sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql +++ standalone-metastore/metastore-server/src/main/sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql @@ -26,6 +26,27 @@ UPDATE PART_COL_STATS SET ENGINE = 'hive' WHERE ENGINE IS NULL; ALTER TABLE COMPACTION_QUEUE ADD CQ_ERROR_MESSAGE varchar(max) NULL; ALTER TABLE COMPLETED_COMPACTIONS ADD CC_ERROR_MESSAGE varchar(max) NULL; +-- HIVE-22728 +ALTER TABLE KEY_CONSTRAINTS ADD CAT_NAME VARCHAR(256); +ALTER TABLE KEY_CONSTRAINTS ADD DB_NAME VARCHAR(128); + +UPDATE KEY_CONSTRAINTS + SET CAT_NAME=(SELECT D.CTLG_NAME + FROM TBLS T + JOIN DBS D ON D.DB_ID = T.DB_ID + WHERE T.TBL_ID = KEY_CONSTRAINTS.PARENT_TBL_ID); +UPDATE KEY_CONSTRAINTS + SET DB_NAME=(SELECT D.NAME + FROM TBLS T + JOIN DBS D ON D.DB_ID = T.DB_ID + WHERE T.TBL_ID = KEY_CONSTRAINTS.PARENT_TBL_ID); + +ALTER TABLE KEY_CONSTRAINTS ALTER COLUMN CAT_NAME VARCHAR(256) NOT NULL; +ALTER TABLE KEY_CONSTRAINTS ALTER COLUMN DB_NAME VARCHAR(128) NOT NULL; + +ALTER TABLE KEY_CONSTRAINTS DROP CONSTRAINT CONSTRAINTS_PK; +ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (CAT_NAME, DB_NAME, CONSTRAINT_NAME, POSITION); + -- These lines need to be last. Insert any changes above. UPDATE VERSION SET SCHEMA_VERSION='4.0.0', VERSION_COMMENT='Hive release version 4.0.0' where VER_ID=1; SELECT 'Finished upgrading MetaStore schema from 3.2.0 to 4.0.0' AS MESSAGE; diff --git standalone-metastore/metastore-server/src/main/sql/mysql/hive-schema-4.0.0.mysql.sql standalone-metastore/metastore-server/src/main/sql/mysql/hive-schema-4.0.0.mysql.sql index 69e2cef57d..6d76d1dc94 100644 --- standalone-metastore/metastore-server/src/main/sql/mysql/hive-schema-4.0.0.mysql.sql +++ standalone-metastore/metastore-server/src/main/sql/mysql/hive-schema-4.0.0.mysql.sql @@ -888,6 +888,8 @@ INSERT INTO `NOTIFICATION_SEQUENCE` (`NNI_ID`, `NEXT_EVENT_ID`) SELECT * from (s CREATE TABLE IF NOT EXISTS `KEY_CONSTRAINTS` ( + `CAT_NAME` VARCHAR(256) NOT NULL, + `DB_NAME` VARCHAR(128) NOT NULL, `CHILD_CD_ID` BIGINT, `CHILD_INTEGER_IDX` INT(11), `CHILD_TBL_ID` BIGINT, @@ -901,7 +903,7 @@ CREATE TABLE IF NOT EXISTS `KEY_CONSTRAINTS` `DELETE_RULE` SMALLINT(6), `ENABLE_VALIDATE_RELY` SMALLINT(6) NOT NULL, `DEFAULT_VALUE` VARCHAR(400), - PRIMARY KEY (`CONSTRAINT_NAME`, `POSITION`) + PRIMARY KEY (`CAT_NAME`, `DB_NAME`, `CONSTRAINT_NAME`, `POSITION`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE INDEX `CONSTRAINTS_PARENT_TABLE_ID_INDEX` ON KEY_CONSTRAINTS (`PARENT_TBL_ID`) USING BTREE; diff --git standalone-metastore/metastore-server/src/main/sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql standalone-metastore/metastore-server/src/main/sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql index c81d08a324..e0a244e753 100644 --- standalone-metastore/metastore-server/src/main/sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql +++ standalone-metastore/metastore-server/src/main/sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql @@ -56,6 +56,27 @@ CREATE UNIQUE INDEX UNIQUE_SCHEDULED_EXECUTIONS_ID ON SCHEDULED_EXECUTIONS (SCHE ALTER TABLE COMPACTION_QUEUE ADD CQ_ERROR_MESSAGE mediumtext; ALTER TABLE COMPLETED_COMPACTIONS ADD CC_ERROR_MESSAGE mediumtext; +-- HIVE-22728 +ALTER TABLE `KEY_CONSTRAINTS` ADD `CAT_NAME` VARCHAR(256); +ALTER TABLE `KEY_CONSTRAINTS` ADD `DB_NAME` VARCHAR(128); + +UPDATE `KEY_CONSTRAINTS` C + SET `CAT_NAME`=(SELECT D.`CTLG_NAME` + FROM `TBLS` T + JOIN `DBS` D ON D.`DB_ID` = T.`DB_ID` + WHERE T.`TBL_ID` = C.`PARENT_TBL_ID`); +UPDATE `KEY_CONSTRAINTS` C + SET `DB_NAME`=(SELECT D.`NAME` + FROM `TBLS` T + JOIN `DBS` D ON D.`DB_ID` = T.`DB_ID` + WHERE T.`TBL_ID` = C.`PARENT_TBL_ID`); + +ALTER TABLE `KEY_CONSTRAINTS` MODIFY `CAT_NAME` VARCHAR(256) NOT NULL; +ALTER TABLE `KEY_CONSTRAINTS` MODIFY `DB_NAME` VARCHAR(128) NOT NULL; + +ALTER TABLE `KEY_CONSTRAINTS` DROP PRIMARY KEY; +ALTER TABLE `KEY_CONSTRAINTS` ADD CONSTRAINT `CONSTRAINTS_PK` PRIMARY KEY (`CAT_NAME`, `DB_NAME`, `CONSTRAINT_NAME`, `POSITION`); + -- These lines need to be last. Insert any changes above. UPDATE VERSION SET SCHEMA_VERSION='4.0.0', VERSION_COMMENT='Hive release version 4.0.0' where VER_ID=1; SELECT 'Finished upgrading MetaStore schema from 3.2.0 to 4.0.0' AS MESSAGE; diff --git standalone-metastore/metastore-server/src/main/sql/oracle/hive-schema-4.0.0.oracle.sql standalone-metastore/metastore-server/src/main/sql/oracle/hive-schema-4.0.0.oracle.sql index cb95a42499..aa4f026190 100644 --- standalone-metastore/metastore-server/src/main/sql/oracle/hive-schema-4.0.0.oracle.sql +++ standalone-metastore/metastore-server/src/main/sql/oracle/hive-schema-4.0.0.oracle.sql @@ -908,6 +908,8 @@ CREATE INDEX FUNC_RU_N49 ON FUNC_RU (FUNC_ID); CREATE TABLE KEY_CONSTRAINTS ( + CAT_NAME VARCHAR(256) NOT NULL, + DB_NAME VARCHAR(128) NOT NULL, CHILD_CD_ID NUMBER, CHILD_INTEGER_IDX NUMBER, CHILD_TBL_ID NUMBER, @@ -923,7 +925,7 @@ CREATE TABLE KEY_CONSTRAINTS DEFAULT_VALUE VARCHAR(400) ) ; -ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (CONSTRAINT_NAME, POSITION); +ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (CAT_NAME, DB_NAME, CONSTRAINT_NAME, POSITION); CREATE INDEX CONSTRAINTS_PT_INDEX ON KEY_CONSTRAINTS(PARENT_TBL_ID); diff --git standalone-metastore/metastore-server/src/main/sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql standalone-metastore/metastore-server/src/main/sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql index 65057be688..71729a7891 100644 --- standalone-metastore/metastore-server/src/main/sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql +++ standalone-metastore/metastore-server/src/main/sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql @@ -56,6 +56,28 @@ CREATE INDEX IDX_SCHEDULED_EX_SQ_ID ON "SCHEDULED_EXECUTIONS" ("SCHEDULED_QUERY_ ALTER TABLE COMPACTION_QUEUE ADD CQ_ERROR_MESSAGE CLOB; ALTER TABLE COMPLETED_COMPACTIONS ADD CC_ERROR_MESSAGE CLOB; +-- HIVE-22728 +ALTER TABLE KEY_CONSTRAINTS ADD CAT_NAME VARCHAR(256); +ALTER TABLE KEY_CONSTRAINTS ADD DB_NAME VARCHAR(128); + +UPDATE KEY_CONSTRAINTS C + SET CAT_NAME=(SELECT D.CTLG_NAME + FROM TBLS T + JOIN DBS D ON D.DB_ID = T.DB_ID + WHERE T.TBL_ID = C.PARENT_TBL_ID); +UPDATE KEY_CONSTRAINTS C + SET DB_NAME=(SELECT D.NAME + FROM TBLS T + JOIN DBS D ON D.DB_ID = T.DB_ID + WHERE T.TBL_ID = C.PARENT_TBL_ID); + +ALTER TABLE KEY_CONSTRAINTS MODIFY CAT_NAME VARCHAR(256) NOT NULL; +ALTER TABLE KEY_CONSTRAINTS MODIFY DB_NAME VARCHAR(128) NOT NULL; + +ALTER TABLE KEY_CONSTRAINTS DROP CONSTRAINT CONSTRAINTS_PK; +ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (CAT_NAME, DB_NAME, CONSTRAINT_NAME, POSITION); + -- These lines need to be last. Insert any changes above. UPDATE VERSION SET SCHEMA_VERSION='4.0.0', VERSION_COMMENT='Hive release version 4.0.0' where VER_ID=1; SELECT 'Finished upgrading MetaStore schema from 3.2.0 to 4.0.0' AS Status from dual; + diff --git standalone-metastore/metastore-server/src/main/sql/postgres/hive-schema-4.0.0.postgres.sql standalone-metastore/metastore-server/src/main/sql/postgres/hive-schema-4.0.0.postgres.sql index 0fcb88aeb3..05805437ed 100644 --- standalone-metastore/metastore-server/src/main/sql/postgres/hive-schema-4.0.0.postgres.sql +++ standalone-metastore/metastore-server/src/main/sql/postgres/hive-schema-4.0.0.postgres.sql @@ -649,6 +649,8 @@ INSERT INTO "NOTIFICATION_SEQUENCE" ("NNI_ID", "NEXT_EVENT_ID") SELECT 1,1 WHERE CREATE TABLE "KEY_CONSTRAINTS" ( + "CAT_NAME" VARCHAR(256) NOT NULL, + "DB_NAME" VARCHAR(128) NOT NULL, "CHILD_CD_ID" BIGINT, "CHILD_INTEGER_IDX" BIGINT, "CHILD_TBL_ID" BIGINT, @@ -662,7 +664,7 @@ CREATE TABLE "KEY_CONSTRAINTS" "DELETE_RULE" SMALLINT, "ENABLE_VALIDATE_RELY" SMALLINT NOT NULL, "DEFAULT_VALUE" VARCHAR(400), - PRIMARY KEY ("CONSTRAINT_NAME", "POSITION") + PRIMARY KEY ("CAT_NAME", "DB_NAME", "CONSTRAINT_NAME", "POSITION") ) ; --- diff --git standalone-metastore/metastore-server/src/main/sql/postgres/upgrade-3.2.0-to-4.0.0.postgres.sql standalone-metastore/metastore-server/src/main/sql/postgres/upgrade-3.2.0-to-4.0.0.postgres.sql index 2347c697db..18d756c383 100644 --- standalone-metastore/metastore-server/src/main/sql/postgres/upgrade-3.2.0-to-4.0.0.postgres.sql +++ standalone-metastore/metastore-server/src/main/sql/postgres/upgrade-3.2.0-to-4.0.0.postgres.sql @@ -184,8 +184,29 @@ ALTER TABLE "WRITE_SET" RENAME COLUMN ws_commit_id TO "WS_COMMIT_ID"; ALTER TABLE "WRITE_SET" RENAME COLUMN ws_operation_type TO "WS_OPERATION_TYPE"; -- HIVE-22729 -ALTER TABLE COMPACTION_QUEUE ADD CQ_ERROR_MESSAGE clob; -ALTER TABLE COMPLETED_COMPACTIONS ADD CC_ERROR_MESSAGE clob; +ALTER TABLE "COMPACTION_QUEUE" ADD "CQ_ERROR_MESSAGE" text; +ALTER TABLE "COMPLETED_COMPACTIONS" ADD "CC_ERROR_MESSAGE" text; + +-- HIVE-22728 +ALTER TABLE "KEY_CONSTRAINTS" ADD "CAT_NAME" VARCHAR(256); +ALTER TABLE "KEY_CONSTRAINTS" ADD "DB_NAME" VARCHAR(128); + +UPDATE "KEY_CONSTRAINTS" C + SET "CAT_NAME"=(SELECT D."CTLG_NAME" + FROM "TBLS" T + JOIN "DBS" D ON D."DB_ID" = T."DB_ID" + WHERE T."TBL_ID" = C."PARENT_TBL_ID"); +UPDATE "KEY_CONSTRAINTS" C + SET "DB_NAME"=(SELECT D."NAME" + FROM "TBLS" T + JOIN "DBS" D ON D."DB_ID" = T."DB_ID" + WHERE T."TBL_ID" = C."PARENT_TBL_ID"); + +ALTER TABLE "KEY_CONSTRAINTS" ALTER COLUMN "CAT_NAME" SET NOT NULL; +ALTER TABLE "KEY_CONSTRAINTS" ALTER COLUMN "DB_NAME" SET NOT NULL; + +ALTER TABLE "KEY_CONSTRAINTS" DROP CONSTRAINT "KEY_CONSTRAINTS_pkey"; +ALTER TABLE "KEY_CONSTRAINTS" ADD CONSTRAINT "CONSTRAINTS_PK" PRIMARY KEY ("CAT_NAME", "DB_NAME", "CONSTRAINT_NAME", "POSITION"); -- These lines need to be last. Insert any changes above. UPDATE "VERSION" SET "SCHEMA_VERSION"='4.0.0', "VERSION_COMMENT"='Hive release version 4.0.0' where "VER_ID"=1;