[teiid-commits] teiid SVN: r4633 - in branches/7.7.x: test-integration/perf/src/test/java/org/teiid/query/eval and 1 other directory.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Tue Apr 22 10:11:48 EDT 2014


Author: jolee
Date: 2014-04-22 10:11:47 -0400 (Tue, 22 Apr 2014)
New Revision: 4633

Modified:
   branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/JoinNode.java
   branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/MergeJoinStrategy.java
   branches/7.7.x/test-integration/perf/src/test/java/org/teiid/query/eval/TestEnginePerformance.java
Log:
TEIID-2931: Perform equi-join full outer joins in a streaming manner

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/JoinNode.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/JoinNode.java	2014-04-21 20:33:53 UTC (rev 4632)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/JoinNode.java	2014-04-22 14:11:47 UTC (rev 4633)
@@ -179,7 +179,7 @@
                                           TeiidProcessingException {
     	try {
 	    	if (state == State.LOAD_LEFT) {
-	        	if (this.joinType != JoinType.JOIN_FULL_OUTER) {
+	        	if (this.joinType != JoinType.JOIN_FULL_OUTER || this.getJoinCriteria() == null) {
 	            	this.joinStrategy.leftSource.setImplicitBuffer(ImplicitBuffer.NONE);
 	            }
 	        	//left child was already opened by the join node

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/MergeJoinStrategy.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/MergeJoinStrategy.java	2014-04-21 20:33:53 UTC (rev 4632)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/processor/relational/MergeJoinStrategy.java	2014-04-22 14:11:47 UTC (rev 4633)
@@ -212,7 +212,7 @@
                         outerMatched = false;
                         innerState.reset();
                         loopState = LoopState.LOAD_INNER;
-                    } else if (matchState == MatchState.MATCH_LEFT && joinNode.getJoinType() == JoinType.JOIN_FULL_OUTER) {
+                    } else if (matchState == MatchState.MATCH_LEFT && joinNode.getJoinType() == JoinType.JOIN_FULL_OUTER && this.joinNode.getJoinCriteria() != null) {
                         // on a full outer join, we need to determine the outer right values as well
                         matchState = MatchState.MATCH_RIGHT;
                         outerState = this.rightSource;
@@ -342,7 +342,7 @@
     @Override
     protected void loadRight() throws TeiidComponentException,
     		TeiidProcessingException {
-    	if (this.joinNode.getJoinType() != JoinType.JOIN_FULL_OUTER) {
+    	if (this.joinNode.getJoinType() != JoinType.JOIN_FULL_OUTER || this.joinNode.getJoinCriteria() == null) {
 			this.rightSource.setImplicitBuffer(ImplicitBuffer.ON_MARK);
 		}
     	this.rightSource.sort(this.processingSortRight);

Modified: branches/7.7.x/test-integration/perf/src/test/java/org/teiid/query/eval/TestEnginePerformance.java
===================================================================
--- branches/7.7.x/test-integration/perf/src/test/java/org/teiid/query/eval/TestEnginePerformance.java	2014-04-21 20:33:53 UTC (rev 4632)
+++ branches/7.7.x/test-integration/perf/src/test/java/org/teiid/query/eval/TestEnginePerformance.java	2014-04-22 14:11:47 UTC (rev 4633)
@@ -350,6 +350,10 @@
 		helpTestEquiJoin(bm, 100, 100, 10000, 1, new MergeJoinStrategy(SortOption.SORT, SortOption.SORT, false), JoinType.JOIN_INNER, 100);
 	}
 	
+	@Test public void runOuterMergeJoin_1_1000_1000() throws Exception {
+		helpTestEquiJoin(bm, 1000, 1000, 10000, 1, new MergeJoinStrategy(SortOption.SORT, SortOption.SORT, false), JoinType.JOIN_FULL_OUTER, 1000);
+	}
+	
 	@Test public void runInnerMergeJoin_4_4000_4000() throws Exception {
 		helpTestEquiJoin(bm, 4000, 4000, 500, 4, new MergeJoinStrategy(SortOption.SORT, SortOption.SORT, false), JoinType.JOIN_INNER, 4000);
 	}



More information about the teiid-commits mailing list