diff --git a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java index 3deef0ee963e7b2776897b55edbdfa19445674a6..e9e7d44f44099f5b557b5fc74567762526eb58a3 100644 --- a/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ b/standalone-metastore/src/main/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -3755,9 +3755,14 @@ private void removeUnusedColumnDescriptor(MColumnDescriptor oldCD) { try { openTransaction(); LOG.debug("execute removeUnusedColumnDescriptor"); - List referencedSDs = listStorageDescriptorsWithCD(oldCD, 1, queryWrapper); + + Query query = pm.newQuery("select count(1) from " + + "org.apache.hadoop.hive.metastore.model.MStorageDescriptor where (this.cd == inCD)"); + query.declareParameters("MColumnDescriptor inCD"); + long count = ((Long)query.execute(oldCD)).longValue(); + //if no other SD references this CD, we can throw it out. - if (referencedSDs != null && referencedSDs.isEmpty()) { + if (count == 0) { pm.retrieve(oldCD); pm.deletePersistent(oldCD); } @@ -3787,40 +3792,6 @@ private void preDropStorageDescriptor(MStorageDescriptor msd) { removeUnusedColumnDescriptor(mcd); } - /** - * Get a list of storage descriptors that reference a particular Column Descriptor - * @param oldCD the column descriptor to get storage descriptors for - * @param maxSDs the maximum number of SDs to return - * @return a list of storage descriptors - */ - private List listStorageDescriptorsWithCD( - MColumnDescriptor oldCD, - long maxSDs, - QueryWrapper queryWrapper) { - boolean success = false; - List sds = null; - try { - openTransaction(); - LOG.debug("Executing listStorageDescriptorsWithCD"); - Query query = queryWrapper.query = pm.newQuery(MStorageDescriptor.class, "this.cd == inCD"); - query.declareParameters("MColumnDescriptor inCD"); - if (maxSDs >= 0) { - // User specified a row limit, set it on the Query - query.setRange(0, maxSDs); - } - sds = (List)query.execute(oldCD); - LOG.debug("Done executing query for listStorageDescriptorsWithCD"); - pm.retrieveAll(sds); - success = commitTransaction(); - LOG.debug("Done retrieving all objects for listStorageDescriptorsWithCD"); - } finally { - if (!success) { - rollbackTransaction(); - } - } - return sds; - } - private static MFieldSchema getColumnFromTableColumns(List cols, String col) { if (cols == null) { return null;