[teiid-commits] teiid SVN: r4016 - in branches/7.7.x/engine/src: test/java/org/teiid/query/optimizer and 1 other directory.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Wed Apr 18 11:13:14 EDT 2012


Author: shawkins
Date: 2012-04-18 11:13:12 -0400 (Wed, 18 Apr 2012)
New Revision: 4016

Modified:
   branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java
   branches/7.7.x/engine/src/test/java/org/teiid/query/optimizer/TestSortOptimization.java
Log:
TEIID-2003 fix for sort optimization error

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java	2012-04-18 15:12:02 UTC (rev 4015)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java	2012-04-18 15:13:12 UTC (rev 4016)
@@ -81,6 +81,7 @@
 		switch (node.getType()) {
 		case NodeConstants.Types.SORT:
 			parentBlocking = true;
+			boolean raisedAccess = false;
 			if (node.hasBooleanProperty(NodeConstants.Info.IS_DUP_REMOVAL)) {
 				break;
 			}
@@ -88,6 +89,7 @@
 				node.setProperty(NodeConstants.Info.IS_DUP_REMOVAL, true);
 			} else {
 				root = checkForProjectOptimization(node, root, metadata, capFinder, record);
+				raisedAccess = NodeEditor.findParent(node, NodeConstants.Types.ACCESS) != null;
 			}
 			OrderBy orderBy = (OrderBy)node.getProperty(NodeConstants.Info.SORT_ORDER);
 			List<SingleElementSymbol> orderColumns = orderBy.getSortKeys();
@@ -121,8 +123,10 @@
 					}
 					possibleSort.setProperty(Info.SORT_ORDER, orderBy);
 				}
-				break;
 			} 
+			if (raisedAccess) {
+				return root;
+			}
 			break;
 		case NodeConstants.Types.DUP_REMOVE:
 			if (parentBlocking) {

Modified: branches/7.7.x/engine/src/test/java/org/teiid/query/optimizer/TestSortOptimization.java
===================================================================
--- branches/7.7.x/engine/src/test/java/org/teiid/query/optimizer/TestSortOptimization.java	2012-04-18 15:12:02 UTC (rev 4015)
+++ branches/7.7.x/engine/src/test/java/org/teiid/query/optimizer/TestSortOptimization.java	2012-04-18 15:13:12 UTC (rev 4016)
@@ -286,6 +286,40 @@
         helpPlan(sql, RealMetadataFactory.example1Cached(), null, capFinder, 
                                       new String[] {"SELECT g_0.e1 AS c_0, g_0.e2 AS c_1 FROM pm1.g1 AS g_0 ORDER BY c_0 LIMIT 1"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
     }
+    
+    //TODO this should trigger another view removal and thus the combination of the grouping/dup operation
+    @Test public void testGroupDupCombination1Pushdown() { 
+        FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+        BasicSourceCapabilities caps = getTypicalCapabilities();
+        caps.setCapabilitySupport(Capability.QUERY_SELECT_DISTINCT, true);
+        caps.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
+        caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
+        capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+        capFinder.addCapabilities("pm2", caps); //$NON-NLS-1$
 
+        // Create query 
+        String sql = "select e1, (select e1 from pm2.g1 where e2 = x.e2) as z from (select distinct e1, e2 from pm1.g1) as x group by e1, e2 order by e1"; //$NON-NLS-1$
 
+        ProcessorPlan plan = helpPlan(sql, RealMetadataFactory.example1Cached(), null, capFinder, 
+                                      new String[] {"SELECT v_0.c_0, v_0.c_1 FROM (SELECT DISTINCT g_0.e1 AS c_0, g_0.e2 AS c_1 FROM pm1.g1 AS g_0) AS v_0 GROUP BY v_0.c_0, v_0.c_1"}, TestOptimizer.SHOULD_SUCCEED); //$NON-NLS-1$ 
+        
+        checkNodeTypes(plan, new int[] {
+                1,      // Access
+                0,      // DependentAccess
+                0,      // DependentSelect
+                1,      // DependentProject
+                0,      // DupRemove
+                0,      // Grouping
+                0,      // NestedLoopJoinStrategy
+                0,      // MergeJoinStrategy
+                0,      // Null
+                0,      // PlanExecution
+                0,      // Project
+                0,      // Select
+                0,      // Sort
+                0       // UnionAll
+            });
+        checkNodeTypes(plan, new int[] {0}, new Class[] {DupRemoveSortNode.class});
+    }
+
 }



More information about the teiid-commits mailing list