Found the order for checking used variables was off. Moved check to after 
nested plans.


Project: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/commit/ed696a53
Tree: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/tree/ed696a53
Diff: http://git-wip-us.apache.org/repos/asf/incubator-vxquery/diff/ed696a53

Branch: refs/heads/prestonc/parser
Commit: ed696a53ef52aa1bea10322ad18536afb1401579
Parents: d88a64e
Author: Preston Carman <[email protected]>
Authored: Mon Feb 17 16:47:22 2014 -0800
Committer: Preston Carman <[email protected]>
Committed: Mon Feb 17 16:47:22 2014 -0800

----------------------------------------------------------------------
 .../rewriter/rules/AbstractUsedVariablesProcessingRule.java    | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-vxquery/blob/ed696a53/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/AbstractUsedVariablesProcessingRule.java
----------------------------------------------------------------------
diff --git 
a/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/AbstractUsedVariablesProcessingRule.java
 
b/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/AbstractUsedVariablesProcessingRule.java
index c567909..04c6f1e 100644
--- 
a/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/AbstractUsedVariablesProcessingRule.java
+++ 
b/vxquery-core/src/main/java/org/apache/vxquery/compiler/rewriter/rules/AbstractUsedVariablesProcessingRule.java
@@ -63,10 +63,9 @@ public abstract class AbstractUsedVariablesProcessingRule 
implements IAlgebraicR
     protected boolean rewritePreOnePass(Mutable<ILogicalOperator> opRef, 
IOptimizationContext context)
             throws AlgebricksException {
         boolean modified = processOperator(opRef, context);
-
         AbstractLogicalOperator op = (AbstractLogicalOperator) 
opRef.getValue();
-        VariableUtilities.getUsedVariables(op, usedVariables);
 
+        // Descend into nested plans merging unnest along the way.
         if (op.hasNestedPlans()) {
             AbstractOperatorWithNestedPlans opwnp = 
(AbstractOperatorWithNestedPlans) op;
             for (ILogicalPlan rootPlans : opwnp.getNestedPlans()) {
@@ -78,6 +77,9 @@ public abstract class AbstractUsedVariablesProcessingRule 
implements IAlgebraicR
             }
         }
 
+        // Only add variables after operator is used.
+        VariableUtilities.getUsedVariables(op, usedVariables);
+
         // Descend into children merging unnest along the way.
         if (op.hasInputs()) {
             for (Mutable<ILogicalOperator> inputOpRef : op.getInputs()) {

Reply via email to