Author: shawkins
Date: 2010-12-02 10:32:06 -0500 (Thu, 02 Dec 2010)
New Revision: 2751
Modified:
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
Log:
TEIID-1381 fix for incorrect validation of insert commands
Modified:
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
===================================================================
---
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2010-12-01
14:38:10 UTC (rev 2750)
+++
trunk/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2010-12-02
15:32:06 UTC (rev 2751)
@@ -588,7 +588,7 @@
}
}
- if (c == null && !container.getGroup().isTempGroupSymbol() &&
+ if (c == null && !(container instanceof Insert) &&
!container.getGroup().isTempGroupSymbol() &&
!CriteriaCapabilityValidatorVisitor.canPushLanguageObject(container,
metadata.getModelID(container.getGroup().getMetadataID()), metadata, capFinder,
analysisRecord)) {
throw new
QueryPlannerException(QueryPlugin.Util.getString("RelationalPlanner.nonpushdown_command",
container)); //$NON-NLS-1$
}
Modified: trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java
===================================================================
--- trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2010-12-01
14:38:10 UTC (rev 2750)
+++ trunk/engine/src/test/java/org/teiid/query/optimizer/TestOptimizer.java 2010-12-02
15:32:06 UTC (rev 2751)
@@ -6368,6 +6368,22 @@
}
/**
+ * Ensure that the pushdown check doesn't fail
+ * @throws Exception
+ */
+ @Test public void testInsertQueryExpression1() throws Exception {
+ String sql = "insert into pm1.g1 (e1) select e1 || 1 from pm1.g2";
//$NON-NLS-1$
+
+ FakeMetadataFacade metadata = FakeMetadataFactory.example1Cached();
+
+ ProcessorPlan plan = helpPlan(sql, metadata, new String[] {"SELECT g_0.e1
FROM pm1.g2 AS g_0"}, ComparisonMode.EXACT_COMMAND_STRING); //$NON-NLS-1$
+ //requires a txn, since an non pushdown/iterated insert is used
+ assertTrue(plan.requiresTransaction(false));
+
+ checkNodeTypes(plan, new int[] {1}, new Class[] {ProjectIntoNode.class});
+ }
+
+ /**
* previously the subqueries were being pushed too far and then not having the
appropriate correlated references
*/
@Test public void testCorrelatedSubqueryOverJoin() {
Show replies by date