Updated Branches: refs/heads/master cb3132a39 -> b48d0f09a
Fix range and within case Project: http://git-wip-us.apache.org/repos/asf/incubator-drill/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-drill/commit/b48d0f09 Tree: http://git-wip-us.apache.org/repos/asf/incubator-drill/tree/b48d0f09 Diff: http://git-wip-us.apache.org/repos/asf/incubator-drill/diff/b48d0f09 Branch: refs/heads/master Commit: b48d0f09a0f53054b02e9cf000fe619a6f14d728 Parents: b41f51f Author: Timothy Chen <[email protected]> Authored: Tue Mar 5 00:16:38 2013 -0800 Committer: Timothy Chen <[email protected]> Committed: Tue Mar 5 00:16:38 2013 -0800 ---------------------------------------------------------------------- .../apache/drill/exec/ref/rops/WindowFrameROP.java | 10 ++-- .../drill/exec/ref/rops/WindowFrameROPTest.java | 41 ++++++++++++++- 2 files changed, 45 insertions(+), 6 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b48d0f09/sandbox/prototype/exec/ref/src/main/java/org/apache/drill/exec/ref/rops/WindowFrameROP.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/exec/ref/src/main/java/org/apache/drill/exec/ref/rops/WindowFrameROP.java b/sandbox/prototype/exec/ref/src/main/java/org/apache/drill/exec/ref/rops/WindowFrameROP.java index a8417d1..4ed1642 100644 --- a/sandbox/prototype/exec/ref/src/main/java/org/apache/drill/exec/ref/rops/WindowFrameROP.java +++ b/sandbox/prototype/exec/ref/src/main/java/org/apache/drill/exec/ref/rops/WindowFrameROP.java @@ -253,13 +253,13 @@ public class WindowFrameROP extends SingleInputROPBase<WindowFrame> { curWindow.removeHoldersBeforeIndex(curWindow.getWindowId()); } curWindow = new Window(start, end, curWindow); - if (curWindow.isCrossedWithinBoundary(recordPointer)) { - holderBuffer.add(new WindowObjectHolder(recordPointer, 0, index, schemaChanged)); - return; - } } - curWindow.addRecord(recordPointer, index, schemaChanged); + if (curWindow.isCrossedWithinBoundary(recordPointer)) { + holderBuffer.add(new WindowObjectHolder(recordPointer, 0, index, schemaChanged)); + } else { + curWindow.addRecord(recordPointer, index, schemaChanged); + } } public boolean hasMoreWindows(int curIndex) { http://git-wip-us.apache.org/repos/asf/incubator-drill/blob/b48d0f09/sandbox/prototype/exec/ref/src/test/java/org/apache/drill/exec/ref/rops/WindowFrameROPTest.java ---------------------------------------------------------------------- diff --git a/sandbox/prototype/exec/ref/src/test/java/org/apache/drill/exec/ref/rops/WindowFrameROPTest.java b/sandbox/prototype/exec/ref/src/test/java/org/apache/drill/exec/ref/rops/WindowFrameROPTest.java index d041174..b0aeb99 100644 --- a/sandbox/prototype/exec/ref/src/test/java/org/apache/drill/exec/ref/rops/WindowFrameROPTest.java +++ b/sandbox/prototype/exec/ref/src/test/java/org/apache/drill/exec/ref/rops/WindowFrameROPTest.java @@ -129,7 +129,7 @@ public class WindowFrameROPTest { } @Test - public void windowShouldNotCrossWithinAndRange() throws IOException { + public void windowShouldNotCrossWithins() throws IOException { String withinInput = "" + "{id: 0, v: 0}" + "{id: 1, v: 0}" + @@ -156,6 +156,45 @@ public class WindowFrameROPTest { verifyWindowOrder(windows, out); } + @Test + public void windowShouldNotCrossWithinAndRange() throws IOException { + String withinInput = "" + + "{id: 0, v: 0}" + + "{id: 1, v: 0}" + + "{id: 2, v: 0}" + + "{id: 3, v: 0}" + + "{id: 4, v: 1}" + + "{id: 5, v: 1}" + + "{id: 6, v: 2}"; + WindowFrameROP rop = new WindowFrameROP(new WindowFrame(new FieldReference("test.v"), null, -1L, 3L)); + RecordIterator incoming = TestUtils.jsonToRecordIterator("test", withinInput); + rop.setInput(incoming); + RecordIterator out = rop.getOutput(); + + List<WindowObj> windows = Lists.newArrayList( + new WindowObj(0, 0, 0), + new WindowObj(0, 1, 1), + new WindowObj(0, 2, -1), + new WindowObj(0, 3, 2), + new WindowObj(1, 0, 0), + new WindowObj(1, 1, 1), + new WindowObj(1, 2, -1), + new WindowObj(1, 3, 2), + new WindowObj(2, 1, 0), + new WindowObj(2, 2, 1), + new WindowObj(2, 3, -1), + new WindowObj(3, 2, 0), + new WindowObj(3, 3, 1), + new WindowObj(4, 4, 0), + new WindowObj(4, 5, 1), + new WindowObj(5, 4, 0), + new WindowObj(5, 5, 1), + new WindowObj(6, 6, 0) + ); + + verifyWindowOrder(windows, out); + } + private void verifyWindowOrder(List<WindowObj> expectedIds, RecordIterator out) { verifyWindowOrder(expectedIds, out, new SchemaPath("ref.segment"), new SchemaPath("ref.position")); }
