diff --git ql/src/java/org/apache/hadoop/hive/ql/Driver.java ql/src/java/org/apache/hadoop/hive/ql/Driver.java index 94999fed93..6999777297 100644 --- ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -25,6 +25,7 @@ import java.io.Serializable; import java.net.InetAddress; import java.util.ArrayList; +import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -1244,15 +1245,18 @@ private void recordValidWriteIds(HiveTxnManager txnMgr) throws LockException { // Make the list of transactional tables list which are getting read or written by current txn private List getTransactionalTableList(QueryPlan plan) { - List tableList = new ArrayList<>(); + Set tableList = new HashSet<>(); for (ReadEntity input : plan.getInputs()) { addTableFromEntity(input, tableList); } - return tableList; + for (WriteEntity output : plan.getOutputs()) { + addTableFromEntity(output, tableList); + } + return new ArrayList(tableList); } - private void addTableFromEntity(Entity entity, List tableList) { + private void addTableFromEntity(Entity entity, Collection tableList) { Table tbl; switch (entity.getType()) { case TABLE: { @@ -1268,10 +1272,9 @@ private void addTableFromEntity(Entity entity, List tableList) { return; } } + if (!AcidUtils.isTransactionalTable(tbl)) return; String fullTableName = AcidUtils.getFullTableName(tbl.getDbName(), tbl.getTableName()); - if (AcidUtils.isTransactionalTable(tbl) && !tableList.contains(fullTableName)) { - tableList.add(fullTableName); - } + tableList.add(fullTableName); } private String getUserFromUGI() {