Author: shawkins
Date: 2011-08-29 14:37:36 -0400 (Mon, 29 Aug 2011)
New Revision: 3430
Modified:
branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/relational/TestSortNode.java
Log:
TEIID-1731 fix for incorrect results
Modified:
branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java
===================================================================
---
branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java 2011-08-27
01:51:27 UTC (rev 3429)
+++
branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/SortUtility.java 2011-08-29
18:37:36 UTC (rev 3430)
@@ -324,7 +324,7 @@
while (sublists.size() > 0) {
SortedSublist sortedSublist = sublists.remove(sublists.size() - 1);
merged.addTuple(sortedSublist.tuple);
- if (this.output != null && sortedSublist.index >
masterSortIndex) {
+ if (this.output != null && masterSortIndex < maxSortIndex
&& sortedSublist.index != masterSortIndex) {
this.output.addTuple(sortedSublist.tuple); //a new distinct row
}
incrementWorkingTuple(sublists, sortedSublist);
@@ -339,7 +339,7 @@
}
merged.saveBatch();
this.activeTupleBuffers.add(merged);
- masterSortIndex = masterSortIndex - maxSortIndex + 1;
+ masterSortIndex = masterSortIndex - maxSortIndex;
if (masterSortIndex < 0) {
masterSortIndex = this.activeTupleBuffers.size() - 1;
}
Modified:
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/relational/TestSortNode.java
===================================================================
---
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/relational/TestSortNode.java 2011-08-27
01:51:27 UTC (rev 3429)
+++
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/relational/TestSortNode.java 2011-08-29
18:37:36 UTC (rev 3430)
@@ -46,7 +46,7 @@
import org.teiid.query.sql.symbol.ElementSymbol;
import org.teiid.query.util.CommandContext;
-
+@SuppressWarnings("unchecked")
public class TestSortNode {
public static final int BATCH_SIZE = 100;
@@ -321,4 +321,37 @@
assertEquals(Arrays.asList(2), ts.nextTuple());
}
+ @Test public void testDupRemoveLowMemory() throws Exception {
+ ElementSymbol es1 = new ElementSymbol("e1"); //$NON-NLS-1$
+ es1.setType(DataTypeManager.DefaultDataClasses.INTEGER);
+ BufferManager bm = BufferManagerFactory.getTestBufferManager(0, 2);
+ TupleBuffer tsid = bm.createTupleBuffer(Arrays.asList(es1), "test",
TupleSourceType.PROCESSOR); //$NON-NLS-1$
+ tsid.addTuple(Arrays.asList(1));
+ tsid.addTuple(Arrays.asList(2));
+ SortUtility su = new SortUtility(tsid.createIndexedTupleSource(),
Arrays.asList(es1), Arrays.asList(Boolean.TRUE), Mode.DUP_REMOVE, bm, "test",
tsid.getSchema()); //$NON-NLS-1$
+ TupleBuffer out = su.sort();
+ TupleSource ts = out.createIndexedTupleSource();
+ assertEquals(Arrays.asList(1), ts.nextTuple());
+ assertEquals(Arrays.asList(2), ts.nextTuple());
+ try {
+ ts.nextTuple();
+ fail();
+ } catch (BlockedException e) {
+
+ }
+ tsid.addTuple(Arrays.asList(3));
+ tsid.addTuple(Arrays.asList(4));
+ tsid.addTuple(Arrays.asList(5));
+ tsid.addTuple(Arrays.asList(6));
+ tsid.addTuple(Arrays.asList(6));
+ tsid.addTuple(Arrays.asList(6));
+ tsid.close();
+ su.sort();
+ ts.nextTuple();
+ ts.nextTuple();
+ assertNotNull(ts.nextTuple());
+ assertNotNull(ts.nextTuple());
+ assertNull(ts.nextTuple());
+ }
+
}
Show replies by thread