[teiid-commits] teiid SVN: r4586 - 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
Thu Aug 1 09:43:04 EDT 2013


Author: jolee
Date: 2013-08-01 09:43:03 -0400 (Thu, 01 Aug 2013)
New Revision: 4586

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-2568:  Order by is omitted when projection is raised above ordering with grouping

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	2013-08-01 13:27:00 UTC (rev 4585)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java	2013-08-01 13:43:03 UTC (rev 4586)
@@ -81,7 +81,6 @@
 		switch (node.getType()) {
 		case NodeConstants.Types.SORT:
 			parentBlocking = true;
-			boolean raisedAccess = false;
 			if (node.hasBooleanProperty(NodeConstants.Info.IS_DUP_REMOVAL)) {
 				break;
 			}
@@ -89,7 +88,9 @@
 				node.setProperty(NodeConstants.Info.IS_DUP_REMOVAL, true);
 			} else {
 				root = checkForProjectOptimization(node, root, metadata, capFinder, record);
-				raisedAccess = NodeEditor.findParent(node, NodeConstants.Types.ACCESS) != null;
+				if (NodeEditor.findParent(node, NodeConstants.Types.ACCESS) != null) {
+					return root;
+				}
 			}
 			OrderBy orderBy = (OrderBy)node.getProperty(NodeConstants.Info.SORT_ORDER);
 			List<SingleElementSymbol> orderColumns = orderBy.getSortKeys();
@@ -124,9 +125,6 @@
 					possibleSort.setProperty(Info.SORT_ORDER, orderBy);
 				}
 			} 
-			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	2013-08-01 13:27:00 UTC (rev 4585)
+++ branches/7.7.x/engine/src/test/java/org/teiid/query/optimizer/TestSortOptimization.java	2013-08-01 13:43:03 UTC (rev 4586)
@@ -237,6 +237,19 @@
                                       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"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
     }
     
+    @Test public void testProjectionRaisingWithAccess1() throws Exception { 
+        // Create query 
+        String sql = "select e1, 1 as z from pm1.g1 as x group by e1 order by e1"; //$NON-NLS-1$
+        BasicSourceCapabilities caps = TestOptimizer.getTypicalCapabilities();
+        caps.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
+        caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, false);
+        RelationalPlan plan = (RelationalPlan)helpPlan(sql, RealMetadataFactory.example1Cached(), null, new DefaultCapabilitiesFinder(caps), 
+                                      new String[] {"SELECT g_0.e1 FROM pm1.g1 AS g_0 GROUP BY g_0.e1 ORDER BY g_0.e1"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+        
+        assertTrue(plan.getRootNode() instanceof ProjectNode);
+        
+    }
+    
     @Test public void testProjectionRaisingWithAccessAndLimit() throws Exception { 
         // Create query 
         String sql = "select e1, (select e1 from pm2.g1 where e2 = x.e2) as z from pm1.g1 as x order by e1 limit 1"; //$NON-NLS-1$
@@ -301,7 +314,7 @@
         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$ 
+                                      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 ORDER BY c_0"}, TestOptimizer.SHOULD_SUCCEED); //$NON-NLS-1$ 
         
         checkNodeTypes(plan, new int[] {
                 1,      // Access



More information about the teiid-commits mailing list