You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by mg...@apache.org on 2020/02/17 13:28:56 UTC
[hive] branch master updated: HIVE-22728 Limit the scope of
uniqueness of constraint name to database (Miklos Gergely,
reviewed by Zoltan Haindrich)
This is an automated email from the ASF dual-hosted git repository.
mgergely pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/hive.git
The following commit(s) were added to refs/heads/master by this push:
new 40921bd HIVE-22728 Limit the scope of uniqueness of constraint name to database (Miklos Gergely, reviewed by Zoltan Haindrich)
40921bd is described below
commit 40921bdd6b49dc04842614701a0d95acff356c79
Author: miklosgergely <mg...@cloudera.com>
AuthorDate: Mon Feb 10 14:27:18 2020 +0100
HIVE-22728 Limit the scope of uniqueness of constraint name to database (Miklos Gergely, reviewed by Zoltan Haindrich)
---
.../upgrade/hive/hive-schema-4.0.0.hive.sql | 2 +-
.../clientnegative/constraint_duplicate_name.q | 2 -
.../create_with_constraints_duplicate_name.q | 13 +-
.../clientnegative/constraint_duplicate_name.q.out | 13 --
.../create_with_constraints_duplicate_name.q.out | 58 +++++--
.../hadoop/hive/metastore/HiveMetaStore.java | 2 +-
.../apache/hadoop/hive/metastore/ObjectStore.java | 164 ++++++++++---------
.../hadoop/hive/metastore/model/MConstraint.java | 178 +++++++++++----------
.../apache/hadoop/hive/metastore/model/MTable.java | 31 ++++
.../src/main/resources/package.jdo | 6 +-
.../src/main/sql/derby/hive-schema-4.0.0.derby.sql | 18 ++-
.../sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql | 5 +-
.../src/main/sql/mssql/hive-schema-4.0.0.mssql.sql | 4 +-
.../sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql | 4 +
.../src/main/sql/mysql/hive-schema-4.0.0.mysql.sql | 2 +-
.../sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql | 4 +
.../main/sql/oracle/hive-schema-4.0.0.oracle.sql | 2 +-
.../sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql | 5 +
.../sql/postgres/hive-schema-4.0.0.postgres.sql | 2 +-
.../postgres/upgrade-3.2.0-to-4.0.0.postgres.sql | 8 +-
20 files changed, 321 insertions(+), 202 deletions(-)
diff --git a/metastore/scripts/upgrade/hive/hive-schema-4.0.0.hive.sql b/metastore/scripts/upgrade/hive/hive-schema-4.0.0.hive.sql
index e3f5eb9..fde6f02 100644
--- a/metastore/scripts/upgrade/hive/hive-schema-4.0.0.hive.sql
+++ b/metastore/scripts/upgrade/hive/hive-schema-4.0.0.hive.sql
@@ -900,7 +900,7 @@ 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 (`PARENT_TBL_ID`, `CONSTRAINT_NAME`, `POSITION`) DISABLE
)
STORED BY 'org.apache.hive.storage.jdbc.JdbcStorageHandler'
TBLPROPERTIES (
diff --git a/ql/src/test/queries/clientnegative/constraint_duplicate_name.q b/ql/src/test/queries/clientnegative/constraint_duplicate_name.q
deleted file mode 100644
index 2b7429d..0000000
--- a/ql/src/test/queries/clientnegative/constraint_duplicate_name.q
+++ /dev/null
@@ -1,2 +0,0 @@
-create table t(i int constraint c1 not null enable);
-create table t1(j int constraint c1 default 4);
diff --git a/ql/src/test/queries/clientnegative/create_with_constraints_duplicate_name.q b/ql/src/test/queries/clientnegative/create_with_constraints_duplicate_name.q
index a0bc7f6..79d8d1a 100644
--- a/ql/src/test/queries/clientnegative/create_with_constraints_duplicate_name.q
+++ b/ql/src/test/queries/clientnegative/create_with_constraints_duplicate_name.q
@@ -1,2 +1,11 @@
-create table t1(x int, constraint pk1 primary key (x) disable);
-create table t2(x int, constraint pk1 primary key (x) disable);
+create database db1;
+use db1;
+create table t1(x int, constraint constraint_name primary key (x) disable);
+
+-- same constraint name in different db or different table is valid, thus only the foreign key creation should fail
+create database db2;
+use db2;
+create table t1(x int, constraint constraint_name primary key (x) disable);
+create table t2(x int, constraint constraint_name primary key (x) disable);
+
+alter table t1 add constraint constraint_name foreign key (x) references t2(x) disable novalidate rely;
diff --git a/ql/src/test/results/clientnegative/constraint_duplicate_name.q.out b/ql/src/test/results/clientnegative/constraint_duplicate_name.q.out
deleted file mode 100644
index e66e8c1..0000000
--- a/ql/src/test/results/clientnegative/constraint_duplicate_name.q.out
+++ /dev/null
@@ -1,13 +0,0 @@
-PREHOOK: query: create table t(i int constraint c1 not null enable)
-PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@t
-POSTHOOK: query: create table t(i int constraint c1 not null enable)
-POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@t
-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)
diff --git a/ql/src/test/results/clientnegative/create_with_constraints_duplicate_name.q.out b/ql/src/test/results/clientnegative/create_with_constraints_duplicate_name.q.out
index 0320ebb..41ed714 100644
--- a/ql/src/test/results/clientnegative/create_with_constraints_duplicate_name.q.out
+++ b/ql/src/test/results/clientnegative/create_with_constraints_duplicate_name.q.out
@@ -1,13 +1,51 @@
-PREHOOK: query: create table t1(x int, constraint pk1 primary key (x) disable)
+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 constraint_name primary key (x) disable)
PREHOOK: type: CREATETABLE
-PREHOOK: Output: database:default
-PREHOOK: Output: default@t1
-POSTHOOK: query: create table t1(x int, constraint pk1 primary key (x) disable)
+PREHOOK: Output: database:db1
+PREHOOK: Output: db1@t1
+POSTHOOK: query: create table t1(x int, constraint constraint_name primary key (x) disable)
POSTHOOK: type: CREATETABLE
-POSTHOOK: Output: database:default
-POSTHOOK: Output: default@t1
-PREHOOK: query: create table t2(x int, constraint pk1 primary key (x) disable)
+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 constraint_name 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@t1
+POSTHOOK: query: create table t1(x int, constraint constraint_name primary key (x) disable)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:db2
+POSTHOOK: Output: db2@t1
+PREHOOK: query: create table t2(x int, constraint constraint_name primary key (x) disable)
+PREHOOK: type: CREATETABLE
+PREHOOK: Output: database:db2
+PREHOOK: Output: db2@t2
+POSTHOOK: query: create table t2(x int, constraint constraint_name primary key (x) disable)
+POSTHOOK: type: CREATETABLE
+POSTHOOK: Output: database:db2
+POSTHOOK: Output: db2@t2
+PREHOOK: query: alter table t1 add constraint constraint_name foreign key (x) references t2(x) disable novalidate rely
+PREHOOK: type: ALTERTABLE_ADDCONSTRAINT
+FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.ddl.DDLTask. InvalidObjectException(message:Constraint name already exists: db2.t2.constraint_name)
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
index 7b7c2d7..b6de146 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/HiveMetaStore.java
@@ -2041,7 +2041,7 @@ public class HiveMetaStore extends ThriftHiveMetastore {
}
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 a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
index 3eff37f..1a5944d 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java
@@ -4596,18 +4596,19 @@ public class ObjectStore implements RawStore, Configurable {
return -1;
}
- private boolean constraintNameAlreadyExists(String name) {
+ private boolean constraintNameAlreadyExists(MTable table, String constraintName) {
boolean commited = false;
- Query constraintExistsQuery = null;
+ Query<MConstraint> 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,
+ "parentTable == parentTableP && constraintName == constraintNameP");
+ constraintExistsQuery.declareParameters("java.lang.Long parentTableP, java.lang.String constraintNameP");
constraintExistsQuery.setUnique(true);
- constraintExistsQuery.setResult("name");
- constraintNameIfExists = (String) constraintExistsQuery.execute(name);
+ constraintExistsQuery.setResult("constraintName");
+ constraintNameIfExists = (String) constraintExistsQuery.executeWithArray(table.getId(), constraintName);
commited = commitTransaction();
} finally {
rollbackAndCleanup(commited, constraintExistsQuery);
@@ -4615,14 +4616,14 @@ public class ObjectStore implements RawStore, Configurable {
return constraintNameIfExists != null && !constraintNameIfExists.isEmpty();
}
- private String generateConstraintName(String... parameters) throws MetaException {
+ private String generateConstraintName(MTable table, 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(table, currName)) {
return currName;
}
}
@@ -4828,13 +4829,15 @@ public class ObjectStore implements RawStore, Configurable {
// 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(
- fkTableDB, fkTableName, pkTableDB, pkTableName, pkColumnName, fkColumnName, "fk");
+ currentConstraintName = generateConstraintName(parentTable, 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, currentConstraintName)) {
+ String fqConstraintName = String.format("%s.%s.%s", parentTable.getDatabase().getName(),
+ parentTable.getTableName(), currentConstraintName);
+ throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName);
}
}
fkNames.add(currentConstraintName);
@@ -4842,19 +4845,20 @@ public class ObjectStore implements RawStore, Configurable {
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
+ currentConstraintName,
+ foreignKey.getKey_seq(),
+ MConstraint.FOREIGN_KEY_CONSTRAINT,
+ deleteRule,
+ updateRule,
+ enableValidateRely,
+ parentTable,
+ childTable,
+ parentCD,
+ childCD,
+ childIntegerIndex,
+ parentIntegerIndex
);
mpkfks.add(mpkfk);
@@ -4982,29 +4986,31 @@ public class ObjectStore implements RawStore, Configurable {
}
if (pks.get(i).getPk_name() == null) {
if (pks.get(i).getKey_seq() == 1) {
- constraintName = generateConstraintName(tableDB, tableName, columnName, "pk");
+ constraintName = generateConstraintName(parentTable, 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, constraintName)) {
+ String fqConstraintName = String.format("%s.%s.%s", parentTable.getDatabase().getName(),
+ parentTable.getTableName(), 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,
+ constraintName,
+ pks.get(i).getKey_seq(),
+ MConstraint.PRIMARY_KEY_CONSTRAINT,
+ null,
+ null,
+ enableValidateRely,
+ parentTable,
+ null,
+ parentCD,
+ null,
+ null,
parentIntegerIndex);
mpks.add(mpk);
}
@@ -5051,12 +5057,14 @@ public class ObjectStore implements RawStore, Configurable {
}
if (uks.get(i).getUk_name() == null) {
if (uks.get(i).getKey_seq() == 1) {
- constraintName = generateConstraintName(tableDB, tableName, columnName, "uk");
+ constraintName = generateConstraintName(parentTable, 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, constraintName)) {
+ String fqConstraintName = String.format("%s.%s.%s", parentTable.getDatabase().getName(),
+ parentTable.getTableName(), constraintName);
+ throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName);
}
}
ukNames.add(constraintName);
@@ -5064,18 +5072,18 @@ public class ObjectStore implements RawStore, Configurable {
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);
+ 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 +5154,13 @@ public class ObjectStore implements RawStore, Configurable {
}
}
if (ccName == null) {
- constraintName = generateConstraintName(tableDB, tableName, columnName, "dc");
+ constraintName = generateConstraintName(parentTable, tableDB, tableName, columnName, "dc");
} else {
constraintName = normalizeIdentifier(ccName);
- if(constraintNameAlreadyExists(constraintName)) {
- throw new InvalidObjectException("Constraint name already exists: " + constraintName);
+ if (constraintNameAlreadyExists(parentTable, constraintName)) {
+ String fqConstraintName = String.format("%s.%s.%s", parentTable.getDatabase().getName(),
+ parentTable.getTableName(), constraintName);
+ throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName);
}
}
nnNames.add(constraintName);
@@ -5159,8 +5169,8 @@ public class ObjectStore implements RawStore, Configurable {
(isValidate ? 2 : 0) + (isRely ? 1 : 0);
MConstraint muk = new MConstraint(
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 +5238,13 @@ public class ObjectStore implements RawStore, Configurable {
}
}
if (nns.get(i).getNn_name() == null) {
- constraintName = generateConstraintName(tableDB, tableName, columnName, "nn");
+ constraintName = generateConstraintName(parentTable, 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, constraintName)) {
+ String fqConstraintName = String.format("%s.%s.%s", parentTable.getDatabase().getName(),
+ parentTable.getTableName(), constraintName);
+ throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName);
}
}
nnNames.add(constraintName);
@@ -5240,18 +5252,18 @@ public class ObjectStore implements RawStore, Configurable {
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);
+ 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 +10743,7 @@ public class ObjectStore implements RawStore, Configurable {
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 +10782,7 @@ public class ObjectStore implements RawStore, Configurable {
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 a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MConstraint.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MConstraint.java
index 47877d5..bfd5bef 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MConstraint.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MConstraint.java
@@ -19,21 +19,22 @@ package org.apache.hadoop.hive.metastore.model;
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 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; // Primary key of KEY_CONSTARINTS
+ 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 +49,20 @@ public class MConstraint
@SuppressWarnings("serial")
public static class PK implements Serializable {
+ public MTable.PK parentTable;
public String constraintName;
public int position;
public PK() {}
- public PK(String constraintName, int position) {
+ public PK(MTable.PK parentTable, String constraintName, int position) {
+ this.parentTable = parentTable;
this.constraintName = constraintName;
this.position = position;
}
public String toString() {
- return constraintName+":"+position;
+ return String.format("%s:%s:%d", parentTable.id, constraintName, position);
}
public int hashCode() {
@@ -69,7 +72,10 @@ public class MConstraint
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.parentTable.id == parentTable.id &&
+ otherPK.constraintName.equals(constraintName) &&
+ otherPK.position == position;
}
return false;
}
@@ -77,25 +83,9 @@ public class MConstraint
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 constraintName, int position, int constraintType, 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;
@@ -108,107 +98,127 @@ public class MConstraint
this.enableValidateRely = enableRelyValidate;
this.childIntegerIndex = childIntegerIndex;
this.parentIntegerIndex = parentIntegerIndex;
- this.defaultValue = defaultValue;
}
- public String getDefaultOrCheckValue() { return defaultValue; }
-
- public void setDefaultOrCheckValue(String defaultOrCheckValue) {
- this.defaultValue= defaultOrCheckValue;
+ public MConstraint(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.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;
+ this.defaultValue = defaultValue;
}
+
public String getConstraintName() {
return constraintName;
}
- public void setConstraintName(String fkName) {
- this.constraintName = fkName;
+ public void setConstraintName(String constraintName) {
+ this.constraintName = constraintName;
}
- public int getConstraintType() {
- return constraintType;
+ public int getPosition() {
+ return position;
}
- public void setConstraintType(int ct) {
- this.constraintType = ct;
+ public void setPosition(int position) {
+ this.position = position;
}
- public int getPosition() {
- return position;
+ public int getConstraintType() {
+ return constraintType;
}
- public void setPosition(int po) {
- this.position = po;
+ 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 a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MTable.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MTable.java
index 92182ae..647425a 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MTable.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/model/MTable.java
@@ -19,9 +19,12 @@
package org.apache.hadoop.hive.metastore.model;
+import java.io.Serializable;
import java.util.List;
import java.util.Map;
+import org.apache.hadoop.hive.metastore.model.MConstraint.PK;
+
public class MTable {
private long id;
@@ -41,6 +44,34 @@ public class MTable {
private String tableType;
private long writeId;
+ @SuppressWarnings("serial")
+ public static class PK implements Serializable {
+ public long id;
+
+ public PK() {}
+
+ public PK(long id) {
+ this.id = id;
+ }
+
+ public String toString() {
+ return String.format("%d", id);
+ }
+
+ public int hashCode() {
+ return toString().hashCode();
+ }
+
+ public boolean equals(Object other) {
+ if (other != null && (other instanceof PK)) {
+ PK otherPK = (PK) other;
+ return
+ otherPK.id == id;
+ }
+ return false;
+ }
+ }
+
public MTable() {}
/**
diff --git a/standalone-metastore/metastore-server/src/main/resources/package.jdo b/standalone-metastore/metastore-server/src/main/resources/package.jdo
index 2190ef0..ce919e4 100644
--- a/standalone-metastore/metastore-server/src/main/resources/package.jdo
+++ b/standalone-metastore/metastore-server/src/main/resources/package.jdo
@@ -139,7 +139,7 @@
</field>
</class>
- <class name="MTable" table="TBLS" identity-type="application" detachable="true">
+ <class name="MTable" table="TBLS" identity-type="application" detachable="true" objectid-class="MTable$PK">
<field name="id" primary-key="true" value-strategy="native">
<column name="TBL_ID" jdbc-type="BIGINT" />
</field>
@@ -273,9 +273,9 @@
<column name="PARENT_CD_ID"/>
</field>
<field name="parentIntegerIndex">
- <column name="PARENT_INTEGER_IDX"/>
+ <column name="PARENT_INTEGER_IDX"/>
</field>
- <field name="parentTable">
+ <field name="parentTable" primary-key="true">
<column name="PARENT_TBL_ID"/>
</field>
<field name="constraintType">
diff --git a/standalone-metastore/metastore-server/src/main/sql/derby/hive-schema-4.0.0.derby.sql b/standalone-metastore/metastore-server/src/main/sql/derby/hive-schema-4.0.0.derby.sql
index 3be5707..482d8aa 100644
--- a/standalone-metastore/metastore-server/src/main/sql/derby/hive-schema-4.0.0.derby.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/derby/hive-schema-4.0.0.derby.sql
@@ -183,7 +183,21 @@ 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" (
+ "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 +391,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 ("PARENT_TBL_ID", "CONSTRAINT_NAME", "POSITION");
ALTER TABLE "APP"."METASTORE_DB_PROPERTIES" ADD CONSTRAINT "PROPERTY_KEY_PK" PRIMARY KEY ("PROPERTY_KEY");
diff --git a/standalone-metastore/metastore-server/src/main/sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql b/standalone-metastore/metastore-server/src/main/sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql
index a7d8da4..6fd8ae6 100644
--- a/standalone-metastore/metastore-server/src/main/sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/derby/upgrade-3.2.0-to-4.0.0.derby.sql
@@ -52,7 +52,10 @@ 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 "APP"."KEY_CONSTRAINTS" DROP CONSTRAINT "CONSTRAINTS_PK";
+ALTER TABLE "APP"."KEY_CONSTRAINTS" ADD CONSTRAINT "CONSTRAINTS_PK" PRIMARY KEY ("PARENT_TBL_ID", "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 a/standalone-metastore/metastore-server/src/main/sql/mssql/hive-schema-4.0.0.mssql.sql b/standalone-metastore/metastore-server/src/main/sql/mssql/hive-schema-4.0.0.mssql.sql
index 29b7b3f..dfd4bd6 100644
--- a/standalone-metastore/metastore-server/src/main/sql/mssql/hive-schema-4.0.0.mssql.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/mssql/hive-schema-4.0.0.mssql.sql
@@ -1151,9 +1151,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 (PARENT_TBL_ID, CONSTRAINT_NAME, POSITION);
CREATE INDEX CONSTRAINTS_PARENT_TBL_ID__INDEX ON KEY_CONSTRAINTS(PARENT_TBL_ID);
diff --git a/standalone-metastore/metastore-server/src/main/sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql b/standalone-metastore/metastore-server/src/main/sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql
index 72733c9..fecfca8 100644
--- a/standalone-metastore/metastore-server/src/main/sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/mssql/upgrade-3.2.0-to-4.0.0.mssql.sql
@@ -26,6 +26,10 @@ 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 DROP CONSTRAINT CONSTRAINTS_PK;
+ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (PARENT_TBL_ID, 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 a/standalone-metastore/metastore-server/src/main/sql/mysql/hive-schema-4.0.0.mysql.sql b/standalone-metastore/metastore-server/src/main/sql/mysql/hive-schema-4.0.0.mysql.sql
index 69e2cef..a9a0930 100644
--- a/standalone-metastore/metastore-server/src/main/sql/mysql/hive-schema-4.0.0.mysql.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/mysql/hive-schema-4.0.0.mysql.sql
@@ -901,7 +901,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 (`PARENT_TBL_ID`, `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 a/standalone-metastore/metastore-server/src/main/sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql b/standalone-metastore/metastore-server/src/main/sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql
index c81d08a..70b5d9d 100644
--- a/standalone-metastore/metastore-server/src/main/sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/mysql/upgrade-3.2.0-to-4.0.0.mysql.sql
@@ -56,6 +56,10 @@ 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` DROP PRIMARY KEY;
+ALTER TABLE `KEY_CONSTRAINTS` ADD CONSTRAINT `CONSTRAINTS_PK` PRIMARY KEY (`PARENT_TBL_ID`, `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 a/standalone-metastore/metastore-server/src/main/sql/oracle/hive-schema-4.0.0.oracle.sql b/standalone-metastore/metastore-server/src/main/sql/oracle/hive-schema-4.0.0.oracle.sql
index cb95a42..f90d76b 100644
--- a/standalone-metastore/metastore-server/src/main/sql/oracle/hive-schema-4.0.0.oracle.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/oracle/hive-schema-4.0.0.oracle.sql
@@ -923,7 +923,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 (PARENT_TBL_ID, CONSTRAINT_NAME, POSITION);
CREATE INDEX CONSTRAINTS_PT_INDEX ON KEY_CONSTRAINTS(PARENT_TBL_ID);
diff --git a/standalone-metastore/metastore-server/src/main/sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql b/standalone-metastore/metastore-server/src/main/sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql
index 65057be..9f1b980 100644
--- a/standalone-metastore/metastore-server/src/main/sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/oracle/upgrade-3.2.0-to-4.0.0.oracle.sql
@@ -56,6 +56,11 @@ 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 DROP CONSTRAINT CONSTRAINTS_PK;
+ALTER TABLE KEY_CONSTRAINTS ADD CONSTRAINT CONSTRAINTS_PK PRIMARY KEY (PARENT_TBL_ID, 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 a/standalone-metastore/metastore-server/src/main/sql/postgres/hive-schema-4.0.0.postgres.sql b/standalone-metastore/metastore-server/src/main/sql/postgres/hive-schema-4.0.0.postgres.sql
index 0fcb88a..b992d7a 100644
--- a/standalone-metastore/metastore-server/src/main/sql/postgres/hive-schema-4.0.0.postgres.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/postgres/hive-schema-4.0.0.postgres.sql
@@ -662,7 +662,7 @@ CREATE TABLE "KEY_CONSTRAINTS"
"DELETE_RULE" SMALLINT,
"ENABLE_VALIDATE_RELY" SMALLINT NOT NULL,
"DEFAULT_VALUE" VARCHAR(400),
- PRIMARY KEY ("CONSTRAINT_NAME", "POSITION")
+ CONSTRAINT CONSTRAINTS_PK PRIMARY KEY ("PARENT_TBL_ID", "CONSTRAINT_NAME", "POSITION")
) ;
---
diff --git a/standalone-metastore/metastore-server/src/main/sql/postgres/upgrade-3.2.0-to-4.0.0.postgres.sql b/standalone-metastore/metastore-server/src/main/sql/postgres/upgrade-3.2.0-to-4.0.0.postgres.sql
index 2347c69..f9af248 100644
--- a/standalone-metastore/metastore-server/src/main/sql/postgres/upgrade-3.2.0-to-4.0.0.postgres.sql
+++ b/standalone-metastore/metastore-server/src/main/sql/postgres/upgrade-3.2.0-to-4.0.0.postgres.sql
@@ -184,8 +184,12 @@ 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" DROP CONSTRAINT "KEY_CONSTRAINTS_pkey";
+ALTER TABLE "KEY_CONSTRAINTS" ADD CONSTRAINT "CONSTRAINTS_PK" PRIMARY KEY ("PARENT_TBL_ID", "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;