You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hive.apache.org by sa...@apache.org on 2020/10/25 09:01:52 UTC

[hive] branch master updated: HIVE-24258: [CachedStore] Data mismatch between CachedStore and ObjectStore (Ashish Sharma, reviewed by Sankar Hariappan)

This is an automated email from the ASF dual-hosted git repository.

sankarh 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 db895f3  HIVE-24258: [CachedStore] Data mismatch between CachedStore and ObjectStore (Ashish Sharma, reviewed by Sankar Hariappan)
db895f3 is described below

commit db895f374bf63b77b683574fdf678bfac91a5ac6
Author: Ashish Kumar Sharma <as...@gmail.com>
AuthorDate: Sun Oct 25 09:01:42 2020 +0000

    HIVE-24258: [CachedStore] Data mismatch between CachedStore and ObjectStore (Ashish Sharma, reviewed by Sankar Hariappan)
    
    Signed-off-by: Sankar Hariappan <sa...@apache.org>
    Closes (#1587)
---
 .../hcatalog/listener/DummyRawStoreFailEvent.java  |  20 +-
 .../cache/TestCachedStoreUpdateUsingEvents.java    |  73 ++---
 .../hadoop/hive/metastore/HiveMetaStore.java       | 320 +++++++--------------
 .../apache/hadoop/hive/metastore/ObjectStore.java  | 260 ++++++++++-------
 .../org/apache/hadoop/hive/metastore/RawStore.java |  24 +-
 .../hadoop/hive/metastore/cache/CacheUtils.java    |   9 +-
 .../hadoop/hive/metastore/cache/CachedStore.java   | 100 ++++---
 .../hadoop/hive/metastore/cache/SharedCache.java   |  52 ++--
 .../metastore/DummyRawStoreControlledCommit.java   |  19 +-
 .../metastore/DummyRawStoreForJdoConnection.java   |  19 +-
 .../metastore/InjectableBehaviourObjectStore.java  |   4 +-
 .../hive/metastore/cache/TestCachedStore.java      | 102 +------
 .../hive/metastore/client/TestCheckConstraint.java |  57 +---
 .../metastore/client/TestDefaultConstraint.java    |  55 +---
 .../hive/metastore/client/TestForeignKey.java      |  93 +-----
 .../client/TestGetAllTableConstraints.java         | 293 ++++---------------
 .../metastore/client/TestNotNullConstraint.java    |  51 +---
 .../hive/metastore/client/TestPrimaryKey.java      |  68 +----
 .../metastore/client/TestUniqueConstraint.java     |  56 +---
 19 files changed, 560 insertions(+), 1115 deletions(-)

diff --git a/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/DummyRawStoreFailEvent.java b/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/DummyRawStoreFailEvent.java
index 8b5577f..ebebc02 100644
--- a/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/DummyRawStoreFailEvent.java
+++ b/itests/hcatalog-unit/src/test/java/org/apache/hive/hcatalog/listener/DummyRawStoreFailEvent.java
@@ -1091,12 +1091,8 @@ public class DummyRawStoreFailEvent implements RawStore, Configurable {
   }
 
   @Override
-  public List<String> createTableWithConstraints(Table tbl,
-                                         List<SQLPrimaryKey> primaryKeys, List<SQLForeignKey> foreignKeys,
-                                         List<SQLUniqueConstraint> uniqueConstraints,
-                                         List<SQLNotNullConstraint> notNullConstraints,
-                                         List<SQLDefaultConstraint> defaultConstraints,
-                                         List<SQLCheckConstraint> checkConstraints)
+  public SQLAllTableConstraints createTableWithConstraints(Table tbl,
+                                         SQLAllTableConstraints constraints)
       throws InvalidObjectException, MetaException {
     return null;
   }
@@ -1108,37 +1104,37 @@ public class DummyRawStoreFailEvent implements RawStore, Configurable {
   }
 
   @Override
-  public List<String> addPrimaryKeys(List<SQLPrimaryKey> pks)
+  public List<SQLPrimaryKey> addPrimaryKeys(List<SQLPrimaryKey> pks)
       throws InvalidObjectException, MetaException {
     return null;
   }
 
   @Override
-  public List<String> addForeignKeys(List<SQLForeignKey> fks)
+  public List<SQLForeignKey> addForeignKeys(List<SQLForeignKey> fks)
       throws InvalidObjectException, MetaException {
     return null;
   }
 
   @Override
-  public List<String> addUniqueConstraints(List<SQLUniqueConstraint> uks)
+  public List<SQLUniqueConstraint> addUniqueConstraints(List<SQLUniqueConstraint> uks)
       throws InvalidObjectException, MetaException {
     return null;
   }
 
   @Override
-  public List<String> addNotNullConstraints(List<SQLNotNullConstraint> nns)
+  public List<SQLNotNullConstraint> addNotNullConstraints(List<SQLNotNullConstraint> nns)
       throws InvalidObjectException, MetaException {
     return null;
   }
 
   @Override
-  public List<String> addDefaultConstraints(List<SQLDefaultConstraint> nns)
+  public List<SQLDefaultConstraint> addDefaultConstraints(List<SQLDefaultConstraint> nns)
       throws InvalidObjectException, MetaException {
     return null;
   }
 
   @Override
-  public List<String> addCheckConstraints(List<SQLCheckConstraint> nns)
+  public List<SQLCheckConstraint> addCheckConstraints(List<SQLCheckConstraint> nns)
       throws InvalidObjectException, MetaException {
     return null;
   }
diff --git a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/cache/TestCachedStoreUpdateUsingEvents.java b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/cache/TestCachedStoreUpdateUsingEvents.java
index 8d50b4b..d32dc00 100644
--- a/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/cache/TestCachedStoreUpdateUsingEvents.java
+++ b/itests/hive-unit/src/test/java/org/apache/hadoop/hive/metastore/cache/TestCachedStoreUpdateUsingEvents.java
@@ -20,7 +20,6 @@ package org.apache.hadoop.hive.metastore.cache;
 import java.util.*;
 
 import com.google.common.collect.Lists;
-import org.apache.commons.collections.CollectionUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.hive.common.StatsSetupConst;
 import org.apache.hadoop.hive.common.TableName;
@@ -302,26 +301,25 @@ public class TestCachedStoreUpdateUsingEvents {
     CachedStore.prewarm(rawStore);
 
     // Add a db via rawStore
-    String dbName = "test_table_ops";
+    String dbName = "Test_Table_Ops";
     String dbOwner = "user1";
     Database db = createTestDb(dbName, dbOwner);
     hmsHandler.create_database(db);
     db = rawStore.getDatabase(DEFAULT_CATALOG_NAME, dbName);
 
     // Add a table via rawStore
-    String parentTableName = "ftbl";
-    String tblName = "tbl";
+    String parentTableName = "Ptbl";
+    String tblName = "Tbl";
     String tblOwner = "user1";
-    FieldSchema col1 = new FieldSchema("col1", "int", "integer column");
-    FieldSchema col2 = new FieldSchema("col2", "string", "string column");
-    FieldSchema col3 = new FieldSchema("col3", "int", "integer column");
-    List<FieldSchema> cols = new ArrayList<FieldSchema>();
+    FieldSchema col1 = new FieldSchema("Col1", "int", "integer column");
+    FieldSchema col2 = new FieldSchema("Col2", "string", "string column");
+    FieldSchema col3 = new FieldSchema("Col3", "int", "integer column");
+    List<FieldSchema> cols = new ArrayList<>();
     cols.add(col1);
     cols.add(col2);
     cols.add(col3);
-    List<FieldSchema> ptnCols = new ArrayList<FieldSchema>();
-    Table parentTable = createTestTbl(dbName, parentTableName, tblOwner, cols, ptnCols);
-    Table tbl = createTestTbl(dbName, tblName, tblOwner, cols, ptnCols);
+    Table parentTable = createTestTbl(dbName, parentTableName, tblOwner, cols, null);
+    Table tbl = createTestTbl(dbName, tblName, tblOwner, cols, null);
 
     // Constraints for parent Table
     List<SQLPrimaryKey> parentPkBase =
@@ -329,20 +327,20 @@ public class TestCachedStoreUpdateUsingEvents {
 
     // Constraints for table
     List<SQLPrimaryKey> pkBase =
-        Arrays.asList(new SQLPrimaryKey(dbName, tblName, col1.getName(), 1, "pk1", false, false, false));
+        Arrays.asList(new SQLPrimaryKey(dbName, tblName, col1.getName(), 1, "pK1", false, false, false));
     List<SQLUniqueConstraint> ucBase = Arrays.asList(
-        new SQLUniqueConstraint(DEFAULT_CATALOG_NAME, dbName, tblName, col1.getName(), 2, "uc1", false, false, false));
+        new SQLUniqueConstraint(DEFAULT_CATALOG_NAME, dbName, tblName, col1.getName(), 2, "uC1", false, false, false));
     List<SQLNotNullConstraint> nnBase = Arrays.asList(
-        new SQLNotNullConstraint(DEFAULT_CATALOG_NAME, dbName, tblName, col1.getName(), "nn1", false, false, false));
+        new SQLNotNullConstraint(DEFAULT_CATALOG_NAME, dbName, tblName, col1.getName(), "nN1", false, false, false));
     List<SQLDefaultConstraint> dcBase = Arrays.asList(
-        new SQLDefaultConstraint(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), col2.getName(), "1", "dc1",
+        new SQLDefaultConstraint(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), col2.getName(), "1", "dC1",
             false, false, false));
     List<SQLCheckConstraint> ccBase = Arrays.asList(
-        new SQLCheckConstraint(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), col2.getName(), "1", "cc1",
+        new SQLCheckConstraint(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), col2.getName(), "1", "cC1",
             false, false, false));
     List<SQLForeignKey> fkBase = Arrays.asList(
         new SQLForeignKey(parentPkBase.get(0).getTable_db(), parentPkBase.get(0).getTable_name(),
-            parentPkBase.get(0).getColumn_name(), dbName, tblName, col3.getName(), 2, 1, 2, "fk1",
+            parentPkBase.get(0).getColumn_name(), dbName, tblName, col3.getName(), 2, 1, 2, "fK1",
             parentPkBase.get(0).getPk_name(), false, false, false));
 
     // Create table and parent table
