[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