[teiid-commits] teiid SVN: r3974 - branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules.

teiid-commits at lists.jboss.org teiid-commits at lists.jboss.org
Thu Apr 5 10:47:26 EDT 2012


Author: shawkins
Date: 2012-04-05 10:47:26 -0400 (Thu, 05 Apr 2012)
New Revision: 3974

Modified:
   branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
   branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java
   branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java
   branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
Log:
TEIID-1990 ensuring greater detail for planning decisions

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java	2012-04-04 19:54:58 UTC (rev 3973)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/CriteriaCapabilityValidatorVisitor.java	2012-04-05 14:47:26 UTC (rev 3974)
@@ -632,7 +632,11 @@
         this.valid = false;
         setAbort(true);
         if (analysisRecord != null && analysisRecord.recordDebug()) {
-        	analysisRecord.println(reason + " " + object); //$NON-NLS-1$
+        	try {
+				analysisRecord.println(reason + " " + this.metadata.getName(this.modelID) + ": " + object); //$NON-NLS-1$ //$NON-NLS-2$
+			} catch (QueryMetadataException e) {
+			} catch (TeiidComponentException e) {
+			} 
         }
     }
     
@@ -658,6 +662,7 @@
         }
         
         CriteriaCapabilityValidatorVisitor visitor = new CriteriaCapabilityValidatorVisitor(modelID, metadata, capFinder, caps);
+        visitor.analysisRecord = analysisRecord;
         PostOrderNavigator.doVisit(obj, visitor);
         
         if(visitor.getException() != null) {

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java	2012-04-04 19:54:58 UTC (rev 3973)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePlanSorts.java	2012-04-05 14:47:26 UTC (rev 3974)
@@ -292,7 +292,7 @@
 			if (newRoot != null) {
 				root = newRoot;
 				if (accessNode.getParent().getType() == NodeConstants.Types.TUPLE_LIMIT) {
-					newRoot = RulePushLimit.raiseAccessOverLimit(root, accessNode, metadata, capFinder, accessNode.getParent());
+					newRoot = RulePushLimit.raiseAccessOverLimit(root, accessNode, metadata, capFinder, accessNode.getParent(), record);
 				}
 				if (newRoot != null) {
 					root = newRoot;

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java	2012-04-04 19:54:58 UTC (rev 3973)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RulePushLimit.java	2012-04-05 14:47:26 UTC (rev 3974)
@@ -105,7 +105,7 @@
                 continue;
             }
             
-            while (canPushLimit(plan, limitNode, limitNodes, metadata, capabilitiesFinder)) {
+            while (canPushLimit(plan, limitNode, limitNodes, metadata, capabilitiesFinder, analysisRecord)) {
                 plan = RuleRaiseAccess.performRaise(plan, limitNode.getFirstChild(), limitNode);
             }
             
@@ -119,7 +119,7 @@
         return plan;
     }
     
-    boolean canPushLimit(PlanNode rootNode, PlanNode limitNode, List<PlanNode> limitNodes, QueryMetadataInterface metadata, CapabilitiesFinder capFinder) throws QueryMetadataException, TeiidComponentException {
+    boolean canPushLimit(PlanNode rootNode, PlanNode limitNode, List<PlanNode> limitNodes, QueryMetadataInterface metadata, CapabilitiesFinder capFinder, AnalysisRecord record) throws QueryMetadataException, TeiidComponentException {
         PlanNode child = limitNode.getFirstChild();
         if (child == null || child.getChildCount() == 0) {
             return false;
@@ -142,7 +142,7 @@
                 NodeEditor.removeChildNode(limitNode, child);
                 limitNodes.remove(child);
                 
-                return canPushLimit(rootNode, limitNode, limitNodes, metadata, capFinder);
+                return canPushLimit(rootNode, limitNode, limitNodes, metadata, capFinder, record);
             }
             case NodeConstants.Types.SET_OP:
             {
@@ -165,7 +165,7 @@
             }
             case NodeConstants.Types.ACCESS:
             {
-                raiseAccessOverLimit(rootNode, child, metadata, capFinder, limitNode);
+                raiseAccessOverLimit(rootNode, child, metadata, capFinder, limitNode, record);
                 return false;
             }
             case NodeConstants.Types.PROJECT:
@@ -219,7 +219,7 @@
                                           PlanNode accessNode,
                                           QueryMetadataInterface metadata,
                                           CapabilitiesFinder capFinder,
-                                          PlanNode parentNode) throws QueryMetadataException,
+                                          PlanNode parentNode, AnalysisRecord analysisRecord) throws QueryMetadataException,
                                                               TeiidComponentException {
         Object modelID = RuleRaiseAccess.getModelIDFromAccess(accessNode, metadata);
         if (modelID == null) {
@@ -229,6 +229,9 @@
         Expression limit = (Expression)parentNode.getProperty(NodeConstants.Info.MAX_TUPLE_LIMIT);
         
         if (limit != null && !CapabilitiesUtil.supportsRowLimit(modelID, metadata, capFinder)) {
+        	if (analysisRecord != null && analysisRecord.recordDebug()) {
+            	analysisRecord.println("limit not supported by source " + metadata.getName(modelID)); //$NON-NLS-1$
+            }
             return null;
         }
         

Modified: branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java
===================================================================
--- branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java	2012-04-04 19:54:58 UTC (rev 3973)
+++ branches/7.7.x/engine/src/main/java/org/teiid/query/optimizer/relational/rules/RuleRaiseAccess.java	2012-04-05 14:47:26 UTC (rev 3974)
@@ -290,7 +290,7 @@
             }
             case NodeConstants.Types.TUPLE_LIMIT:
             {
-                return RulePushLimit.raiseAccessOverLimit(rootNode, accessNode, metadata, capFinder, parentNode);
+                return RulePushLimit.raiseAccessOverLimit(rootNode, accessNode, metadata, capFinder, parentNode, record);
             }
             default: 
             {



More information about the teiid-commits mailing list