[teiid-commits] teiid SVN: r2844 - in branches/7.1.x/engine/src/main/java/org/teiid/query: optimizer/relational/rules and 2 other directories.
teiid-commits at lists.jboss.org
teiid-commits at lists.jboss.org
Mon Jan 17 14:00:01 EST 2011
Author: shawkins
Date: 2011-01-17 14:00:01 -0500 (Mon, 17 Jan 2011)
New Revision: 2844
Modified:
branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
branches/7.1.x/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/DeepPostOrderNavigator.java
branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/DeepPreOrderNavigator.java
branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java
Log:
TEIID-1438 correcting the validation that is performed on non-query commands to detect pushdown errors.
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-01-17 17:45:40 UTC (rev 2843)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/RelationalPlanner.java 2011-01-17 19:00:01 UTC (rev 2844)
@@ -92,11 +92,13 @@
import org.teiid.query.sql.lang.SubqueryContainer;
import org.teiid.query.sql.lang.SubqueryFromClause;
import org.teiid.query.sql.lang.TableFunctionReference;
+import org.teiid.query.sql.lang.TranslatableProcedureContainer;
import org.teiid.query.sql.lang.UnaryFromClause;
import org.teiid.query.sql.proc.CreateUpdateProcedureCommand;
import org.teiid.query.sql.symbol.AllSymbol;
import org.teiid.query.sql.symbol.GroupSymbol;
import org.teiid.query.sql.symbol.Reference;
+import org.teiid.query.sql.symbol.ScalarSubquery;
import org.teiid.query.sql.symbol.SelectSymbol;
import org.teiid.query.sql.symbol.SingleElementSymbol;
import org.teiid.query.sql.util.SymbolMap;
@@ -499,7 +501,19 @@
}
//plan any subqueries in criteria/parameters/values
for (SubqueryContainer subqueryContainer : ValueIteratorProviderCollectorVisitor.getValueIteratorProviders(container)) {
- ProcessorPlan plan = QueryOptimizer.optimizePlan(subqueryContainer.getCommand(), metadata, null, capFinder, analysisRecord, context);
+ if (c == null && container.getGroup().isTempTable()) {
+ if (subqueryContainer.getCommand().getCorrelatedReferences() == null) {
+ if (subqueryContainer instanceof ScalarSubquery) {
+ ((ScalarSubquery) subqueryContainer).setShouldEvaluate(true);
+ } else {
+ throw new QueryPlannerException(QueryPlugin.Util.getString("RelationalPlanner.nonpushdown_command", container)); //$NON-NLS-1$
+ }
+ } else {
+ throw new QueryPlannerException(QueryPlugin.Util.getString("RelationalPlanner.nonpushdown_command", container)); //$NON-NLS-1$
+ }
+ }
+
+ ProcessorPlan plan = QueryOptimizer.optimizePlan(subqueryContainer.getCommand(), metadata, null, capFinder, analysisRecord, context);
subqueryContainer.getCommand().setProcessorPlan(plan);
if (c == null) {
@@ -507,7 +521,7 @@
}
}
- if (c == null && !(container instanceof Insert) && !container.getGroup().isTempGroupSymbol() &&
+ if (c == null && container instanceof TranslatableProcedureContainer && !container.getGroup().isTempTable() &&
!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: branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java 2011-01-17 17:45:40 UTC (rev 2843)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java 2011-01-17 19:00:01 UTC (rev 2844)
@@ -56,7 +56,7 @@
import org.teiid.query.sql.lang.SubqueryCompareCriteria;
import org.teiid.query.sql.lang.SubqueryContainer;
import org.teiid.query.sql.lang.SubquerySetCriteria;
-import org.teiid.query.sql.navigator.PreOrderNavigator;
+import org.teiid.query.sql.navigator.PostOrderNavigator;
import org.teiid.query.sql.symbol.AggregateSymbol;
import org.teiid.query.sql.symbol.CaseExpression;
import org.teiid.query.sql.symbol.Function;
@@ -550,7 +550,7 @@
}
CriteriaCapabilityValidatorVisitor visitor = new CriteriaCapabilityValidatorVisitor(modelID, metadata, capFinder, caps);
- PreOrderNavigator.doVisit(obj, visitor);
+ PostOrderNavigator.doVisit(obj, visitor);
if(visitor.getException() != null) {
throw visitor.getException();
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2011-01-17 17:45:40 UTC (rev 2843)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/resolver/ProcedureContainerResolver.java 2011-01-17 19:00:01 UTC (rev 2844)
@@ -229,6 +229,9 @@
externalGroups.addGroup(variables);
TempMetadataID tid = metadata.addTempGroup(name, symbols);
tid.setScalarGroup();
+ for (TempMetadataID cid : tid.getElements()) {
+ cid.setScalarGroup();
+ }
variables.setMetadataID(tid);
return variables;
}
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/DeepPostOrderNavigator.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/DeepPostOrderNavigator.java 2011-01-17 17:45:40 UTC (rev 2843)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/DeepPostOrderNavigator.java 2011-01-17 19:00:01 UTC (rev 2844)
@@ -25,6 +25,7 @@
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.lang.ExistsCriteria;
+import org.teiid.query.sql.lang.Insert;
import org.teiid.query.sql.lang.SubqueryCompareCriteria;
import org.teiid.query.sql.lang.SubqueryFromClause;
import org.teiid.query.sql.lang.SubquerySetCriteria;
@@ -63,6 +64,16 @@
visitNode(obj.getExpression());
visitVisitor(obj);
}
+ public void visit(Insert obj) {
+ visitNode(obj.getGroup());
+ visitNodes(obj.getVariables());
+ visitNodes(obj.getValues());
+ if(obj.getQueryExpression()!=null) {
+ visitNode(obj.getQueryExpression());
+ }
+ visitNode(obj.getOption());
+ visitVisitor(obj);
+ }
public static void doVisit(LanguageObject object, LanguageVisitor visitor) {
DeepPostOrderNavigator nav = new DeepPostOrderNavigator(visitor);
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/DeepPreOrderNavigator.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/DeepPreOrderNavigator.java 2011-01-17 17:45:40 UTC (rev 2843)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/DeepPreOrderNavigator.java 2011-01-17 19:00:01 UTC (rev 2844)
@@ -25,6 +25,7 @@
import org.teiid.query.sql.LanguageObject;
import org.teiid.query.sql.LanguageVisitor;
import org.teiid.query.sql.lang.ExistsCriteria;
+import org.teiid.query.sql.lang.Insert;
import org.teiid.query.sql.lang.SubqueryCompareCriteria;
import org.teiid.query.sql.lang.SubqueryFromClause;
import org.teiid.query.sql.lang.SubquerySetCriteria;
@@ -75,7 +76,6 @@
public void visit(CommandStatement obj) {
visitVisitor(obj);
visitNode(obj.getCommand());
- visitVisitor(obj);
}
@Override
@@ -83,7 +83,17 @@
visitVisitor(obj);
visitNode(obj.getCommand());
visitNode(obj.getBlock());
+ }
+
+ public void visit(Insert obj) {
visitVisitor(obj);
+ visitNode(obj.getGroup());
+ visitNodes(obj.getVariables());
+ visitNodes(obj.getValues());
+ if(obj.getQueryExpression()!=null) {
+ visitNode(obj.getQueryExpression());
+ }
+ visitNode(obj.getOption());
}
public static void doVisit(LanguageObject object, LanguageVisitor visitor) {
Modified: branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java
===================================================================
--- branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java 2011-01-17 17:45:40 UTC (rev 2843)
+++ branches/7.1.x/engine/src/main/java/org/teiid/query/sql/navigator/PreOrPostOrderNavigator.java 2011-01-17 19:00:01 UTC (rev 2844)
@@ -295,9 +295,6 @@
visitNode(obj.getGroup());
visitNodes(obj.getVariables());
visitNodes(obj.getValues());
- if(obj.getQueryExpression()!=null) {
- visitNode(obj.getQueryExpression());
- }
visitNode(obj.getOption());
postVisitVisitor(obj);
}
More information about the teiid-commits
mailing list