diff --git metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java index e689853..599aca8 100644 --- metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java +++ metastore/src/java/org/apache/hadoop/hive/metastore/ObjectStore.java @@ -2925,9 +2925,12 @@ private void removeUnusedColumnDescriptor(MColumnDescriptor oldCD) { try { openTransaction(); LOG.debug("execute removeUnusedColumnDescriptor"); - List referencedSDs = listStorageDescriptorsWithCD(oldCD, 1); + 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); } @@ -2959,39 +2962,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) { - boolean success = false; - List sds = null; - try { - openTransaction(); - LOG.debug("Executing listStorageDescriptorsWithCD"); - Query 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; - } - @Override public boolean addIndex(Index index) throws InvalidObjectException, MetaException {