@@ -386,18 +384,10 @@ public class TestCachedStoreUpdateUsingEvents {
     hmsHandler.drop_constraint(dropConstraintRequest);
 
     // Validate cache store constraint is dropped
-    Assert
-        .assertTrue(CollectionUtils.isEmpty(sharedCache.listCachedPrimaryKeys(DEFAULT_CATALOG_NAME, dbName, tblName)));
-    Assert.assertTrue(
-        CollectionUtils.isEmpty(sharedCache.listCachedNotNullConstraints(DEFAULT_CATALOG_NAME, dbName, tblName)));
-    Assert.assertTrue(
-        CollectionUtils.isEmpty(sharedCache.listCachedUniqueConstraint(DEFAULT_CATALOG_NAME, dbName, tblName)));
-    Assert.assertTrue(
-        CollectionUtils.isEmpty(sharedCache.listCachedDefaultConstraint(DEFAULT_CATALOG_NAME, dbName, tblName)));
-    Assert.assertTrue(
-        CollectionUtils.isEmpty(sharedCache.listCachedCheckConstraint(DEFAULT_CATALOG_NAME, dbName, tblName)));
-    Assert.assertTrue(
-        CollectionUtils.isEmpty(sharedCache.listCachedForeignKeys(DEFAULT_CATALOG_NAME, dbName, tblName, null, null)));
+    assertRawStoreAndCachedStoreConstraint(DEFAULT_CATALOG_NAME, dbName, tblName);
+
+    // Validate cache store constraint is dropped
+    assertRawStoreAndCachedStoreConstraint(DEFAULT_CATALOG_NAME, dbName, parentTableName);
 
     // Adding keys back
     hmsHandler.add_primary_key(new AddPrimaryKeyRequest(parentPkBase));
@@ -411,6 +401,9 @@ public class TestCachedStoreUpdateUsingEvents {
     // Validating constraint values from Cache with rawStore
     assertRawStoreAndCachedStoreConstraint(DEFAULT_CATALOG_NAME, dbName, tblName);
 
+    // Validating constraint values from Cache with rawStore
+    assertRawStoreAndCachedStoreConstraint(DEFAULT_CATALOG_NAME, dbName, parentTableName);
+
     sharedCache.getDatabaseCache().clear();
     sharedCache.clearTableCache();
     sharedCache.getSdCache().clear();
@@ -419,18 +412,14 @@ public class TestCachedStoreUpdateUsingEvents {
   public void assertRawStoreAndCachedStoreConstraint(String catName, String dbName, String tblName)
       throws MetaException, NoSuchObjectException {
     SQLAllTableConstraints rawStoreConstraints = rawStore.getAllTableConstraints(catName, dbName, tblName);
-    List<SQLPrimaryKey> primaryKeys = sharedCache.listCachedPrimaryKeys(catName, dbName, tblName);
-    List<SQLNotNullConstraint> notNullConstraints = sharedCache.listCachedNotNullConstraints(catName, dbName, tblName);
-    List<SQLUniqueConstraint> uniqueConstraints = sharedCache.listCachedUniqueConstraint(catName, dbName, tblName);
-    List<SQLDefaultConstraint> defaultConstraints = sharedCache.listCachedDefaultConstraint(catName, dbName, tblName);
-    List<SQLCheckConstraint> checkConstraints = sharedCache.listCachedCheckConstraint(catName, dbName, tblName);
-    List<SQLForeignKey> foreignKeys = sharedCache.listCachedForeignKeys(catName, dbName, tblName, null, null);
-    Assert.assertEquals(rawStoreConstraints.getPrimaryKeys(), primaryKeys);
-    Assert.assertEquals(rawStoreConstraints.getNotNullConstraints(), notNullConstraints);
-    Assert.assertEquals(rawStoreConstraints.getUniqueConstraints(), uniqueConstraints);
-    Assert.assertEquals(rawStoreConstraints.getDefaultConstraints(), defaultConstraints);
-    Assert.assertEquals(rawStoreConstraints.getCheckConstraints(), checkConstraints);
-    Assert.assertEquals(rawStoreConstraints.getForeignKeys(), foreignKeys);
+    SQLAllTableConstraints cachedStoreConstraints = new SQLAllTableConstraints();
+    cachedStoreConstraints.setPrimaryKeys(sharedCache.listCachedPrimaryKeys(catName, dbName, tblName));
+    cachedStoreConstraints.setForeignKeys(sharedCache.listCachedForeignKeys(catName, dbName, tblName, null, null));
+    cachedStoreConstraints.setNotNullConstraints(sharedCache.listCachedNotNullConstraints(catName, dbName, tblName));
+    cachedStoreConstraints.setDefaultConstraints(sharedCache.listCachedDefaultConstraint(catName, dbName, tblName));
+    cachedStoreConstraints.setCheckConstraints(sharedCache.listCachedCheckConstraint(catName, dbName, tblName));
+    cachedStoreConstraints.setUniqueConstraints(sharedCache.listCachedUniqueConstraint(catName, dbName, tblName));
+    Assert.assertEquals(rawStoreConstraints, cachedStoreConstraints);
   }
 
   @Test
@@ -443,7 +432,7 @@ public class TestCachedStoreUpdateUsingEvents {
     CachedStore.prewarm(rawStore);
 
     // Add a db via rawStore
-    String dbName = "test_partition_ops";
+    String dbName = "Test_Partition_ops";
     String dbOwner = "user1";
     Database db = createTestDb(dbName, dbOwner);
     hmsHandler.create_database(db);
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 a159db8..5c264a0 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
@@ -78,6 +78,7 @@ import com.google.common.base.Suppliers;
 import com.google.common.collect.Lists;
 
 import org.apache.commons.cli.OptionBuilder;
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.hadoop.conf.Configuration;
 import org.apache.hadoop.fs.FSDataOutputStream;
 import org.apache.hadoop.fs.FileStatus;
@@ -2139,12 +2140,13 @@ public class HiveMetaStore extends ThriftHiveMetastore {
       ColumnStatistics colStats = null;
       Table tbl = req.getTable();
       EnvironmentContext envContext = req.getEnvContext();
-      List<SQLPrimaryKey> primaryKeys = req.getPrimaryKeys();
-      List<SQLForeignKey> foreignKeys = req.getForeignKeys();
-      List<SQLUniqueConstraint> uniqueConstraints = req.getUniqueConstraints();
-      List<SQLNotNullConstraint> notNullConstraints = req.getNotNullConstraints();
-      List<SQLDefaultConstraint> defaultConstraints = req.getDefaultConstraints();
-      List<SQLCheckConstraint> checkConstraints = req.getCheckConstraints();
+      SQLAllTableConstraints constraints = new SQLAllTableConstraints();
+      constraints.setPrimaryKeys(req.getPrimaryKeys());
+      constraints.setForeignKeys(req.getForeignKeys());
+      constraints.setUniqueConstraints(req.getUniqueConstraints());
+      constraints.setDefaultConstraints(req.getDefaultConstraints());
+      constraints.setCheckConstraints(req.getCheckConstraints());
+      constraints.setNotNullConstraints(req.getNotNullConstraints());
       List<String> processorCapabilities = req.getProcessorCapabilities();
       String processorId = req.getProcessorIdentifier();
 
@@ -2255,121 +2257,62 @@ public class HiveMetaStore extends ThriftHiveMetastore {
           tbl.putToParameters(hive_metastoreConstants.DDL_TIME, Long.toString(time));
         }
 
-        if (primaryKeys == null && foreignKeys == null
-                && uniqueConstraints == null && notNullConstraints == null && defaultConstraints == null
-            && checkConstraints == null) {
+        if (CollectionUtils.isEmpty(constraints.getPrimaryKeys()) && CollectionUtils.isEmpty(constraints.getForeignKeys())
+                && CollectionUtils.isEmpty(constraints.getUniqueConstraints())&& CollectionUtils.isEmpty(constraints.getNotNullConstraints())&& CollectionUtils.isEmpty(constraints.getDefaultConstraints())
+            && CollectionUtils.isEmpty(constraints.getCheckConstraints())) {
           ms.createTable(tbl);
         } else {
+          final String catName = tbl.getCatName();
           // Check that constraints have catalog name properly set first
-          if (primaryKeys != null && !primaryKeys.isEmpty() && !primaryKeys.get(0).isSetCatName()) {
-            for (SQLPrimaryKey pkcol : primaryKeys) pkcol.setCatName(tbl.getCatName());
+          if (CollectionUtils.isNotEmpty(constraints.getPrimaryKeys()) && !constraints.getPrimaryKeys().get(0).isSetCatName()) {
+            constraints.getPrimaryKeys().forEach(constraint -> constraint.setCatName(catName));
           }
-          if (foreignKeys != null && !foreignKeys.isEmpty() && !foreignKeys.get(0).isSetCatName()) {
-            for (SQLForeignKey fkcol : foreignKeys) fkcol.setCatName(tbl.getCatName());
+          if (CollectionUtils.isNotEmpty(constraints.getForeignKeys()) && !constraints.getForeignKeys().get(0).isSetCatName()) {
+            constraints.getForeignKeys().forEach(constraint -> constraint.setCatName(catName));
           }
-          if (uniqueConstraints != null && !uniqueConstraints.isEmpty() && !uniqueConstraints.get(0).isSetCatName()) {
-            for (SQLUniqueConstraint uccol : uniqueConstraints) uccol.setCatName(tbl.getCatName());
+          if (CollectionUtils.isNotEmpty(constraints.getUniqueConstraints()) && !constraints.getUniqueConstraints().get(0).isSetCatName()) {
+            constraints.getUniqueConstraints().forEach(constraint -> constraint.setCatName(catName));
           }
-          if (notNullConstraints != null && !notNullConstraints.isEmpty() && !notNullConstraints.get(0).isSetCatName()) {
-            for (SQLNotNullConstraint nncol : notNullConstraints) nncol.setCatName(tbl.getCatName());
+          if (CollectionUtils.isNotEmpty(constraints.getNotNullConstraints()) && !constraints.getNotNullConstraints().get(0).isSetCatName()) {
+            constraints.getNotNullConstraints().forEach(constraint -> constraint.setCatName(catName));
           }
-          if (defaultConstraints != null && !defaultConstraints.isEmpty() && !defaultConstraints.get(0).isSetCatName()) {
-            for (SQLDefaultConstraint dccol : defaultConstraints) dccol.setCatName(tbl.getCatName());
+          if (CollectionUtils.isNotEmpty(constraints.getDefaultConstraints()) && !constraints.getDefaultConstraints().get(0).isSetCatName()) {
+            constraints.getDefaultConstraints().forEach(constraint -> constraint.setCatName(catName));
           }
-          if (checkConstraints != null && !checkConstraints.isEmpty() && !checkConstraints.get(0).isSetCatName()) {
-            for (SQLCheckConstraint cccol : checkConstraints) cccol.setCatName(tbl.getCatName());
+          if (CollectionUtils.isNotEmpty(constraints.getCheckConstraints()) && !constraints.getCheckConstraints().get(0).isSetCatName()) {
+            constraints.getCheckConstraints().forEach(constraint -> constraint.setCatName(catName));
           }
           // Set constraint name if null before sending to listener
-          List<String> constraintNames = ms.createTableWithConstraints(tbl, primaryKeys, foreignKeys,
-              uniqueConstraints, notNullConstraints, defaultConstraints, checkConstraints);
-          int primaryKeySize = 0;
-          if (primaryKeys != null) {
-            primaryKeySize = primaryKeys.size();
-            for (int i = 0; i < primaryKeys.size(); i++) {
-              if (primaryKeys.get(i).getPk_name() == null) {
-                primaryKeys.get(i).setPk_name(constraintNames.get(i));
-              }
-              if (!primaryKeys.get(i).isSetCatName()) primaryKeys.get(i).setCatName(tbl.getCatName());
-            }
-          }
-          int foreignKeySize = 0;
-          if (foreignKeys != null) {
-            foreignKeySize = foreignKeys.size();
-            for (int i = 0; i < foreignKeySize; i++) {
-              if (foreignKeys.get(i).getFk_name() == null) {
-                foreignKeys.get(i).setFk_name(constraintNames.get(primaryKeySize + i));
-              }
-              if (!foreignKeys.get(i).isSetCatName()) foreignKeys.get(i).setCatName(tbl.getCatName());
-            }
-          }
-          int uniqueConstraintSize = 0;
-          if (uniqueConstraints != null) {
-            uniqueConstraintSize = uniqueConstraints.size();
-            for (int i = 0; i < uniqueConstraintSize; i++) {
-              if (uniqueConstraints.get(i).getUk_name() == null) {
-                uniqueConstraints.get(i).setUk_name(constraintNames.get(primaryKeySize + foreignKeySize + i));
-              }
-              if (!uniqueConstraints.get(i).isSetCatName()) uniqueConstraints.get(i).setCatName(tbl.getCatName());
-            }
-          }
-          int notNullConstraintSize =  0;
-          if (notNullConstraints != null) {
-            for (int i = 0; i < notNullConstraints.size(); i++) {
-              if (notNullConstraints.get(i).getNn_name() == null) {
-                notNullConstraints.get(i).setNn_name(constraintNames.get(primaryKeySize + foreignKeySize + uniqueConstraintSize + i));
-              }
-              if (!notNullConstraints.get(i).isSetCatName()) notNullConstraints.get(i).setCatName(tbl.getCatName());
-            }
-          }
-          int defaultConstraintSize =  0;
-          if (defaultConstraints!= null) {
-            for (int i = 0; i < defaultConstraints.size(); i++) {
-              if (defaultConstraints.get(i).getDc_name() == null) {
-                defaultConstraints.get(i).setDc_name(constraintNames.get(primaryKeySize + foreignKeySize
-                    + uniqueConstraintSize + notNullConstraintSize + i));
-              }
-              if (!defaultConstraints.get(i).isSetCatName()) defaultConstraints.get(i).setCatName(tbl.getCatName());
-            }
-          }
-          if (checkConstraints!= null) {
-            for (int i = 0; i < checkConstraints.size(); i++) {
-              if (checkConstraints.get(i).getDc_name() == null) {
-                checkConstraints.get(i).setDc_name(constraintNames.get(primaryKeySize + foreignKeySize
-                                                                             + uniqueConstraintSize
-                                                                             + defaultConstraintSize
-                                                                           + notNullConstraintSize + i));
-              }
-              if (!checkConstraints.get(i).isSetCatName()) checkConstraints.get(i).setCatName(tbl.getCatName());
-            }
-          }
+          constraints = ms.createTableWithConstraints(tbl, constraints);
+
         }
 
         if (!transactionalListeners.isEmpty()) {
           transactionalListenerResponses = MetaStoreListenerNotifier.notifyEvent(transactionalListeners,
               EventType.CREATE_TABLE, new CreateTableEvent(tbl, true, this, isReplicated), envContext);
-          if (primaryKeys != null && !primaryKeys.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getPrimaryKeys())) {
             MetaStoreListenerNotifier.notifyEvent(transactionalListeners, EventType.ADD_PRIMARYKEY,
-                new AddPrimaryKeyEvent(primaryKeys, true, this), envContext);
+                new AddPrimaryKeyEvent(constraints.getPrimaryKeys(), true, this), envContext);
           }
-          if (foreignKeys != null && !foreignKeys.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getForeignKeys())) {
             MetaStoreListenerNotifier.notifyEvent(transactionalListeners, EventType.ADD_FOREIGNKEY,
-                new AddForeignKeyEvent(foreignKeys, true, this), envContext);
+                new AddForeignKeyEvent(constraints.getForeignKeys(), true, this), envContext);
           }
-          if (uniqueConstraints != null && !uniqueConstraints.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getUniqueConstraints())) {
             MetaStoreListenerNotifier.notifyEvent(transactionalListeners, EventType.ADD_UNIQUECONSTRAINT,
-                new AddUniqueConstraintEvent(uniqueConstraints, true, this), envContext);
+                new AddUniqueConstraintEvent(constraints.getUniqueConstraints(), true, this), envContext);
           }
-          if (notNullConstraints != null && !notNullConstraints.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getNotNullConstraints())) {
             MetaStoreListenerNotifier.notifyEvent(transactionalListeners, EventType.ADD_NOTNULLCONSTRAINT,
-                new AddNotNullConstraintEvent(notNullConstraints, true, this), envContext);
+                new AddNotNullConstraintEvent(constraints.getNotNullConstraints(), true, this), envContext);
           }
-          if (checkConstraints != null && !checkConstraints.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getCheckConstraints())) {
             MetaStoreListenerNotifier.notifyEvent(transactionalListeners, EventType.ADD_CHECKCONSTRAINT,
-                new AddCheckConstraintEvent(checkConstraints, true, this), envContext);
+                new AddCheckConstraintEvent(constraints.getCheckConstraints(), true, this), envContext);
           }
-          if (defaultConstraints != null && !defaultConstraints.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getDefaultConstraints())) {
             MetaStoreListenerNotifier.notifyEvent(transactionalListeners, EventType.ADD_DEFAULTCONSTRAINT,
-                new AddDefaultConstraintEvent(defaultConstraints, true, this), envContext);
+                new AddDefaultConstraintEvent(constraints.getDefaultConstraints(), true, this), envContext);
           }
         }
 
@@ -2386,29 +2329,29 @@ public class HiveMetaStore extends ThriftHiveMetastore {
           MetaStoreListenerNotifier.notifyEvent(listeners, EventType.CREATE_TABLE,
               new CreateTableEvent(tbl, success, this, isReplicated), envContext,
                   transactionalListenerResponses, ms);
-          if (primaryKeys != null && !primaryKeys.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getPrimaryKeys())) {
             MetaStoreListenerNotifier.notifyEvent(listeners, EventType.ADD_PRIMARYKEY,
-                new AddPrimaryKeyEvent(primaryKeys, success, this), envContext);
+                new AddPrimaryKeyEvent(constraints.getPrimaryKeys(), success, this), envContext);
           }
-          if (foreignKeys != null && !foreignKeys.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getForeignKeys())) {
             MetaStoreListenerNotifier.notifyEvent(listeners, EventType.ADD_FOREIGNKEY,
-                new AddForeignKeyEvent(foreignKeys, success, this), envContext);
+                new AddForeignKeyEvent(constraints.getForeignKeys(), success, this), envContext);
           }
-          if (uniqueConstraints != null && !uniqueConstraints.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getUniqueConstraints())) {
             MetaStoreListenerNotifier.notifyEvent(listeners, EventType.ADD_UNIQUECONSTRAINT,
-                new AddUniqueConstraintEvent(uniqueConstraints, success, this), envContext);
+                new AddUniqueConstraintEvent(constraints.getUniqueConstraints(), success, this), envContext);
           }
-          if (notNullConstraints != null && !notNullConstraints.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getNotNullConstraints())) {
             MetaStoreListenerNotifier.notifyEvent(listeners, EventType.ADD_NOTNULLCONSTRAINT,
-                new AddNotNullConstraintEvent(notNullConstraints, success, this), envContext);
+                new AddNotNullConstraintEvent(constraints.getNotNullConstraints(), success, this), envContext);
           }
-          if (defaultConstraints != null && !defaultConstraints.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getDefaultConstraints())) {
             MetaStoreListenerNotifier.notifyEvent(listeners, EventType.ADD_DEFAULTCONSTRAINT,
-                new AddDefaultConstraintEvent(defaultConstraints, success, this), envContext);
+                new AddDefaultConstraintEvent(constraints.getDefaultConstraints(), success, this), envContext);
           }
-          if (checkConstraints != null && !checkConstraints.isEmpty()) {
+          if (CollectionUtils.isNotEmpty(constraints.getCheckConstraints())) {
             MetaStoreListenerNotifier.notifyEvent(listeners, EventType.ADD_CHECKCONSTRAINT,
-                new AddCheckConstraintEvent(checkConstraints, success, this), envContext);
+                new AddCheckConstraintEvent(constraints.getCheckConstraints(), success, this), envContext);
           }
         }
       }
