[teiid-commits] teiid SVN: r3321 - in branches/7.4.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
Thu Jul 21 12:29:16 EDT 2011


Author: shawkins
Date: 2011-07-21 12:29:16 -0400 (Thu, 21 Jul 2011)
New Revision: 3321

Modified:
   branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java
   branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestVirtualDepJoin.java
Log:
TEIID-1678 fix for ordering position

Modified: branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java
===================================================================
--- branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java	2011-07-21 14:16:11 UTC (rev 3320)
+++ branches/7.4.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java	2011-07-21 16:29:16 UTC (rev 3321)
@@ -172,8 +172,6 @@
             	joinNode.setProperty(NodeConstants.Info.RIGHT_EXPRESSIONS, rightExpressions);
             }
 
-            Set<SingleElementSymbol> outputSymbols = new LinkedHashSet<SingleElementSymbol>((List<SingleElementSymbol>)joinNode.getProperty(NodeConstants.Info.OUTPUT_COLS));
-
 			boolean pushedLeft = insertSort(joinNode.getFirstChild(), leftExpressions, joinNode, metadata, capabilitiesFinder, pushLeft);	
 			
 	        if (origExpressionCount == 1 
@@ -212,6 +210,10 @@
         Set<SingleElementSymbol> orderSymbols = new LinkedHashSet<SingleElementSymbol>(expressions); 
 
         PlanNode sourceNode = FrameUtil.findJoinSourceNode(childNode);
+        PlanNode parentGrouping = NodeEditor.findParent(sourceNode, NodeConstants.Types.GROUP, NodeConstants.Types.JOIN);
+        if (parentGrouping != null) {
+        	sourceNode = parentGrouping;
+        }
         PlanNode joinNode = childNode.getParent();
 
         Set<SingleElementSymbol> outputSymbols = new LinkedHashSet<SingleElementSymbol>((List<SingleElementSymbol>)childNode.getProperty(NodeConstants.Info.OUTPUT_COLS));
@@ -236,6 +238,8 @@
 	        }
         }
         
+        boolean sort = true;
+        
         if (sourceNode.getType() == NodeConstants.Types.ACCESS) {
         	if (distinct || NewCalculateCostUtil.usesKey(sourceNode, expressions, metadata)) {
                 joinNode.setProperty(joinNode.getFirstChild() == childNode ? NodeConstants.Info.IS_LEFT_DISTINCT : NodeConstants.Info.IS_RIGHT_DISTINCT, true);
@@ -248,13 +252,18 @@
 	            }
 	            return true;
 	        }
+        } else if (sourceNode.getType() == NodeConstants.Types.GROUP) {
+        	sourceNode.addAsParent(sortNode);
+        	sort = false;  // the grouping columns must contain all of the ordering columns
         }
         
         if (distinct) {
             joinNode.setProperty(joinNode.getFirstChild() == childNode ? NodeConstants.Info.IS_LEFT_DISTINCT : NodeConstants.Info.IS_RIGHT_DISTINCT, true);
     	}
         
-        joinNode.setProperty(joinNode.getFirstChild() == childNode ? NodeConstants.Info.SORT_LEFT : NodeConstants.Info.SORT_RIGHT, SortOption.SORT);
+        if (sort) {
+        	joinNode.setProperty(joinNode.getFirstChild() == childNode ? NodeConstants.Info.SORT_LEFT : NodeConstants.Info.SORT_RIGHT, SortOption.SORT);
+        }        
         
         if (needsCorrection) {
             PlanNode projectNode = NodeFactory.getNewNode(NodeConstants.Types.PROJECT);

Modified: branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestVirtualDepJoin.java
===================================================================
--- branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestVirtualDepJoin.java	2011-07-21 14:16:11 UTC (rev 3320)
+++ branches/7.4.x/engine/src/test/java/org/teiid/query/processor/TestVirtualDepJoin.java	2011-07-21 16:29:16 UTC (rev 3321)
@@ -364,7 +364,7 @@
         List<String> expectedQueries = new ArrayList<String>(6);
         for (int i = 0; i < 3; i++) {
         	expectedQueries.add("SELECT g_0.id AS c_0, g_0.first AS c_1, g_0.last AS c_2 FROM CustomerMaster.Customers AS g_0 WHERE g_0.first = 'Miles' ORDER BY c_0"); //$NON-NLS-1$
-        	expectedQueries.add("SELECT g_0.id AS c_0, g_0.amount AS c_1 FROM Europe.CustAccts AS g_0 WHERE g_0.id = 100 ORDER BY c_0"); //$NON-NLS-1$
+        	expectedQueries.add("SELECT g_0.id, g_0.amount FROM Europe.CustAccts AS g_0 WHERE g_0.id = 100"); //$NON-NLS-1$
         }
         
         assertEquals(expectedQueries, dataManager.getQueries());



More information about the teiid-commits mailing list