Author: shawkins
Date: 2009-07-14 11:17:47 -0400 (Tue, 14 Jul 2009)
New Revision: 1125
Modified:
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCollapseSource.java
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePlaceAccess.java
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAccessPatterns.java
Log:
TEIID-717 fix for virtual access pattern validation with update commands.
Modified:
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCollapseSource.java
===================================================================
---
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCollapseSource.java 2009-07-14
13:58:11 UTC (rev 1124)
+++
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RuleCollapseSource.java 2009-07-14
15:17:47 UTC (rev 1125)
@@ -81,13 +81,12 @@
// Get nested non-relational plan if there is one
ProcessorPlan nonRelationalPlan = FrameUtil.getNestedPlan(accessNode);
+ Command command = FrameUtil.getNonQueryCommand(accessNode);
+
if(nonRelationalPlan != null) {
accessNode.setProperty(NodeConstants.Info.PROCESSOR_PLAN,
nonRelationalPlan);
-
} else {
// Create command from access on down and save in access node
- Command command = FrameUtil.getNonQueryCommand(accessNode);
-
if(command == null) {
PlanNode commandRoot = accessNode;
GroupSymbol intoGroup =
(GroupSymbol)accessNode.getFirstChild().getProperty(NodeConstants.Info.INTO_GROUP);
@@ -103,9 +102,8 @@
command = insertCommand;
}
}
- accessNode.setProperty(NodeConstants.Info.ATOMIC_REQUEST, command);
}
-
+ accessNode.setProperty(NodeConstants.Info.ATOMIC_REQUEST, command);
accessNode.removeAllChildren();
}
Modified:
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePlaceAccess.java
===================================================================
---
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePlaceAccess.java 2009-07-14
13:58:11 UTC (rev 1124)
+++
trunk/engine/src/main/java/com/metamatrix/query/optimizer/relational/rules/RulePlaceAccess.java 2009-07-14
15:17:47 UTC (rev 1125)
@@ -25,8 +25,6 @@
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
-import java.util.Iterator;
-import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -46,7 +44,6 @@
import com.metamatrix.query.optimizer.relational.plantree.NodeFactory;
import com.metamatrix.query.optimizer.relational.plantree.PlanNode;
import com.metamatrix.query.resolver.util.ResolverUtil;
-import com.metamatrix.query.sql.lang.Command;
import com.metamatrix.query.sql.lang.Insert;
import com.metamatrix.query.sql.symbol.ElementSymbol;
import com.metamatrix.query.sql.symbol.Expression;
Modified:
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAccessPatterns.java
===================================================================
---
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAccessPatterns.java 2009-07-14
13:58:11 UTC (rev 1124)
+++
trunk/engine/src/test/java/com/metamatrix/query/optimizer/TestAccessPatterns.java 2009-07-14
15:17:47 UTC (rev 1125)
@@ -41,10 +41,20 @@
TestOptimizer.helpPlan(sql, TestValidator.exampleMetadata4(), new String[]
{"SELECT test.\"group\".e0, test.\"group\".e2 FROM
test.\"group\" WHERE (test.\"group\".e0 = 1) AND
(test.\"group\".e1 = '2')"}); //$NON-NLS-1$
}
+ public void testVirtualAccessPatternPassing1() {
+ String sql = "delete from vm1.g37 where e1 = 1"; //$NON-NLS-1$
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(), new String[]
{});
+ }
+
public void testVirtualAccessPatternFailing() {
String sql = "SELECT e0, e2 FROM vTest.vGroup2 where e0=1";
//$NON-NLS-1$
TestOptimizer.helpPlan(sql, TestValidator.exampleMetadata4(), null, null, null,
TestOptimizer.SHOULD_FAIL);
}
+
+ public void testVirtualAccessPatternFailing1() {
+ String sql = "delete from vm1.g37"; //$NON-NLS-1$
+ TestOptimizer.helpPlan(sql, FakeMetadataFactory.example1Cached(), null, null,
null, TestOptimizer.SHOULD_FAIL);
+ }
public void testAccessPattern1() throws Exception {
String sql = "SELECT e0, e2 FROM vTest.vGroup where e0=1 and
e1='2'"; //$NON-NLS-1$
Show replies by date