@@ -2574,30 +2517,22 @@ public class HiveMetaStore extends ThriftHiveMetastore {
     public void add_primary_key(AddPrimaryKeyRequest req)
       throws MetaException, InvalidObjectException {
       List<SQLPrimaryKey> primaryKeyCols = req.getPrimaryKeyCols();
-      String constraintName = (primaryKeyCols != null && primaryKeyCols.size() > 0) ?
+      String constraintName = (CollectionUtils.isNotEmpty(primaryKeyCols)) ?
         primaryKeyCols.get(0).getPk_name() : "null";
       startFunction("add_primary_key", ": " + constraintName);
       boolean success = false;
       Exception ex = null;
-      if (!primaryKeyCols.isEmpty() && !primaryKeyCols.get(0).isSetCatName()) {
+      if (CollectionUtils.isNotEmpty(primaryKeyCols) && !primaryKeyCols.get(0).isSetCatName()) {
         String defaultCat = getDefaultCatalog(conf);
         primaryKeyCols.forEach(pk -> pk.setCatName(defaultCat));
       }
       RawStore ms = getMS();
       try {
         ms.openTransaction();
-        List<String> constraintNames = ms.addPrimaryKeys(primaryKeyCols);
-        // Set primary key name if null before sending to listener
-        if (primaryKeyCols != null) {
-          for (int i = 0; i < primaryKeyCols.size(); i++) {
-            if (primaryKeyCols.get(i).getPk_name() == null) {
-              primaryKeyCols.get(i).setPk_name(constraintNames.get(i));
-            }
-          }
-        }
+        List<SQLPrimaryKey> primaryKeys = ms.addPrimaryKeys(primaryKeyCols);
         if (transactionalListeners.size() > 0) {
-          if (primaryKeyCols != null && primaryKeyCols.size() > 0) {
-            AddPrimaryKeyEvent addPrimaryKeyEvent = new AddPrimaryKeyEvent(primaryKeyCols, true, this);
+          if (CollectionUtils.isNotEmpty(primaryKeys)) {
+            AddPrimaryKeyEvent addPrimaryKeyEvent = new AddPrimaryKeyEvent(primaryKeys, true, this);
             for (MetaStoreEventListener transactionalListener : transactionalListeners) {
               transactionalListener.onAddPrimaryKey(addPrimaryKeyEvent);
             }
@@ -2626,31 +2561,23 @@ public class HiveMetaStore extends ThriftHiveMetastore {
     @Override
     public void add_foreign_key(AddForeignKeyRequest req)
       throws MetaException, InvalidObjectException {
-      List<SQLForeignKey> foreignKeyCols = req.getForeignKeyCols();
-      String constraintName = (foreignKeyCols != null && foreignKeyCols.size() > 0) ?
-        foreignKeyCols.get(0).getFk_name() : "null";
+      List<SQLForeignKey> foreignKeys = req.getForeignKeyCols();
+      String constraintName = CollectionUtils.isNotEmpty(foreignKeys) ?
+        foreignKeys.get(0).getFk_name() : "null";
       startFunction("add_foreign_key", ": " + constraintName);
       boolean success = false;
       Exception ex = null;
-      if (!foreignKeyCols.isEmpty() && !foreignKeyCols.get(0).isSetCatName()) {
+      if (CollectionUtils.isNotEmpty(foreignKeys) && !foreignKeys.get(0).isSetCatName()) {
         String defaultCat = getDefaultCatalog(conf);
-        foreignKeyCols.forEach(pk -> pk.setCatName(defaultCat));
+        foreignKeys.forEach(pk -> pk.setCatName(defaultCat));
       }
       RawStore ms = getMS();
       try {
         ms.openTransaction();
-        List<String> constraintNames = ms.addForeignKeys(foreignKeyCols);
-        // Set foreign key name if null before sending to listener
-        if (foreignKeyCols != null) {
-          for (int i = 0; i < foreignKeyCols.size(); i++) {
-            if (foreignKeyCols.get(i).getFk_name() == null) {
-              foreignKeyCols.get(i).setFk_name(constraintNames.get(i));
-            }
-          }
-        }
+        foreignKeys = ms.addForeignKeys(foreignKeys);
         if (transactionalListeners.size() > 0) {
-          if (foreignKeyCols != null && foreignKeyCols.size() > 0) {
-            AddForeignKeyEvent addForeignKeyEvent = new AddForeignKeyEvent(foreignKeyCols, true, this);
+          if (CollectionUtils.isNotEmpty(foreignKeys)) {
+            AddForeignKeyEvent addForeignKeyEvent = new AddForeignKeyEvent(foreignKeys, true, this);
             for (MetaStoreEventListener transactionalListener : transactionalListeners) {
               transactionalListener.onAddForeignKey(addForeignKeyEvent);
             }
@@ -2666,9 +2593,9 @@ public class HiveMetaStore extends ThriftHiveMetastore {
       } finally {
         if (!success) {
           ms.rollbackTransaction();
-        } else if (foreignKeyCols != null && foreignKeyCols.size() > 0) {
+        } else if (CollectionUtils.isNotEmpty(foreignKeys)) {
           for (MetaStoreEventListener listener : listeners) {
-            AddForeignKeyEvent addForeignKeyEvent = new AddForeignKeyEvent(foreignKeyCols, true, this);
+            AddForeignKeyEvent addForeignKeyEvent = new AddForeignKeyEvent(foreignKeys, true, this);
             listener.onAddForeignKey(addForeignKeyEvent);
           }
         }
@@ -2679,31 +2606,23 @@ public class HiveMetaStore extends ThriftHiveMetastore {
     @Override
     public void add_unique_constraint(AddUniqueConstraintRequest req)
       throws MetaException, InvalidObjectException {
-      List<SQLUniqueConstraint> uniqueConstraintCols = req.getUniqueConstraintCols();
-      String constraintName = (uniqueConstraintCols != null && uniqueConstraintCols.size() > 0) ?
-              uniqueConstraintCols.get(0).getUk_name() : "null";
+      List<SQLUniqueConstraint> uniqueConstraints = req.getUniqueConstraintCols();
+      String constraintName = (uniqueConstraints != null && uniqueConstraints.size() > 0) ?
+              uniqueConstraints.get(0).getUk_name() : "null";
       startFunction("add_unique_constraint", ": " + constraintName);
       boolean success = false;
       Exception ex = null;
-      if (!uniqueConstraintCols.isEmpty() && !uniqueConstraintCols.get(0).isSetCatName()) {
+      if (!uniqueConstraints.isEmpty() && !uniqueConstraints.get(0).isSetCatName()) {
         String defaultCat = getDefaultCatalog(conf);
-        uniqueConstraintCols.forEach(pk -> pk.setCatName(defaultCat));
+        uniqueConstraints.forEach(pk -> pk.setCatName(defaultCat));
       }
       RawStore ms = getMS();
       try {
         ms.openTransaction();
-        List<String> constraintNames = ms.addUniqueConstraints(uniqueConstraintCols);
-        // Set unique constraint name if null before sending to listener
-        if (uniqueConstraintCols != null) {
-          for (int i = 0; i < uniqueConstraintCols.size(); i++) {
-            if (uniqueConstraintCols.get(i).getUk_name() == null) {
-              uniqueConstraintCols.get(i).setUk_name(constraintNames.get(i));
-            }
-          }
-        }
+        uniqueConstraints = ms.addUniqueConstraints(uniqueConstraints);
         if (transactionalListeners.size() > 0) {
-          if (uniqueConstraintCols != null && uniqueConstraintCols.size() > 0) {
-            AddUniqueConstraintEvent addUniqueConstraintEvent = new AddUniqueConstraintEvent(uniqueConstraintCols, true, this);
+          if (CollectionUtils.isNotEmpty(uniqueConstraints)) {
+            AddUniqueConstraintEvent addUniqueConstraintEvent = new AddUniqueConstraintEvent(uniqueConstraints, true, this);
             for (MetaStoreEventListener transactionalListener : transactionalListeners) {
               transactionalListener.onAddUniqueConstraint(addUniqueConstraintEvent);
             }
@@ -2719,9 +2638,9 @@ public class HiveMetaStore extends ThriftHiveMetastore {
       } finally {
         if (!success) {
           ms.rollbackTransaction();
-        } else if (uniqueConstraintCols != null && uniqueConstraintCols.size() > 0) {
+        } else if (CollectionUtils.isNotEmpty(uniqueConstraints)) {
           for (MetaStoreEventListener listener : listeners) {
-            AddUniqueConstraintEvent addUniqueConstraintEvent = new AddUniqueConstraintEvent(uniqueConstraintCols, true, this);
+            AddUniqueConstraintEvent addUniqueConstraintEvent = new AddUniqueConstraintEvent(uniqueConstraints, true, this);
             listener.onAddUniqueConstraint(addUniqueConstraintEvent);
           }
         }
@@ -2732,31 +2651,24 @@ public class HiveMetaStore extends ThriftHiveMetastore {
     @Override
     public void add_not_null_constraint(AddNotNullConstraintRequest req)
       throws MetaException, InvalidObjectException {
-      List<SQLNotNullConstraint> notNullConstraintCols = req.getNotNullConstraintCols();
-      String constraintName = (notNullConstraintCols != null && notNullConstraintCols.size() > 0) ?
-              notNullConstraintCols.get(0).getNn_name() : "null";
+      List<SQLNotNullConstraint> notNullConstraints = req.getNotNullConstraintCols();
+      String constraintName = (notNullConstraints != null && notNullConstraints.size() > 0) ?
+              notNullConstraints.get(0).getNn_name() : "null";
       startFunction("add_not_null_constraint", ": " + constraintName);
       boolean success = false;
       Exception ex = null;
-      if (!notNullConstraintCols.isEmpty() && !notNullConstraintCols.get(0).isSetCatName()) {
+      if (!notNullConstraints.isEmpty() && !notNullConstraints.get(0).isSetCatName()) {
         String defaultCat = getDefaultCatalog(conf);
-        notNullConstraintCols.forEach(pk -> pk.setCatName(defaultCat));
+        notNullConstraints.forEach(pk -> pk.setCatName(defaultCat));
       }
       RawStore ms = getMS();
       try {
         ms.openTransaction();
-        List<String> constraintNames = ms.addNotNullConstraints(notNullConstraintCols);
-        // Set not null constraint name if null before sending to listener
-        if (notNullConstraintCols != null) {
-          for (int i = 0; i < notNullConstraintCols.size(); i++) {
-            if (notNullConstraintCols.get(i).getNn_name() == null) {
-              notNullConstraintCols.get(i).setNn_name(constraintNames.get(i));
-            }
-          }
-        }
+        notNullConstraints = ms.addNotNullConstraints(notNullConstraints);
+
         if (transactionalListeners.size() > 0) {
-          if (notNullConstraintCols != null && notNullConstraintCols.size() > 0) {
-            AddNotNullConstraintEvent addNotNullConstraintEvent = new AddNotNullConstraintEvent(notNullConstraintCols, true, this);
+          if (CollectionUtils.isNotEmpty(notNullConstraints)) {
+            AddNotNullConstraintEvent addNotNullConstraintEvent = new AddNotNullConstraintEvent(notNullConstraints, true, this);
             for (MetaStoreEventListener transactionalListener : transactionalListeners) {
               transactionalListener.onAddNotNullConstraint(addNotNullConstraintEvent);
             }
@@ -2772,9 +2684,9 @@ public class HiveMetaStore extends ThriftHiveMetastore {
       } finally {
         if (!success) {
           ms.rollbackTransaction();
-        } else if (notNullConstraintCols != null && notNullConstraintCols.size() > 0) {
+        } else if (CollectionUtils.isNotEmpty(notNullConstraints)) {
           for (MetaStoreEventListener listener : listeners) {
-            AddNotNullConstraintEvent addNotNullConstraintEvent = new AddNotNullConstraintEvent(notNullConstraintCols, true, this);
+            AddNotNullConstraintEvent addNotNullConstraintEvent = new AddNotNullConstraintEvent(notNullConstraints, true, this);
             listener.onAddNotNullConstraint(addNotNullConstraintEvent);
           }
         }
@@ -2783,33 +2695,25 @@ public class HiveMetaStore extends ThriftHiveMetastore {
     }
 
     @Override
-    public void add_default_constraint(AddDefaultConstraintRequest req)
-        throws MetaException, InvalidObjectException {
-      List<SQLDefaultConstraint> defaultConstraintCols= req.getDefaultConstraintCols();
-      String constraintName = (defaultConstraintCols != null && defaultConstraintCols.size() > 0) ?
-          defaultConstraintCols.get(0).getDc_name() : "null";
+    public void add_default_constraint(AddDefaultConstraintRequest req) throws MetaException, InvalidObjectException {
+      List<SQLDefaultConstraint> defaultConstraints = req.getDefaultConstraintCols();
+      String constraintName =
+          CollectionUtils.isNotEmpty(defaultConstraints) ? defaultConstraints.get(0).getDc_name() : "null";
       startFunction("add_default_constraint", ": " + constraintName);
       boolean success = false;
       Exception ex = null;
-      if (!defaultConstraintCols.isEmpty() && !defaultConstraintCols.get(0).isSetCatName()) {
+      if (!defaultConstraints.isEmpty() && !defaultConstraints.get(0).isSetCatName()) {
         String defaultCat = getDefaultCatalog(conf);
-        defaultConstraintCols.forEach(pk -> pk.setCatName(defaultCat));
+        defaultConstraints.forEach(pk -> pk.setCatName(defaultCat));
       }
       RawStore ms = getMS();
       try {
         ms.openTransaction();
-        List<String> constraintNames = ms.addDefaultConstraints(defaultConstraintCols);
-        // Set not null constraint name if null before sending to listener
-        if (defaultConstraintCols != null) {
-          for (int i = 0; i < defaultConstraintCols.size(); i++) {
-            if (defaultConstraintCols.get(i).getDc_name() == null) {
-              defaultConstraintCols.get(i).setDc_name(constraintNames.get(i));
-            }
-          }
-        }
+        defaultConstraints = ms.addDefaultConstraints(defaultConstraints);
         if (transactionalListeners.size() > 0) {
-          if (defaultConstraintCols != null && defaultConstraintCols.size() > 0) {
-            AddDefaultConstraintEvent addDefaultConstraintEvent = new AddDefaultConstraintEvent(defaultConstraintCols, true, this);
+          if (CollectionUtils.isNotEmpty(defaultConstraints)) {
+            AddDefaultConstraintEvent addDefaultConstraintEvent =
+                new AddDefaultConstraintEvent(defaultConstraints, true, this);
             for (MetaStoreEventListener transactionalListener : transactionalListeners) {
               transactionalListener.onAddDefaultConstraint(addDefaultConstraintEvent);
             }
@@ -2825,9 +2729,10 @@ public class HiveMetaStore extends ThriftHiveMetastore {
       } finally {
         if (!success) {
           ms.rollbackTransaction();
-        } else if (defaultConstraintCols != null && defaultConstraintCols.size() > 0) {
+        } else if (CollectionUtils.isNotEmpty(defaultConstraints)) {
           for (MetaStoreEventListener listener : listeners) {
-            AddDefaultConstraintEvent addDefaultConstraintEvent = new AddDefaultConstraintEvent(defaultConstraintCols, true, this);
+            AddDefaultConstraintEvent addDefaultConstraintEvent =
+                new AddDefaultConstraintEvent(defaultConstraints, true, this);
             listener.onAddDefaultConstraint(addDefaultConstraintEvent);
           }
         }
@@ -2838,30 +2743,23 @@ public class HiveMetaStore extends ThriftHiveMetastore {
     @Override
     public void add_check_constraint(AddCheckConstraintRequest req)
         throws MetaException, InvalidObjectException {
-      List<SQLCheckConstraint> checkConstraintCols= req.getCheckConstraintCols();
-      String constraintName = (checkConstraintCols != null && checkConstraintCols.size() > 0) ?
-          checkConstraintCols.get(0).getDc_name() : "null";
+      List<SQLCheckConstraint> checkConstraints= req.getCheckConstraintCols();
+      String constraintName = CollectionUtils.isNotEmpty(checkConstraints) ?
+          checkConstraints.get(0).getDc_name() : "null";
       startFunction("add_check_constraint", ": " + constraintName);
       boolean success = false;
       Exception ex = null;
-      if (!checkConstraintCols.isEmpty() && !checkConstraintCols.get(0).isSetCatName()) {
+      if (!checkConstraints.isEmpty() && !checkConstraints.get(0).isSetCatName()) {
         String defaultCat = getDefaultCatalog(conf);
-        checkConstraintCols.forEach(pk -> pk.setCatName(defaultCat));
+        checkConstraints.forEach(pk -> pk.setCatName(defaultCat));
       }
       RawStore ms = getMS();
       try {
         ms.openTransaction();
-        List<String> constraintNames = ms.addCheckConstraints(checkConstraintCols);
-        if (checkConstraintCols != null) {
-          for (int i = 0; i < checkConstraintCols.size(); i++) {
-            if (checkConstraintCols.get(i).getDc_name() == null) {
-              checkConstraintCols.get(i).setDc_name(constraintNames.get(i));
-            }
-          }
-        }
+        checkConstraints = ms.addCheckConstraints(checkConstraints);
         if (transactionalListeners.size() > 0) {
-          if (checkConstraintCols != null && checkConstraintCols.size() > 0) {
-            AddCheckConstraintEvent addcheckConstraintEvent = new AddCheckConstraintEvent(checkConstraintCols, true, this);
+          if (CollectionUtils.isNotEmpty(checkConstraints)) {
+            AddCheckConstraintEvent addcheckConstraintEvent = new AddCheckConstraintEvent(checkConstraints, true, this);
             for (MetaStoreEventListener transactionalListener : transactionalListeners) {
              transactionalListener.onAddCheckConstraint(addcheckConstraintEvent);
             }
@@ -2877,9 +2775,9 @@ public class HiveMetaStore extends ThriftHiveMetastore {
       } finally {
         if (!success) {
           ms.rollbackTransaction();
-        } else if (checkConstraintCols != null && checkConstraintCols.size() > 0) {
+        } else if (CollectionUtils.isNotEmpty(checkConstraints)) {
           for (MetaStoreEventListener listener : listeners) {
-            AddCheckConstraintEvent addCheckConstraintEvent = new AddCheckConstraintEvent(checkConstraintCols, true, this);
+            AddCheckConstraintEvent addCheckConstraintEvent = new AddCheckConstraintEvent(checkConstraints, true, this);
             listener.onAddCheckConstraint(addCheckConstraintEvent);
           }
         }
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 2fd776c..e03c8c3 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
@@ -1082,11 +1082,8 @@ public class ObjectStore implements RawStore, Configurable {
   }
 
   @Override
-  public List<String> createTableWithConstraints(Table tbl,
-    List<SQLPrimaryKey> primaryKeys, List<SQLForeignKey> foreignKeys,
-    List<SQLUniqueConstraint> uniqueConstraints, List<SQLNotNullConstraint> notNullConstraints,
-    List<SQLDefaultConstraint> defaultConstraints, List<SQLCheckConstraint> checkConstraints)
-    throws InvalidObjectException, MetaException {
+  public SQLAllTableConstraints createTableWithConstraints(Table tbl, SQLAllTableConstraints constraints)
+      throws InvalidObjectException, MetaException {
     boolean success = false;
     try {
       openTransaction();
@@ -1094,27 +1091,27 @@ public class ObjectStore implements RawStore, Configurable {
       // Add constraints.
       // We need not do a deep retrieval of the Table Column Descriptor while persisting the
       // constraints since this transaction involving create table is not yet committed.
-      List<String> constraintNames = new ArrayList<>();
-      if (foreignKeys != null) {
-        constraintNames.addAll(addForeignKeys(foreignKeys, false, primaryKeys, uniqueConstraints));
+      if (CollectionUtils.isNotEmpty(constraints.getForeignKeys())) {
+        constraints.setForeignKeys(addForeignKeys(constraints.getForeignKeys(), false, constraints.getPrimaryKeys(),
+            constraints.getUniqueConstraints()));
       }
-      if (primaryKeys != null) {
-        constraintNames.addAll(addPrimaryKeys(primaryKeys, false));
+      if (CollectionUtils.isNotEmpty(constraints.getPrimaryKeys())) {
+        constraints.setPrimaryKeys(addPrimaryKeys(constraints.getPrimaryKeys(), false));
       }
-      if (uniqueConstraints != null) {
-        constraintNames.addAll(addUniqueConstraints(uniqueConstraints, false));
+      if (CollectionUtils.isNotEmpty(constraints.getUniqueConstraints())) {
+        constraints.setUniqueConstraints(addUniqueConstraints(constraints.getUniqueConstraints(), false));
       }
-      if (notNullConstraints != null) {
-        constraintNames.addAll(addNotNullConstraints(notNullConstraints, false));
+      if (CollectionUtils.isNotEmpty(constraints.getNotNullConstraints())) {
+        constraints.setNotNullConstraints(addNotNullConstraints(constraints.getNotNullConstraints(), false));
       }
-      if (defaultConstraints != null) {
-        constraintNames.addAll(addDefaultConstraints(defaultConstraints, false));
+      if (CollectionUtils.isNotEmpty(constraints.getDefaultConstraints())) {
+        constraints.setDefaultConstraints(addDefaultConstraints(constraints.getDefaultConstraints(), false));
       }
-      if (checkConstraints != null) {
-        constraintNames.addAll(addCheckConstraints(checkConstraints, false));
+      if (CollectionUtils.isNotEmpty(constraints.getCheckConstraints())) {
+        constraints.setCheckConstraints(addCheckConstraints(constraints.getCheckConstraints(), false));
       }
       success = commitTransaction();
-      return constraintNames;
+      return constraints;
     } finally {
       if (!success) {
         rollbackTransaction();
@@ -4992,7 +4989,7 @@ public class ObjectStore implements RawStore, Configurable {
   }
 
   @Override
-  public List<String> addForeignKeys(
+  public List<SQLForeignKey> addForeignKeys(
     List<SQLForeignKey> fks) throws InvalidObjectException, MetaException {
    return addForeignKeys(fks, true, null, null);
   }
@@ -5068,11 +5065,10 @@ public class ObjectStore implements RawStore, Configurable {
     return null;
   }
 
-  private List<String> addForeignKeys(List<SQLForeignKey> foreignKeys, boolean retrieveCD,
+  //TODO: clean up this method
+  private List<SQLForeignKey> addForeignKeys(List<SQLForeignKey> foreignKeys, boolean retrieveCD,
       List<SQLPrimaryKey> primaryKeys, List<SQLUniqueConstraint> uniqueConstraints)
           throws InvalidObjectException, MetaException {
-    List<String> fkNames = new ArrayList<>();
-
     if (CollectionUtils.isNotEmpty(foreignKeys)) {
       List<MConstraint> mpkfks = new ArrayList<>();
       String currentConstraintName = null;
@@ -5156,7 +5152,7 @@ public class ObjectStore implements RawStore, Configurable {
         StringBuilder fkSignature = new StringBuilder();
         StringBuilder referencedKSignature = new StringBuilder();
         for (; i < foreignKeys.size(); i++) {
-          final SQLForeignKey foreignKey = foreignKeys.get(i);
+          SQLForeignKey foreignKey = foreignKeys.get(i);
           final String fkColumnName = normalizeIdentifier(foreignKey.getFkcolumn_name());
           int childIntegerIndex = getColumnIndexFromTableColumns(childCD.getCols(), fkColumnName);
           if (childIntegerIndex == -1) {
@@ -5201,7 +5197,16 @@ public class ObjectStore implements RawStore, Configurable {
               throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName);
             }
           }
-          fkNames.add(currentConstraintName);
+          // Update Column, keys, table, database, catalog name
+          foreignKey.setFk_name(currentConstraintName);
+          foreignKey.setCatName(catName);
+          foreignKey.setFktable_db(fkTableDB);
+          foreignKey.setFktable_name(fkTableName);
+          foreignKey.setPktable_db(pkTableDB);
+          foreignKey.setPktable_name(pkTableName);
+          foreignKey.setFkcolumn_name(fkColumnName);
+          foreignKey.setPkcolumn_name(pkColumnName);
+
           Integer updateRule = foreignKey.getUpdate_rule();
           Integer deleteRule = foreignKey.getDelete_rule();
           int enableValidateRely = (foreignKey.isEnable_cstr() ? 4 : 0) +
@@ -5248,8 +5253,9 @@ public class ObjectStore implements RawStore, Configurable {
         referencedKSignature = new StringBuilder();
       }
       pm.makePersistentAll(mpkfks);
+
     }
-    return fkNames;
+    return foreignKeys;
   }
 
   private static Set<String> generateValidPKsOrUniqueSignatures(List<MFieldSchema> tableCols,
@@ -5304,22 +5310,21 @@ public class ObjectStore implements RawStore, Configurable {
   }
 
   @Override
-  public List<String> addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException,
+  public List<SQLPrimaryKey> addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException,
     MetaException {
     return addPrimaryKeys(pks, true);
   }
 
-  private List<String> addPrimaryKeys(List<SQLPrimaryKey> pks, boolean retrieveCD) throws InvalidObjectException,
+  private List<SQLPrimaryKey> addPrimaryKeys(List<SQLPrimaryKey> pks, boolean retrieveCD) throws InvalidObjectException,
     MetaException {
-    List<String> pkNames = new ArrayList<>();
     List<MConstraint> mpks = new ArrayList<>();
     String constraintName = null;
 
-    for (int i = 0; i < pks.size(); i++) {
-      final String catName = normalizeIdentifier(pks.get(i).getCatName());
-      final String tableDB = normalizeIdentifier(pks.get(i).getTable_db());
-      final String tableName = normalizeIdentifier(pks.get(i).getTable_name());
-      final String columnName = normalizeIdentifier(pks.get(i).getColumn_name());
+    for (SQLPrimaryKey pk : pks) {
+      final String catName = normalizeIdentifier(pk.getCatName());
+      final String tableDB = normalizeIdentifier(pk.getTable_db());
+      final String tableName = normalizeIdentifier(pk.getTable_name());
+      final String columnName = normalizeIdentifier(pk.getColumn_name());
 
       // If retrieveCD is false, we do not need to do a deep retrieval of the Table Column Descriptor.
       // For instance, this is the case when we are creating the table.
@@ -5345,24 +5350,24 @@ public class ObjectStore implements RawStore, Configurable {
         throw new MetaException(" Primary key already exists for: " +
             TableName.getQualified(catName, tableDB, tableName));
       }
-      if (pks.get(i).getPk_name() == null) {
-        if (pks.get(i).getKey_seq() == 1) {
+      if (pk.getPk_name() == null) {
+        if (pk.getKey_seq() == 1) {
           constraintName = generateConstraintName(parentTable, tableDB, tableName, columnName, "pk");
         }
       } else {
-        constraintName = normalizeIdentifier(pks.get(i).getPk_name());
+        constraintName = normalizeIdentifier(pk.getPk_name());
         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);
+
+      int enableValidateRely = (pk.isEnable_cstr() ? 4 : 0) +
+      (pk.isValidate_cstr() ? 2 : 0) + (pk.isRely_cstr() ? 1 : 0);
       MConstraint mpk = new MConstraint(
           constraintName,
-          pks.get(i).getKey_seq(),
+          pk.getKey_seq(),
           MConstraint.PRIMARY_KEY_CONSTRAINT,
           null,
           null,
@@ -5374,28 +5379,35 @@ public class ObjectStore implements RawStore, Configurable {
           null,
         parentIntegerIndex);
       mpks.add(mpk);
+
+      // Add normalized identifier back to result
+      pk.setCatName(catName);
+      pk.setTable_db(tableDB);
+      pk.setTable_name(tableName);
+      pk.setColumn_name(columnName);
+      pk.setPk_name(constraintName);
     }
     pm.makePersistentAll(mpks);
-    return pkNames;
+    return pks;
   }
 
   @Override
-  public List<String> addUniqueConstraints(List<SQLUniqueConstraint> uks)
+  public List<SQLUniqueConstraint> addUniqueConstraints(List<SQLUniqueConstraint> uks)
           throws InvalidObjectException, MetaException {
     return addUniqueConstraints(uks, true);
   }
 
-  private List<String> addUniqueConstraints(List<SQLUniqueConstraint> uks, boolean retrieveCD)
+  private List<SQLUniqueConstraint> addUniqueConstraints(List<SQLUniqueConstraint> uks, boolean retrieveCD)
           throws InvalidObjectException, MetaException {
-    List<String> ukNames = new ArrayList<>();
+
     List<MConstraint> cstrs = new ArrayList<>();
     String constraintName = null;
 
-    for (int i = 0; i < uks.size(); i++) {
-      final String catName = normalizeIdentifier(uks.get(i).getCatName());
-      final String tableDB = normalizeIdentifier(uks.get(i).getTable_db());
-      final String tableName = normalizeIdentifier(uks.get(i).getTable_name());
-      final String columnName = normalizeIdentifier(uks.get(i).getColumn_name());
+    for (SQLUniqueConstraint uk : uks) {
+      final String catName = normalizeIdentifier(uk.getCatName());
+      final String tableDB = normalizeIdentifier(uk.getTable_db());
+      final String tableName = normalizeIdentifier(uk.getTable_name());
+      final String columnName = normalizeIdentifier(uk.getColumn_name());
 
       // If retrieveCD is false, we do not need to do a deep retrieval of the Table Column Descriptor.
       // For instance, this is the case when we are creating the table.
@@ -5416,25 +5428,25 @@ public class ObjectStore implements RawStore, Configurable {
           throw new InvalidObjectException("Parent column not found: " + columnName);
         }
       }
-      if (uks.get(i).getUk_name() == null) {
-        if (uks.get(i).getKey_seq() == 1) {
+      if (uk.getUk_name() == null) {
+        if (uk.getKey_seq() == 1) {
           constraintName = generateConstraintName(parentTable, tableDB, tableName, columnName, "uk");
         }
       } else {
-        constraintName = normalizeIdentifier(uks.get(i).getUk_name());
+        constraintName = normalizeIdentifier(uk.getUk_name());
         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);
 
-      int enableValidateRely = (uks.get(i).isEnable_cstr() ? 4 : 0) +
-          (uks.get(i).isValidate_cstr() ? 2 : 0) + (uks.get(i).isRely_cstr() ? 1 : 0);
+
+      int enableValidateRely = (uk.isEnable_cstr() ? 4 : 0) +
+          (uk.isValidate_cstr() ? 2 : 0) + (uk.isRely_cstr() ? 1 : 0);
       MConstraint muk = new MConstraint(
           constraintName,
-          uks.get(i).getKey_seq(),
+          uk.getKey_seq(),
           MConstraint.UNIQUE_CONSTRAINT,
           null,
           null,
@@ -5446,56 +5458,70 @@ public class ObjectStore implements RawStore, Configurable {
           null,
           parentIntegerIndex);
       cstrs.add(muk);
+
+      // Add normalized identifier back to result
+      uk.setCatName(catName);
+      uk.setTable_db(tableDB);
+      uk.setTable_name(tableName);
+      uk.setColumn_name(columnName);
+      uk.setUk_name(constraintName);
+
     }
     pm.makePersistentAll(cstrs);
-    return ukNames;
+    return uks;
   }
 
   @Override
-  public List<String> addNotNullConstraints(List<SQLNotNullConstraint> nns)
+  public List<SQLNotNullConstraint> addNotNullConstraints(List<SQLNotNullConstraint> nns)
           throws InvalidObjectException, MetaException {
     return addNotNullConstraints(nns, true);
   }
 
   @Override
-  public List<String> addDefaultConstraints(List<SQLDefaultConstraint> nns)
+  public List<SQLDefaultConstraint> addDefaultConstraints(List<SQLDefaultConstraint> nns)
       throws InvalidObjectException, MetaException {
     return addDefaultConstraints(nns, true);
   }
 
   @Override
-  public List<String> addCheckConstraints(List<SQLCheckConstraint> nns)
+  public List<SQLCheckConstraint> addCheckConstraints(List<SQLCheckConstraint> nns)
       throws InvalidObjectException, MetaException {
     return addCheckConstraints(nns, true);
   }
 
-  private List<String> addCheckConstraints(List<SQLCheckConstraint> cc, boolean retrieveCD)
+  private List<SQLCheckConstraint> addCheckConstraints(List<SQLCheckConstraint> ccs, boolean retrieveCD)
       throws InvalidObjectException, MetaException {
-    List<String> nnNames = new ArrayList<>();
     List<MConstraint> cstrs = new ArrayList<>();
 
-    for (int i = 0; i < cc.size(); i++) {
-      final String catName = normalizeIdentifier(cc.get(i).getCatName());
-      final String tableDB = normalizeIdentifier(cc.get(i).getTable_db());
-      final String tableName = normalizeIdentifier(cc.get(i).getTable_name());
-      final String columnName = cc.get(i).getColumn_name() == null? null
-          : normalizeIdentifier(cc.get(i).getColumn_name());
-      final String ccName = cc.get(i).getDc_name();
-      boolean isEnable = cc.get(i).isEnable_cstr();
-      boolean isValidate = cc.get(i).isValidate_cstr();
-      boolean isRely = cc.get(i).isRely_cstr();
-      String constraintValue = cc.get(i).getCheck_expression();
-      addConstraint(catName, tableDB, tableName, columnName, ccName, isEnable, isRely, isValidate,
-                    MConstraint.CHECK_CONSTRAINT, constraintValue, retrieveCD, nnNames, cstrs);
+    for (SQLCheckConstraint cc: ccs) {
+      final String catName = normalizeIdentifier(cc.getCatName());
+      final String tableDB = normalizeIdentifier(cc.getTable_db());
+      final String tableName = normalizeIdentifier(cc.getTable_name());
+      final String columnName = cc.getColumn_name() == null? null
+          : normalizeIdentifier(cc.getColumn_name());
+      final String ccName = cc.getDc_name();
+      boolean isEnable = cc.isEnable_cstr();
+      boolean isValidate = cc.isValidate_cstr();
+      boolean isRely = cc.isRely_cstr();
+      String constraintValue = cc.getCheck_expression();
+      MConstraint muk = addConstraint(catName, tableDB, tableName, columnName, ccName, isEnable, isRely, isValidate,
+                    MConstraint.CHECK_CONSTRAINT, constraintValue, retrieveCD);
+      cstrs.add(muk);
+
+      // Add normalized identifier back to result
+      cc.setCatName(catName);
+      cc.setTable_db(tableDB);
+      cc.setTable_name(tableName);
+      cc.setColumn_name(columnName);
+      cc.setDc_name(muk.getConstraintName());
     }
     pm.makePersistentAll(cstrs);
-    return nnNames;
+    return ccs;
   }
 
-  private void addConstraint(String catName, String tableDB, String tableName, String columnName, String ccName,
+  private MConstraint addConstraint(String catName, String tableDB, String tableName, String columnName, String ccName,
                                boolean isEnable, boolean isRely, boolean isValidate, int constraintType,
-                               String constraintValue, boolean retrieveCD, List<String> nnNames,
-                               List<MConstraint> cstrs)
+                               String constraintValue, boolean retrieveCD)
       throws InvalidObjectException, MetaException {
     String constraintName = null;
     // If retrieveCD is false, we do not need to do a deep retrieval of the Table Column Descriptor.
@@ -5524,7 +5550,6 @@ public class ObjectStore implements RawStore, Configurable {
         throw new InvalidObjectException("Constraint name already exists: " + fqConstraintName);
       }
     }
-    nnNames.add(constraintName);
 
     int enableValidateRely = (isEnable ? 4 : 0) +
         (isValidate ? 2 : 0) + (isRely ? 1 : 0);
@@ -5542,42 +5567,50 @@ public class ObjectStore implements RawStore, Configurable {
         null,
         parentIntegerIndex,
         constraintValue);
-    cstrs.add(muk);
+
+    return muk;
   }
 
-  private List<String> addDefaultConstraints(List<SQLDefaultConstraint> nns, boolean retrieveCD)
+  private List<SQLDefaultConstraint> addDefaultConstraints(List<SQLDefaultConstraint> dcs, boolean retrieveCD)
       throws InvalidObjectException, MetaException {
-    List<String> nnNames = new ArrayList<>();
+
     List<MConstraint> cstrs = new ArrayList<>();
+    for (SQLDefaultConstraint dc : dcs) {
+      final String catName = normalizeIdentifier(dc.getCatName());
+      final String tableDB = normalizeIdentifier(dc.getTable_db());
+      final String tableName = normalizeIdentifier(dc.getTable_name());
+      final String columnName = normalizeIdentifier(dc.getColumn_name());
+      final String dcName = dc.getDc_name();
+      boolean isEnable = dc.isEnable_cstr();
+      boolean isValidate = dc.isValidate_cstr();
+      boolean isRely = dc.isRely_cstr();
+      String constraintValue = dc.getDefault_value();
+      MConstraint muk = addConstraint(catName, tableDB, tableName, columnName, dcName, isEnable, isRely, isValidate,
+      MConstraint.DEFAULT_CONSTRAINT, constraintValue, retrieveCD);
+      cstrs.add(muk);
 
-    for (int i = 0; i < nns.size(); i++) {
-      final String catName = normalizeIdentifier(nns.get(i).getCatName());
-      final String tableDB = normalizeIdentifier(nns.get(i).getTable_db());
-      final String tableName = normalizeIdentifier(nns.get(i).getTable_name());
-      final String columnName = normalizeIdentifier(nns.get(i).getColumn_name());
-      final String ccName = nns.get(i).getDc_name();
-      boolean isEnable = nns.get(i).isEnable_cstr();
-      boolean isValidate = nns.get(i).isValidate_cstr();
-      boolean isRely = nns.get(i).isRely_cstr();
-      String constraintValue = nns.get(i).getDefault_value();
-      addConstraint(catName, tableDB, tableName, columnName, ccName, isEnable, isRely, isValidate,
-      MConstraint.DEFAULT_CONSTRAINT, constraintValue, retrieveCD, nnNames, cstrs);
+      // Add normalized identifier back to result
+      dc.setCatName(catName);
+      dc.setTable_db(tableDB);
+      dc.setTable_name(tableName);
+      dc.setColumn_name(columnName);
+      dc.setDc_name(muk.getConstraintName());
     }
     pm.makePersistentAll(cstrs);
-    return nnNames;
+    return dcs;
   }
 
-  private List<String> addNotNullConstraints(List<SQLNotNullConstraint> nns, boolean retrieveCD)
+  private List<SQLNotNullConstraint> addNotNullConstraints(List<SQLNotNullConstraint> nns, boolean retrieveCD)
           throws InvalidObjectException, MetaException {
-    List<String> nnNames = new ArrayList<>();
+
     List<MConstraint> cstrs = new ArrayList<>();
-    String constraintName = null;
+    String constraintName;
 
-    for (int i = 0; i < nns.size(); i++) {
-      final String catName = normalizeIdentifier(nns.get(i).getCatName());
-      final String tableDB = normalizeIdentifier(nns.get(i).getTable_db());
-      final String tableName = normalizeIdentifier(nns.get(i).getTable_name());
-      final String columnName = normalizeIdentifier(nns.get(i).getColumn_name());
+    for (SQLNotNullConstraint nn : nns) {
+      final String catName = normalizeIdentifier(nn.getCatName());
+      final String tableDB = normalizeIdentifier(nn.getTable_db());
+      final String tableName = normalizeIdentifier(nn.getTable_name());
+      final String columnName = normalizeIdentifier(nn.getColumn_name());
 
       // If retrieveCD is false, we do not need to do a deep retrieval of the Table Column Descriptor.
       // For instance, this is the case when we are creating the table.
@@ -5598,20 +5631,19 @@ public class ObjectStore implements RawStore, Configurable {
           throw new InvalidObjectException("Parent column not found: " + columnName);
         }
       }
-      if (nns.get(i).getNn_name() == null) {
+      if (nn.getNn_name() == null) {
         constraintName = generateConstraintName(parentTable, tableDB, tableName, columnName, "nn");
       } else {
-        constraintName = normalizeIdentifier(nns.get(i).getNn_name());
+        constraintName = normalizeIdentifier(nn.getNn_name());
         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);
 
-      int enableValidateRely = (nns.get(i).isEnable_cstr() ? 4 : 0) +
-          (nns.get(i).isValidate_cstr() ? 2 : 0) + (nns.get(i).isRely_cstr() ? 1 : 0);
+      int enableValidateRely = (nn.isEnable_cstr() ? 4 : 0) +
+          (nn.isValidate_cstr() ? 2 : 0) + (nn.isRely_cstr() ? 1 : 0);
       MConstraint muk = new MConstraint(
           constraintName,
           1,
@@ -5626,9 +5658,15 @@ public class ObjectStore implements RawStore, Configurable {
           null,
           parentIntegerIndex);
       cstrs.add(muk);
+      // Add normalized identifier back to result
+      nn.setCatName(catName);
+      nn.setTable_db(tableDB);
+      nn.setTable_name(tableName);
+      nn.setColumn_name(columnName);
+      nn.setNn_name(constraintName);
     }
     pm.makePersistentAll(cstrs);
-    return nnNames;
+    return nns;
   }
 
   @Override
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java
index 09ae83b..c08f6b4 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/RawStore.java
@@ -1499,20 +1499,12 @@ public interface RawStore extends Configurable {
   /**
    * Create a table with constraints
    * @param tbl table definition
-   * @param primaryKeys primary key definition, or null
-   * @param foreignKeys foreign key definition, or null
-   * @param uniqueConstraints unique constraints definition, or null
-   * @param notNullConstraints not null constraints definition, or null
-   * @param defaultConstraints default values definition, or null
+   * @param constraints wrapper of all table constraints
    * @return list of constraint names
    * @throws InvalidObjectException one of the provided objects is malformed.
    * @throws MetaException error accessing the RDBMS
    */
-  List<String> createTableWithConstraints(Table tbl, List<SQLPrimaryKey> primaryKeys,
-    List<SQLForeignKey> foreignKeys, List<SQLUniqueConstraint> uniqueConstraints,
-    List<SQLNotNullConstraint> notNullConstraints,
-    List<SQLDefaultConstraint> defaultConstraints,
-    List<SQLCheckConstraint> checkConstraints) throws InvalidObjectException, MetaException;
+  SQLAllTableConstraints createTableWithConstraints(Table tbl, SQLAllTableConstraints constraints) throws InvalidObjectException, MetaException;
 
   /**
    * Drop a constraint, any constraint.  I have no idea why add and get each have separate
@@ -1549,7 +1541,7 @@ public interface RawStore extends Configurable {
    * @throws InvalidObjectException The SQLPrimaryKeys list is malformed
    * @throws MetaException error accessing the RDMBS
    */
-  List<String> addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException, MetaException;
+  List<SQLPrimaryKey> addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException, MetaException;
 
   /**
    * Add a foreign key to a table.
@@ -1558,7 +1550,7 @@ public interface RawStore extends Configurable {
    * @throws InvalidObjectException the specification is malformed.
    * @throws MetaException error accessing the RDBMS.
    */
-  List<String> addForeignKeys(List<SQLForeignKey> fks) throws InvalidObjectException, MetaException;
+  List<SQLForeignKey> addForeignKeys(List<SQLForeignKey> fks) throws InvalidObjectException, MetaException;
 
   /**
    * Add unique constraints to a table.
@@ -1567,7 +1559,7 @@ public interface RawStore extends Configurable {
    * @throws InvalidObjectException the specification is malformed.
    * @throws MetaException error accessing the RDBMS.
    */
-  List<String> addUniqueConstraints(List<SQLUniqueConstraint> uks) throws InvalidObjectException, MetaException;
+  List<SQLUniqueConstraint> addUniqueConstraints(List<SQLUniqueConstraint> uks) throws InvalidObjectException, MetaException;
 
   /**
    * Add not null constraints to a table.
@@ -1576,7 +1568,7 @@ public interface RawStore extends Configurable {
    * @throws InvalidObjectException the specification is malformed.
    * @throws MetaException error accessing the RDBMS.
    */
-  List<String> addNotNullConstraints(List<SQLNotNullConstraint> nns) throws InvalidObjectException, MetaException;
+  List<SQLNotNullConstraint> addNotNullConstraints(List<SQLNotNullConstraint> nns) throws InvalidObjectException, MetaException;
 
   /**
    * Add default values to a table definition.
@@ -1585,7 +1577,7 @@ public interface RawStore extends Configurable {
    * @throws InvalidObjectException the specification is malformed.
    * @throws MetaException error accessing the RDBMS.
    */
-  List<String> addDefaultConstraints(List<SQLDefaultConstraint> dv)
+  List<SQLDefaultConstraint> addDefaultConstraints(List<SQLDefaultConstraint> dv)
       throws InvalidObjectException, MetaException;
 
   /**
@@ -1595,7 +1587,7 @@ public interface RawStore extends Configurable {
    * @throws InvalidObjectException the specification is malformed
    * @throws MetaException error accessing the RDBMS
    */
-  List<String> addCheckConstraints(List<SQLCheckConstraint> cc) throws InvalidObjectException, MetaException;
+  List<SQLCheckConstraint> addCheckConstraints(List<SQLCheckConstraint> cc) throws InvalidObjectException, MetaException;
 
   /**
    * Gets the unique id of the backing datastore for the metadata.
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/CacheUtils.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/CacheUtils.java
index c0cc0e6..a2f56e4 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/CacheUtils.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/CacheUtils.java
@@ -21,6 +21,7 @@ import java.util.Collections;
 import java.util.List;
 import java.util.regex.Pattern;
 
+import org.apache.commons.collections.CollectionUtils;
 import org.apache.hadoop.hive.metastore.api.Partition;
 import org.apache.hadoop.hive.metastore.api.SkewedInfo;
 import org.apache.hadoop.hive.metastore.api.StorageDescriptor;
@@ -58,14 +59,12 @@ public class CacheUtils {
    *
    */
   public static String buildPartitionCacheKey(List<String> partVals) {
-    if (partVals == null || partVals.isEmpty()) {
-      return "";
-    }
-    return String.join(delimit, partVals);
+    return CollectionUtils.isNotEmpty(partVals) ? String.join(delimit, partVals) : "";
   }
 
   public static String buildTableKey(String catName, String dbName, String tableName) {
-    return buildKey(catName.toLowerCase(), dbName.toLowerCase(), tableName.toLowerCase());
+    return buildKey(StringUtils.normalizeIdentifier(catName), StringUtils.normalizeIdentifier(dbName),
+        StringUtils.normalizeIdentifier(tableName));
   }
 
   public static String buildTableColKey(String catName, String dbName, String tableName,
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
index d0cf4cc..40c89c1 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/CachedStore.java
@@ -2846,31 +2846,29 @@ public class CachedStore implements RawStore, Configurable {
     return sqlAllTableConstraints;
   }
 
-  @Override public List<String> createTableWithConstraints(Table tbl, List<SQLPrimaryKey> primaryKeys,
-      List<SQLForeignKey> foreignKeys, List<SQLUniqueConstraint> uniqueConstraints,
-      List<SQLNotNullConstraint> notNullConstraints, List<SQLDefaultConstraint> defaultConstraints,
-      List<SQLCheckConstraint> checkConstraints) throws InvalidObjectException, MetaException {
-    List<String> constraintNames = rawStore
-        .createTableWithConstraints(tbl, primaryKeys, foreignKeys, uniqueConstraints, notNullConstraints,
-            defaultConstraints, checkConstraints);
+  @Override
+  public SQLAllTableConstraints createTableWithConstraints(Table tbl, SQLAllTableConstraints constraints)
+      throws InvalidObjectException, MetaException {
+    constraints = rawStore.createTableWithConstraints(tbl, constraints);
     // in case of event based cache update, cache is updated during commit.
     if (canUseEvents) {
-      return constraintNames;
+      return constraints;
     }
     String dbName = normalizeIdentifier(tbl.getDbName());
     String tblName = normalizeIdentifier(tbl.getTableName());
     String catName = tbl.isSetCatName() ? normalizeIdentifier(tbl.getCatName()) : DEFAULT_CATALOG_NAME;
     if (!shouldCacheTable(catName, dbName, tblName)) {
-      return constraintNames;
+      return constraints;
     }
     sharedCache.addTableToCache(StringUtils.normalizeIdentifier(tbl.getCatName()),
         StringUtils.normalizeIdentifier(tbl.getDbName()), StringUtils.normalizeIdentifier(tbl.getTableName()), tbl);
-    // ToDo: Add default/check constraints
-    sharedCache.addForeignKeysToCache(catName, dbName, tblName, foreignKeys);
-    sharedCache.addPrimaryKeysToCache(catName, dbName, tblName, primaryKeys);
-    sharedCache.addNotNullConstraintsToCache(catName, dbName, tblName, notNullConstraints);
-    sharedCache.addUniqueConstraintsToCache(catName, dbName, tblName, uniqueConstraints);
-    return constraintNames;
+    sharedCache.addForeignKeysToCache(catName, dbName, tblName, constraints.getForeignKeys());
+    sharedCache.addPrimaryKeysToCache(catName, dbName, tblName, constraints.getPrimaryKeys());
+    sharedCache.addNotNullConstraintsToCache(catName, dbName, tblName, constraints.getNotNullConstraints());
+    sharedCache.addUniqueConstraintsToCache(catName, dbName, tblName, constraints.getUniqueConstraints());
+    sharedCache.addCheckConstraintsToCache(catName, dbName, tblName, constraints.getCheckConstraints());
+    sharedCache.addDefaultConstraintsToCache(catName, dbName, tblName, constraints.getDefaultConstraints());
+    return constraints;
   }
 
   @Override public void dropConstraint(String catName, String dbName, String tableName, String constraintName,
@@ -2887,77 +2885,103 @@ public class CachedStore implements RawStore, Configurable {
     }
   }
 
-  @Override public List<String> addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException, MetaException {
-    List<String> names = rawStore.addPrimaryKeys(pks);
+  @Override
+  public List<SQLPrimaryKey> addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException, MetaException {
+    pks = rawStore.addPrimaryKeys(pks);
     // in case of event based cache update, cache will be updated during commit.
     if (!canUseEvents && pks != null && !pks.isEmpty()) {
       String catName = normalizeIdentifier(pks.get(0).getCatName());
       String dbName = normalizeIdentifier(pks.get(0).getTable_db());
       String tblName = normalizeIdentifier(pks.get(0).getTable_name());
       if (!shouldCacheTable(catName, dbName, tblName)) {
-        return names;
+        return pks;
       }
       sharedCache.addPrimaryKeysToCache(catName, dbName, tblName, pks);
     }
-    return names;
+    return pks;
   }
 
-  @Override public List<String> addForeignKeys(List<SQLForeignKey> fks) throws InvalidObjectException, MetaException {
-    List<String> names = rawStore.addForeignKeys(fks);
+  @Override
+  public List<SQLForeignKey> addForeignKeys(List<SQLForeignKey> fks) throws InvalidObjectException, MetaException {
+    fks = rawStore.addForeignKeys(fks);
     if (!canUseEvents && fks != null && !fks.isEmpty()) {
       String catName = normalizeIdentifier(fks.get(0).getCatName());
       String dbName = normalizeIdentifier(fks.get(0).getFktable_db());
       String tblName = normalizeIdentifier(fks.get(0).getFktable_db());
       if (!shouldCacheTable(catName, dbName, tblName)) {
-        return names;
+        return fks;
       }
       sharedCache.addForeignKeysToCache(catName, dbName, tblName, fks);
     }
-    return names;
+    return fks;
   }
 
-  @Override public List<String> addUniqueConstraints(List<SQLUniqueConstraint> uks)
+  @Override
+  public List<SQLUniqueConstraint> addUniqueConstraints(List<SQLUniqueConstraint> uks)
       throws InvalidObjectException, MetaException {
-    List<String> names = rawStore.addUniqueConstraints(uks);
+    uks = rawStore.addUniqueConstraints(uks);
     // in case of event based cache update, cache will be updated during commit.
     if (!canUseEvents && uks != null && !uks.isEmpty()) {
       String catName = normalizeIdentifier(uks.get(0).getCatName());
       String dbName = normalizeIdentifier(uks.get(0).getTable_db());
       String tblName = normalizeIdentifier(uks.get(0).getTable_name());
       if (!shouldCacheTable(catName, dbName, tblName)) {
-        return names;
+        return uks;
       }
       sharedCache.addUniqueConstraintsToCache(catName, dbName, tblName, uks);
     }
-    return names;
+    return uks;
   }
 
-  @Override public List<String> addNotNullConstraints(List<SQLNotNullConstraint> nns)
+  @Override
+  public List<SQLNotNullConstraint> addNotNullConstraints(List<SQLNotNullConstraint> nns)
       throws InvalidObjectException, MetaException {
-    List<String> names = rawStore.addNotNullConstraints(nns);
+    nns = rawStore.addNotNullConstraints(nns);
     // in case of event based cache update, cache will be updated during commit.
-    if (!canUseEvents && nns != null && !nns.isEmpty()) {
+    if (!canUseEvents && CollectionUtils.isNotEmpty(nns)) {
       String catName = normalizeIdentifier(nns.get(0).getCatName());
       String dbName = normalizeIdentifier(nns.get(0).getTable_db());
       String tblName = normalizeIdentifier(nns.get(0).getTable_name());
       if (!shouldCacheTable(catName, dbName, tblName)) {
-        return names;
+        return nns;
       }
       sharedCache.addNotNullConstraintsToCache(catName, dbName, tblName, nns);
     }
-    return names;
+    return nns;
   }
 
-  @Override public List<String> addDefaultConstraints(List<SQLDefaultConstraint> nns)
+  @Override
+  public List<SQLDefaultConstraint> addDefaultConstraints(List<SQLDefaultConstraint> dcs)
       throws InvalidObjectException, MetaException {
-    // TODO constraintCache
-    return rawStore.addDefaultConstraints(nns);
+    dcs = rawStore.addDefaultConstraints(dcs);
+    // in case of event based cache update, cache will be updated during commit.
+    if (!canUseEvents && CollectionUtils.isNotEmpty(dcs)) {
+      String catName = normalizeIdentifier(dcs.get(0).getCatName());
+      String dbName = normalizeIdentifier(dcs.get(0).getTable_db());
+      String tblName = normalizeIdentifier(dcs.get(0).getTable_name());
+      if (!shouldCacheTable(catName, dbName, tblName)) {
+        return dcs;
+      }
+      sharedCache.addDefaultConstraintsToCache(catName, dbName, tblName, dcs);
+    }
+    return dcs;
   }
 
-  @Override public List<String> addCheckConstraints(List<SQLCheckConstraint> nns)
+  @Override
+  public List<SQLCheckConstraint> addCheckConstraints(List<SQLCheckConstraint> ccs)
       throws InvalidObjectException, MetaException {
-    // TODO constraintCache
-    return rawStore.addCheckConstraints(nns);
+    ccs = rawStore.addCheckConstraints(ccs);
+    // in case of event based cache update, cache will be updated during commit.
+    if (!canUseEvents && CollectionUtils.isNotEmpty(ccs)) {
+      String catName = normalizeIdentifier(ccs.get(0).getCatName());
+      String dbName = normalizeIdentifier(ccs.get(0).getTable_db());
+      String tblName = normalizeIdentifier(ccs.get(0).getTable_name());
+      if (!shouldCacheTable(catName, dbName, tblName)) {
+        return ccs;
+      }
+      sharedCache.addCheckConstraintsToCache(catName, dbName, tblName, ccs);
+    }
+    return ccs;
   }
 
   // TODO - not clear if we should cache these or not.  For now, don't bother
diff --git a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/SharedCache.java b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/SharedCache.java
index 3e71fb9..ff97bc2 100644
--- a/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/SharedCache.java
+++ b/standalone-metastore/metastore-server/src/main/java/org/apache/hadoop/hive/metastore/cache/SharedCache.java
@@ -517,32 +517,38 @@ public class SharedCache {
           switch (mn) {
           case PRIMARY_KEY_CACHE:
             SQLPrimaryKey pk = (SQLPrimaryKey) constraint;
-            this.primaryKeyCache.put(pk.getPk_name().toLowerCase(), pk);
+            String pkName = normalizeIdentifier(pk.getPk_name());
+            this.primaryKeyCache.put(pkName, pk);
             size = getObjectSize(SQLPrimaryKey.class, constraint);
             break;
           case FOREIGN_KEY_CACHE:
             SQLForeignKey fk = (SQLForeignKey) constraint;
-            this.foreignKeyCache.put(fk.getFk_name().toLowerCase(), fk);
+            String fkName = normalizeIdentifier(fk.getFk_name());
+            this.foreignKeyCache.put(fkName, fk);
             size = getObjectSize(SQLForeignKey.class, constraint);
             break;
           case UNIQUE_CONSTRAINT_CACHE:
             SQLUniqueConstraint uc = (SQLUniqueConstraint) constraint;
-            this.uniqueConstraintCache.put(uc.getUk_name().toLowerCase(), uc);
+            String ucName = normalizeIdentifier(uc.getUk_name());
+            this.uniqueConstraintCache.put(ucName, uc);
             size = getObjectSize(SQLUniqueConstraint.class, constraint);
             break;
           case NOTNULL_CONSTRAINT_CACHE:
             SQLNotNullConstraint nn = (SQLNotNullConstraint) constraint;
-            this.notNullConstraintCache.put(nn.getNn_name().toLowerCase(), nn);
+            String nnName = normalizeIdentifier(nn.getNn_name());
+            this.notNullConstraintCache.put(nnName, nn);
             size = getObjectSize(SQLNotNullConstraint.class, constraint);
             break;
           case DEFAULT_CONSTRAINT_CACHE:
             SQLDefaultConstraint dc = (SQLDefaultConstraint) constraint;
-            this.defaultConstraintCache.put(dc.getDc_name().toLowerCase(), dc);
+            String dcName = normalizeIdentifier(dc.getDc_name());
+            this.defaultConstraintCache.put(dcName, dc);
             size = getObjectSize(SQLDefaultConstraint.class, constraint);
             break;
           case CHECK_CONSTRAINT_CACHE:
             SQLCheckConstraint cc = (SQLCheckConstraint) constraint;
-            this.checkConstraintCache.put(cc.getDc_name().toLowerCase(), cc);
+            String ccName = normalizeIdentifier(cc.getDc_name());
+            this.checkConstraintCache.put(ccName, cc);
             size = getObjectSize(SQLCheckConstraint.class, constraint);
             break;
           default:
@@ -717,7 +723,9 @@ public class SharedCache {
                     + "; the primary keys are already refreshed.");
             return;
           }
-          newKeys.put(key.getPk_name().toLowerCase(), key);
+          String pkName = StringUtils.normalizeIdentifier(key.getPk_name());
+          key.setPk_name(pkName);
+          newKeys.put(pkName, key);
           size += getObjectSize(SQLPrimaryKey.class, key);
         }
         primaryKeyCache = newKeys;
@@ -740,7 +748,9 @@ public class SharedCache {
                     + "; the foreign keys are already refreshed.");
             return;
           }
-          newKeys.put(key.getFk_name().toLowerCase(), key);
+          String fkName = StringUtils.normalizeIdentifier(key.getFk_name());
+          key.setFk_name(fkName);
+          newKeys.put(fkName, key);
           size += getObjectSize(SQLForeignKey.class, key);
         }
         foreignKeyCache = newKeys;
@@ -763,7 +773,9 @@ public class SharedCache {
                     + "; the not null constraints are already refreshed.");
             return;
           }
-          newConstraints.put(constraint.getNn_name().toLowerCase(), constraint);
+          String nnName = StringUtils.normalizeIdentifier(constraint.getNn_name());
+          constraint.setNn_name(nnName);
+          newConstraints.put(nnName, constraint);
           size += getObjectSize(SQLNotNullConstraint.class, constraint);
         }
         notNullConstraintCache = newConstraints;
@@ -783,10 +795,12 @@ public class SharedCache {
         for (SQLUniqueConstraint constraint : constraints) {
           if (compareAndSetMemberCacheUpdated(MemberName.UNIQUE_CONSTRAINT_CACHE, true, false)) {
             LOG.debug("Skipping unique constraints cache update for table: " + getTable().getTableName()
-                    + "; the unique costraints are already refreshed.");
+                    + "; the unique constraints are already refreshed.");
             return;
           }
-          newConstraints.put(constraint.getUk_name().toLowerCase(), constraint);
+          String ucName = StringUtils.normalizeIdentifier(constraint.getUk_name());
+          constraint.setUk_name(ucName);
+          newConstraints.put(ucName, constraint);
           size += getObjectSize(SQLUniqueConstraint.class, constraint);
         }
         uniqueConstraintCache = newConstraints;
@@ -809,7 +823,9 @@ public class SharedCache {
                 + "; the default constraint are already refreshed.");
             return;
           }
-          newConstraints.put(constraint.getDc_name().toLowerCase(), constraint);
+          String dcName = StringUtils.normalizeIdentifier(constraint.getDc_name());
+          constraint.setDc_name(dcName);
+          newConstraints.put(dcName, constraint);
           size += getObjectSize(SQLDefaultConstraint.class, constraint);
         }
         defaultConstraintCache = newConstraints;
@@ -832,7 +848,9 @@ public class SharedCache {
                 + "; the check constraint are already refreshed.");
             return;
           }
-          newConstraints.put(constraint.getDc_name().toLowerCase(), constraint);
+          String ccName = StringUtils.normalizeIdentifier(constraint.getDc_name());
+          constraint.setDc_name(ccName);
+          newConstraints.put(ccName, constraint);
           size += getObjectSize(SQLCheckConstraint.class, constraint);
         }
         checkConstraintCache = newConstraints;
@@ -1385,7 +1403,7 @@ public class SharedCache {
           fs.setName(StringUtils.normalizeIdentifier(fs.getName()));
         }
       }
-      setTable(tblCopy);
+
       if (tblCopy.getSd() != null) {
         sdHash = MetaStoreServerUtils.hashStorageDescriptor(tblCopy.getSd(), md);
         StorageDescriptor sd = tblCopy.getSd();
@@ -1399,6 +1417,8 @@ public class SharedCache {
         setLocation(null);
         setParameters(null);
       }
+      tblCopy.setTableName(tblCopy.getTableName().toLowerCase());
+      setTable(tblCopy);
     }
 
     private PartitionWrapper makePartitionWrapper(Partition part, SharedCache sharedCache) {
@@ -1909,9 +1929,7 @@ public class SharedCache {
       TableWrapper tblWrapper = tableCache.getIfPresent(CacheUtils.buildTableKey(catName, dbName, tblName));
       if (tblWrapper != null) {
         tblWrapper.updateTableObj(newTable, this);
-        String newDbName = StringUtils.normalizeIdentifier(newTable.getDbName());
-        String newTblName = StringUtils.normalizeIdentifier(newTable.getTableName());
-        tableCache.put(CacheUtils.buildTableKey(catName, newDbName, newTblName), tblWrapper);
+        tableCache.put(CacheUtils.buildTableKey(catName, newTable.getDbName(), newTable.getTableName()), tblWrapper);
         isTableCacheDirty.set(true);
       }
     } finally {
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
index a4e05dd..1d6ccd6 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreControlledCommit.java
@@ -1016,12 +1016,7 @@ public class DummyRawStoreControlledCommit implements RawStore, Configurable {
   }
 
   @Override
-  public List<String> createTableWithConstraints(Table tbl,
-    List<SQLPrimaryKey> primaryKeys, List<SQLForeignKey> foreignKeys,
-    List<SQLUniqueConstraint> uniqueConstraints,
-    List<SQLNotNullConstraint> notNullConstraints,
-    List<SQLDefaultConstraint> defaultConstraints,
-    List<SQLCheckConstraint> checkConstraints)
+  public SQLAllTableConstraints createTableWithConstraints(Table tbl, SQLAllTableConstraints constraints )
     throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
@@ -1034,40 +1029,40 @@ public class DummyRawStoreControlledCommit implements RawStore, Configurable {
   }
 
   @Override
-  public List<String> addPrimaryKeys(List<SQLPrimaryKey> pks)
+  public List<SQLPrimaryKey> addPrimaryKeys(List<SQLPrimaryKey> pks)
     throws InvalidObjectException, MetaException {
     return null;
   }
 
   @Override
-  public List<String> addForeignKeys(List<SQLForeignKey> fks)
+  public List<SQLForeignKey> addForeignKeys(List<SQLForeignKey> fks)
     throws InvalidObjectException, MetaException {
     return null;
   }
 
   @Override
-  public List<String> addUniqueConstraints(List<SQLUniqueConstraint> uks)
+  public List<SQLUniqueConstraint> addUniqueConstraints(List<SQLUniqueConstraint> uks)
     throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public List<String> addNotNullConstraints(List<SQLNotNullConstraint> nns)
+  public List<SQLNotNullConstraint> addNotNullConstraints(List<SQLNotNullConstraint> nns)
     throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public List<String> addDefaultConstraints(List<SQLDefaultConstraint> nns)
+  public List<SQLDefaultConstraint> addDefaultConstraints(List<SQLDefaultConstraint> nns)
       throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public List<String> addCheckConstraints(List<SQLCheckConstraint> nns)
+  public List<SQLCheckConstraint> addCheckConstraints(List<SQLCheckConstraint> nns)
       throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
index 80002dd..74f1a2c 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/DummyRawStoreForJdoConnection.java
@@ -1022,12 +1022,7 @@ public class DummyRawStoreForJdoConnection implements RawStore {
   }
 
   @Override
-  public List<String> createTableWithConstraints(Table tbl,
-    List<SQLPrimaryKey> primaryKeys, List<SQLForeignKey> foreignKeys,
-    List<SQLUniqueConstraint> uniqueConstraints,
-    List<SQLNotNullConstraint> notNullConstraints,
-    List<SQLDefaultConstraint> defaultConstraints,
-    List<SQLCheckConstraint> checkConstraints)
+  public SQLAllTableConstraints createTableWithConstraints(Table tbl, SQLAllTableConstraints constraints)
     throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
@@ -1040,42 +1035,42 @@ public class DummyRawStoreForJdoConnection implements RawStore {
   }
 
   @Override
-  public List<String> addPrimaryKeys(List<SQLPrimaryKey> pks)
+  public List<SQLPrimaryKey> addPrimaryKeys(List<SQLPrimaryKey> pks)
     throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public List<String> addForeignKeys(List<SQLForeignKey> fks)
+  public List<SQLForeignKey> addForeignKeys(List<SQLForeignKey> fks)
     throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public List<String> addUniqueConstraints(List<SQLUniqueConstraint> uks)
+  public List<SQLUniqueConstraint> addUniqueConstraints(List<SQLUniqueConstraint> uks)
     throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public List<String> addNotNullConstraints(List<SQLNotNullConstraint> nns)
+  public List<SQLNotNullConstraint> addNotNullConstraints(List<SQLNotNullConstraint> nns)
     throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public List<String> addDefaultConstraints(List<SQLDefaultConstraint> nns)
+  public List<SQLDefaultConstraint> addDefaultConstraints(List<SQLDefaultConstraint> nns)
       throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
   }
 
   @Override
-  public List<String> addCheckConstraints(List<SQLCheckConstraint> nns)
+  public List<SQLCheckConstraint> addCheckConstraints(List<SQLCheckConstraint> nns)
       throws InvalidObjectException, MetaException {
     // TODO Auto-generated method stub
     return null;
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/InjectableBehaviourObjectStore.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/InjectableBehaviourObjectStore.java
index b828d32..f9847fa 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/InjectableBehaviourObjectStore.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/InjectableBehaviourObjectStore.java
@@ -253,7 +253,7 @@ public class InjectableBehaviourObjectStore extends ObjectStore {
   }
 
   @Override
-  public List<String> addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException,
+  public List<SQLPrimaryKey> addPrimaryKeys(List<SQLPrimaryKey> pks) throws InvalidObjectException,
           MetaException {
     if (callerVerifier != null) {
       CallerArguments args = new CallerArguments(pks.get(0).getTable_db());
@@ -268,7 +268,7 @@ public class InjectableBehaviourObjectStore extends ObjectStore {
   }
 
   @Override
-  public List<String> addForeignKeys(List<SQLForeignKey> fks) throws InvalidObjectException,
+  public List<SQLForeignKey> addForeignKeys(List<SQLForeignKey> fks) throws InvalidObjectException,
           MetaException {
     if (callerVerifier != null) {
       CallerArguments args = new CallerArguments(fks.get(0).getFktable_db());
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/cache/TestCachedStore.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/cache/TestCachedStore.java
index ea2a0fd..2e1a0ae 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/cache/TestCachedStore.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/cache/TestCachedStore.java
@@ -1568,12 +1568,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
     List<SQLPrimaryKey> cachedKeys = sharedCache.listCachedPrimaryKeys(
             DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName());
 
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getPk_name(), "pk1");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col1");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(origKeys, cachedKeys);
 
     SQLPrimaryKey modifiedKey = origKeys.get(0).deepCopy();
     modifiedKey.setColumn_name("col2");
@@ -1589,12 +1584,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
 
     sharedCache.refreshPrimaryKeysInCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(),
       Arrays.asList(modifiedKey));
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getPk_name(), "pk_modified");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col2");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(Arrays.asList(modifiedKey), cachedKeys);
 
     // remove constraints
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "pk_modified");
@@ -1630,12 +1620,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
     List<SQLNotNullConstraint> cachedKeys = sharedCache.listCachedNotNullConstraints(
             DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName());
 
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getNn_name(), "nn1");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col1");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(origKeys, cachedKeys);
 
     SQLNotNullConstraint modifiedKey = origKeys.get(0).deepCopy();
     modifiedKey.setColumn_name("col2");
@@ -1648,12 +1633,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
 
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "nn1");
     cachedKeys = sharedCache.listCachedNotNullConstraints(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getNn_name(), "nn_modified");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col2");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(Arrays.asList(modifiedKey), cachedKeys);
 
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "nn_modified");
 
@@ -1688,12 +1668,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
     List<SQLUniqueConstraint> cachedKeys = sharedCache.listCachedUniqueConstraint(
             DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName());
 
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getUk_name(), "uk1");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col1");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(origKeys, cachedKeys);
 
     SQLUniqueConstraint modifiedKey = origKeys.get(0).deepCopy();
     modifiedKey.setColumn_name("col2");
@@ -1707,12 +1682,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
 
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "uk1");
     cachedKeys = sharedCache.listCachedUniqueConstraint(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getUk_name(), "uk_modified");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col2");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(Arrays.asList(modifiedKey), cachedKeys);
 
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "uk_modified");
 
@@ -1753,26 +1723,12 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
     List<SQLForeignKey> cachedKeys = sharedCache.listCachedForeignKeys(
             DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), tbl.getDbName(), tbl.getTableName());
 
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getFk_name(), "fk1");
-    Assert.assertEquals(cachedKeys.get(0).getFktable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getPktable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getFktable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getPktable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getFkcolumn_name(), "col2");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(origKeys, cachedKeys);
 
     cachedKeys = sharedCache.listCachedForeignKeys(
             DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), tbl1.getDbName(), tbl1.getTableName());
 
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getFk_name(), "fk2");
-    Assert.assertEquals(cachedKeys.get(0).getFktable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getPktable_db(), tbl1.getDbName());
-    Assert.assertEquals(cachedKeys.get(0).getFktable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getPktable_name(), tbl1.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getFkcolumn_name(), "col1");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(extraKeys, cachedKeys);
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "fk2");
     // List operation with different parent table
     cachedKeys = sharedCache.listCachedForeignKeys(
@@ -1793,14 +1749,8 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "fk1");
     cachedKeys = sharedCache.listCachedForeignKeys(
       DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), tbl.getDbName(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getFk_name(), "fk_modified");
-    Assert.assertEquals(cachedKeys.get(0).getFktable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getPktable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getFktable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getPktable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getFkcolumn_name(), "col3");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
+    Assert.assertEquals(Arrays.asList(modifiedKey), cachedKeys);
+
 
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "fk_modified");
 
@@ -1836,13 +1786,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
     List<SQLDefaultConstraint> cachedKeys =
         sharedCache.listCachedDefaultConstraint(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName());
 
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getDc_name(), "dc1");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col1");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
-    Assert.assertEquals(cachedKeys.get(0).getDefault_value(), "1");
+    Assert.assertEquals(origKeys, cachedKeys);
 
     SQLDefaultConstraint modifiedKey = origKeys.get(0).deepCopy();
     modifiedKey.setColumn_name("col2");
@@ -1858,13 +1802,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
 
     sharedCache.refreshDefaultConstraintsInCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(),
         Arrays.asList(modifiedKey));
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getDc_name(), "dc_modified");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col2");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
-    Assert.assertEquals(cachedKeys.get(0).getDefault_value(), "1");
+    Assert.assertEquals(Arrays.asList(modifiedKey), cachedKeys);
 
     // remove constraints
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "dc_modified");
@@ -1900,13 +1838,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
     List<SQLCheckConstraint> cachedKeys =
         sharedCache.listCachedCheckConstraint(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName());
 
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getDc_name(), "cc1");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col1");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
-    Assert.assertEquals(cachedKeys.get(0).getCheck_expression(), "1");
+    Assert.assertEquals(origKeys, cachedKeys);
 
     SQLCheckConstraint modifiedKey = origKeys.get(0).deepCopy();
     modifiedKey.setColumn_name("col2");
@@ -1922,13 +1854,7 @@ import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_CATALOG_NAME;
 
     sharedCache.refreshCheckConstraintsInCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(),
         Arrays.asList(modifiedKey));
-    Assert.assertEquals(cachedKeys.size(), 1);
-    Assert.assertEquals(cachedKeys.get(0).getDc_name(), "cc_modified");
-    Assert.assertEquals(cachedKeys.get(0).getTable_db(), "db");
-    Assert.assertEquals(cachedKeys.get(0).getTable_name(), tbl.getTableName());
-    Assert.assertEquals(cachedKeys.get(0).getColumn_name(), "col2");
-    Assert.assertEquals(cachedKeys.get(0).getCatName(), DEFAULT_CATALOG_NAME);
-    Assert.assertEquals(cachedKeys.get(0).getCheck_expression(), "1");
+    Assert.assertEquals(Arrays.asList(modifiedKey), cachedKeys);
 
     // remove constraints
     sharedCache.removeConstraintFromCache(DEFAULT_CATALOG_NAME, tbl.getDbName(), tbl.getTableName(), "cc_modified");
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestCheckConstraint.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestCheckConstraint.java
index efac4cf..ce57496 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestCheckConstraint.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestCheckConstraint.java
@@ -162,21 +162,13 @@ public class TestCheckConstraint extends MetaStoreClientTest {
 
     rqst = new CheckConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getCheckConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("= 5", fetched.get(0).getCheck_expression());
-    Assert.assertEquals(table.getTableName() + "_check_constraint", fetched.get(0).getDc_name());
-    String table0PkName = fetched.get(0).getDc_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    cc.get(0).setDc_name(fetched.get(0).getDc_name());
+    Assert.assertEquals(cc, fetched);
+
 
     // Drop a primary key
     client.dropConstraint(table.getCatName(), table.getDbName(),
-        table.getTableName(), table0PkName);
+        table.getTableName(), cc.get(0).getDc_name());
     rqst = new CheckConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getCheckConstraints(rqst);
     Assert.assertTrue(fetched.isEmpty());
@@ -200,16 +192,7 @@ public class TestCheckConstraint extends MetaStoreClientTest {
     CheckConstraintsRequest rqst = new CheckConstraintsRequest(testTables[2].getCatName(),
         testTables[2].getDbName(), testTables[2].getTableName());
     List<SQLCheckConstraint> fetched = client.getCheckConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(testTables[2].getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(testTables[2].getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("like s%", fetched.get(0).getCheck_expression());
-    Assert.assertEquals(constraintName, fetched.get(0).getDc_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(testTables[2].getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(cc, fetched);
 
     client.dropConstraint(testTables[2].getCatName(), testTables[2].getDbName(),
         testTables[2].getTableName(), constraintName);
@@ -238,16 +221,8 @@ public class TestCheckConstraint extends MetaStoreClientTest {
     client.createTableWithConstraints(table, null, null, null, null, null, cc);
     CheckConstraintsRequest rqst = new CheckConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     List<SQLCheckConstraint> fetched = client.getCheckConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("> 0", fetched.get(0).getCheck_expression());
-    Assert.assertEquals(constraintName, fetched.get(0).getDc_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(cc, fetched);
+
 
     client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), constraintName);
     rqst = new CheckConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
@@ -274,19 +249,11 @@ public class TestCheckConstraint extends MetaStoreClientTest {
     client.createTableWithConstraints(table, null, null, null, null, null, cc);
     CheckConstraintsRequest rqst = new CheckConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     List<SQLCheckConstraint> fetched = client.getCheckConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("> 0", fetched.get(0).getCheck_expression());
-    Assert.assertEquals(table.getTableName() + "_check_constraint", fetched.get(0).getDc_name());
-    String tablePkName = fetched.get(0).getDc_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
-
-    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), tablePkName);
+    cc.get(0).setDc_name(fetched.get(0).getDc_name());
+    Assert.assertEquals(cc, fetched);
+
+
+    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), cc.get(0).getDc_name());
     rqst = new CheckConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getCheckConstraints(rqst);
     Assert.assertTrue(fetched.isEmpty());
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestDefaultConstraint.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestDefaultConstraint.java
index f3e026c..6c92aa1 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestDefaultConstraint.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestDefaultConstraint.java
@@ -162,21 +162,13 @@ public class TestDefaultConstraint extends MetaStoreClientTest {
 
     rqst = new DefaultConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getDefaultConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("0", fetched.get(0).getDefault_value());
-    Assert.assertEquals(table.getTableName() + "_default_value", fetched.get(0).getDc_name());
-    String table0PkName = fetched.get(0).getDc_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    dv.get(0).setDc_name(fetched.get(0).getDc_name());
+    Assert.assertEquals(dv, fetched);
+
 
     // Drop a primary key
     client.dropConstraint(table.getCatName(), table.getDbName(),
-        table.getTableName(), table0PkName);
+        table.getTableName(), dv.get(0).getDc_name());
     rqst = new DefaultConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getDefaultConstraints(rqst);
     Assert.assertTrue(fetched.isEmpty());
@@ -200,16 +192,7 @@ public class TestDefaultConstraint extends MetaStoreClientTest {
     DefaultConstraintsRequest rqst = new DefaultConstraintsRequest(testTables[2].getCatName(),
         testTables[2].getDbName(), testTables[2].getTableName());
     List<SQLDefaultConstraint> fetched = client.getDefaultConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(testTables[2].getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(testTables[2].getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("empty", fetched.get(0).getDefault_value());
-    Assert.assertEquals(constraintName, fetched.get(0).getDc_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(testTables[2].getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(dv, fetched);
 
     client.dropConstraint(testTables[2].getCatName(), testTables[2].getDbName(),
         testTables[2].getTableName(), constraintName);
@@ -238,16 +221,7 @@ public class TestDefaultConstraint extends MetaStoreClientTest {
     client.createTableWithConstraints(table, null, null, null, null, dv, null);
     DefaultConstraintsRequest rqst = new DefaultConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     List<SQLDefaultConstraint> fetched = client.getDefaultConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("0", fetched.get(0).getDefault_value());
-    Assert.assertEquals(constraintName, fetched.get(0).getDc_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(dv, fetched);
 
     client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), constraintName);
     rqst = new DefaultConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
@@ -274,19 +248,10 @@ public class TestDefaultConstraint extends MetaStoreClientTest {
     client.createTableWithConstraints(table, null, null, null, null, dv, null);
     DefaultConstraintsRequest rqst = new DefaultConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     List<SQLDefaultConstraint> fetched = client.getDefaultConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("0", fetched.get(0).getDefault_value());
-    Assert.assertEquals(table.getTableName() + "_default_value", fetched.get(0).getDc_name());
-    String tablePkName = fetched.get(0).getDc_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
-
-    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), tablePkName);
+    dv.get(0).setDc_name(fetched.get(0).getDc_name());
+    Assert.assertEquals(dv, fetched);
+
+    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), dv.get(0).getDc_name());
     rqst = new DefaultConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getDefaultConstraints(rqst);
     Assert.assertTrue(fetched.isEmpty());
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestForeignKey.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestForeignKey.java
index b058dd2..107ce62 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestForeignKey.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestForeignKey.java
@@ -184,26 +184,13 @@ public class TestForeignKey extends MetaStoreClientTest {
         table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     fetched = client.getForeignKeys(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getFktable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getFktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals(parentTable.getDbName(), fetched.get(0).getPktable_db());
-    Assert.assertEquals(parentTable.getTableName(), fetched.get(0).getPktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(parentTable.getTableName() + "_primary_key", fetched.get(0).getPk_name());
-    Assert.assertEquals(table.getTableName() + "_to_" + parentTable.getTableName() +
-        "_foreign_key", fetched.get(0).getFk_name());
-    String table0FkName = fetched.get(0).getFk_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    fk.get(0).setFk_name(fetched.get(0).getFk_name());
+    Assert.assertEquals(fk, fetched);
+
 
     // Drop a foreign key
     client.dropConstraint(table.getCatName(), table.getDbName(),
-        table.getTableName(), table0FkName);
+        table.getTableName(), fk.get(0).getFk_name());
     rqst = new ForeignKeysRequest(parentTable.getDbName(), parentTable.getTableName(),
         table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
@@ -242,27 +229,12 @@ public class TestForeignKey extends MetaStoreClientTest {
         parentTable.getTableName(), table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     List<SQLForeignKey> fetched = client.getForeignKeys(rqst);
-    Assert.assertEquals(2, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getFktable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getFktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals("col2", fetched.get(1).getFkcolumn_name());
-    Assert.assertEquals(parentTable.getDbName(), fetched.get(0).getPktable_db());
-    Assert.assertEquals(parentTable.getTableName(), fetched.get(0).getPktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals("col2", fetched.get(1).getFkcolumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(parentTable.getTableName() + "_primary_key", fetched.get(0).getPk_name());
-    Assert.assertEquals(constraintName, fetched.get(0).getFk_name());
-    String table0FkName = fetched.get(0).getFk_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(fk, fetched);
+
 
     // Drop a foreign key
     client.dropConstraint(table.getCatName(), table.getDbName(),
-        table.getTableName(), table0FkName);
+        table.getTableName(), constraintName);
     rqst = new ForeignKeysRequest(parentTable.getDbName(), parentTable.getTableName(),
         table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
@@ -299,25 +271,13 @@ public class TestForeignKey extends MetaStoreClientTest {
         parentTable.getTableName(), table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     List<SQLForeignKey> fetched = client.getForeignKeys(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getFktable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getFktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals(parentTable.getDbName(), fetched.get(0).getPktable_db());
-    Assert.assertEquals(parentTable.getTableName(), fetched.get(0).getPktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(parentTable.getTableName() + "_primary_key", fetched.get(0).getPk_name());
-    Assert.assertEquals(constraintName, fetched.get(0).getFk_name());
-    String table0FkName = fetched.get(0).getFk_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    fk.get(0).setFk_name(fetched.get(0).getFk_name());
+    Assert.assertEquals(fk, fetched);
+
 
     // Drop a foreign key
     client.dropConstraint(table.getCatName(), table.getDbName(),
-        table.getTableName(), table0FkName);
+        table.getTableName(), constraintName);
     rqst = new ForeignKeysRequest(parentTable.getDbName(), parentTable.getTableName(),
         table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
@@ -359,20 +319,8 @@ public class TestForeignKey extends MetaStoreClientTest {
         table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     List<SQLForeignKey> fetched = client.getForeignKeys(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getFktable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getFktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals(parentTable.getDbName(), fetched.get(0).getPktable_db());
-    Assert.assertEquals(parentTable.getTableName(), fetched.get(0).getPktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(parentTable.getTableName() + "_primary_key", fetched.get(0).getPk_name());
-    Assert.assertEquals(constraintName, fetched.get(0).getFk_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(fk, fetched);
+
   }
 
   @Test
@@ -406,20 +354,7 @@ public class TestForeignKey extends MetaStoreClientTest {
         table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     List<SQLForeignKey> fetched = client.getForeignKeys(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getFktable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getFktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals(parentTable.getDbName(), fetched.get(0).getPktable_db());
-    Assert.assertEquals(parentTable.getTableName(), fetched.get(0).getPktable_name());
-    Assert.assertEquals("col1", fetched.get(0).getFkcolumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(parentTable.getTableName() + "_primary_key", fetched.get(0).getPk_name());
-    Assert.assertEquals(constraintName, fetched.get(0).getFk_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(fk, fetched);
   }
 
   @Test(expected = MetaException.class)
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestGetAllTableConstraints.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestGetAllTableConstraints.java
index a3872ba..d92523f 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestGetAllTableConstraints.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestGetAllTableConstraints.java
@@ -22,7 +22,6 @@ import org.apache.hadoop.hive.metastore.MetaStoreTestUtils;
 import org.apache.hadoop.hive.metastore.annotation.MetastoreCheckinTest;
 import org.apache.hadoop.hive.metastore.api.AllTableConstraintsRequest;
 import org.apache.hadoop.hive.metastore.api.Catalog;
-import org.apache.hadoop.hive.metastore.api.Database;
 import org.apache.hadoop.hive.metastore.api.NoSuchObjectException;
 import org.apache.hadoop.hive.metastore.api.SQLAllTableConstraints;
 import org.apache.hadoop.hive.metastore.api.SQLCheckConstraint;
@@ -51,6 +50,7 @@ import org.junit.experimental.categories.Category;
 import org.junit.runner.RunWith;
 import org.junit.runners.Parameterized;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import static org.apache.hadoop.hive.metastore.Warehouse.DEFAULT_DATABASE_NAME;
@@ -63,7 +63,7 @@ public class TestGetAllTableConstraints extends MetaStoreClientTest {
   private static final String DATABASE_IN_OTHER_CATALOG = "test_constraints_database_in_other_catalog";
   private final AbstractMetaStoreService metaStore;
   private IMetaStoreClient client;
-  private Table[] testTables = new Table[3];
+  private Table[] testTables = new Table[2];
 
   public TestGetAllTableConstraints(String name, AbstractMetaStoreService metaStore) throws Exception {
     this.metaStore = metaStore;
@@ -98,10 +98,6 @@ public class TestGetAllTableConstraints extends MetaStoreClientTest {
             .build();
     client.createCatalog(cat);
 
-    // For this one don't specify a location to make sure it gets put in the catalog directory
-    Database inOtherCatalog = new DatabaseBuilder().setName(DATABASE_IN_OTHER_CATALOG).setCatalogName(OTHER_CATALOG)
-        .create(client, metaStore.getConf());
-
     testTables[0] = new TableBuilder().setTableName("test_table_1").addCol("col1", "int").addCol("col2", "int")
         .addCol("col3", "boolean").addCol("col4", "int").addCol("col5", "varchar(32)")
         .create(client, metaStore.getConf());
@@ -109,9 +105,6 @@ public class TestGetAllTableConstraints extends MetaStoreClientTest {
     testTables[1] = new TableBuilder().setDbName(OTHER_DATABASE).setTableName("test_table_2").addCol("col1", "int")
         .addCol("col2", "varchar(32)").create(client, metaStore.getConf());
 
-    testTables[2] = new TableBuilder().inDb(inOtherCatalog).setTableName("test_table_3").addCol("col1", "int")
-        .addCol("col2", "varchar(32)").create(client, metaStore.getConf());
-
     // Reload tables from the MetaStore
     for (int i = 0; i < testTables.length; i++) {
       testTables[i] =
@@ -141,16 +134,17 @@ public class TestGetAllTableConstraints extends MetaStoreClientTest {
   @Test
   public void noConstraints() throws TException {
     Table table = testTables[0];
-
-    AllTableConstraintsRequest request = new AllTableConstraintsRequest(table.getDbName(), table.getTableName(), table.getCatName());
+    SQLAllTableConstraints constraints = new SQLAllTableConstraints();
+    constraints.setPrimaryKeys(new ArrayList<>());
+    constraints.setForeignKeys(new ArrayList<>());
+    constraints.setNotNullConstraints(new ArrayList<>());
+    constraints.setCheckConstraints(new ArrayList<>());
+    constraints.setDefaultConstraints(new ArrayList<>());
+    constraints.setUniqueConstraints(new ArrayList<>());
+    AllTableConstraintsRequest request =
+        new AllTableConstraintsRequest(table.getDbName(), table.getTableName(), table.getCatName());
     SQLAllTableConstraints fetched = client.getAllTableConstraints(request);
-
-    Assert.assertTrue(fetched.getCheckConstraints().isEmpty());
-    Assert.assertTrue(fetched.getForeignKeys().isEmpty());
-    Assert.assertTrue(fetched.getDefaultConstraints().isEmpty());
-    Assert.assertTrue(fetched.getNotNullConstraints().isEmpty());
-    Assert.assertTrue(fetched.getPrimaryKeys().isEmpty());
-    Assert.assertTrue(fetched.getUniqueConstraints().isEmpty());
+    Assert.assertEquals(constraints, fetched);
   }
 
   /**
@@ -160,66 +154,47 @@ public class TestGetAllTableConstraints extends MetaStoreClientTest {
   @Test
   public void fewPresentWithMultipleConstraints() throws TException {
     Table table = testTables[0];
-
+    SQLAllTableConstraints expected = new SQLAllTableConstraints();
     // Set col1 as primary key Constraint in default catalog and database
-    String pkConstraintName = "col1_pk";
-    List<SQLPrimaryKey> pk =
-        new SQLPrimaryKeyBuilder().onTable(table).addColumn("col1").setConstraintName(pkConstraintName)
-            .build(metaStore.getConf());
+    List<SQLPrimaryKey> pk = new SQLPrimaryKeyBuilder().onTable(table).addColumn("col1").setConstraintName("col1_pk")
+        .build(metaStore.getConf());
     client.addPrimaryKey(pk);
+    expected.setPrimaryKeys(pk);
 
     // Set col2 with Unique Constraint in default catalog and database
-    String uniqueConstraintName = "col2_unique";
     List<SQLUniqueConstraint> uc =
-        new SQLUniqueConstraintBuilder().onTable(table).addColumn("col2").setConstraintName(uniqueConstraintName)
+        new SQLUniqueConstraintBuilder().onTable(table).addColumn("col2").setConstraintName("col2_unique")
             .build(metaStore.getConf());
     client.addUniqueConstraint(uc);
+    expected.setUniqueConstraints(uc);
 
     // Set col3 with default Constraint in default catalog and database
-    String defaultConstraintName = "col3_default";
     List<SQLDefaultConstraint> dv =
-        new SQLDefaultConstraintBuilder().onTable(table).addColumn("col3").setConstraintName(defaultConstraintName)
+        new SQLDefaultConstraintBuilder().onTable(table).addColumn("col3").setConstraintName("col3_default")
             .setDefaultVal(false).build(metaStore.getConf());
     client.addDefaultConstraint(dv);
+    expected.setDefaultConstraints(dv);
 
     // Set col2 with not null constraint in default catalog and database;
-    String nnCol2ConstraintName = "col2_not_null";
-    List<SQLNotNullConstraint> nnCol2 =
-        new SQLNotNullConstraintBuilder().onTable(table).addColumn("col2").setConstraintName(nnCol2ConstraintName)
-            .build(metaStore.getConf());
-    client.addNotNullConstraint(nnCol2);
-
-    // Set col3 with not null constraint in default catalog and database;
-    String nnCol3ConstraintName = "col3_not_null";
-    List<SQLNotNullConstraint> nnCol3 =
-        new SQLNotNullConstraintBuilder().onTable(table).addColumn("col3").setConstraintName(nnCol3ConstraintName)
-            .build(metaStore.getConf());
-    client.addNotNullConstraint(nnCol3);
-
+    SQLNotNullConstraint nnCol2 =
+        new SQLNotNullConstraint(table.getCatName(), table.getDbName(), table.getTableName(), "col2", "col2_not_null",
+            true, true, true);
+    SQLNotNullConstraint nnCol3 =
+        new SQLNotNullConstraint(table.getCatName(), table.getDbName(), table.getTableName(), "col3", "col3_not_null",
+            true, true, true);
+    List<SQLNotNullConstraint> nn = new ArrayList<>();
+    nn.add(nnCol2);
+    nn.add(nnCol3);
+    client.addNotNullConstraint(nn);
+    expected.setNotNullConstraints(nn);
+
+    expected.setForeignKeys(new ArrayList<>());
+    expected.setCheckConstraints(new ArrayList<>());
     // Fetch all constraints for the table in default catalog and database
-    AllTableConstraintsRequest request = new AllTableConstraintsRequest(table.getDbName(), table.getTableName(), table.getCatName());
+    AllTableConstraintsRequest request =
+        new AllTableConstraintsRequest(table.getDbName(), table.getTableName(), table.getCatName());
     SQLAllTableConstraints fetched = client.getAllTableConstraints(request);
-
-    // Assert primary key constraint
-    Assert.assertEquals(1, fetched.getPrimaryKeysSize());
-    verifyPrimaryKey(fetched.getPrimaryKeys().get(0), table, "col1", 1, pkConstraintName);
-
-    // Assert unique constraint
-    Assert.assertEquals(1, fetched.getUniqueConstraintsSize());
-    verifyUniqueConstraints(fetched.getUniqueConstraints().get(0), table, "col2", 1, uniqueConstraintName);
-
-    // Assert Default constraint
-    Assert.assertEquals(1, fetched.getDefaultConstraintsSize());
-    verifyDefaultConstraints(fetched.getDefaultConstraints().get(0), table, "col3", "false", defaultConstraintName);
-
-    // Assert Not Null constraint
-    Assert.assertEquals(2, fetched.getNotNullConstraintsSize());
-    verifyNotNullConstraints(fetched.getNotNullConstraints().get(0), table, "col2", nnCol2ConstraintName);
-    verifyNotNullConstraints(fetched.getNotNullConstraints().get(1), table, "col3", nnCol3ConstraintName);
-
-    // Check constraints which is not present in table
-    Assert.assertTrue(fetched.getCheckConstraints().isEmpty());
-    Assert.assertTrue(fetched.getForeignKeys().isEmpty());
+    Assert.assertEquals(expected, fetched);
 
   }
 
@@ -231,46 +206,45 @@ public class TestGetAllTableConstraints extends MetaStoreClientTest {
   public void allConstraintsPresent() throws TException {
     Table table = testTables[0];
     Table parentTable = testTables[1];
-
+    SQLAllTableConstraints expected = new SQLAllTableConstraints();
     // Set col1 as primary key Constraint in default catalog and database
-    String pkConstraintName = "col1_pk";
-    List<SQLPrimaryKey> pk =
-        new SQLPrimaryKeyBuilder().onTable(table).addColumn("col1").setConstraintName(pkConstraintName)
-            .build(metaStore.getConf());
+    List<SQLPrimaryKey> pk = new SQLPrimaryKeyBuilder().onTable(table).addColumn("col1").setConstraintName("col1_pk")
+        .build(metaStore.getConf());
     client.addPrimaryKey(pk);
+    expected.setPrimaryKeys(pk);
 
     // Set col2 with Unique Constraint in default catalog and database
     String uniqueConstraintName = "col2_unique";
     List<SQLUniqueConstraint> uc =
-        new SQLUniqueConstraintBuilder().onTable(table).addColumn("col2").setConstraintName(uniqueConstraintName)
+        new SQLUniqueConstraintBuilder().onTable(table).addColumn("col2").setConstraintName("col2_unique")
             .build(metaStore.getConf());
     client.addUniqueConstraint(uc);
+    expected.setUniqueConstraints(uc);
 
     // Set col3 with default Constraint in default catalog and database
-    String defaultConstraintName = "col3_default";
     List<SQLDefaultConstraint> dv =
-        new SQLDefaultConstraintBuilder().onTable(table).addColumn("col3").setConstraintName(defaultConstraintName)
+        new SQLDefaultConstraintBuilder().onTable(table).addColumn("col3").setConstraintName("col3_default")
             .setDefaultVal(false).build(metaStore.getConf());
     client.addDefaultConstraint(dv);
+    expected.setDefaultConstraints(dv);
 
     // Set col3 with not null constraint in default catalog and database;
-    String nnCol3ConstraintName = "col3_not_null";
-    List<SQLNotNullConstraint> nnCol2 =
-        new SQLNotNullConstraintBuilder().onTable(table).addColumn("col3").setConstraintName(nnCol3ConstraintName)
+    List<SQLNotNullConstraint> nn =
+        new SQLNotNullConstraintBuilder().onTable(table).addColumn("col3").setConstraintName("col3_not_null")
             .build(metaStore.getConf());
-    client.addNotNullConstraint(nnCol2);
+    client.addNotNullConstraint(nn);
+    expected.setNotNullConstraints(nn);
 
     // Set col2 with not check constraint in default catalog and database;
-    String ccCol2ConstraintName = "col2_check";
     List<SQLCheckConstraint> cc =
-        new SQLCheckConstraintBuilder().onTable(table).addColumn("col2").setConstraintName(ccCol2ConstraintName)
+        new SQLCheckConstraintBuilder().onTable(table).addColumn("col2").setConstraintName("col2_check")
             .setCheckExpression("= 5").build(metaStore.getConf());
     client.addCheckConstraint(cc);
+    expected.setCheckConstraints(cc);
 
     // Set col1 of parent table to PK and Set Col4 of table to FK
-    String parentPkConstraintName = "parentpk";
     List<SQLPrimaryKey> parentPk =
-        new SQLPrimaryKeyBuilder().onTable(parentTable).addColumn("col1").setConstraintName(parentPkConstraintName)
+        new SQLPrimaryKeyBuilder().onTable(parentTable).addColumn("col1").setConstraintName("parentpk")
             .build(metaStore.getConf());
     client.addPrimaryKey(parentPk);
     String fkConstraintName = "fk";
@@ -278,165 +252,12 @@ public class TestGetAllTableConstraints extends MetaStoreClientTest {
         new SQLForeignKeyBuilder().fromPrimaryKey(parentPk).onTable(table).setConstraintName(fkConstraintName)
             .addColumn("col4").build(metaStore.getConf());
     client.addForeignKey(fk);
+    expected.setForeignKeys(fk);
 
     // Fetch all constraints for the table in default catalog and database
-    AllTableConstraintsRequest request = new AllTableConstraintsRequest(table.getDbName(), table.getTableName(), table.getCatName());
-    SQLAllTableConstraints fetched = client.getAllTableConstraints(request);
-
-    // Assert primary key constraint
-    Assert.assertEquals(1, fetched.getPrimaryKeysSize());
-    verifyPrimaryKey(fetched.getPrimaryKeys().get(0), table, "col1", 1, pkConstraintName);
-
-    // Assert unique constraint
-    Assert.assertEquals(1, fetched.getUniqueConstraintsSize());
-    verifyUniqueConstraints(fetched.getUniqueConstraints().get(0), table, "col2", 1, uniqueConstraintName);
-
-    // Assert Default constraint
-    Assert.assertEquals(1, fetched.getDefaultConstraintsSize());
-    verifyDefaultConstraints(fetched.getDefaultConstraints().get(0), table, "col3", "false", defaultConstraintName);
-
-    // Assert Not Null constraint
-    Assert.assertEquals(1, fetched.getNotNullConstraintsSize());
-    verifyNotNullConstraints(fetched.getNotNullConstraints().get(0), table, "col3", nnCol3ConstraintName);
-
-    // Assert check constraint
-    Assert.assertEquals(1, fetched.getNotNullConstraintsSize());
-    verifyCheckConstraints(fetched.getCheckConstraints().get(0), table, "col2", "= 5", ccCol2ConstraintName);
-
-    // Assert foreign key
-    Assert.assertEquals(1, fetched.getForeignKeysSize());
-    verifyForeignKey(fetched.getForeignKeys().get(0), parentTable, "col1", parentPkConstraintName, table, "col4", 1,
-        fkConstraintName);
-
-  }
-
-  /**
-   * Asset/verify expected Primary key with fetched primary key
-   * @param primaryKey fetched primaryKey
-   * @param table expected table
-   * @param column expected primaryKey Column name
-   * @param seq expected primaryKey seq
-   * @param pkConstraintName expected constraint name
-   */
-  public void verifyPrimaryKey(SQLPrimaryKey primaryKey, Table table, String column, int seq, String pkConstraintName) {
-    Assert.assertEquals(table.getDbName(), primaryKey.getTable_db());
-    Assert.assertEquals(table.getTableName(), primaryKey.getTable_name());
-    Assert.assertEquals(column, primaryKey.getColumn_name());
-    Assert.assertEquals(seq, primaryKey.getKey_seq());
-    Assert.assertEquals(pkConstraintName, primaryKey.getPk_name());
-    Assert.assertTrue(primaryKey.isEnable_cstr());
-    Assert.assertFalse(primaryKey.isValidate_cstr());
-    Assert.assertFalse(primaryKey.isRely_cstr());
-    Assert.assertEquals(table.getCatName(), primaryKey.getCatName());
-  }
-
-  /**
-   * Asset/verify expected unique constraint with fetched unique constraint
-   * @param uniqueConstraint fetched unique constraint
-   * @param table expected table name
-   * @param column expected column name
-   * @param seq expected seq
-   * @param uniqueConstraintName expected unique constraint name
-   */
-  public void verifyUniqueConstraints(SQLUniqueConstraint uniqueConstraint, Table table, String column, int seq,
-      String uniqueConstraintName) {
-    Assert.assertEquals(table.getDbName(), uniqueConstraint.getTable_db());
-    Assert.assertEquals(table.getTableName(), uniqueConstraint.getTable_name());
-    Assert.assertEquals(column, uniqueConstraint.getColumn_name());
-    Assert.assertEquals(seq, uniqueConstraint.getKey_seq());
-    Assert.assertEquals(uniqueConstraintName, uniqueConstraint.getUk_name());
-    Assert.assertTrue(uniqueConstraint.isEnable_cstr());
-    Assert.assertFalse(uniqueConstraint.isValidate_cstr());
-    Assert.assertFalse(uniqueConstraint.isRely_cstr());
-    Assert.assertEquals(table.getCatName(), uniqueConstraint.getCatName());
-  }
-
-  /**
-   * Assert/verify expected default constraint with fetched default constraint
-   * @param defaultConstraint fetched default constraint
-   * @param table expected table name
-   * @param column expected column name
-   * @param defaultValue expected column default value
-   * @param defaultConstraintName expected default constraint name
-   */
-  public void verifyDefaultConstraints(SQLDefaultConstraint defaultConstraint, Table table, String column,
-      String defaultValue, String defaultConstraintName) {
-    Assert.assertEquals(table.getDbName(), defaultConstraint.getTable_db());
-    Assert.assertEquals(table.getTableName(), defaultConstraint.getTable_name());
-    Assert.assertEquals(column, defaultConstraint.getColumn_name());
-    Assert.assertEquals(defaultValue, defaultConstraint.getDefault_value());
-    Assert.assertEquals(defaultConstraintName, defaultConstraint.getDc_name());
-    Assert.assertTrue(defaultConstraint.isEnable_cstr());
-    Assert.assertFalse(defaultConstraint.isValidate_cstr());
-    Assert.assertFalse(defaultConstraint.isRely_cstr());
-    Assert.assertEquals(table.getCatName(), defaultConstraint.getCatName());
-  }
-
-  /**
-   * Assert/verify expected not null constraint with fetched not null constraint
-   * @param notNullConstraint fetched not null constraint
-   * @param table expected table name
-   * @param column expected column name
-   * @param notNullConstraintName expected not null constraint name
-   */
-  public void verifyNotNullConstraints(SQLNotNullConstraint notNullConstraint, Table table, String column,
-      String notNullConstraintName) {
-    Assert.assertEquals(table.getDbName(), notNullConstraint.getTable_db());
-    Assert.assertEquals(table.getTableName(), notNullConstraint.getTable_name());
-    Assert.assertEquals(column, notNullConstraint.getColumn_name());
-    Assert.assertEquals(notNullConstraintName, notNullConstraint.getNn_name());
-    Assert.assertTrue(notNullConstraint.isEnable_cstr());
-    Assert.assertFalse(notNullConstraint.isValidate_cstr());
-    Assert.assertFalse(notNullConstraint.isRely_cstr());
-    Assert.assertEquals(table.getCatName(), notNullConstraint.getCatName());
-  }
-
-  /**
-   * Assert/verify expected check constraint with fetched check constraint
-   * @param checkConstraint fetched check constraint
-   * @param table expected table name
-   * @param column expected column name
-   * @param checkValue expected check value
-   * @param checkConstraintName expected check constraint name
-   */
-  public void verifyCheckConstraints(SQLCheckConstraint checkConstraint, Table table, String column, String checkValue,
-      String checkConstraintName) {
-    Assert.assertEquals(table.getDbName(), checkConstraint.getTable_db());
-    Assert.assertEquals(table.getTableName(), checkConstraint.getTable_name());
-    Assert.assertEquals(column, checkConstraint.getColumn_name());
-    Assert.assertEquals(checkValue, checkConstraint.getCheck_expression());
-    Assert.assertEquals(checkConstraintName, checkConstraint.getDc_name());
-    Assert.assertTrue(checkConstraint.isEnable_cstr());
-    Assert.assertFalse(checkConstraint.isValidate_cstr());
-    Assert.assertFalse(checkConstraint.isRely_cstr());
-    Assert.assertEquals(table.getCatName(), checkConstraint.getCatName());
-  }
-
-  /**
-   * Assert/verify expected foreign key with fetched foreign key
-   * @param foreignKey fetched foreign key
-   * @param parentTable expected parent table name
-   * @param parentPkColumn expected primary key column name in parent table
-   * @param parentPkConstraintName expected primary key constraint name in parent table
-   * @param fkTable expected foreign key table name
-   * @param fkColumn expected foreign key column name
-   * @param fkSeq expected foreign key seq
-   * @param fkConstraintName expected foreign key constraint name
-   */
-  public void verifyForeignKey(SQLForeignKey foreignKey, Table parentTable, String parentPkColumn,
-      String parentPkConstraintName, Table fkTable, String fkColumn, int fkSeq, String fkConstraintName) {
-    Assert.assertEquals(fkTable.getDbName(), foreignKey.getFktable_db());
-    Assert.assertEquals(fkTable.getTableName(), foreignKey.getFktable_name());
-    Assert.assertEquals(fkColumn, foreignKey.getFkcolumn_name());
-    Assert.assertEquals(parentTable.getDbName(), foreignKey.getPktable_db());
-    Assert.assertEquals(parentTable.getTableName(), foreignKey.getPktable_name());
-    Assert.assertEquals(parentPkColumn, foreignKey.getPkcolumn_name());
-    Assert.assertEquals(fkSeq, foreignKey.getKey_seq());
-    Assert.assertEquals(parentPkConstraintName, foreignKey.getPk_name());
-    Assert.assertEquals(fkConstraintName, foreignKey.getFk_name());
-    Assert.assertTrue(foreignKey.isEnable_cstr());
-    Assert.assertFalse(foreignKey.isValidate_cstr());
-    Assert.assertFalse(foreignKey.isRely_cstr());
-    Assert.assertEquals(fkTable.getCatName(), foreignKey.getCatName());
+    AllTableConstraintsRequest request =
+        new AllTableConstraintsRequest(table.getDbName(), table.getTableName(), table.getCatName());
+    SQLAllTableConstraints actual = client.getAllTableConstraints(request);
+    Assert.assertEquals(expected, actual);
   }
 }
\ No newline at end of file
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestNotNullConstraint.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestNotNullConstraint.java
index b32eeda..d0034d2 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestNotNullConstraint.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestNotNullConstraint.java
@@ -161,20 +161,12 @@ public class TestNotNullConstraint extends MetaStoreClientTest {
 
     rqst = new NotNullConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getNotNullConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(table.getTableName() + "_not_null_constraint", fetched.get(0).getNn_name());
-    String table0PkName = fetched.get(0).getNn_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    nn.get(0).setNn_name(fetched.get(0).getNn_name());
+    Assert.assertEquals(nn, fetched);
 
     // Drop a primary key
     client.dropConstraint(table.getCatName(), table.getDbName(),
-        table.getTableName(), table0PkName);
+        table.getTableName(), nn.get(0).getNn_name());
     rqst = new NotNullConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getNotNullConstraints(rqst);
     Assert.assertTrue(fetched.isEmpty());
@@ -197,15 +189,7 @@ public class TestNotNullConstraint extends MetaStoreClientTest {
     NotNullConstraintsRequest rqst = new NotNullConstraintsRequest(testTables[2].getCatName(),
         testTables[2].getDbName(), testTables[2].getTableName());
     List<SQLNotNullConstraint> fetched = client.getNotNullConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(testTables[2].getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(testTables[2].getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(constraintName, fetched.get(0).getNn_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(testTables[2].getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(nn, fetched);
 
     client.dropConstraint(testTables[2].getCatName(), testTables[2].getDbName(),
         testTables[2].getTableName(), constraintName);
@@ -234,15 +218,7 @@ public class TestNotNullConstraint extends MetaStoreClientTest {
     NotNullConstraintsRequest rqst = new NotNullConstraintsRequest(table.getCatName(),
         table.getDbName(), table.getTableName());
     List<SQLNotNullConstraint> fetched = client.getNotNullConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(constraintName, fetched.get(0).getNn_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(nn, fetched);
 
     client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), constraintName);
     rqst = new NotNullConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
@@ -269,18 +245,11 @@ public class TestNotNullConstraint extends MetaStoreClientTest {
     NotNullConstraintsRequest rqst = new NotNullConstraintsRequest(table.getCatName(),
         table.getDbName(), table.getTableName());
     List<SQLNotNullConstraint> fetched = client.getNotNullConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(table.getTableName() + "_not_null_constraint", fetched.get(0).getNn_name());
-    String tablePkName = fetched.get(0).getNn_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
-
-    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), tablePkName);
+    nn.get(0).setNn_name(fetched.get(0).getNn_name());
+    Assert.assertEquals(nn, fetched);
+
+
+    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), nn.get(0).getNn_name());
     rqst = new NotNullConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getNotNullConstraints(rqst);
     Assert.assertTrue(fetched.isEmpty());
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestPrimaryKey.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestPrimaryKey.java
index c33572b..a33dffd 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestPrimaryKey.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestPrimaryKey.java
@@ -163,21 +163,12 @@ public class TestPrimaryKey extends MetaStoreClientTest {
     rqst = new PrimaryKeysRequest(table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     fetched = client.getPrimaryKeys(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(table.getTableName() + "_primary_key", fetched.get(0).getPk_name());
-    String table0PkName = fetched.get(0).getPk_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    pk.get(0).setPk_name(fetched.get(0).getPk_name());
+    Assert.assertEquals(pk, fetched);
 
     // Drop a primary key
     client.dropConstraint(table.getCatName(), table.getDbName(),
-        table.getTableName(), table0PkName);
+        table.getTableName(), pk.get(0).getPk_name());
     rqst = new PrimaryKeysRequest(table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     fetched = client.getPrimaryKeys(rqst);
@@ -213,19 +204,7 @@ public class TestPrimaryKey extends MetaStoreClientTest {
     rqst = new PrimaryKeysRequest(table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     fetched = client.getPrimaryKeys(rqst);
-    Assert.assertEquals(2, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals("col2", fetched.get(1).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(2, fetched.get(1).getKey_seq());
-    Assert.assertEquals(constraintName, fetched.get(0).getPk_name());
-    Assert.assertEquals(fetched.get(0).getPk_name(), fetched.get(1).getPk_name());
-    Assert.assertFalse(fetched.get(0).isEnable_cstr());
-    Assert.assertTrue(fetched.get(0).isValidate_cstr());
-    Assert.assertTrue(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(pk, fetched);
 
     // Drop a named primary key
     client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), constraintName);
@@ -258,16 +237,7 @@ public class TestPrimaryKey extends MetaStoreClientTest {
     rqst = new PrimaryKeysRequest(testTables[2].getDbName(), testTables[2].getTableName());
     rqst.setCatName(testTables[2].getCatName());
     fetched = client.getPrimaryKeys(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(testTables[2].getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(testTables[2].getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(constraintName, fetched.get(0).getPk_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(testTables[2].getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(pk, fetched);
 
     client.dropConstraint(testTables[2].getCatName(), testTables[2].getDbName(),
         testTables[2].getTableName(), constraintName);
@@ -296,16 +266,7 @@ public class TestPrimaryKey extends MetaStoreClientTest {
     PrimaryKeysRequest rqst = new PrimaryKeysRequest(table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     List<SQLPrimaryKey> fetched = client.getPrimaryKeys(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(constraintName, fetched.get(0).getPk_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(pk, fetched);
 
     client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), constraintName);
     rqst = new PrimaryKeysRequest(table.getDbName(), table.getTableName());
@@ -333,19 +294,10 @@ public class TestPrimaryKey extends MetaStoreClientTest {
     PrimaryKeysRequest rqst = new PrimaryKeysRequest(table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     List<SQLPrimaryKey> fetched = client.getPrimaryKeys(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(table.getTableName() + "_primary_key", fetched.get(0).getPk_name());
-    String tablePkName = fetched.get(0).getPk_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
-
-    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), tablePkName);
+    pk.get(0).setPk_name(fetched.get(0).getPk_name());
+    Assert.assertEquals(pk, fetched);
+
+    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), pk.get(0).getPk_name());
     rqst = new PrimaryKeysRequest(table.getDbName(), table.getTableName());
     rqst.setCatName(table.getCatName());
     fetched = client.getPrimaryKeys(rqst);
diff --git a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestUniqueConstraint.java b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestUniqueConstraint.java
index 5842ec5..9eaafbf 100644
--- a/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestUniqueConstraint.java
+++ b/standalone-metastore/metastore-server/src/test/java/org/apache/hadoop/hive/metastore/client/TestUniqueConstraint.java
@@ -161,21 +161,13 @@ public class TestUniqueConstraint extends MetaStoreClientTest {
 
     rqst = new UniqueConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getUniqueConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(table.getTableName() + "_unique_constraint", fetched.get(0).getUk_name());
-    String table0PkName = fetched.get(0).getUk_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    uc.get(0).setUk_name(fetched.get(0).getUk_name());
+    Assert.assertEquals(uc, fetched);
+
 
     // Drop a primary key
     client.dropConstraint(table.getCatName(), table.getDbName(),
-        table.getTableName(), table0PkName);
+        table.getTableName(), uc.get(0).getUk_name());
     rqst = new UniqueConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getUniqueConstraints(rqst);
     Assert.assertTrue(fetched.isEmpty());
@@ -198,16 +190,8 @@ public class TestUniqueConstraint extends MetaStoreClientTest {
     UniqueConstraintsRequest rqst = new UniqueConstraintsRequest(testTables[2].getCatName(),
         testTables[2].getDbName(), testTables[2].getTableName());
     List<SQLUniqueConstraint> fetched = client.getUniqueConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(testTables[2].getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(testTables[2].getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(constraintName, fetched.get(0).getUk_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(testTables[2].getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(uc, fetched);
+
 
     client.dropConstraint(testTables[2].getCatName(), testTables[2].getDbName(),
         testTables[2].getTableName(), constraintName);
@@ -235,16 +219,7 @@ public class TestUniqueConstraint extends MetaStoreClientTest {
     client.createTableWithConstraints(table, null, null, uc, null, null, null);
     UniqueConstraintsRequest rqst = new UniqueConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     List<SQLUniqueConstraint> fetched = client.getUniqueConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(constraintName, fetched.get(0).getUk_name());
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
+    Assert.assertEquals(uc, fetched);
 
     client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), constraintName);
     rqst = new UniqueConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
@@ -270,19 +245,10 @@ public class TestUniqueConstraint extends MetaStoreClientTest {
     client.createTableWithConstraints(table, null, null, uc, null, null, null);
     UniqueConstraintsRequest rqst = new UniqueConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     List<SQLUniqueConstraint> fetched = client.getUniqueConstraints(rqst);
-    Assert.assertEquals(1, fetched.size());
-    Assert.assertEquals(table.getDbName(), fetched.get(0).getTable_db());
-    Assert.assertEquals(table.getTableName(), fetched.get(0).getTable_name());
-    Assert.assertEquals("col1", fetched.get(0).getColumn_name());
-    Assert.assertEquals(1, fetched.get(0).getKey_seq());
-    Assert.assertEquals(table.getTableName() + "_unique_constraint", fetched.get(0).getUk_name());
-    String tablePkName = fetched.get(0).getUk_name();
-    Assert.assertTrue(fetched.get(0).isEnable_cstr());
-    Assert.assertFalse(fetched.get(0).isValidate_cstr());
-    Assert.assertFalse(fetched.get(0).isRely_cstr());
-    Assert.assertEquals(table.getCatName(), fetched.get(0).getCatName());
-
-    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), tablePkName);
+    uc.get(0).setUk_name(fetched.get(0).getUk_name());
+    Assert.assertEquals(uc, fetched);
+
+    client.dropConstraint(table.getCatName(), table.getDbName(), table.getTableName(), uc.get(0).getUk_name());
     rqst = new UniqueConstraintsRequest(table.getCatName(), table.getDbName(), table.getTableName());
     fetched = client.getUniqueConstraints(rqst);
     Assert.assertTrue(fetched.isEmpty());