[teiid-commits] teiid SVN: r3328 - in trunk/engine/src: test/java/org/teiid/query/optimizer and 1 other directory.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Fri Jul 22 14:50:02 EDT 2011
Author: shawkins
Date: 2011-07-22 14:50:01 -0400 (Fri, 22 Jul 2011)
New Revision: 3328
Modified:
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleAssignOutputElements.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
Log:
TEIID-1665 optimizing grouping of all constants
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleAssignOutputElements.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleAssignOutputElements.java 2011-07-22 16:26:08 UTC (rev 3327)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleAssignOutputElements.java 2011-07-22 18:50:01 UTC (rev 3328)
@@ -165,14 +165,6 @@
assignOutputElements(root.getLastChild(), outputElements, metadata, capFinder, rules, analysisRecord, context);
break;
case NodeConstants.Types.SOURCE: {
- if (outputElements.isEmpty()) {
- //we cannot completely filter an implicit grouping (this is a corner case)
- PlanNode grouping = NodeEditor.findNodePreOrder(root.getFirstChild(), NodeConstants.Types.GROUP, NodeConstants.Types.SOURCE | NodeConstants.Types.JOIN);
- if (grouping != null && !grouping.hasCollectionProperty(NodeConstants.Info.GROUP_COLS)) {
- SymbolMap symbolMap = (SymbolMap) root.getProperty(NodeConstants.Info.SYMBOL_MAP);
- outputElements.add(symbolMap.getKeys().get(0).clone());
- }
- }
outputElements = (List<SingleElementSymbol>)determineSourceOutput(root, outputElements, metadata, capFinder);
root.setProperty(NodeConstants.Info.OUTPUT_COLS, outputElements);
List<SingleElementSymbol> childElements = filterVirtualElements(root, outputElements, metadata);
@@ -227,24 +219,27 @@
PlanNode next = root.getFirstChild();
NodeEditor.removeChildNode(root.getParent(), root);
- if (old.hasCollectionProperty(Info.GROUP_COLS)) {
- SymbolMap symbolMap = (SymbolMap) old.getProperty(NodeConstants.Info.SYMBOL_MAP);
- FrameUtil.convertFrame(next.getParent(), symbolMap.asMap().keySet().iterator().next().getGroupSymbol(), null, symbolMap.asMap(), metadata);
- PlanNode limit = NodeFactory.getNewNode(NodeConstants.Types.TUPLE_LIMIT);
- limit.setProperty(Info.MAX_TUPLE_LIMIT, new Constant(1));
- PlanNode parent = next.getParent();
- while (parent.getParent() != null && parent.getParent().getType() != NodeConstants.Types.SOURCE) {
- parent = parent.getParent();
- }
+ SymbolMap symbolMap = (SymbolMap) old.getProperty(NodeConstants.Info.SYMBOL_MAP);
+ FrameUtil.convertFrame(next.getParent(), symbolMap.asMap().keySet().iterator().next().getGroupSymbol(), null, symbolMap.asMap(), metadata);
+ PlanNode parent = next.getParent();
+ while (parent.getParent() != null && parent.getParent().getType() != NodeConstants.Types.SOURCE) {
+ parent = parent.getParent();
+ }
+ if (!old.hasCollectionProperty(Info.GROUP_COLS)) {
+ //just lob off everything under the projection
+ PlanNode project = NodeEditor.findNodePreOrder(parent, NodeConstants.Types.PROJECT);
+ project.removeAllChildren();
+ } else {
+ PlanNode limit = NodeFactory.getNewNode(NodeConstants.Types.TUPLE_LIMIT);
+ limit.setProperty(Info.MAX_TUPLE_LIMIT, new Constant(1));
if (!rules.contains(RuleConstants.PUSH_LIMIT)) {
rules.push(RuleConstants.PUSH_LIMIT);
}
- parent.getFirstChild().addAsParent(limit);
- execute(parent, metadata, capFinder, rules, analysisRecord, context);
- return;
- }
- root = next;
- }
+ parent.getFirstChild().addAsParent(limit);
+ }
+ execute(parent, metadata, capFinder, rules, analysisRecord, context);
+ return;
+ }
// Call children recursively
if(root.getChildCount() == 1) {
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2011-07-22 16:26:08 UTC (rev 3327)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2011-07-22 18:50:01 UTC (rev 3328)
@@ -984,7 +984,7 @@
@Test public void testDefect5282_2() {
helpPlan("select count(*) FROM vm1.a4", example1(), //$NON-NLS-1$
- new String[] { "SELECT 1 FROM pm1.g1" } ); //$NON-NLS-1$
+ new String[] { } ); //$NON-NLS-1$
}
@Test public void testDefect5282_3() {
@@ -6604,10 +6604,9 @@
bac.setCapabilitySupport(Capability.QUERY_FROM_INLINE_VIEWS, true);
bac.setCapabilitySupport(Capability.QUERY_AGGREGATES_COUNT_STAR, true);
bac.setCapabilitySupport(Capability.QUERY_GROUP_BY, true);
- helpPlan("select count(*) from agg3", metadata, new String[] {"SELECT COUNT(*) FROM (SELECT COUNT(*) AS c_0 FROM BQT1.SmallA AS g_0) AS v_0"}, new DefaultCapabilitiesFinder(bac), ComparisonMode.EXACT_COMMAND_STRING);
+ helpPlan("select count(*) from agg3", metadata, new String[] {}, new DefaultCapabilitiesFinder(bac), ComparisonMode.EXACT_COMMAND_STRING);
}
-
@Test public void testMergeGroupBy1() throws Exception {
BasicSourceCapabilities caps = new BasicSourceCapabilities();
caps.setCapabilitySupport(Capability.ROW_LIMIT, true);
More information about the teiid-commits
mailing list