[teiid-commits] teiid SVN: r3109 - 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
Wed Apr 20 16:35:21 EDT 2011
Author: shawkins
Date: 2011-04-20 16:35:21 -0400 (Wed, 20 Apr 2011)
New Revision: 3109
Modified:
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java
Log:
TEIID-1562 fix for assertion errors due to view removal
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java 2011-04-20 20:03:25 UTC (rev 3108)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/FrameUtil.java 2011-04-20 20:35:21 UTC (rev 3109)
@@ -108,7 +108,11 @@
if(endNode == null) {
return;
}
- // Top of a frame - fix symbol mappings on endNode
+ correctSymbolMap(symbolMap, endNode);
+ }
+
+ static void correctSymbolMap(Map symbolMap, PlanNode endNode) {
+ // Top of a frame - fix symbol mappings on endNode
SymbolMap parentSymbolMap = (SymbolMap) endNode.getProperty(NodeConstants.Info.SYMBOL_MAP);
if(parentSymbolMap == null) {
return;
@@ -117,8 +121,7 @@
for (Map.Entry<ElementSymbol, Expression> entry : parentSymbolMap.asUpdatableMap().entrySet()) {
entry.setValue(convertExpression(entry.getValue(), symbolMap));
}
-
- }
+ }
static boolean canConvertAccessPatterns(PlanNode sourceNode) {
List accessPatterns = (List)sourceNode.getProperty(NodeConstants.Info.ACCESS_PATTERNS);
Modified: trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java
===================================================================
--- trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java 2011-04-20 20:03:25 UTC (rev 3108)
+++ trunk/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleMergeVirtual.java 2011-04-20 20:35:21 UTC (rev 3109)
@@ -291,8 +291,13 @@
sort.addGroups(GroupsUsedByElementsVisitor.getGroups(elements));
}
- prepareFrame(frame);
+ PlanNode parentSource = NodeEditor.findParent(parentProject, NodeConstants.Types.SOURCE);
+
+ if (parentSource != null) {
+ FrameUtil.correctSymbolMap(((SymbolMap)frame.getProperty(NodeConstants.Info.SYMBOL_MAP)).asMap(), parentSource);
+ }
+
//remove the parent project and the source node
NodeEditor.removeChildNode(parentProject, frame);
if (parentProject.getParent() == null) {
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java 2011-04-20 20:03:25 UTC (rev 3108)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestRuleMergeVirtual.java 2011-04-20 20:35:21 UTC (rev 3109)
@@ -37,7 +37,7 @@
import org.teiid.query.unittest.FakeMetadataFacade;
import org.teiid.query.unittest.FakeMetadataFactory;
-
+ at SuppressWarnings("nls")
public class TestRuleMergeVirtual {
@Test public void testSimpleMergeGroupBy() {
@@ -184,6 +184,20 @@
});
}
+ //see TEIID-1562
+ @Test public void testSimpleMergeUnderUnionWithJoin() {
+ FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
+ BasicSourceCapabilities caps = new BasicSourceCapabilities();
+ caps.setCapabilitySupport(Capability.QUERY_UNION, true);
+ caps.setCapabilitySupport(Capability.QUERY_SELECT_EXPRESSION, true);
+ capFinder.addCapabilities("pm1", caps); //$NON-NLS-1$
+
+ TestOptimizer.helpPlan("select * from (SELECT x.x, x.e2 FROM (select '1' as x, pm1.g1.e2 from pm1.g1, pm1.g2 where pm1.g1.e1 = pm1.g2.e1 group by pm1.g1.e2, pm1.g1.e3 || '1') x union all select e1, 1 from pm1.g2) as y where x = '1'", //$NON-NLS-1$
+ FakeMetadataFactory.example1Cached(), null, capFinder,
+ new String[] {
+ "SELECT pm1.g2.e1 FROM pm1.g2", "SELECT pm1.g1.e1, pm1.g1.e2, pm1.g1.e3 FROM pm1.g1"}, TestOptimizer.SHOULD_SUCCEED);
+ }
+
@Test public void testSimpleMergeUnion3() {
FakeCapabilitiesFinder capFinder = new FakeCapabilitiesFinder();
BasicSourceCapabilities caps = new BasicSourceCapabilities();
More information about the teiid-commits
mailing list