[teiid-commits] teiid SVN: r3322 - trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Thu Jul 21 12:29:29 EDT 2011
Author: shawkins
Date: 2011-07-21 12:29:29 -0400 (Thu, 21 Jul 2011)
New Revision: 3322
Modified:
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java
Log:
TEIID-1678 fix for ordering position
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java 2011-07-21 16:29:16 UTC (rev 3321)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleImplementJoinStrategy.java 2011-07-21 16:29:29 UTC (rev 3322)
@@ -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
@@ -236,6 +234,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 +248,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);
More information about the teiid-commits
mailing list