[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