diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java index 0122aed..0db378b 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnHandler.java @@ -2412,6 +2412,8 @@ private LockResponse checkLock(Connection dbConn, long extLockId) strings.add(info.table); } } + SortedSet lockSet = new TreeSet(new LockInfoComparator()); + List queries = new ArrayList(); if (!sawNull) { query.append(" and (hl_table is null or hl_table in("); first = true; @@ -2437,27 +2439,38 @@ private LockResponse checkLock(Connection dbConn, long extLockId) } } if (!sawNull) { - query.append(" and (hl_partition is null or hl_partition in("); - first = true; + StringBuilder prefix = new StringBuilder(); + StringBuilder suffix = new StringBuilder(); + prefix.append(" and ( hl_partition is null or "); + + suffix.append(" )"); + List partList = new ArrayList<>(); for (String s : strings) { - if (first) first = false; - else query.append(", "); - query.append('\''); - query.append(s); - query.append('\''); + partList.add(quoteString(s)); + } + TxnUtils.buildQueryWithINClause(conf, queries, prefix, suffix, partList, "hl_partition", true, false); + for (int i=0;i"); + if (sawNull) { + queries.add(query.toString()); + } stmt = dbConn.createStatement(); - rs = stmt.executeQuery(query.toString()); - SortedSet lockSet = new TreeSet(new LockInfoComparator()); - while (rs.next()) { - lockSet.add(new LockInfo(rs)); + for (String thisQuery : queries) { + LOG.debug("Going to execute query <" + thisQuery.toString() + ">"); + rs = stmt.executeQuery(thisQuery.toString()); + while (rs.next()) { + lockSet.add(new LockInfo(rs)); + } + close(rs); } + // Turn the tree set into an array so we can move back and forth easily // in it. LockInfo[] locks = lockSet.toArray(new LockInfo[lockSet.size()]); diff --git a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java index 517eec3..1a243ed 100644 --- a/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java +++ b/metastore/src/java/org/apache/hadoop/hive/metastore/txn/TxnUtils.java @@ -142,8 +142,8 @@ public static boolean isAcidTable(Table table) { * e.g. ( id in (1,2,3) OR id in (4,5,6) ) * @param notIn clause to be broken up is NOT IN */ - public static void buildQueryWithINClause(HiveConf conf, List queries, StringBuilder prefix, - StringBuilder suffix, List inList, + public static void buildQueryWithINClause(HiveConf conf, List queries, StringBuilder prefix, + StringBuilder suffix, List inList, String inColumn, boolean addParens, boolean notIn) { if (inList == null || inList.size() == 0) { throw new IllegalArgumentException("The IN list is empty!");