diff --git ql/src/java/org/apache/hadoop/hive/ql/Driver.java ql/src/java/org/apache/hadoop/hive/ql/Driver.java index 33cd643..0ba12bb 100644 --- ql/src/java/org/apache/hadoop/hive/ql/Driver.java +++ ql/src/java/org/apache/hadoop/hive/ql/Driver.java @@ -716,11 +716,11 @@ public class Driver implements CommandProcessor { if (p != null) { if (!(p instanceof DummyPartition)) { locks.add(new HiveLockObj(new HiveLockObject(p, lockData), mode)); + + // All the parents are locked in shared mode + mode = HiveLockMode.SHARED; } - // All the parents are locked in shared mode - mode = HiveLockMode.SHARED; - // For dummy partitions, only partition name is needed String name = p.getName(); @@ -745,6 +745,10 @@ public class Driver implements CommandProcessor { + "/" + partialName, partialSpec), lockData), mode)); partialName += "/"; + if (p instanceof DummyPartition) { + // All the parents are locked in shared mode + mode = HiveLockMode.SHARED; + } } catch (HiveException e) { throw new SemanticException(e.getMessage()); } @@ -787,14 +791,13 @@ public class Driver implements CommandProcessor { for (WriteEntity output : plan.getOutputs()) { if (output.getTyp() == WriteEntity.Type.TABLE) { - lockObjects.addAll(getLockObjects(output.getTable(), null, - output.isComplete() ? HiveLockMode.EXCLUSIVE : HiveLockMode.SHARED)); + lockObjects.addAll(getLockObjects(output.getTable(), null, HiveLockMode.EXCLUSIVE)); } else if (output.getTyp() == WriteEntity.Type.PARTITION) { lockObjects.addAll(getLockObjects(null, output.getPartition(), HiveLockMode.EXCLUSIVE)); } // In case of dynamic queries, it is possible to have incomplete dummy partitions else if (output.getTyp() == WriteEntity.Type.DUMMYPARTITION) { - lockObjects.addAll(getLockObjects(null, output.getPartition(), HiveLockMode.SHARED)); + lockObjects.addAll(getLockObjects(null, output.getPartition(), HiveLockMode.EXCLUSIVE)); } }