[teiid-commits] teiid SVN: r4427 - in branches/7.7.x/engine/src: test/java/org/teiid/query/processor and 1 other directory.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Mon Sep 10 21:57:32 EDT 2012
Author: jolee
Date: 2012-09-10 21:57:32 -0400 (Mon, 10 Sep 2012)
New Revision: 4427
Modified:
branches/7.7.x/engine/src/main/java/org/teiid/query/tempdata/IndexInfo.java
branches/7.7.x/engine/src/test/java/org/teiid/query/processor/TestTempTables.java
Log:
TEIID-2197 fix for ordering with an in predicate
Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/tempdata/IndexInfo.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/tempdata/IndexInfo.java 2012-09-11 01:48:43 UTC (rev 4426)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/tempdata/IndexInfo.java 2012-09-11 01:57:32 UTC (rev 4427)
@@ -25,10 +25,10 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
+import java.util.Collections;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.ListIterator;
import org.teiid.common.buffer.TupleBrowser;
import org.teiid.common.buffer.TupleSource;
@@ -38,6 +38,7 @@
import org.teiid.logging.LogManager;
import org.teiid.query.eval.Evaluator;
import org.teiid.query.processor.CollectionTupleSource;
+import org.teiid.query.processor.relational.ListNestedSortComparator;
import org.teiid.query.processor.relational.RelationalNode;
import org.teiid.query.sql.lang.CompareCriteria;
import org.teiid.query.sql.lang.Criteria;
@@ -311,26 +312,8 @@
}
if (!valueSet.isEmpty()) {
LogManager.logDetail(LogConstants.CTX_DQP, "Using index value set"); //$NON-NLS-1$
- CollectionTupleSource cts = null;
- if (direction == OrderBy.ASC) {
- cts = new CollectionTupleSource(valueSet.iterator());
- } else {
- cts = new CollectionTupleSource(new Iterator<List<Object>>() {
- ListIterator<List<Object>> iter = valueSet.listIterator(valueSet.size());
- @Override
- public boolean hasNext() {
- return iter.hasPrevious();
- }
- @Override
- public List<Object> next() {
- return iter.previous();
- }
- @Override
- public void remove() {
- throw new UnsupportedOperationException();
- }
- });
- }
+ sortValueSet(direction);
+ CollectionTupleSource cts = new CollectionTupleSource(valueSet.iterator());
return new TupleBrowser(this.table.getTree(), cts, direction);
}
if (lower != null || upper != null) {
@@ -339,4 +322,13 @@
return new TupleBrowser(this.table.getTree(), lower, upper, direction);
}
+ public void sortValueSet(boolean direction) {
+ int size = valueSet.get(0).size();
+ int[] sortOn = new int[size];
+ for (int i = 0; i <sortOn.length; i++) {
+ sortOn[i] = i;
+ }
+ Collections.sort(valueSet, new ListNestedSortComparator(sortOn, direction));
+ }
+
}
\ No newline at end of file
Modified: branches/7.7.x/engine/src/test/java/org/teiid/query/processor/TestTempTables.java
===================================================================
--- branches/7.7.x/engine/src/test/java/org/teiid/query/processor/TestTempTables.java 2012-09-11 01:48:43 UTC (rev 4426)
+++ branches/7.7.x/engine/src/test/java/org/teiid/query/processor/TestTempTables.java 2012-09-11 01:57:32 UTC (rev 4427)
@@ -318,6 +318,9 @@
execute("insert into x (e2, e1) values (3, 'one')", new List[] {Arrays.asList(1)}); //$NON-NLS-1$
execute("insert into x (e2, e1) values (2, 'one')", new List[] {Arrays.asList(1)}); //$NON-NLS-1$
execute("select * from x as y order by e2 desc", new List[] {Arrays.asList("one", 3), Arrays.asList("one", 2)}); //$NON-NLS-1$
+ execute("select * from x as y where e2 in (2, 3) order by e2 desc", new List[] {Arrays.asList("one", 3), Arrays.asList("one", 2)}); //$NON-NLS-1$
+ execute("select * from x as y where e2 in (3, 2) order by e2", new List[] {Arrays.asList("one", 2), Arrays.asList("one", 3)}); //$NON-NLS-1$
+ execute("select * from x as y where e2 in (3, 2) order by e2 desc", new List[] {Arrays.asList("one", 3), Arrays.asList("one", 2)}); //$NON-NLS-1$
}
@Test public void testOrderByWithoutIndex() throws Exception {
More information about the teiid-commits
mailing list