copy unmerged records in merge sort to new buffer
Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/d616259d Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/d616259d Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/d616259d Branch: refs/heads/master Commit: d616259d30ac0fbafc56637df53207a9464bbc6e Parents: 05c9e42 Author: Steven Phillips <[email protected]> Authored: Thu May 22 17:27:52 2014 -0700 Committer: Jinfeng Ni <[email protected]> Committed: Thu May 22 17:35:10 2014 -0700 ---------------------------------------------------------------------- .../drill/exec/physical/impl/xsort/MSortTemplate.java | 9 +++++++++ 1 file changed, 9 insertions(+) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/d616259d/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/xsort/MSortTemplate.java ---------------------------------------------------------------------- diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/xsort/MSortTemplate.java b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/xsort/MSortTemplate.java index c54b2b7..0c98c6f 100644 --- a/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/xsort/MSortTemplate.java +++ b/exec/java-exec/src/main/java/org/apache/drill/exec/physical/impl/xsort/MSortTemplate.java @@ -111,6 +111,9 @@ public abstract class MSortTemplate implements MSorter, IndexedSortable{ outIndex = merge(left, right, end, outIndex); if (outIndex < vector4.getTotalCount()) newRunStarts.add(outIndex); } + if (outIndex < vector4.getTotalCount()) { + copyRun(outIndex, vector4.getTotalCount()); + } SelectionVector4 tmp = aux.createNewWrapperCurrent(); aux.clear(); aux = this.vector4.createNewWrapperCurrent(); @@ -122,6 +125,12 @@ public abstract class MSortTemplate implements MSorter, IndexedSortable{ aux.clear(); } + private void copyRun(int start, int end) { + for (int i = start; i < end; i++) { + aux.set(i, vector4.get(i)); + } + } + @Override public void swap(int sv0, int sv1) { int tmp = vector4.get(sv0);
