[teiid-commits] teiid SVN: r4330 - in branches/7.4.x/engine/src: test/java/org/teiid/query/processor/relational and 1 other directory.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Thu Aug 16 11:15:12 EDT 2012
Author: jolee
Date: 2012-08-16 11:15:12 -0400 (Thu, 16 Aug 2012)
New Revision: 4330
Modified:
branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/EnhancedSortMergeJoinStrategy.java
branches/7.4.x/engine/src/test/java/org/teiid/query/processor/relational/TestJoinNode.java
Log:
TEIID-1956 an additional fix for having the same element repeated in equi-join criteria
Modified: branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/EnhancedSortMergeJoinStrategy.java
===================================================================
--- branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/EnhancedSortMergeJoinStrategy.java 2012-08-16 14:53:55 UTC (rev 4329)
+++ branches/7.4.x/engine/src/main/java/org/teiid/query/processor/relational/EnhancedSortMergeJoinStrategy.java 2012-08-16 15:15:12 UTC (rev 4330)
@@ -165,7 +165,7 @@
}
its.closeSource();
this.reverseIndexes = new int[elements.size()];
- for (int i = 0; i < reverseIndexes.length; i++) {
+ for (int i = 0; i < reorderedSortIndex.length; i++) {
int oldIndex = reorderedSortIndex[i];
this.reverseIndexes[oldIndex] = i + (!state.isDistinct()&&i>=keyLength-1?1:0);
}
Modified: branches/7.4.x/engine/src/test/java/org/teiid/query/processor/relational/TestJoinNode.java
===================================================================
--- branches/7.4.x/engine/src/test/java/org/teiid/query/processor/relational/TestJoinNode.java 2012-08-16 14:53:55 UTC (rev 4329)
+++ branches/7.4.x/engine/src/test/java/org/teiid/query/processor/relational/TestJoinNode.java 2012-08-16 15:15:12 UTC (rev 4330)
@@ -598,6 +598,64 @@
helpTestJoin();
}
+ @Test public void testMergeJoinOptimizationRepeatedElements() throws Exception {
+ this.joinType = JoinType.JOIN_INNER;
+ this.leftTuples = createMultiColTuples(9, 2);
+ this.rightTuples = new List[100];
+ for (int i = 0; i < rightTuples.length; i++) {
+ rightTuples[i] = new ArrayList(this.leftTuples[i%this.leftTuples.length]);
+ if (i == 0) {
+ rightTuples[i].add(1, rightTuples[i].get(0));
+ } else {
+ rightTuples[i].add(1, (Integer)rightTuples[i].get(0) + 1);
+ }
+ }
+
+ expected = new List[] {
+ Arrays.asList(new Object[] { 0, 17, 0, 0, 17 }),
+ };
+ ElementSymbol es1 = new ElementSymbol("e1"); //$NON-NLS-1$
+ es1.setType(DataTypeManager.DefaultDataClasses.INTEGER);
+ ElementSymbol es2 = new ElementSymbol("e2"); //$NON-NLS-1$
+ es2.setType(DataTypeManager.DefaultDataClasses.INTEGER);
+ ElementSymbol es3 = new ElementSymbol("e3"); //$NON-NLS-1$
+ es1.setType(DataTypeManager.DefaultDataClasses.INTEGER);
+ ElementSymbol es4 = new ElementSymbol("e4"); //$NON-NLS-1$
+ es2.setType(DataTypeManager.DefaultDataClasses.INTEGER);
+ ElementSymbol es5 = new ElementSymbol("e5"); //$NON-NLS-1$
+ es2.setType(DataTypeManager.DefaultDataClasses.INTEGER);
+
+ leftNode = new FakeRelationalNode(1, leftTuples);
+ leftNode.setElements(Arrays.asList(es1, es2));
+
+ rightNode = new FakeRelationalNode(2, rightTuples);
+ rightNode.setElements(Arrays.asList(es3, es4, es5));
+
+ List joinElements = new ArrayList();
+ joinElements.addAll(leftNode.getElements());
+ joinElements.addAll(rightNode.getElements());
+
+ join = new JoinNode(3);
+ join.setElements(joinElements);
+ join.setJoinType(joinType);
+ join.setJoinExpressions(Arrays.asList(es1, es1, es2), Arrays.asList(es3, es4, es5));
+ join.setJoinStrategy(joinStrategy);
+ this.joinStrategy = new EnhancedSortMergeJoinStrategy(SortOption.SORT, SortOption.SORT);
+ this.join.setJoinStrategy(joinStrategy);
+ helpTestJoinDirect(expected, 10, 1);
+ }
+
+ private List[] createMultiColTuples(int rows, int cols) {
+ List[] data = new List[rows];
+ for(int i=0; i<rows; i++) {
+ data[i] = new ArrayList();
+ for (int j = 0; j < cols; j++) {
+ data[i].add(((i+j)*17) % 47);
+ }
+ }
+ return data;
+ }
+
@Test public void testMergeJoinOptimization() throws Exception {
helpTestEnhancedSortMergeJoin(99);
}
More information about the teiid-commits
mailing list