diff --git a/ql/src/java/org/apache/hadoop/hive/ql/lib/DefaultGraphWalker.java b/ql/src/java/org/apache/hadoop/hive/ql/lib/DefaultGraphWalker.java index 583c113..03c50cb 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/lib/DefaultGraphWalker.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/lib/DefaultGraphWalker.java @@ -37,7 +37,7 @@ public class DefaultGraphWalker implements GraphWalker { protected Stack opStack; - protected final List toWalk = new ArrayList(); + protected final OptimizedList toWalk = new OptimizedList(); protected final IdentityHashMap retMap = new IdentityHashMap(); protected final Dispatcher dispatcher; @@ -136,8 +136,8 @@ public void walk(Node nd) throws SemanticException { return; } // add children, self to the front of the queue in that order - getToWalk().add(0, nd); - getToWalk().removeAll(nd.getChildren()); - getToWalk().addAll(0, nd.getChildren()); + toWalk.add(0, nd); + toWalk.removeAll(nd.getChildren()); + toWalk.addAll(0, nd.getChildren()); } } diff --git a/ql/src/java/org/apache/hadoop/hive/ql/lib/OptimizedList.java b/ql/src/java/org/apache/hadoop/hive/ql/lib/OptimizedList.java new file mode 100644 index 0000000..b30c23d --- /dev/null +++ b/ql/src/java/org/apache/hadoop/hive/ql/lib/OptimizedList.java @@ -0,0 +1,29 @@ +package org.apache.hadoop.hive.ql.lib; +import java.util.*; + +public class OptimizedList extends Vector { + private static final long serialVersionUID = 1986881027644228873L; + + @Override + public boolean removeAll(Collection c) { + int oldHi=0, newHi=0, top=0; + for (int i=0; i 0) { + System.arraycopy(elementData, newHi, elementData, top, elementCount - newHi); + elementCount += top - newHi; + return true; + } else { + return false; + } + } +}