diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
index eb4751d..720de76 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/base/RuleCollections.java
@@ -33,6 +33,7 @@
 import org.apache.asterix.optimizer.rules.CountVarToCountOneRule;
 import org.apache.asterix.optimizer.rules.DisjunctivePredicateToJoinRule;
 import org.apache.asterix.optimizer.rules.ExtractDistinctByExpressionsRule;
+import org.apache.hyracks.algebricks.rewriter.rules.ExtractGroupByDecorVariablesRule;
 import org.apache.asterix.optimizer.rules.ExtractOrderExpressionsRule;
 import org.apache.asterix.optimizer.rules.FeedScanCollectionToUnnest;
 import org.apache.asterix.optimizer.rules.FuzzyEqRule;
@@ -131,9 +132,10 @@
     }
 
     public static final List<IAlgebraicRewriteRule> buildInitialTranslationRuleCollection() {
-        List<IAlgebraicRewriteRule> typeInfer = new LinkedList<>();
-        typeInfer.add(new TranslateIntervalExpressionRule());
-        return typeInfer;
+        List<IAlgebraicRewriteRule> translationRules = new LinkedList<>();
+        translationRules.add(new TranslateIntervalExpressionRule());
+        translationRules.add(new ExtractGroupByDecorVariablesRule());
+        return translationRules;
     }
 
     public static final List<IAlgebraicRewriteRule> buildTypeInferenceRuleCollection() {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggregateIntoGroupbyRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggregateIntoGroupbyRule.java
index a162209..168019b 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggregateIntoGroupbyRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/PushAggregateIntoGroupbyRule.java
@@ -100,8 +100,24 @@
                 }
             }
         }
+
+        // Collects subplans that is to be removed.
+        Map<GroupByOperator, List<ILogicalPlan>> gbyToSubplanListMap = new HashMap<>();
         for (Pair<GroupByOperator, Integer> remove : removeList) {
-            remove.first.getNestedPlans().remove((int)remove.second);
+            GroupByOperator groupByOperator = remove.first;
+            ILogicalPlan subplan = remove.first.getNestedPlans().get(remove.second);
+            if(gbyToSubplanListMap.containsKey(groupByOperator)) {
+                List<ILogicalPlan> subplans =  gbyToSubplanListMap.get(groupByOperator);
+                subplans.add(subplan);
+            } else {
+                List<ILogicalPlan> subplans = new ArrayList<>();
+                subplans.add(subplan);
+                gbyToSubplanListMap.put(groupByOperator, subplans);
+            }
+        }
+        // Removes subplans.
+        for(Map.Entry<GroupByOperator, List<ILogicalPlan>> entry: gbyToSubplanListMap.entrySet()){
+            entry.getKey().getNestedPlans().removeAll(entry.getValue());
         }
     }
 
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java
index d407a7b..1d3e904 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/optimizer/rules/ResolveVariableRule.java
@@ -43,20 +43,18 @@
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
-import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IAlgebricksConstantValue;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IVariableTypeEnvironment;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
-import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 
 /**
  * This rule resolves references to undefined identifiers as:
- * 1. variable/field-access paths, or
+ * 1. expression + field-access paths, or
  * 2. datasets
- * based on the available type and metatadata information.
+ * based on the available type and metadata information.
  */
 public class ResolveVariableRule implements IAlgebraicRewriteRule {
 
@@ -94,8 +92,8 @@
         }
         boolean changed = false;
         AbstractFunctionCallExpression funcExpr = (AbstractFunctionCallExpression) expr;
-        Triple<Boolean, String, String> fullyQualifiedDatasetPathCandidate =
-                resolveFullyQualifiedPath(funcExpr, context);
+        Triple<Boolean, String, String> fullyQualifiedDatasetPathCandidate = resolveFullyQualifiedPath(funcExpr,
+                context);
         for (Mutable<ILogicalExpression> funcArgRef : funcExpr.getArguments()) {
             if (rewriteExpressionReference(op, funcArgRef, fullyQualifiedDatasetPathCandidate, exprRef, context)) {
                 changed = true;
@@ -123,35 +121,35 @@
         ILogicalExpression arg = funcExpr.getArguments().get(0).getValue();
         String unresolvedVarName = extractConstantString(arg);
         return resolveInternal(exprRef, hasMatchedDatasetForVariableName(unresolvedVarName, context),
-                findCandidatePaths(op, extractPossibleVariables(funcExpr.getArguments()), unresolvedVarName, context),
-                unresolvedVarName, fullyQualifiedDatasetPathCandidateFromParent, parentFuncRef);
+                findCandidatePaths(op, extractExprs(funcExpr.getArguments()), unresolvedVarName, context),
+                unresolvedVarName, fullyQualifiedDatasetPathCandidateFromParent, parentFuncRef, context);
     }
 
-    // Extracts all possible variables from the arguments of the "resolve" function.
-    private List<LogicalVariable> extractPossibleVariables(List<Mutable<ILogicalExpression>> args)
-            throws AlgebricksException {
-        List<LogicalVariable> vars = new ArrayList<>();
+    // Extracts all possible expressions from the arguments of the "resolve" function.
+    private List<ILogicalExpression> extractExprs(List<Mutable<ILogicalExpression>> args) throws AlgebricksException {
+        List<ILogicalExpression> exprs = new ArrayList<>();
         // The first arg is is the name of the undefined variable.
         for (int index = 1; index < args.size(); ++index) {
-            vars.add(extractVariable(args.get(index).getValue()));
+            ILogicalExpression argExpr = args.get(index).getValue();
+            exprs.add(argExpr);
         }
-        return vars;
+        return exprs;
     }
 
     // Resolves an undefined name to a dataset or a fully qualified variable/field-access path
     // based on the given information of dataset matches and candidate paths.
     private boolean resolveInternal(Mutable<ILogicalExpression> funcRef, boolean hasMatchedDataset,
-            Collection<Pair<LogicalVariable, List<String>>> varAccessCandidates, String unresolvedVarName,
+            Collection<Pair<ILogicalExpression, List<String>>> varAccessCandidates, String unresolvedVarName,
             Triple<Boolean, String, String> fullyQualifiedDatasetPathCandidateFromParent,
-            Mutable<ILogicalExpression> parentFuncRef) throws AlgebricksException {
+            Mutable<ILogicalExpression> parentFuncRef, IOptimizationContext context) throws AlgebricksException {
         AbstractFunctionCallExpression func = (AbstractFunctionCallExpression) funcRef.getValue();
         int numVarCandidates = varAccessCandidates.size();
-        boolean hasAmbiguity =
-                hasAmbiguity(hasMatchedDataset, fullyQualifiedDatasetPathCandidateFromParent, numVarCandidates);
+        boolean hasAmbiguity = hasAmbiguity(hasMatchedDataset, fullyQualifiedDatasetPathCandidateFromParent,
+                numVarCandidates);
         if (hasAmbiguity) {
             // More than one possibilities.
-            throw new AlgebricksException(
-                    "Cannot resolve ambiguous alias (variable) reference for identifier " + unresolvedVarName);
+            throw new AlgebricksException("Cannot resolve ambiguous alias reference for undefined identifier "
+                    + unresolvedVarName);
         } else if (hasMatchedDataset) {
             // Rewrites the "resolve" function to a "dataset" function and only keep the dataset name argument.
             func.setFunctionInfo(FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.DATASET));
@@ -163,15 +161,17 @@
             AbstractFunctionCallExpression parentFunc = (AbstractFunctionCallExpression) parentFuncRef.getValue();
             parentFunc.setFunctionInfo(FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.DATASET));
             parentFunc.getArguments().clear();
-            parentFunc.getArguments()
-                    .add(new MutableObject<ILogicalExpression>(new ConstantExpression(
+            parentFunc.getArguments().add(
+                    new MutableObject<>(new ConstantExpression(
                             new AsterixConstantValue(new AString(fullyQualifiedDatasetPathCandidateFromParent.second
                                     + "." + fullyQualifiedDatasetPathCandidateFromParent.third)))));
         } else if (numVarCandidates == 1) {
             resolveAsFieldAccess(funcRef, varAccessCandidates.iterator().next());
         } else {
+            AqlMetadataProvider metadataProvider = (AqlMetadataProvider) context.getMetadataProvider();
             // Cannot find any resolution.
-            throw new AlgebricksException("Undefined alias (variable) reference for identifier " + unresolvedVarName);
+            throw new AlgebricksException("Cannot find dataset " + unresolvedVarName + " in dataverse "
+                    + metadataProvider.getDefaultDataverseName() + " nor an alias with name " + unresolvedVarName);
         }
         return true;
     }
@@ -187,17 +187,16 @@
 
     // Resolves a "resolve" function call as a field access.
     private void resolveAsFieldAccess(Mutable<ILogicalExpression> funcRef,
-            Pair<LogicalVariable, List<String>> varAndPath) {
+            Pair<ILogicalExpression, List<String>> varAndPath) {
         // Rewrites to field-access-by-names.
-        LogicalVariable var = varAndPath.first;
+        ILogicalExpression expr = varAndPath.first;
         List<String> path = varAndPath.second;
-        Mutable<ILogicalExpression> firstArgRef = new MutableObject<>(new VariableReferenceExpression(var));
+        Mutable<ILogicalExpression> firstArgRef = new MutableObject<>(expr);
         ILogicalExpression newFunc = null;
         for (String fieldName : path) {
             List<Mutable<ILogicalExpression>> args = new ArrayList<>();
             args.add(firstArgRef);
-            args.add(new MutableObject<ILogicalExpression>(
-                    new ConstantExpression(new AsterixConstantValue(new AString(fieldName)))));
+            args.add(new MutableObject<>(new ConstantExpression(new AsterixConstantValue(new AString(fieldName)))));
             newFunc = new ScalarFunctionCallExpression(
                     FunctionUtil.getFunctionInfo(AsterixBuiltinFunctions.FIELD_ACCESS_BY_NAME), args);
             firstArgRef = new MutableObject<>(newFunc);
@@ -205,23 +204,23 @@
         funcRef.setValue(newFunc);
     }
 
-    // Finds all candidate fully qualified variable/field-access paths.
-    private Set<Pair<LogicalVariable, List<String>>> findCandidatePaths(ILogicalOperator op,
-            Collection<LogicalVariable> inputLiveVars, String unresolvedVarName, IOptimizationContext context)
+    // Finds all candidate fully qualified expression/field-access paths.
+    private Set<Pair<ILogicalExpression, List<String>>> findCandidatePaths(ILogicalOperator op,
+            Collection<ILogicalExpression> referenceExprs, String unresolvedVarName, IOptimizationContext context)
             throws AlgebricksException {
-        Set<Pair<LogicalVariable, List<String>>> candidates = new HashSet<>();
+        Set<Pair<ILogicalExpression, List<String>>> candidates = new HashSet<>();
         IVariableTypeEnvironment env = context.getOutputTypeEnvironment(op.getInputs().get(0).getValue());
-        for (LogicalVariable var : inputLiveVars) {
-            IAType type = (IAType) env.getVarType(var);
-            candidates.addAll(findCandidatePathsForVariable(unresolvedVarName, type, var, new ArrayList<String>()));
+        for (ILogicalExpression referenceExpr : referenceExprs) {
+            IAType type = (IAType) env.getType(referenceExpr);
+            candidates.addAll(findCandidatePathsForExpr(unresolvedVarName, type, referenceExpr, new ArrayList<>()));
         }
         return candidates;
     }
 
-    // Recursively finds candidate paths under a variable.
-    private Set<Pair<LogicalVariable, List<String>>> findCandidatePathsForVariable(String unresolvedVarName,
-            IAType pathType, LogicalVariable var, List<String> parentPath) throws AlgebricksException {
-        Set<Pair<LogicalVariable, List<String>>> varAccessCandidates = new HashSet<>();
+    // Recursively finds candidate paths under an expression.
+    private Set<Pair<ILogicalExpression, List<String>>> findCandidatePathsForExpr(String unresolvedVarName,
+            IAType pathType, ILogicalExpression expr, List<String> parentPath) throws AlgebricksException {
+        Set<Pair<ILogicalExpression, List<String>>> varAccessCandidates = new HashSet<>();
         IAType type = pathType;
         if (type.getTypeTag() == ATypeTag.UNION) {
             type = ((AUnionType) type).getActualType();
@@ -230,7 +229,7 @@
         if (tag == ATypeTag.ANY) {
             List<String> path = new ArrayList<>(parentPath);
             path.add(unresolvedVarName);
-            varAccessCandidates.add(new Pair<>(var, path));
+            varAccessCandidates.add(new Pair<>(expr, path));
         }
         if (tag == ATypeTag.RECORD) {
             ARecordType recordType = (ARecordType) type;
@@ -238,7 +237,7 @@
                 // If the field name is possible.
                 List<String> path = new ArrayList<>(parentPath);
                 path.add(unresolvedVarName);
-                varAccessCandidates.add(new Pair<>(var, path));
+                varAccessCandidates.add(new Pair<>(expr, path));
             } else {
                 // Recursively identified possible paths.
                 String[] fieldNames = recordType.getFieldNames();
@@ -246,8 +245,8 @@
                 for (int index = 0; index < fieldNames.length; ++index) {
                     List<String> path = new ArrayList<>(parentPath);
                     path.add(fieldNames[index]);
-                    varAccessCandidates
-                            .addAll(findCandidatePathsForVariable(unresolvedVarName, fieldTypes[index], var, path));
+                    varAccessCandidates.addAll(findCandidatePathsForExpr(unresolvedVarName, fieldTypes[index], expr,
+                            path));
                 }
             }
         }
@@ -284,10 +283,7 @@
     private boolean hasMatchedDataverseDataset(String dataverseName, String datasetName, IOptimizationContext context)
             throws AlgebricksException {
         AqlMetadataProvider mdp = (AqlMetadataProvider) context.getMetadataProvider();
-        if (mdp.findDataset(dataverseName, datasetName) != null) {
-            return true;
-        }
-        return false;
+        return mdp.findDataset(dataverseName, datasetName) != null;
     }
 
     // Checks whether the name matches a dataset.
@@ -309,17 +305,6 @@
         return false;
     }
 
-    // Extracts the variable from a variable reference expression.
-    private LogicalVariable extractVariable(ILogicalExpression expr) throws AlgebricksException {
-        if (expr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
-            VariableReferenceExpression varRefExpr = (VariableReferenceExpression) expr;
-            return varRefExpr.getVariableReference();
-        } else {
-            // The sugar visitor gurantees this would not happen.
-            throw new AlgebricksException("The argument should be a variable reference expression.");
-        }
-    }
-
     // Cleans up scan collections on top of a "dataset" function call since "dataset"
     // is an unnest function.
     private void cleanupScanCollectionForDataset(AbstractFunctionCallExpression funcExpr) {
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java
index 6bcdd90..79342c9 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlExpressionToPlanTranslator.java
@@ -30,8 +30,8 @@
 import org.apache.asterix.lang.aql.visitor.base.IAQLVisitor;
 import org.apache.asterix.lang.common.base.Clause;
 import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.expression.VariableExpr;
 import org.apache.asterix.lang.common.statement.Query;
 import org.apache.asterix.metadata.declared.AqlMetadataProvider;
@@ -42,7 +42,10 @@
 import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.DistinctOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
@@ -103,13 +106,13 @@
         }
 
         Expression r = flwor.getReturnExpr();
-        boolean noFlworClause = flwor.noForClause();
+        boolean noForClause = flwor.noForClause();
 
         Pair<ILogicalOperator, LogicalVariable> result;
         if (r.getKind() == Kind.VARIABLE_EXPRESSION) {
             VariableExpr v = (VariableExpr) r;
             LogicalVariable var = context.getVar(v.getVar().getId());
-            result = produceFlworPlan(noFlworClause, isTop, flworPlan, var);
+            result = produceFlworPlan(noForClause, isTop, flworPlan, var);
         } else {
             Mutable<ILogicalOperator> baseOp = new MutableObject<>(flworPlan.getValue());
             Pair<ILogicalOperator, LogicalVariable> rRes = r.accept(this, baseOp);
@@ -125,7 +128,7 @@
                 baseOp.setValue(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(s)));
             }
             Mutable<ILogicalOperator> resOpRef = new MutableObject<>(resOp);
-            result = produceFlworPlan(noFlworClause, isTop, resOpRef, rRes.second);
+            result = produceFlworPlan(noForClause, isTop, resOpRef, rRes.second);
         }
         if (!isTop) {
             context.exitSubplan();
@@ -164,6 +167,17 @@
         return aggListifyForSubquery(result.second, new MutableObject<>(result.first), false);
     }
 
+    @Override
+    protected boolean expressionNeedsNoNesting(Expression expr) {
+        boolean noForFLWOR = false;
+        // No nesting is needed for a FLWOR expression without a FOR clause.
+        if (expr.getKind() == Kind.FLWOGR_EXPRESSION) {
+            FLWOGRExpression flwor = (FLWOGRExpression) expr;
+            noForFLWOR = flwor.noForClause();
+        }
+        return noForFLWOR || super.expressionNeedsNoNesting(expr);
+    }
+
     private Pair<ILogicalOperator, LogicalVariable> produceFlworPlan(boolean noForClause, boolean isTop,
             Mutable<ILogicalOperator> resOpRef, LogicalVariable resVar) {
         if (isTop) {
@@ -171,7 +185,15 @@
             pr.getInputs().add(resOpRef);
             return new Pair<>(pr, resVar);
         } else if (noForClause) {
-            return new Pair<>(resOpRef.getValue(), resVar);
+            ILogicalOperator resOp = resOpRef.getValue();
+            if (resOp.getOperatorTag() == LogicalOperatorTag.ASSIGN) {
+                return new Pair<>(resOp, resVar);
+            }
+            LogicalVariable newResVar = context.newVar();
+            ILogicalOperator assign =
+                    new AssignOperator(newResVar, new MutableObject<>(new VariableReferenceExpression(resVar)));
+            assign.getInputs().add(resOpRef);
+            return new Pair<>(assign, newResVar);
         } else {
             return aggListifyForSubquery(resVar, resOpRef, false);
         }
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java
index 39648d1..334436a 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/AqlPlusExpressionToPlanTranslator.java
@@ -22,6 +22,7 @@
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map.Entry;
 import java.util.logging.Logger;
 
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
@@ -547,22 +548,22 @@
         }
         gOp.getInputs().add(topOp);
 
-        for (VariableExpr var : gc.getWithVarList()) {
+        for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
             LogicalVariable aggVar = context.newVar();
-            LogicalVariable oldVar = context.getVar(var);
-            List<Mutable<ILogicalExpression>> flArgs = new ArrayList<Mutable<ILogicalExpression>>(1);
-            flArgs.add(new MutableObject<ILogicalExpression>(new VariableReferenceExpression(oldVar)));
+            Pair<ILogicalExpression, Mutable<ILogicalOperator>> listifyInput = aqlExprToAlgExpression(entry.getKey(),
+                    new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(gOp))));
+            List<Mutable<ILogicalExpression>> flArgs = new ArrayList<>(1);
+            flArgs.add(new MutableObject<>(listifyInput.first));
             AggregateFunctionCallExpression fListify =
                     AsterixBuiltinFunctions.makeAggregateFunctionExpression(AsterixBuiltinFunctions.LISTIFY, flArgs);
             AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(aggVar),
-                    (List) mkSingletonArrayList(new MutableObject<ILogicalExpression>(fListify)));
-            agg.getInputs().add(new MutableObject<ILogicalOperator>(
-                    new NestedTupleSourceOperator(new MutableObject<ILogicalOperator>(gOp))));
-            ILogicalPlan plan = new ALogicalPlanImpl(new MutableObject<ILogicalOperator>(agg));
+                    mkSingletonArrayList(new MutableObject<>(fListify)));
+            agg.getInputs().add(listifyInput.second);
+            ILogicalPlan plan = new ALogicalPlanImpl(new MutableObject<>(agg));
             gOp.getNestedPlans().add(plan);
             // Hide the variable that was part of the "with", replacing it with
             // the one bound by the aggregation op.
-            context.setVar(var, aggVar);
+            context.setVar(entry.getValue(), aggVar);
         }
 
         gOp.getAnnotations().put(OperatorAnnotations.USE_HASH_GROUP_BY, gc.hasHashGroupByHint());
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
index d85419e..bd87e6e 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/LangExpressionToPlanTranslator.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.translator;
 
+import static java.util.logging.Logger.global;
+
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
@@ -28,6 +30,7 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
+import java.util.Map.Entry;
 import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.asterix.algebra.base.ILangExpressionToPlanTranslator;
@@ -38,15 +41,15 @@
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.lang.aql.util.RangeMapBuilder;
 import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.base.ILangExpression;
 import org.apache.asterix.lang.common.base.Statement;
+import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.clause.GroupbyClause;
 import org.apache.asterix.lang.common.clause.LetClause;
 import org.apache.asterix.lang.common.clause.LimitClause;
 import org.apache.asterix.lang.common.clause.OrderbyClause;
-import org.apache.asterix.lang.common.clause.OrderbyClause.OrderModifier;
 import org.apache.asterix.lang.common.clause.WhereClause;
+import org.apache.asterix.lang.common.clause.OrderbyClause.OrderModifier;
 import org.apache.asterix.lang.common.expression.CallExpr;
 import org.apache.asterix.lang.common.expression.FieldAccessor;
 import org.apache.asterix.lang.common.expression.FieldBinding;
@@ -54,14 +57,14 @@
 import org.apache.asterix.lang.common.expression.IfExpr;
 import org.apache.asterix.lang.common.expression.IndexAccessor;
 import org.apache.asterix.lang.common.expression.ListConstructor;
-import org.apache.asterix.lang.common.expression.ListConstructor.Type;
 import org.apache.asterix.lang.common.expression.LiteralExpr;
 import org.apache.asterix.lang.common.expression.OperatorExpr;
 import org.apache.asterix.lang.common.expression.QuantifiedExpression;
-import org.apache.asterix.lang.common.expression.QuantifiedExpression.Quantifier;
 import org.apache.asterix.lang.common.expression.RecordConstructor;
 import org.apache.asterix.lang.common.expression.UnaryExpr;
 import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.expression.ListConstructor.Type;
+import org.apache.asterix.lang.common.expression.QuantifiedExpression.Quantifier;
 import org.apache.asterix.lang.common.literal.StringLiteral;
 import org.apache.asterix.lang.common.statement.FunctionDecl;
 import org.apache.asterix.lang.common.statement.Query;
@@ -72,13 +75,13 @@
 import org.apache.asterix.lang.common.visitor.base.AbstractQueryExpressionVisitor;
 import org.apache.asterix.metadata.MetadataException;
 import org.apache.asterix.metadata.MetadataManager;
-import org.apache.asterix.metadata.declared.AqlDataSource.AqlDataSourceType;
 import org.apache.asterix.metadata.declared.AqlMetadataProvider;
 import org.apache.asterix.metadata.declared.AqlSourceId;
 import org.apache.asterix.metadata.declared.DatasetDataSource;
 import org.apache.asterix.metadata.declared.LoadableDataSource;
 import org.apache.asterix.metadata.declared.ResultSetDataSink;
 import org.apache.asterix.metadata.declared.ResultSetSinkId;
+import org.apache.asterix.metadata.declared.AqlDataSource.AqlDataSourceType;
 import org.apache.asterix.metadata.entities.Dataset;
 import org.apache.asterix.metadata.entities.Function;
 import org.apache.asterix.metadata.entities.InternalDatasetDetails;
@@ -114,15 +117,15 @@
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
 import org.apache.hyracks.algebricks.core.algebra.base.OperatorAnnotations;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression;
-import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
 import org.apache.hyracks.algebricks.core.algebra.expressions.AggregateFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation;
-import org.apache.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation.BroadcastSide;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.IExpressionAnnotation;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.UnnestingFunctionCallExpression;
 import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.FunctionKind;
+import org.apache.hyracks.algebricks.core.algebra.expressions.BroadcastExpressionAnnotation.BroadcastSide;
 import org.apache.hyracks.algebricks.core.algebra.functions.AlgebricksBuiltinFunctions;
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 import org.apache.hyracks.algebricks.core.algebra.functions.IFunctionInfo;
@@ -138,13 +141,13 @@
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.LimitOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.NestedTupleSourceOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator;
-import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder.OrderKind;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.ProjectOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.SelectOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.SinkOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.SubplanOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.OrderOperator.IOrder.OrderKind;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.LogicalOperatorDeepCopyWithNewVariablesVisitor;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
 import org.apache.hyracks.algebricks.core.algebra.plan.ALogicalPlanImpl;
@@ -786,18 +789,38 @@
         if (gc.isGroupAll()) {
             List<LogicalVariable> aggVars = new ArrayList<>();
             List<Mutable<ILogicalExpression>> aggFuncs = new ArrayList<>();
-            for (VariableExpr var : gc.getWithVarList()) {
-                LogicalVariable aggVar = context.newVar();
-                LogicalVariable oldVar = context.getVar(var);
+            // A global aggregation can still have a decoration variable list which are used for propagate
+            // outer-scope variables. Example query:
+            // asterixdb/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09
+            for (GbyVariableExpressionPair ve : gc.getDecorPairList()) {
+                VariableExpr vexpr = ve.getVar();
+                LogicalVariable decorVar = vexpr == null ? context.newVar() : context.newVar(vexpr);
+                Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo = langExprToAlgExpression(ve.getExpr(), topOp);
+                topOp = eo.second;
                 List<Mutable<ILogicalExpression>> flArgs = new ArrayList<>();
-                flArgs.add(new MutableObject<>(new VariableReferenceExpression(oldVar)));
+                flArgs.add(new MutableObject<>(eo.first));
+                // Calls the first-element aggregate function on a decoration variable to make sure the value
+                // is propagated through a global aggregation.
+                AggregateFunctionCallExpression firstElementAgg = AsterixBuiltinFunctions
+                        .makeAggregateFunctionExpression(
+                        AsterixBuiltinFunctions.FIRST_ELEMENT, flArgs);
+                aggVars.add(decorVar);
+                aggFuncs.add(new MutableObject<>(firstElementAgg));
+            }
+            for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
+                Pair<ILogicalExpression, Mutable<ILogicalOperator>> listifyInput =
+                        langExprToAlgExpression(entry.getKey(), topOp);
+                topOp = listifyInput.second;
+                List<Mutable<ILogicalExpression>> flArgs = new ArrayList<>();
+                flArgs.add(new MutableObject<>(listifyInput.first));
                 AggregateFunctionCallExpression fListify = AsterixBuiltinFunctions
                         .makeAggregateFunctionExpression(AsterixBuiltinFunctions.LISTIFY, flArgs);
+                LogicalVariable aggVar = context.newVar();
                 aggVars.add(aggVar);
                 aggFuncs.add(new MutableObject<>(fListify));
                 // Hide the variable that was part of the "with", replacing it with
                 // the one bound by the aggregation op.
-                context.setVar(var, aggVar);
+                context.setVar(entry.getValue(), aggVar);
             }
             AggregateOperator aggOp = new AggregateOperator(aggVars, aggFuncs);
             aggOp.getInputs().add(topOp);
@@ -830,22 +853,23 @@
             }
 
             gOp.getInputs().add(topOp);
-            for (VariableExpr var : gc.getWithVarList()) {
-                LogicalVariable aggVar = context.newVar();
-                LogicalVariable oldVar = context.getVar(var);
+            for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
+                Pair<ILogicalExpression, Mutable<ILogicalOperator>> listifyInput = langExprToAlgExpression(
+                        entry.getKey(), new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(gOp))));
                 List<Mutable<ILogicalExpression>> flArgs = new ArrayList<>(1);
-                flArgs.add(new MutableObject<>(new VariableReferenceExpression(oldVar)));
+                flArgs.add(new MutableObject<>(listifyInput.first));
                 AggregateFunctionCallExpression fListify = AsterixBuiltinFunctions
                         .makeAggregateFunctionExpression(AsterixBuiltinFunctions.LISTIFY, flArgs);
+                LogicalVariable aggVar = context.newVar();
                 AggregateOperator agg = new AggregateOperator(mkSingletonArrayList(aggVar),
-                        (List) mkSingletonArrayList(new MutableObject<>(fListify)));
+                        mkSingletonArrayList(new MutableObject<>(fListify)));
 
-                agg.getInputs().add(new MutableObject<>(new NestedTupleSourceOperator(new MutableObject<>(gOp))));
+                agg.getInputs().add(listifyInput.second);
                 ILogicalPlan plan = new ALogicalPlanImpl(new MutableObject<>(agg));
                 gOp.getNestedPlans().add(plan);
                 // Hide the variable that was part of the "with", replacing it with
                 // the one bound by the aggregation op.
-                context.setVar(var, aggVar);
+                context.setVar(entry.getValue(), aggVar);
             }
             gOp.getAnnotations().put(OperatorAnnotations.USE_HASH_GROUP_BY, gc.hasHashGroupByHint());
             return new Pair<>(gOp, null);
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
index 982a334..f2ba140 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/SqlppExpressionToPlanTranslator.java
@@ -173,9 +173,6 @@
             Mutable<ILogicalOperator> tupleSource) throws AsterixException {
         Pair<ILogicalExpression, Mutable<ILogicalOperator>> eo =
                 langExprToAlgExpression(independentSubquery.getExpr(), tupleSource);
-        // Replaces nested tuple source with empty tuple source so that the subquery can be independent
-        // from its input operators.
-        replaceNtsWithEts(eo.second.getValue());
         LogicalVariable var = context.newVar();
         AssignOperator assignOp = new AssignOperator(var, new MutableObject<ILogicalExpression>(eo.first));
         assignOp.getInputs().add(eo.second);
@@ -586,20 +583,6 @@
         }
     }
 
-    // Replaces nested tuple source with empty tuple source in nested subplans of
-    // a subplan operator.
-    private void replaceNtsWithEts(ILogicalOperator op) {
-        if (op.getOperatorTag() != LogicalOperatorTag.SUBPLAN) {
-            return;
-        }
-        SubplanOperator subplanOp = (SubplanOperator) op;
-        for (ILogicalPlan plan : subplanOp.getNestedPlans()) {
-            for (Mutable<ILogicalOperator> rootRef : plan.getRoots()) {
-                replaceNtsWithEtsTopDown(rootRef);
-            }
-        }
-    }
-
     // Recursively replaces nested tuple source with empty tuple source
     // in the operator tree under opRef.
     private void replaceNtsWithEtsTopDown(Mutable<ILogicalOperator> opRef) {
@@ -691,7 +674,10 @@
         for (GbyVariableExpressionPair pair : groupbyClause.getGbyPairList()) {
             fieldBindings.add(getFieldBinding(pair.getVar()));
         }
-        fieldBindings.add(getFieldBinding(groupbyClause.getGroupVar()));
+        if (groupbyClause.hasWithMap() && groupbyClause.hasGroupVar()) {
+            // Makes sure that we add the re-mapped group variable which refers to a collection.
+            fieldBindings.add(getFieldBinding(groupbyClause.getWithVarMap().get(groupbyClause.getGroupVar())));
+        }
         return fieldBindings;
     }
 
diff --git a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/FunctionCollection.java b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/FunctionCollection.java
index 2c0aef4..3201d9e 100644
--- a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/FunctionCollection.java
+++ b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/util/FunctionCollection.java
@@ -24,7 +24,9 @@
 import java.util.List;
 
 import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
+import org.apache.asterix.runtime.aggregates.collections.FirstElementAggregateDescriptor;
 import org.apache.asterix.runtime.aggregates.collections.ListifyAggregateDescriptor;
+import org.apache.asterix.runtime.aggregates.collections.LocalFirstElementAggregateDescriptor;
 import org.apache.asterix.runtime.aggregates.scalar.ScalarAvgAggregateDescriptor;
 import org.apache.asterix.runtime.aggregates.scalar.ScalarCountAggregateDescriptor;
 import org.apache.asterix.runtime.aggregates.scalar.ScalarMaxAggregateDescriptor;
@@ -313,6 +315,8 @@
         temp.add(LocalMaxAggregateDescriptor.FACTORY);
         temp.add(MinAggregateDescriptor.FACTORY);
         temp.add(LocalMinAggregateDescriptor.FACTORY);
+        temp.add(FirstElementAggregateDescriptor.FACTORY);
+        temp.add(LocalFirstElementAggregateDescriptor.FACTORY);
 
         // serializable aggregates
         temp.add(SerializableCountAggregateDescriptor.FACTORY);
diff --git a/asterixdb/asterix-algebra/src/main/javacc/AQLPlus.jj b/asterixdb/asterix-algebra/src/main/javacc/AQLPlus.jj
index 98cae63..e0e9388 100644
--- a/asterixdb/asterix-algebra/src/main/javacc/AQLPlus.jj
+++ b/asterixdb/asterix-algebra/src/main/javacc/AQLPlus.jj
@@ -1381,7 +1381,7 @@
       // GbyVariableExpressionPair pair = new GbyVariableExpressionPair();
      List<GbyVariableExpressionPair> vePairList = new ArrayList<GbyVariableExpressionPair>();
     List<GbyVariableExpressionPair> decorPairList = new ArrayList<GbyVariableExpressionPair>();
-    List<VariableExpr> withVarList= new ArrayList<VariableExpr>();
+    Map<Expression, VariableExpr> withVarMap= new HashMap<Expression, VariableExpr>();
     VariableExpr var = null;
     VariableExpr withVar = null;
     Expression expr = null;
@@ -1437,20 +1437,20 @@
     {
       if(withVar.getIsNewVar()==true)
           throw new ParseException("can't find variable " + withVar.getVar());
-      withVarList.add(withVar);
+      withVarMap.put(withVar, withVar);
       newScope.addNewVarSymbolToScope(withVar.getVar());
     }
     ("," withVar = VariableRef()
     {
       if(withVar.getIsNewVar()==true)
           throw new ParseException("can't find variable " + withVar.getVar());
-      withVarList.add(withVar);
+      withVarMap.put(withVar, withVar);
       newScope.addNewVarSymbolToScope(withVar.getVar());
     })*
     {
       gbc.setGbyPairList(vePairList);
       gbc.setDecorPairList(decorPairList);
-      gbc.setWithVarList(withVarList);
+      gbc.setWithVarMap(withVarMap);
       replaceCurrentScope(newScope);
       return gbc;
     }
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
index 4495551..773be15 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/aggregate/constant-gby-agg.plan
@@ -3,13 +3,13 @@
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$19]  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$26]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$19(ASC)] HASH:[$$19]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$15]  |PARTITIONED|
+            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$26(ASC)] HASH:[$$26]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$22]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core.plan
index 1d34c95..fb6d5fb 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-core.plan
@@ -2,20 +2,20 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$15(ASC) ]  |PARTITIONED|
-          -- STABLE_SORT [$$15(ASC)]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$18(ASC) ]  |PARTITIONED|
+          -- STABLE_SORT [$$18(ASC)]  |PARTITIONED|
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
               -- STREAM_PROJECT  |PARTITIONED|
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- HYBRID_HASH_JOIN [$$17][$$18]  |PARTITIONED|
-                    -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
+                  -- HYBRID_HASH_JOIN [$$20][$$21]  |PARTITIONED|
+                    -- HASH_PARTITION_EXCHANGE [$$20]  |PARTITIONED|
                       -- STREAM_PROJECT  |PARTITIONED|
                         -- ASSIGN  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                    -- HASH_PARTITION_EXCHANGE [$$18]  |PARTITIONED|
+                    -- HASH_PARTITION_EXCHANGE [$$21]  |PARTITIONED|
                       -- ASSIGN  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar.plan
index 1d34c95..c712344 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/loj-sugar.plan
@@ -2,20 +2,20 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$15(ASC) ]  |PARTITIONED|
-          -- STABLE_SORT [$$15(ASC)]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$17(ASC) ]  |PARTITIONED|
+          -- STABLE_SORT [$$17(ASC)]  |PARTITIONED|
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
               -- STREAM_PROJECT  |PARTITIONED|
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- HYBRID_HASH_JOIN [$$17][$$18]  |PARTITIONED|
-                    -- HASH_PARTITION_EXCHANGE [$$17]  |PARTITIONED|
+                  -- HYBRID_HASH_JOIN [$$19][$$20]  |PARTITIONED|
+                    -- HASH_PARTITION_EXCHANGE [$$19]  |PARTITIONED|
                       -- STREAM_PROJECT  |PARTITIONED|
                         -- ASSIGN  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                             -- DATASOURCE_SCAN  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                 -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                    -- HASH_PARTITION_EXCHANGE [$$18]  |PARTITIONED|
+                    -- HASH_PARTITION_EXCHANGE [$$20]  |PARTITIONED|
                       -- ASSIGN  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby.plan
index fa71b96..8c86c6b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/orderby-desc-using-gby.plan
@@ -3,12 +3,12 @@
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
         -- SORT_MERGE_EXCHANGE [$$1(DESC) ]  |PARTITIONED|
-          -- SORT_GROUP_BY[$$9]  |PARTITIONED|
+          -- SORT_GROUP_BY[$$10]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_EXCHANGE [$$9]  |PARTITIONED|
+            -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
               -- STREAM_PROJECT  |PARTITIONED|
                 -- ASSIGN  |PARTITIONED|
                   -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
index cd0a17e..54716d3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/exists.plan
@@ -2,14 +2,14 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$8(ASC) ]  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$82]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$31(ASC) ]  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$104]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$82(ASC)] HASH:[$$82]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$59]  |PARTITIONED|
+            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$104(ASC)] HASH:[$$104]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$81]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|
@@ -21,25 +21,25 @@
                         -- STREAM_SELECT  |PARTITIONED|
                           -- STREAM_PROJECT  |PARTITIONED|
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- PRE_CLUSTERED_GROUP_BY[$$79]  |PARTITIONED|
+                              -- PRE_CLUSTERED_GROUP_BY[$$101]  |PARTITIONED|
                                       {
                                         -- AGGREGATE  |LOCAL|
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                       }
-                                -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$79(ASC)] HASH:[$$79]  |PARTITIONED|
-                                  -- PRE_CLUSTERED_GROUP_BY[$$72]  |PARTITIONED|
+                                -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$101(ASC)] HASH:[$$101]  |PARTITIONED|
+                                  -- PRE_CLUSTERED_GROUP_BY[$$94]  |PARTITIONED|
                                           {
                                             -- AGGREGATE  |LOCAL|
                                               -- STREAM_SELECT  |LOCAL|
                                                 -- NESTED_TUPLE_SOURCE  |LOCAL|
                                           }
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- STABLE_SORT [$$72(ASC)]  |PARTITIONED|
+                                      -- STABLE_SORT [$$94(ASC)]  |PARTITIONED|
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- HYBRID_HASH_JOIN [$$67][$$64]  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE [$$67]  |PARTITIONED|
+                                              -- HYBRID_HASH_JOIN [$$89][$$86]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE [$$89]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -66,7 +66,7 @@
                                                                                 -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE [$$64]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE [$$86]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                       -- DATASOURCE_SCAN  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
index 8276df2..9efd93d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in.plan
@@ -2,13 +2,13 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$26(ASC) ]  |PARTITIONED|
-          -- STABLE_SORT [$$26(ASC)]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$29(ASC) ]  |PARTITIONED|
+          -- STABLE_SORT [$$29(ASC)]  |PARTITIONED|
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
               -- STREAM_PROJECT  |PARTITIONED|
                 -- STREAM_SELECT  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- PRE_CLUSTERED_GROUP_BY[$$19]  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$22]  |PARTITIONED|
                             {
                               -- AGGREGATE  |LOCAL|
                                 -- STREAM_SELECT  |LOCAL|
@@ -17,7 +17,7 @@
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- HYBRID_HASH_JOIN [$$19][$$7]  |PARTITIONED|
+                            -- HYBRID_HASH_JOIN [$$22][$$10]  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- STREAM_SELECT  |PARTITIONED|
@@ -25,7 +25,7 @@
                                       -- DATASOURCE_SCAN  |PARTITIONED|
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                              -- HASH_PARTITION_EXCHANGE [$$7]  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$10]  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- ASSIGN  |PARTITIONED|
                                     -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
index e0b4473..f967282 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/in_correlated.plan
@@ -2,28 +2,35 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$31(ASC) ]  |PARTITIONED|
-          -- STABLE_SORT [$$31(ASC)]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$34(ASC) ]  |PARTITIONED|
+          -- STABLE_SORT [$$34(ASC)]  |PARTITIONED|
             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
               -- STREAM_PROJECT  |PARTITIONED|
                 -- STREAM_SELECT  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- PRE_CLUSTERED_GROUP_BY[$$23]  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$26]  |PARTITIONED|
                             {
                               -- AGGREGATE  |LOCAL|
                                 -- STREAM_SELECT  |LOCAL|
-                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                  -- UNNEST  |LOCAL|
+                                    -- MICRO_PRE_CLUSTERED_GROUP_BY[]  |LOCAL|
+                                            {
+                                              -- AGGREGATE  |LOCAL|
+                                                -- STREAM_SELECT  |LOCAL|
+                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                            }
+                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
                             }
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- HYBRID_HASH_JOIN [$$23][$$22]  |PARTITIONED|
+                        -- HYBRID_HASH_JOIN [$$26][$$25]  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STREAM_PROJECT  |PARTITIONED|
-                              -- STREAM_SELECT  |PARTITIONED|
+                            -- STREAM_SELECT  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
                                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                   -- DATASOURCE_SCAN  |PARTITIONED|
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                       -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$22]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$25]  |PARTITIONED|
                             -- STREAM_PROJECT  |PARTITIONED|
                               -- ASSIGN  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
index 2a9841f..14b3f08 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/subquery/not_exists.plan
@@ -2,14 +2,14 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$8(ASC) ]  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$83]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$31(ASC) ]  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$105]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$83(ASC)] HASH:[$$83]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$60]  |PARTITIONED|
+            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$105(ASC)] HASH:[$$105]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$82]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|
@@ -21,25 +21,25 @@
                         -- STREAM_SELECT  |PARTITIONED|
                           -- STREAM_PROJECT  |PARTITIONED|
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- PRE_CLUSTERED_GROUP_BY[$$80]  |PARTITIONED|
+                              -- PRE_CLUSTERED_GROUP_BY[$$102]  |PARTITIONED|
                                       {
                                         -- AGGREGATE  |LOCAL|
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                       }
-                                -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$80(ASC)] HASH:[$$80]  |PARTITIONED|
-                                  -- PRE_CLUSTERED_GROUP_BY[$$73]  |PARTITIONED|
+                                -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$102(ASC)] HASH:[$$102]  |PARTITIONED|
+                                  -- PRE_CLUSTERED_GROUP_BY[$$95]  |PARTITIONED|
                                           {
                                             -- AGGREGATE  |LOCAL|
                                               -- STREAM_SELECT  |LOCAL|
                                                 -- NESTED_TUPLE_SOURCE  |LOCAL|
                                           }
                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                      -- STABLE_SORT [$$73(ASC)]  |PARTITIONED|
+                                      -- STABLE_SORT [$$95(ASC)]  |PARTITIONED|
                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                           -- STREAM_PROJECT  |PARTITIONED|
                                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                              -- HYBRID_HASH_JOIN [$$68][$$65]  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE [$$68]  |PARTITIONED|
+                                              -- HYBRID_HASH_JOIN [$$90][$$87]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE [$$90]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
@@ -66,7 +66,7 @@
                                                                                 -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                -- HASH_PARTITION_EXCHANGE [$$65]  |PARTITIONED|
+                                                -- HASH_PARTITION_EXCHANGE [$$87]  |PARTITIONED|
                                                   -- ASSIGN  |PARTITIONED|
                                                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                       -- DATASOURCE_SCAN  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping.plan
index 7c1af83..754e03b 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/tpch/q12_shipping.plan
@@ -2,14 +2,14 @@
   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
     -- STREAM_PROJECT  |PARTITIONED|
       -- ASSIGN  |PARTITIONED|
-        -- SORT_MERGE_EXCHANGE [$$3(ASC) ]  |PARTITIONED|
-          -- PRE_CLUSTERED_GROUP_BY[$$94]  |PARTITIONED|
+        -- SORT_MERGE_EXCHANGE [$$12(ASC) ]  |PARTITIONED|
+          -- PRE_CLUSTERED_GROUP_BY[$$104]  |PARTITIONED|
                   {
                     -- AGGREGATE  |LOCAL|
                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                   }
-            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$94(ASC)] HASH:[$$94]  |PARTITIONED|
-              -- SORT_GROUP_BY[$$76]  |PARTITIONED|
+            -- HASH_PARTITION_MERGE_EXCHANGE MERGE:[$$104(ASC)] HASH:[$$104]  |PARTITIONED|
+              -- SORT_GROUP_BY[$$86]  |PARTITIONED|
                       {
                         -- AGGREGATE  |LOCAL|
                           -- NESTED_TUPLE_SOURCE  |LOCAL|
@@ -17,15 +17,15 @@
                 -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                   -- STREAM_PROJECT  |PARTITIONED|
                     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                      -- HYBRID_HASH_JOIN [$$83][$$76]  |PARTITIONED|
-                        -- HASH_PARTITION_EXCHANGE [$$83]  |PARTITIONED|
+                      -- HYBRID_HASH_JOIN [$$93][$$86]  |PARTITIONED|
+                        -- HASH_PARTITION_EXCHANGE [$$93]  |PARTITIONED|
                           -- UNNEST  |UNPARTITIONED|
                             -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
-                        -- HASH_PARTITION_EXCHANGE [$$76]  |PARTITIONED|
+                        -- HASH_PARTITION_EXCHANGE [$$86]  |PARTITIONED|
                           -- STREAM_PROJECT  |PARTITIONED|
                             -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- HYBRID_HASH_JOIN [$$85][$$80]  |PARTITIONED|
-                                -- HASH_PARTITION_EXCHANGE [$$85]  |PARTITIONED|
+                              -- HYBRID_HASH_JOIN [$$95][$$90]  |PARTITIONED|
+                                -- HASH_PARTITION_EXCHANGE [$$95]  |PARTITIONED|
                                   -- STREAM_PROJECT  |PARTITIONED|
                                     -- STREAM_SELECT  |PARTITIONED|
                                       -- ASSIGN  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-2.plan
index 28c4ffd..80014c7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-2.plan
@@ -4,7 +4,7 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$33][$$48]  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$34][$$49]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                 -- STREAM_PROJECT  |PARTITIONED|
                   -- ASSIGN  |PARTITIONED|
@@ -12,22 +12,22 @@
                       -- DATASOURCE_SCAN  |PARTITIONED|
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$48]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$49]  |PARTITIONED|
                 -- NESTED_LOOP  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                     -- STREAM_PROJECT  |PARTITIONED|
                       -- STREAM_SELECT  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- PRE_CLUSTERED_GROUP_BY[$$34, $$47]  |PARTITIONED|
+                            -- PRE_CLUSTERED_GROUP_BY[$$35, $$48]  |PARTITIONED|
                                     {
                                       -- AGGREGATE  |LOCAL|
                                         -- STREAM_SELECT  |LOCAL|
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                     }
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$34(ASC), $$47(ASC)]  |PARTITIONED|
-                                  -- HASH_PARTITION_EXCHANGE [$$34, $$47]  |PARTITIONED|
+                                -- STABLE_SORT [$$35(ASC), $$48(ASC)]  |PARTITIONED|
+                                  -- HASH_PARTITION_EXCHANGE [$$35, $$48]  |PARTITIONED|
                                     -- STREAM_PROJECT  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                         -- NESTED_LOOP  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-recursive-2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-recursive-2.plan
index 525500d..b1998f3 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-recursive-2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-recursive-2.plan
@@ -4,7 +4,7 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$56][$$63]  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$57][$$64]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                 -- STREAM_PROJECT  |PARTITIONED|
                   -- ASSIGN  |PARTITIONED|
@@ -12,22 +12,22 @@
                       -- DATASOURCE_SCAN  |PARTITIONED|
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$63]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$64]  |PARTITIONED|
                 -- NESTED_LOOP  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                     -- STREAM_PROJECT  |PARTITIONED|
                       -- STREAM_SELECT  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- PRE_CLUSTERED_GROUP_BY[$$43, $$62]  |PARTITIONED|
+                            -- PRE_CLUSTERED_GROUP_BY[$$44, $$63]  |PARTITIONED|
                                     {
                                       -- AGGREGATE  |LOCAL|
                                         -- STREAM_SELECT  |LOCAL|
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                     }
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$43(ASC), $$62(ASC)]  |PARTITIONED|
-                                  -- HASH_PARTITION_EXCHANGE [$$43, $$62]  |PARTITIONED|
+                                -- STABLE_SORT [$$44(ASC), $$63(ASC)]  |PARTITIONED|
+                                  -- HASH_PARTITION_EXCHANGE [$$44, $$63]  |PARTITIONED|
                                     -- STREAM_PROJECT  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                         -- NESTED_LOOP  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-recursive.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-recursive.plan
index b429c28..62352d7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-recursive.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017-recursive.plan
@@ -4,7 +4,7 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$52][$$58]  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$53][$$59]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                 -- STREAM_PROJECT  |PARTITIONED|
                   -- ASSIGN  |PARTITIONED|
@@ -17,22 +17,22 @@
                                 -- DATASOURCE_SCAN  |PARTITIONED|
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                     -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$58]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$59]  |PARTITIONED|
                 -- NESTED_LOOP  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                     -- STREAM_PROJECT  |PARTITIONED|
                       -- STREAM_SELECT  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- PRE_CLUSTERED_GROUP_BY[$$41, $$57]  |PARTITIONED|
+                            -- PRE_CLUSTERED_GROUP_BY[$$42, $$58]  |PARTITIONED|
                                     {
                                       -- AGGREGATE  |LOCAL|
                                         -- STREAM_SELECT  |LOCAL|
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                     }
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$41(ASC), $$57(ASC)]  |PARTITIONED|
-                                  -- HASH_PARTITION_EXCHANGE [$$41, $$57]  |PARTITIONED|
+                                -- STABLE_SORT [$$42(ASC), $$58(ASC)]  |PARTITIONED|
+                                  -- HASH_PARTITION_EXCHANGE [$$42, $$58]  |PARTITIONED|
                                     -- STREAM_PROJECT  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                         -- NESTED_LOOP  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017.plan
index 929d3da..2697384 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1017.plan
@@ -4,7 +4,7 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$30][$$42]  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$31][$$43]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                 -- STREAM_PROJECT  |PARTITIONED|
                   -- ASSIGN  |PARTITIONED|
@@ -12,26 +12,26 @@
                       -- DATASOURCE_SCAN  |PARTITIONED|
                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$42]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$43]  |PARTITIONED|
                 -- NESTED_LOOP  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                     -- STREAM_PROJECT  |PARTITIONED|
                       -- STREAM_SELECT  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- PRE_CLUSTERED_GROUP_BY[$$31, $$41]  |PARTITIONED|
+                            -- PRE_CLUSTERED_GROUP_BY[$$32, $$42]  |PARTITIONED|
                                     {
                                       -- AGGREGATE  |LOCAL|
                                         -- STREAM_SELECT  |LOCAL|
                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                     }
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                -- STABLE_SORT [$$31(ASC), $$41(ASC)]  |PARTITIONED|
-                                  -- HASH_PARTITION_EXCHANGE [$$31, $$41]  |PARTITIONED|
+                                -- STABLE_SORT [$$32(ASC), $$42(ASC)]  |PARTITIONED|
+                                  -- HASH_PARTITION_EXCHANGE [$$32, $$42]  |PARTITIONED|
                                     -- STREAM_PROJECT  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- HYBRID_HASH_JOIN [$$38][$$34]  |PARTITIONED|
-                                          -- HASH_PARTITION_EXCHANGE [$$38]  |PARTITIONED|
+                                        -- HYBRID_HASH_JOIN [$$39][$$35]  |PARTITIONED|
+                                          -- HASH_PARTITION_EXCHANGE [$$39]  |PARTITIONED|
                                             -- NESTED_LOOP  |PARTITIONED|
                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                 -- STREAM_PROJECT  |PARTITIONED|
@@ -46,7 +46,7 @@
                                                     -- DATASOURCE_SCAN  |PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                         -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                          -- HASH_PARTITION_EXCHANGE [$$34]  |PARTITIONED|
+                                          -- HASH_PARTITION_EXCHANGE [$$35]  |PARTITIONED|
                                             -- STREAM_PROJECT  |PARTITIONED|
                                               -- ASSIGN  |PARTITIONED|
                                                 -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1018.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1018.plan
index d7b279e..3eb81d9 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1018.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1018.plan
@@ -4,46 +4,46 @@
       -- ASSIGN  |PARTITIONED|
         -- STREAM_PROJECT  |PARTITIONED|
           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-            -- HYBRID_HASH_JOIN [$$34][$$47]  |PARTITIONED|
+            -- HYBRID_HASH_JOIN [$$35][$$48]  |PARTITIONED|
               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                 -- STREAM_PROJECT  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                     -- DATASOURCE_SCAN  |PARTITIONED|
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                         -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-              -- HASH_PARTITION_EXCHANGE [$$47]  |PARTITIONED|
+              -- HASH_PARTITION_EXCHANGE [$$48]  |PARTITIONED|
                 -- STREAM_PROJECT  |PARTITIONED|
                   -- ASSIGN  |PARTITIONED|
                     -- STREAM_PROJECT  |PARTITIONED|
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- PRE_CLUSTERED_GROUP_BY[$$51, $$24, $$52]  |PARTITIONED|
+                        -- PRE_CLUSTERED_GROUP_BY[$$52, $$24, $$53]  |PARTITIONED|
                                 {
                                   -- AGGREGATE  |LOCAL|
                                     -- STREAM_SELECT  |LOCAL|
                                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                                 }
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- STABLE_SORT [$$51(ASC), $$24(ASC), $$52(ASC)]  |PARTITIONED|
-                              -- HASH_PARTITION_EXCHANGE [$$51, $$24, $$52]  |PARTITIONED|
+                            -- STABLE_SORT [$$52(ASC), $$24(ASC), $$53(ASC)]  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$52, $$24, $$53]  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                     -- NESTED_LOOP  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                         -- STREAM_SELECT  |PARTITIONED|
                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- PRE_CLUSTERED_GROUP_BY[$$35, $$46]  |PARTITIONED|
+                                            -- PRE_CLUSTERED_GROUP_BY[$$36, $$47]  |PARTITIONED|
                                                     {
                                                       -- AGGREGATE  |LOCAL|
                                                         -- STREAM_SELECT  |LOCAL|
                                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                                     }
                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                -- STABLE_SORT [$$35(ASC), $$46(ASC)]  |PARTITIONED|
-                                                  -- HASH_PARTITION_EXCHANGE [$$35, $$46]  |PARTITIONED|
+                                                -- STABLE_SORT [$$36(ASC), $$47(ASC)]  |PARTITIONED|
+                                                  -- HASH_PARTITION_EXCHANGE [$$36, $$47]  |PARTITIONED|
                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                        -- HYBRID_HASH_JOIN [$$44][$$38]  |PARTITIONED|
-                                                          -- HASH_PARTITION_EXCHANGE [$$44]  |PARTITIONED|
+                                                        -- HYBRID_HASH_JOIN [$$45][$$39]  |PARTITIONED|
+                                                          -- HASH_PARTITION_EXCHANGE [$$45]  |PARTITIONED|
                                                             -- NESTED_LOOP  |PARTITIONED|
                                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                 -- STREAM_PROJECT  |PARTITIONED|
@@ -59,7 +59,7 @@
                                                                       -- DATASOURCE_SCAN  |PARTITIONED|
                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                          -- HASH_PARTITION_EXCHANGE [$$38]  |PARTITIONED|
+                                                          -- HASH_PARTITION_EXCHANGE [$$39]  |PARTITIONED|
                                                             -- STREAM_PROJECT  |PARTITIONED|
                                                               -- ASSIGN  |PARTITIONED|
                                                                 -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1019.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1019.plan
index 5b2405b..b910acf 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1019.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1019.plan
@@ -2,7 +2,7 @@
   -- STREAM_PROJECT  |PARTITIONED|
     -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
       -- INSERT_DELETE  |PARTITIONED|
-        -- HASH_PARTITION_EXCHANGE [$$34]  |PARTITIONED|
+        -- HASH_PARTITION_EXCHANGE [$$35]  |PARTITIONED|
           -- ASSIGN  |PARTITIONED|
             -- STREAM_PROJECT  |PARTITIONED|
               -- ASSIGN  |PARTITIONED|
@@ -12,46 +12,46 @@
                       -- ASSIGN  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- HYBRID_HASH_JOIN [$$38][$$51]  |PARTITIONED|
+                            -- HYBRID_HASH_JOIN [$$39][$$52]  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                     -- DATASOURCE_SCAN  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                         -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                              -- HASH_PARTITION_EXCHANGE [$$51]  |PARTITIONED|
+                              -- HASH_PARTITION_EXCHANGE [$$52]  |PARTITIONED|
                                 -- STREAM_PROJECT  |PARTITIONED|
                                   -- ASSIGN  |PARTITIONED|
                                     -- STREAM_PROJECT  |PARTITIONED|
                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                        -- PRE_CLUSTERED_GROUP_BY[$$56, $$24, $$55]  |PARTITIONED|
+                                        -- PRE_CLUSTERED_GROUP_BY[$$57, $$24, $$56]  |PARTITIONED|
                                                 {
                                                   -- AGGREGATE  |LOCAL|
                                                     -- STREAM_SELECT  |LOCAL|
                                                       -- NESTED_TUPLE_SOURCE  |LOCAL|
                                                 }
                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                            -- STABLE_SORT [$$56(ASC), $$24(ASC), $$55(ASC)]  |PARTITIONED|
-                                              -- HASH_PARTITION_EXCHANGE [$$56, $$24, $$55]  |PARTITIONED|
+                                            -- STABLE_SORT [$$57(ASC), $$24(ASC), $$56(ASC)]  |PARTITIONED|
+                                              -- HASH_PARTITION_EXCHANGE [$$57, $$24, $$56]  |PARTITIONED|
                                                 -- STREAM_PROJECT  |PARTITIONED|
                                                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                     -- NESTED_LOOP  |PARTITIONED|
                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                         -- STREAM_SELECT  |PARTITIONED|
                                                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                            -- PRE_CLUSTERED_GROUP_BY[$$50, $$39]  |PARTITIONED|
+                                                            -- PRE_CLUSTERED_GROUP_BY[$$51, $$40]  |PARTITIONED|
                                                                     {
                                                                       -- AGGREGATE  |LOCAL|
                                                                         -- STREAM_SELECT  |LOCAL|
                                                                           -- NESTED_TUPLE_SOURCE  |LOCAL|
                                                                     }
                                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                -- STABLE_SORT [$$50(ASC), $$39(ASC)]  |PARTITIONED|
-                                                                  -- HASH_PARTITION_EXCHANGE [$$50, $$39]  |PARTITIONED|
+                                                                -- STABLE_SORT [$$51(ASC), $$40(ASC)]  |PARTITIONED|
+                                                                  -- HASH_PARTITION_EXCHANGE [$$51, $$40]  |PARTITIONED|
                                                                     -- STREAM_PROJECT  |PARTITIONED|
                                                                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                                                        -- HYBRID_HASH_JOIN [$$48][$$42]  |PARTITIONED|
-                                                                          -- HASH_PARTITION_EXCHANGE [$$48]  |PARTITIONED|
+                                                                        -- HYBRID_HASH_JOIN [$$49][$$43]  |PARTITIONED|
+                                                                          -- HASH_PARTITION_EXCHANGE [$$49]  |PARTITIONED|
                                                                             -- NESTED_LOOP  |PARTITIONED|
                                                                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                 -- STREAM_PROJECT  |PARTITIONED|
@@ -67,7 +67,7 @@
                                                                                       -- DATASOURCE_SCAN  |PARTITIONED|
                                                                                         -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                                                                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
-                                                                          -- HASH_PARTITION_EXCHANGE [$$42]  |PARTITIONED|
+                                                                          -- HASH_PARTITION_EXCHANGE [$$43]  |PARTITIONED|
                                                                             -- STREAM_PROJECT  |PARTITIONED|
                                                                               -- ASSIGN  |PARTITIONED|
                                                                                 -- STREAM_PROJECT  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1020.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1020.plan
index 7eb6d35..5558ad4 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1020.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1020.plan
@@ -14,15 +14,15 @@
               -- STREAM_SELECT  |PARTITIONED|
                 -- STREAM_PROJECT  |PARTITIONED|
                   -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                    -- PRE_CLUSTERED_GROUP_BY[$$32]  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$33]  |PARTITIONED|
                             {
                               -- AGGREGATE  |LOCAL|
                                 -- STREAM_SELECT  |LOCAL|
                                   -- NESTED_TUPLE_SOURCE  |LOCAL|
                             }
                       -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                        -- STABLE_SORT [$$32(ASC)]  |PARTITIONED|
-                          -- HASH_PARTITION_EXCHANGE [$$32]  |PARTITIONED|
+                        -- STABLE_SORT [$$33(ASC)]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$33]  |PARTITIONED|
                             -- STREAM_PROJECT  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                 -- NESTED_LOOP  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1308-1.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1308-1.plan
index 3664ed8..99240dc 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1308-1.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1308-1.plan
@@ -23,25 +23,19 @@
                                 -- ASSIGN  |UNPARTITIONED|
                                   -- STREAM_PROJECT  |UNPARTITIONED|
                                     -- UNNEST  |UNPARTITIONED|
-                                      -- STREAM_PROJECT  |UNPARTITIONED|
-                                        -- SUBPLAN  |UNPARTITIONED|
-                                                {
-                                                  -- ASSIGN  |UNPARTITIONED|
-                                                    -- SUBPLAN  |UNPARTITIONED|
-                                                            {
-                                                              -- AGGREGATE  |UNPARTITIONED|
-                                                                -- STREAM_SELECT  |UNPARTITIONED|
-                                                                  -- UNNEST  |UNPARTITIONED|
-                                                                    -- SUBPLAN  |UNPARTITIONED|
-                                                                            {
-                                                                              -- AGGREGATE  |UNPARTITIONED|
-                                                                                -- IN_MEMORY_STABLE_SORT [$$21(ASC)]  |UNPARTITIONED|
-                                                                                  -- UNNEST  |UNPARTITIONED|
-                                                                                    -- NESTED_TUPLE_SOURCE  |UNPARTITIONED|
-                                                                            }
+                                      -- SUBPLAN  |UNPARTITIONED|
+                                              {
+                                                -- AGGREGATE  |UNPARTITIONED|
+                                                  -- STREAM_SELECT  |UNPARTITIONED|
+                                                    -- UNNEST  |UNPARTITIONED|
+                                                      -- SUBPLAN  |UNPARTITIONED|
+                                                              {
+                                                                -- AGGREGATE  |UNPARTITIONED|
+                                                                  -- IN_MEMORY_STABLE_SORT [$$21(ASC)]  |UNPARTITIONED|
+                                                                    -- UNNEST  |UNPARTITIONED|
                                                                       -- NESTED_TUPLE_SOURCE  |UNPARTITIONED|
-                                                            }
-                                                      -- NESTED_TUPLE_SOURCE  |UNPARTITIONED|
-                                                }
-                                          -- ASSIGN  |UNPARTITIONED|
-                                            -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+                                                              }
+                                                        -- NESTED_TUPLE_SOURCE  |UNPARTITIONED|
+                                              }
+                                        -- ASSIGN  |UNPARTITIONED|
+                                          -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1308-2.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1308-2.plan
index caf4c48..aa22db0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1308-2.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/udfs/query-ASTERIXDB-1308-2.plan
@@ -5,73 +5,56 @@
         -- STREAM_PROJECT  |PARTITIONED|
           -- SUBPLAN  |PARTITIONED|
                   {
-                    -- SUBPLAN  |LOCAL|
-                            {
-                              -- SUBPLAN  |LOCAL|
-                                      {
-                                        -- ASSIGN  |LOCAL|
-                                          -- SUBPLAN  |LOCAL|
-                                                  {
-                                                    -- AGGREGATE  |LOCAL|
-                                                      -- STREAM_SELECT  |LOCAL|
-                                                        -- ASSIGN  |LOCAL|
-                                                          -- UNNEST  |LOCAL|
-                                                            -- SUBPLAN  |LOCAL|
-                                                                    {
-                                                                      -- AGGREGATE  |LOCAL|
-                                                                        -- IN_MEMORY_STABLE_SORT [$$38(ASC)]  |LOCAL|
-                                                                          -- UNNEST  |LOCAL|
-                                                                            -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                                    }
-                                                              -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                  }
+                    -- AGGREGATE  |LOCAL|
+                      -- STREAM_SELECT  |LOCAL|
+                        -- ASSIGN  |LOCAL|
+                          -- UNNEST  |LOCAL|
+                            -- SUBPLAN  |LOCAL|
+                                    {
+                                      -- AGGREGATE  |LOCAL|
+                                        -- IN_MEMORY_STABLE_SORT [$$38(ASC)]  |LOCAL|
+                                          -- UNNEST  |LOCAL|
                                             -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                      }
-                                -- SUBPLAN  |LOCAL|
-                                        {
-                                          -- AGGREGATE  |LOCAL|
-                                            -- IN_MEMORY_STABLE_SORT [$$98(ASC)]  |LOCAL|
-                                              -- ASSIGN  |LOCAL|
-                                                -- UNNEST  |LOCAL|
-                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                        }
-                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
-                            }
-                      -- SUBPLAN  |LOCAL|
-                              {
-                                -- ASSIGN  |LOCAL|
+                                    }
+                              -- NESTED_TUPLE_SOURCE  |LOCAL|
+                  }
+            -- STREAM_PROJECT  |PARTITIONED|
+              -- SUBPLAN  |PARTITIONED|
+                      {
+                        -- AGGREGATE  |LOCAL|
+                          -- IN_MEMORY_STABLE_SORT [$$98(ASC)]  |LOCAL|
+                            -- ASSIGN  |LOCAL|
+                              -- UNNEST  |LOCAL|
+                                -- NESTED_TUPLE_SOURCE  |LOCAL|
+                      }
+                -- SUBPLAN  |PARTITIONED|
+                        {
+                          -- AGGREGATE  |LOCAL|
+                            -- STREAM_SELECT  |LOCAL|
+                              -- ASSIGN  |LOCAL|
+                                -- UNNEST  |LOCAL|
                                   -- SUBPLAN  |LOCAL|
                                           {
                                             -- AGGREGATE  |LOCAL|
-                                              -- STREAM_SELECT  |LOCAL|
-                                                -- ASSIGN  |LOCAL|
-                                                  -- UNNEST  |LOCAL|
-                                                    -- SUBPLAN  |LOCAL|
-                                                            {
-                                                              -- AGGREGATE  |LOCAL|
-                                                                -- IN_MEMORY_STABLE_SORT [$$31(ASC)]  |LOCAL|
-                                                                  -- UNNEST  |LOCAL|
-                                                                    -- NESTED_TUPLE_SOURCE  |LOCAL|
-                                                            }
-                                                      -- NESTED_TUPLE_SOURCE  |LOCAL|
+                                              -- IN_MEMORY_STABLE_SORT [$$31(ASC)]  |LOCAL|
+                                                -- UNNEST  |LOCAL|
+                                                  -- NESTED_TUPLE_SOURCE  |LOCAL|
                                           }
                                     -- NESTED_TUPLE_SOURCE  |LOCAL|
-                              }
-                        -- NESTED_TUPLE_SOURCE  |LOCAL|
-                  }
-            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-              -- PRE_CLUSTERED_GROUP_BY[$$94, $$95, $$96, $$97]  |PARTITIONED|
-                      {
-                        -- AGGREGATE  |LOCAL|
-                          -- NESTED_TUPLE_SOURCE  |LOCAL|
-                      }
-                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                  -- STABLE_SORT [$$94(ASC), $$95(ASC), $$96(ASC), $$97(ASC)]  |PARTITIONED|
-                    -- HASH_PARTITION_EXCHANGE [$$94, $$95, $$96, $$97]  |PARTITIONED|
-                      -- STREAM_PROJECT  |PARTITIONED|
-                        -- ASSIGN  |PARTITIONED|
-                          -- STREAM_PROJECT  |PARTITIONED|
-                            -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                              -- DATASOURCE_SCAN  |PARTITIONED|
-                                -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                                  -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
+                        }
+                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                    -- PRE_CLUSTERED_GROUP_BY[$$94, $$95, $$96, $$97]  |PARTITIONED|
+                            {
+                              -- AGGREGATE  |LOCAL|
+                                -- NESTED_TUPLE_SOURCE  |LOCAL|
+                            }
+                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                        -- STABLE_SORT [$$94(ASC), $$95(ASC), $$96(ASC), $$97(ASC)]  |PARTITIONED|
+                          -- HASH_PARTITION_EXCHANGE [$$94, $$95, $$96, $$97]  |PARTITIONED|
+                            -- STREAM_PROJECT  |PARTITIONED|
+                              -- ASSIGN  |PARTITIONED|
+                                -- STREAM_PROJECT  |PARTITIONED|
+                                  -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                    -- DATASOURCE_SCAN  |PARTITIONED|
+                                      -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
+                                        -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/count-tweets.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/count-tweets.ast
index a727fb4..4208580 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/count-tweets.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/count-tweets.ast
@@ -61,8 +61,7 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    tokens:=Variable [ Name=$tokens ]
-    token:=Variable [ Name=$token ]
     t:=Variable [ Name=$t ]
+    token:=Variable [ Name=$token ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/denorm-cust-order.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/denorm-cust-order.ast
index 41092db..557eece 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/denorm-cust-order.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/denorm-cust-order.ast
@@ -102,7 +102,7 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    o:=Variable [ Name=$o ]
     c:=Variable [ Name=$c ]
+    o:=Variable [ Name=$o ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-dblp-csx.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-dblp-csx.ast
index 3ca4a03..3367a13 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-dblp-csx.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-dblp-csx.ast
@@ -172,16 +172,10 @@
   Variable [ Name=$idCSX ]
   GROUP AS Variable [ Name=#1 ]
   (
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    unrankedTokensCSX:=Variable [ Name=$unrankedTokensCSX ]
-    idCSX:=Variable [ Name=$idCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    unrankedTokensDBLP:=Variable [ Name=$unrankedTokensDBLP ]
-    idDBLP:=Variable [ Name=$idDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-phase1.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-phase1.ast
index b5e5161..2210b9c 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-phase1.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-phase1.ast
@@ -74,8 +74,8 @@
           Variable [ Name=$lottery_number ]
           GROUP AS Variable [ Name=#1 ]
           (
-            lottery_number:=Variable [ Name=$lottery_number ]
             user:=Variable [ Name=$user ]
+            lottery_number:=Variable [ Name=$lottery_number ]
           )
 
         Let Variable [ Name=$count ]
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-phase2-with-hints.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-phase2-with-hints.ast
index ee802a0..dabf888 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-phase2-with-hints.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/fj-phase2-with-hints.ast
@@ -73,10 +73,8 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            unrankedTokensDBLP:=Variable [ Name=$unrankedTokensDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/inlined_q18_large_volume_customer.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/inlined_q18_large_volume_customer.ast
index 72a1958..c503d72 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/inlined_q18_large_volume_customer.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/inlined_q18_large_volume_customer.ast
@@ -147,8 +147,6 @@
       GROUP AS Variable [ Name=#1 ]
       (
         l:=Variable [ Name=$l ]
-        o:=Variable [ Name=$o ]
-        c:=Variable [ Name=$c ]
       )
 
   )
@@ -241,10 +239,10 @@
   ]
   GROUP AS Variable [ Name=#2 ]
   (
-    l:=Variable [ Name=$l ]
-    t:=Variable [ Name=$t ]
-    o:=Variable [ Name=$o ]
     c:=Variable [ Name=$c ]
+    o:=Variable [ Name=$o ]
+    t:=Variable [ Name=$t ]
+    l:=Variable [ Name=$l ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/nest_aggregate.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/nest_aggregate.ast
index 951e744..d69ca94 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/nest_aggregate.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/nest_aggregate.ast
@@ -162,10 +162,8 @@
         ]
         GROUP AS Variable [ Name=#1 ]
         (
-          customer:=Variable [ Name=$customer ]
           orders:=Variable [ Name=$orders ]
-          sn:=Variable [ Name=$sn ]
-          nation:=Variable [ Name=$nation ]
+          customer:=Variable [ Name=$customer ]
         )
 
       Let Variable [ Name=$sum ]
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/orders-aggreg.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/orders-aggreg.ast
index 3f1faf2..91378e0 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/orders-aggreg.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/orders-aggreg.ast
@@ -23,17 +23,7 @@
     LiteralExpr [STRING] [ordpercust]
     :
     FunctionCall orders-aggreg.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=o
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$o ]
     ]
   )
   (
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q01_pricing_summary_report_nt.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q01_pricing_summary_report_nt.ast
index 1a91b41..d36738f 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q01_pricing_summary_report_nt.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q01_pricing_summary_report_nt.ast
@@ -188,17 +188,7 @@
     LiteralExpr [STRING] [count_order]
     :
     FunctionCall tpch.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=l
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$l ]
     ]
   )
 ]
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q03_shipping_priority.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q03_shipping_priority.ast
index 2a34cb7..041dfb7 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q03_shipping_priority.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q03_shipping_priority.ast
@@ -166,9 +166,9 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    l:=Variable [ Name=$l ]
-    o:=Variable [ Name=$o ]
     c:=Variable [ Name=$c ]
+    o:=Variable [ Name=$o ]
+    l:=Variable [ Name=$l ]
   )
 
 Let Variable [ Name=$revenue ]
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q05_local_supplier_volume.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q05_local_supplier_volume.ast
index f913928..4340fed 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q05_local_supplier_volume.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q05_local_supplier_volume.ast
@@ -388,8 +388,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    o1:=Variable [ Name=$o1 ]
     c:=Variable [ Name=$c ]
+    o1:=Variable [ Name=$o1 ]
   )
 
 Let Variable [ Name=$revenue ]
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q2.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q2.ast
index 37eefd4..1b01e10 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q2.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/q2.ast
@@ -85,9 +85,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    es:=Variable [ Name=$es ]
-    sponsor:=Variable [ Name=$sponsor ]
     event:=Variable [ Name=$event ]
+    sponsor:=Variable [ Name=$sponsor ]
   )
 
 Let Variable [ Name=$sig_sponsorship_count ]
@@ -95,9 +94,8 @@
   FunctionCall events.sql-count@1[
     (
       SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=es
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [es]
       ]
       ]
       FROM [        Variable [ Name=#1 ]
@@ -134,7 +132,9 @@
       )
     ]
     ]
-    FROM [      Variable [ Name=$es ]
+    FROM [      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [es]
+      ]
       AS Variable [ Name=$e ]
     ]
     Groupby
@@ -150,12 +150,6 @@
       GROUP AS Variable [ Name=#3 ]
       (
         e:=Variable [ Name=$e ]
-        sig_sponsorship_count:=Variable [ Name=$sig_sponsorship_count ]
-        es:=Variable [ Name=$es ]
-        event:=Variable [ Name=$event ]
-        sponsor:=Variable [ Name=$sponsor ]
-        sig_name:=Variable [ Name=$sig_name ]
-        #1:=Variable [ Name=#1 ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue550.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue550.ast
index f8988ad..e5a516d 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue550.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue550.ast
@@ -181,6 +181,5 @@
   GROUP AS Variable [ Name=#1 ]
   (
     s:=Variable [ Name=$s ]
-    sample:=Variable [ Name=$sample ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue562.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue562.ast
index 4025ed0..24cafba 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue562.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue562.ast
@@ -227,17 +227,7 @@
     LiteralExpr [STRING] [numcust]
     :
     FunctionCall tpch.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=ct
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$ct ]
     ]
   )
   (
@@ -302,7 +292,6 @@
   GROUP AS Variable [ Name=#1 ]
   (
     ct:=Variable [ Name=$ct ]
-    avg:=Variable [ Name=$avg ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue785.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue785.ast
index 31d5bbc..cf4c9c1 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue785.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/query-issue785.ast
@@ -179,10 +179,9 @@
       ]
       GROUP AS Variable [ Name=#1 ]
       (
-        orders:=Variable [ Name=$orders ]
-        customer:=Variable [ Name=$customer ]
         n:=Variable [ Name=$n ]
-        t:=Variable [ Name=$t ]
+        customer:=Variable [ Name=$customer ]
+        orders:=Variable [ Name=$orders ]
       )
 
     Let Variable [ Name=$sum ]
@@ -261,7 +260,5 @@
   GROUP AS Variable [ Name=#2 ]
   (
     x:=Variable [ Name=$x ]
-    X:=Variable [ Name=$X ]
-    t:=Variable [ Name=$t ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/split-materialization-above-join.ast b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/split-materialization-above-join.ast
index 7f7b2f3..b12ce2a 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/split-materialization-above-join.ast
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results_parser_sqlpp/split-materialization-above-join.ast
@@ -60,7 +60,9 @@
         LiteralExpr [STRING] [sim]
         :
         IndexAccessor [
-          Variable [ Name=$sim ]
+          FunctionCall Metadata.dataset@1[
+            LiteralExpr [STRING] [sim]
+          ]
           Index:           LiteralExpr [LONG] [0]
         ]
       )
@@ -151,14 +153,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenLeft:=Variable [ Name=$lenLeft ]
-                prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-                paperRight:=Variable [ Name=$paperRight ]
-                prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
-                paperLeft:=Variable [ Name=$paperLeft ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -242,16 +238,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenRight:=Variable [ Name=$lenRight ]
-                tokensLeft:=Variable [ Name=$tokensLeft ]
-                lenLeft:=Variable [ Name=$lenLeft ]
-                prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-                paperRight:=Variable [ Name=$paperRight ]
-                prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
-                paperLeft:=Variable [ Name=$paperLeft ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -341,15 +329,10 @@
       ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensRight:=Variable [ Name=$tokensRight ]
-        lenRight:=Variable [ Name=$lenRight ]
-        tokensLeft:=Variable [ Name=$tokensLeft ]
-        lenLeft:=Variable [ Name=$lenLeft ]
-        prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-        paperRight:=Variable [ Name=$paperRight ]
-        prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
         paperLeft:=Variable [ Name=$paperLeft ]
+        prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
+        paperRight:=Variable [ Name=$paperRight ]
+        prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/2.ast b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/2.ast
index a57de72..a5cdcdf 100644
--- a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/2.ast
+++ b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/2.ast
@@ -52,9 +52,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    es:=Variable [ Name=$es ]
-    sponsor:=Variable [ Name=$sponsor ]
     event:=Variable [ Name=$event ]
+    sponsor:=Variable [ Name=$sponsor ]
   )
 
 Let Variable [ Name=$sig_sponsorship_count ]
@@ -62,9 +61,8 @@
   FunctionCall null.sql-count@1[
     (
       SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=es
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [es]
       ]
       ]
       FROM [        Variable [ Name=#1 ]
@@ -88,9 +86,8 @@
         FunctionCall null.sql-count@1[
           (
             SELECT ELEMENT [
-            FieldAccessor [
-              Variable [ Name=#4 ]
-              Field=es
+            FunctionCall Metadata.dataset@1[
+              LiteralExpr [STRING] [es]
             ]
             ]
             FROM [              Variable [ Name=#3 ]
@@ -101,7 +98,9 @@
       )
     ]
     ]
-    FROM [      Variable [ Name=$es ]
+    FROM [      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [es]
+      ]
       AS Variable [ Name=$e ]
     ]
     Groupby
@@ -117,12 +116,6 @@
       GROUP AS Variable [ Name=#3 ]
       (
         e:=Variable [ Name=$e ]
-        sig_sponsorship_count:=Variable [ Name=$sig_sponsorship_count ]
-        es:=Variable [ Name=$es ]
-        event:=Variable [ Name=$event ]
-        sponsor:=Variable [ Name=$sponsor ]
-        sig_name:=Variable [ Name=$sig_name ]
-        #1:=Variable [ Name=#1 ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/columnalias.ast b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/columnalias.ast
index 14b5108..78d6362 100644
--- a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/columnalias.ast
+++ b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/columnalias.ast
@@ -1,6 +1,18 @@
 Query:
 SELECT [
-Variable [ Name=$root ]
+FunctionCall null.SQRT@1[
+  OperatorExpr [
+    FieldAccessor [
+      Variable [ Name=$t ]
+      Field=a
+    ]
+    *
+    FieldAccessor [
+      Variable [ Name=$t ]
+      Field=b
+    ]
+  ]
+]
 root
 ]
 FROM [  FunctionCall Metadata.dataset@1[
diff --git a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/columnalias3.ast b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/columnalias3.ast
index cdd4653..056fe36 100644
--- a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/columnalias3.ast
+++ b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/columnalias3.ast
@@ -4,7 +4,19 @@
   (
     LiteralExpr [STRING] [root]
     :
-    Variable [ Name=$root ]
+    FunctionCall null.SQRT@1[
+      OperatorExpr [
+        FieldAccessor [
+          Variable [ Name=$t ]
+          Field=a
+        ]
+        *
+        FieldAccessor [
+          Variable [ Name=$t ]
+          Field=b
+        ]
+      ]
+    ]
   )
 ]
 ]
diff --git a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/nestedFLWOGR3.ast b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/nestedFLWOGR3.ast
index f4fcf1f..9454ebc 100644
--- a/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/nestedFLWOGR3.ast
+++ b/asterixdb/asterix-app/src/test/resources/parserts/results_parser_sqlpp/nestedFLWOGR3.ast
@@ -52,9 +52,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    es:=Variable [ Name=$es ]
-    sponsor:=Variable [ Name=$sponsor ]
     event:=Variable [ Name=$event ]
+    sponsor:=Variable [ Name=$sponsor ]
   )
 
 Let Variable [ Name=$sig_sponsorship_count ]
@@ -62,9 +61,8 @@
   FunctionCall null.sql-count@1[
     (
       SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=es
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [es]
       ]
       ]
       FROM [        Variable [ Name=#1 ]
@@ -88,9 +86,8 @@
         FunctionCall null.sql-count@1[
           (
             SELECT ELEMENT [
-            FieldAccessor [
-              Variable [ Name=#4 ]
-              Field=es
+            FunctionCall Metadata.dataset@1[
+              LiteralExpr [STRING] [es]
             ]
             ]
             FROM [              Variable [ Name=#3 ]
@@ -101,7 +98,9 @@
       )
     ]
     ]
-    FROM [      Variable [ Name=$es ]
+    FROM [      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [es]
+      ]
       AS Variable [ Name=$e ]
     ]
     Groupby
@@ -117,12 +116,6 @@
       GROUP AS Variable [ Name=#3 ]
       (
         e:=Variable [ Name=$e ]
-        sig_sponsorship_count:=Variable [ Name=$sig_sponsorship_count ]
-        es:=Variable [ Name=$es ]
-        event:=Variable [ Name=$event ]
-        sponsor:=Variable [ Name=$sponsor ]
-        sig_name:=Variable [ Name=$sig_name ]
-        #1:=Variable [ Name=#1 ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.1.ddl.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.1.ddl.aql
new file mode 100644
index 0000000..ed74a09
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.1.ddl.aql
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use dataverse test;
+
+create type account as open
+{ id: int32, sum:int32 }
+
+create dataset Accounts(account) primary key id;
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.2.update.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.2.update.aql
new file mode 100644
index 0000000..477beec
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.2.update.aql
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use dataverse test;
+
+insert into dataset Accounts(
+{"id": 1, "sum":100}
+)
+insert into dataset Accounts(
+{"id": 2, "sum":150}
+)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.3.query.aql b/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.3.query.aql
new file mode 100644
index 0000000..70954bd
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.3.query.aql
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+use dataverse test;
+
+for $x in range(1,2)
+return(
+     let $z:=(for $y in dataset Accounts where $y.id=$x return $y)
+     return {"x":$x, "z":$z}
+)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.1.ddl.sqlpp
new file mode 100644
index 0000000..99eae31
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.1.ddl.sqlpp
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.AddressType as
+ closed {
+  street : string,
+  city : string,
+  zip : string,
+  latlong : point
+}
+
+create type test.EventType as
+ closed {
+  event_id : int64,
+  name : string,
+  location : AddressType?,
+  organizers : {{{
+          name : string
+      }
+}},
+  sponsoring_sigs : [{
+          sig_id : int64,
+          chapter_name : string
+      }
+],
+  interest_keywords : {{string}},
+  price : double?,
+  start_time : datetime,
+  end_time : datetime
+}
+
+create external  dataset Event(EventType) using localfs((`path`=`asterix_nc1://data/events/tiny/event.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.2.update.sqlpp
new file mode 100644
index 0000000..bd244d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.2.update.sqlpp
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.3.query.sqlpp
new file mode 100644
index 0000000..119f28b
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-10/q2-10.3.query.sqlpp
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+USE test;
+
+// Tests references to a WITH binding variable in nested GROUP BY.
+WITH t AS 1
+
+SELECT sponsor.sig_id, COUNT(2 * t) total_count,
+       (
+         SELECT e.sponsor.chapter_name, COUNT(2 * t) AS escount
+         FROM es AS e
+         GROUP BY e.sponsor.chapter_name
+       ) chapter_breakdown
+FROM  Event,
+      Event.sponsoring_sigs AS sponsor
+GROUP BY sponsor.sig_id GROUP AS es
+ORDER BY total_count DESC
+LIMIT 5
+;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.1.ddl.sqlpp
new file mode 100644
index 0000000..99eae31
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.1.ddl.sqlpp
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.AddressType as
+ closed {
+  street : string,
+  city : string,
+  zip : string,
+  latlong : point
+}
+
+create type test.EventType as
+ closed {
+  event_id : int64,
+  name : string,
+  location : AddressType?,
+  organizers : {{{
+          name : string
+      }
+}},
+  sponsoring_sigs : [{
+          sig_id : int64,
+          chapter_name : string
+      }
+],
+  interest_keywords : {{string}},
+  price : double?,
+  start_time : datetime,
+  end_time : datetime
+}
+
+create external  dataset Event(EventType) using localfs((`path`=`asterix_nc1://data/events/tiny/event.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.2.update.sqlpp
new file mode 100644
index 0000000..bd244d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.2.update.sqlpp
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.3.query.sqlpp
new file mode 100644
index 0000000..0b90993
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11/q2-11.3.query.sqlpp
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+USE test;
+
+// Tests references to a WITH binding variable for a select query in nested GROUP BY.
+WITH t AS (
+   SELECT VALUE AVG(v)
+   FROM [1, 2, 3] v
+)[0]
+
+SELECT sponsor.sig_id, COUNT(2 * t) total_count,
+       (
+         SELECT e.sponsor.chapter_name, COUNT(2 * t) AS escount
+         FROM es AS e
+         GROUP BY e.sponsor.chapter_name
+       ) chapter_breakdown
+FROM  Event,
+      Event.sponsoring_sigs AS sponsor
+GROUP BY sponsor.sig_id GROUP AS es
+ORDER BY total_count DESC
+LIMIT 5
+;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.1.ddl.sqlpp
new file mode 100644
index 0000000..99eae31
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.1.ddl.sqlpp
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.AddressType as
+ closed {
+  street : string,
+  city : string,
+  zip : string,
+  latlong : point
+}
+
+create type test.EventType as
+ closed {
+  event_id : int64,
+  name : string,
+  location : AddressType?,
+  organizers : {{{
+          name : string
+      }
+}},
+  sponsoring_sigs : [{
+          sig_id : int64,
+          chapter_name : string
+      }
+],
+  interest_keywords : {{string}},
+  price : double?,
+  start_time : datetime,
+  end_time : datetime
+}
+
+create external  dataset Event(EventType) using localfs((`path`=`asterix_nc1://data/events/tiny/event.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.2.update.sqlpp
new file mode 100644
index 0000000..bd244d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.2.update.sqlpp
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.3.query.sqlpp
new file mode 100644
index 0000000..5210ced
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-12/q2-12.3.query.sqlpp
@@ -0,0 +1,39 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+USE test;
+
+// Tests references to an outer scope variable in a nested global aggregate.
+WITH t AS (
+   SELECT VALUE AVG(v)
+   FROM [1, 2, 3] v
+)[0]
+
+SELECT sponsor.sig_id, COUNT(2 * t) total_count,
+       (
+         SELECT sponsor.sig_id, COUNT(e)
+         FROM es AS e
+       ) chapter_breakdown
+FROM  Event,
+      Event.sponsoring_sigs AS sponsor
+GROUP BY sponsor.sig_id GROUP AS es
+ORDER BY total_count DESC
+LIMIT 5
+;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.1.ddl.sqlpp
new file mode 100644
index 0000000..99eae31
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.1.ddl.sqlpp
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.AddressType as
+ closed {
+  street : string,
+  city : string,
+  zip : string,
+  latlong : point
+}
+
+create type test.EventType as
+ closed {
+  event_id : int64,
+  name : string,
+  location : AddressType?,
+  organizers : {{{
+          name : string
+      }
+}},
+  sponsoring_sigs : [{
+          sig_id : int64,
+          chapter_name : string
+      }
+],
+  interest_keywords : {{string}},
+  price : double?,
+  start_time : datetime,
+  end_time : datetime
+}
+
+create external  dataset Event(EventType) using localfs((`path`=`asterix_nc1://data/events/tiny/event.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.2.update.sqlpp
new file mode 100644
index 0000000..bd244d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.2.update.sqlpp
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.3.query.sqlpp
new file mode 100644
index 0000000..8a5d32d
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2-negative/q2-2-negative.3.query.sqlpp
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+/*
+ * This query is a negative test for default group variable's fields.
+ */
+
+use test;
+
+
+select element {'sig_id':sig_id,'total_count':sig_sponsorship_count,'chapter_breakdown':by_chapter}
+from  Event as event,
+      event.sponsoring_sigs as sponsor
+let  e = {'event':event,'sponsor':sponsor}
+group by sponsor.sig_id as sig_id
+let  sig_sponsorship_count = count(1),
+      by_chapter = (
+      select element {'chapter_name':chapter_name,'escount':count(e)}
+      from  e as e
+      group by e.sponsor.chapter_name as chapter_name
+  )
+order by sig_sponsorship_count desc
+limit 5
+;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2/q2-2.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2/q2-2.3.query.sqlpp
index 307ad80..bf968cc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2/q2-2.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-2/q2-2.3.query.sqlpp
@@ -27,10 +27,9 @@
 select element {'sig_id':sig_id,'total_count':sig_sponsorship_count,'chapter_breakdown':by_chapter}
 from  Event as event,
       event.sponsoring_sigs as sponsor
-with  e as {'event':event,'sponsor':sponsor}
-group by sponsor.sig_id as sig_id
-with  sig_sponsorship_count as count(e),
-      by_chapter as (
+group by sponsor.sig_id as sig_id group as e
+let  sig_sponsorship_count = count(1),
+      by_chapter = (
       select element {'chapter_name':chapter_name,'escount':count(e)}
       from  e as e
       group by e.sponsor.chapter_name as chapter_name
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.1.ddl.sqlpp
new file mode 100644
index 0000000..99eae31
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.1.ddl.sqlpp
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.AddressType as
+ closed {
+  street : string,
+  city : string,
+  zip : string,
+  latlong : point
+}
+
+create type test.EventType as
+ closed {
+  event_id : int64,
+  name : string,
+  location : AddressType?,
+  organizers : {{{
+          name : string
+      }
+}},
+  sponsoring_sigs : [{
+          sig_id : int64,
+          chapter_name : string
+      }
+],
+  interest_keywords : {{string}},
+  price : double?,
+  start_time : datetime,
+  end_time : datetime
+}
+
+create external  dataset Event(EventType) using localfs((`path`=`asterix_nc1://data/events/tiny/event.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.2.update.sqlpp
new file mode 100644
index 0000000..bd244d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.2.update.sqlpp
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.3.query.sqlpp
new file mode 100644
index 0000000..92039e0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-7/q2-7.3.query.sqlpp
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+USE test;
+
+// Tests nested SELECT * for nested GROUP BY.
+SELECT sponsor.sig_id, COUNT(1) total_count,
+       (
+         SELECT *
+         FROM es AS e
+         GROUP BY e.sponsor.chapter_name
+       ) chapter_breakdown
+FROM  Event,
+      Event.sponsoring_sigs AS sponsor
+GROUP BY sponsor.sig_id GROUP AS es
+ORDER BY total_count DESC
+LIMIT 5
+;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.1.ddl.sqlpp
new file mode 100644
index 0000000..99eae31
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.1.ddl.sqlpp
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.AddressType as
+ closed {
+  street : string,
+  city : string,
+  zip : string,
+  latlong : point
+}
+
+create type test.EventType as
+ closed {
+  event_id : int64,
+  name : string,
+  location : AddressType?,
+  organizers : {{{
+          name : string
+      }
+}},
+  sponsoring_sigs : [{
+          sig_id : int64,
+          chapter_name : string
+      }
+],
+  interest_keywords : {{string}},
+  price : double?,
+  start_time : datetime,
+  end_time : datetime
+}
+
+create external  dataset Event(EventType) using localfs((`path`=`asterix_nc1://data/events/tiny/event.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.2.update.sqlpp
new file mode 100644
index 0000000..bd244d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.2.update.sqlpp
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.3.query.sqlpp
new file mode 100644
index 0000000..28a3317
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-8/q2-8.3.query.sqlpp
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+USE test;
+
+// Tests the case that a GROUP BY key expression appears in an aggregation function.
+SELECT sponsor.sig_id, COUNT(sponsor.sig_id) total_count,
+       (
+         SELECT e.sponsor.chapter_name, COUNT(e.sponsor.chapter_name) AS escount
+         FROM es AS e
+         GROUP BY e.sponsor.chapter_name
+       ) chapter_breakdown
+FROM  Event,
+      Event.sponsoring_sigs AS sponsor
+GROUP BY sponsor.sig_id GROUP AS es
+ORDER BY total_count DESC
+LIMIT 5
+;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.1.ddl.sqlpp
new file mode 100644
index 0000000..99eae31
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.1.ddl.sqlpp
@@ -0,0 +1,55 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse test if exists;
+create  dataverse test;
+
+use test;
+
+
+create type test.AddressType as
+ closed {
+  street : string,
+  city : string,
+  zip : string,
+  latlong : point
+}
+
+create type test.EventType as
+ closed {
+  event_id : int64,
+  name : string,
+  location : AddressType?,
+  organizers : {{{
+          name : string
+      }
+}},
+  sponsoring_sigs : [{
+          sig_id : int64,
+          chapter_name : string
+      }
+],
+  interest_keywords : {{string}},
+  price : double?,
+  start_time : datetime,
+  end_time : datetime
+}
+
+create external  dataset Event(EventType) using localfs((`path`=`asterix_nc1://data/events/tiny/event.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.2.update.sqlpp
new file mode 100644
index 0000000..bd244d0
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.2.update.sqlpp
@@ -0,0 +1,19 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.3.query.sqlpp
new file mode 100644
index 0000000..7044711
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-9/q2-9.3.query.sqlpp
@@ -0,0 +1,35 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+
+USE test;
+
+// Tests outer scope variable references in nested GROUP BY.
+SELECT sponsor.sig_id, COUNT(1) total_count,
+       (
+         SELECT sponsor.sig_id, e.sponsor.chapter_name, COUNT(e.sponsor.chapter_name) AS escount
+         FROM es AS e
+         GROUP BY e.sponsor.chapter_name
+       ) chapter_breakdown
+FROM  Event,
+      Event.sponsoring_sigs AS sponsor
+GROUP BY sponsor.sig_id GROUP AS es
+ORDER BY total_count DESC
+LIMIT 5
+;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2/q2.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2/q2.3.query.sqlpp
index f88e846..eb29743 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2/q2.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2/q2.3.query.sqlpp
@@ -23,14 +23,13 @@
 select element {'sig_id':sig_id,'total_count':sig_sponsorship_count,'chapter_breakdown':by_chapter}
 from  Event as event,
       event.sponsoring_sigs as sponsor
-with  es as {'event':event,'sponsor':sponsor}
-group by sponsor.sig_id as sig_id
-with  sig_sponsorship_count as count(es),
-      by_chapter as (
+group by sponsor.sig_id as sig_id group as es
+let sig_sponsorship_count = count(1),
+    by_chapter = (
       select element {'chapter_name':chapter_name,'escount':count(e)}
-      from  es as e
+      from es as e
       group by e.sponsor.chapter_name as chapter_name
-  )
+    )
 order by sig_sponsorship_count desc
 limit 5
 ;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.1.ddl.sqlpp
new file mode 100644
index 0000000..f78afef
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.1.ddl.sqlpp
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse TinySocial if exists;
+create  dataverse TinySocial;
+
+use TinySocial;
+
+
+create type TinySocial.TwitterUserType as
+{
+  `screen-name` : string
+}
+
+create type TinySocial.TweetMessageType as {
+  tweetid : string
+}
+
+create type TinySocial.FacebookUserType as
+ open {
+  id : int64
+}
+
+create type TinySocial.FacebookMessageType as
+ open {
+  `message-id` : int64
+}
+
+create  dataset FacebookUsers(FacebookUserType) primary key id;
+create  dataset FacebookMessages(FacebookMessageType) primary key `message-id`;
+create  dataset TwitterUsers(TwitterUserType) primary key `screen-name`;
+create  dataset TweetMessages(TweetMessageType) primary key tweetid hints (`CARDINALITY`=`100`);
+create  index fbUserSinceIdx  on FacebookUsers (`user-since`:datetime) type btree enforced;
+create  index fbAuthorIdx  on FacebookMessages (`author-id`:int64) type btree enforced;
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.2.update.sqlpp
new file mode 100644
index 0000000..5211fb6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.2.update.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use TinySocial;
+
+
+load  dataset FacebookUsers using localfs ((`path`=`asterix_nc1://data/tinysocial/fbu.adm`),(`format`=`adm`));
+
+load  dataset FacebookMessages using localfs ((`path`=`asterix_nc1://data/tinysocial/fbm.adm`),(`format`=`adm`));
+
+load  dataset TwitterUsers using localfs ((`path`=`asterix_nc1://data/tinysocial/twu.adm`),(`format`=`adm`));
+
+load  dataset TweetMessages using localfs ((`path`=`asterix_nc1://data/tinysocial/twm.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.3.query.sqlpp
new file mode 100644
index 0000000..a3b0ce6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q09/q09.3.query.sqlpp
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+USE TinySocial;
+
+// Tests the propagation for WITH binding variables in global aggregates.
+WITH t AS 1
+
+SELECT COUNT(1) count, t
+FROM FacebookUsers u;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.1.ddl.sqlpp
new file mode 100644
index 0000000..f78afef
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.1.ddl.sqlpp
@@ -0,0 +1,51 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop  dataverse TinySocial if exists;
+create  dataverse TinySocial;
+
+use TinySocial;
+
+
+create type TinySocial.TwitterUserType as
+{
+  `screen-name` : string
+}
+
+create type TinySocial.TweetMessageType as {
+  tweetid : string
+}
+
+create type TinySocial.FacebookUserType as
+ open {
+  id : int64
+}
+
+create type TinySocial.FacebookMessageType as
+ open {
+  `message-id` : int64
+}
+
+create  dataset FacebookUsers(FacebookUserType) primary key id;
+create  dataset FacebookMessages(FacebookMessageType) primary key `message-id`;
+create  dataset TwitterUsers(TwitterUserType) primary key `screen-name`;
+create  dataset TweetMessages(TweetMessageType) primary key tweetid hints (`CARDINALITY`=`100`);
+create  index fbUserSinceIdx  on FacebookUsers (`user-since`:datetime) type btree enforced;
+create  index fbAuthorIdx  on FacebookMessages (`author-id`:int64) type btree enforced;
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.2.update.sqlpp
new file mode 100644
index 0000000..5211fb6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.2.update.sqlpp
@@ -0,0 +1,30 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use TinySocial;
+
+
+load  dataset FacebookUsers using localfs ((`path`=`asterix_nc1://data/tinysocial/fbu.adm`),(`format`=`adm`));
+
+load  dataset FacebookMessages using localfs ((`path`=`asterix_nc1://data/tinysocial/fbm.adm`),(`format`=`adm`));
+
+load  dataset TwitterUsers using localfs ((`path`=`asterix_nc1://data/tinysocial/twu.adm`),(`format`=`adm`));
+
+load  dataset TweetMessages using localfs ((`path`=`asterix_nc1://data/tinysocial/twm.adm`),(`format`=`adm`));
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.3.query.sqlpp
new file mode 100644
index 0000000..a5fa88c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/global-aggregate/q10/q10.3.query.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+USE TinySocial;
+
+// Tests the propagation for WITH binding variables for subqueries in global aggregates.
+WITH t AS (
+   SELECT VALUE MIN(v)
+   FROM [1, 2, 3] v
+)[0]
+
+SELECT COUNT(1) count, t
+FROM FacebookUsers u;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.1.ddl.sqlpp
new file mode 100644
index 0000000..7cb4811
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.1.ddl.sqlpp
@@ -0,0 +1,29 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+DROP DATAVERSE gby IF EXISTS;
+CREATE DATAVERSE gby;
+
+USE gby;
+
+CREATE TYPE EmpType AS {
+  name : string
+}
+
+CREATE DATASET Employee(EmpType) PRIMARY KEY name;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.2.update.sqlpp
new file mode 100644
index 0000000..99116f6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.2.update.sqlpp
@@ -0,0 +1,32 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+USE gby;
+
+INSERT INTO Employee (
+  [
+   { 'name': 'Bill',
+     'deptno': 'K55',
+     'salary': 2000 },
+
+   { 'name': 'Fred',
+     'deptno': 'K55',
+     'salary': 3000 }
+  ]
+);
\ No newline at end of file
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp
new file mode 100644
index 0000000..e278914
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01-negative/sugar-01-negative.3.query.sqlpp
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+USE gby;
+
+// Tests that a SQL++ core aggregate function, e.g., COLL_AVG,
+// cannot be used like a SQL-92 sugar, e.g., AVG. Its input must be a collection.
+FROM Employee e
+GROUP BY e.deptno AS deptno GROUP AS g
+SELECT deptno AS deptno, COLL_AVG(e.salary) AS avgpay,
+       (SELECT i.e.name AS name, i.e.salary AS salary FROM g AS i) AS workers;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01/sugar-01.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01/sugar-01.3.query.sqlpp
index c695e87..9ac8546 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01/sugar-01.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-01/sugar-01.3.query.sqlpp
@@ -22,5 +22,5 @@
 
 FROM Employee e
 GROUP BY e.deptno AS deptno GROUP AS g
-SELECT deptno AS deptno, coll_avg(e.salary) AS avgpay,
+SELECT deptno AS deptno, AVG(e.salary) AS avgpay,
        (SELECT i.e.name AS name, i.e.salary AS salary FROM g AS i) AS workers;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.4.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.4.query.sqlpp
index c86cd18..e526091 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.4.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-02/sugar-02.4.query.sqlpp
@@ -26,6 +26,6 @@
     JOIN SuperStars s ON e.id = s.id
 GROUP BY deptId
 HAVING deptId = 'K55'
-SELECT e.department_id AS deptId, coll_sum(e.salary + i.bonus) AS star_cost
+SELECT e.department_id AS deptId, SUM(e.salary + i.bonus) AS star_cost
 ORDER BY deptId;
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-03/sugar-03.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-03/sugar-03.3.query.sqlpp
index c747382..4832b22 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-03/sugar-03.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-03/sugar-03.3.query.sqlpp
@@ -24,7 +24,7 @@
     JOIN SuperStars s ON e.id = s.id
 GROUP BY e.department_id AS deptId GROUP AS eis
 SELECT deptId as deptId,
-    coll_avg(e.salary + i.bonus) AS avgpay,
+    AVG(e.salary + i.bonus) AS avgpay,
     (FROM eis AS v
          SELECT v.e.id AS id, v.e.salary AS salary, v.i.bonus AS bonus
          ORDER BY v.i.bonus DESC LIMIT 3
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-05/sugar-05.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-05/sugar-05.3.query.sqlpp
index 45c3528..37cf60c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-05/sugar-05.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/sugar-05/sugar-05.3.query.sqlpp
@@ -25,7 +25,7 @@
             FROM Car c JOIN Tire t ON c.tire_size = t.size
             GROUP BY c.tire_size AS tire_size GROUP AS g
             SELECT tire_size AS tire_size,
-                   coll_avg(c.price + 4 * t.price) AS avg_total_price,
+                   AVG(c.price + 4 * t.price) AS avg_total_price,
                    ( FROM g AS g
                      SELECT g.c.make AS make,
                             g.c.model AS model,
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.1.ddl.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.1.ddl.sqlpp
new file mode 100644
index 0000000..82f182e
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.1.ddl.sqlpp
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+drop dataverse test if exists;
+create dataverse test;
+use test;
+
+create type account as open
+{ id: int32, sum:int32 }
+
+create dataset Accounts(account) primary key id;
+
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.2.update.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.2.update.sqlpp
new file mode 100644
index 0000000..3af2128
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.2.update.sqlpp
@@ -0,0 +1,27 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+use test;
+
+insert into Accounts(
+{"id": 1, "sum":100}
+)
+insert into Accounts(
+{"id": 2, "sum":150}
+)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.3.query.sqlpp
new file mode 100644
index 0000000..6856726
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/misc/query-ASTERIXDB-971/query-ASTERIXDB-971.3.query.sqlpp
@@ -0,0 +1,26 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+USE test;
+
+FROM range(1,2) AS x
+SELECT ELEMENT (
+    WITH z AS (FROM Accounts AS y WHERE y.id=x SELECT VALUE y)
+    SELECT x, z
+);
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/exists/exists.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/exists/exists.3.query.sqlpp
index 8f89da4..e7328f3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/exists/exists.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/exists/exists.3.query.sqlpp
@@ -23,14 +23,13 @@
 (
     SELECT c_acctbal, c_custkey, substring(c_phone,1,2) AS cntrycode
     FROM  Customer
-)
-,
+),
 avg AS (
         SELECT ELEMENT AVG(c_acctbal)
         FROM  Customer
         WHERE c_acctbal > 0.0
 )[0]
-SELECT  cntrycode, count(ct) AS numcust, SUM(c_acctbal) AS totacctbal
+SELECT cntrycode, count(ct) AS numcust, SUM(c_acctbal) AS totacctbal
 FROM  q22_customer_tmp AS ct
 WHERE c_acctbal > avg
       AND EXISTS (SELECT * FROM Orders o WHERE o.o_custkey = ct.c_custkey)
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch-sql-like/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch-sql-like/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
index 7a14b25..445da07 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch-sql-like/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch-sql-like/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
@@ -34,5 +34,5 @@
       Part as p
 let lp = {'p_type': p.p_type, 'l_extendedprice': l.l_extendedprice, 'l_discount': l.l_discount}
 where ((l.l_partkey = p.p_partkey) and (l.l_shipdate >= '1995-09-01') and (l.l_shipdate < '1995-10-01'))
-group by 1 as t
+group by 1 as t group as g(lp as lp)
 ;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch-with-index/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch-with-index/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
index 5de0352..c20b6ae 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch-with-index/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch-with-index/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
@@ -34,5 +34,5 @@
       Part as p
 let lp = {'p_type': p.p_type, 'l_extendedprice': l.l_extendedprice, 'l_discount': l.l_discount}
 where ((l.l_partkey = p.p_partkey) and (l.l_shipdate >= '1995-09-01') and (l.l_shipdate < '1995-10-01'))
-group by 1 as t
+group by 1 as t group as g(lp as lp)
 ;
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
index 32ab76a..89ade9d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/tpch/q14_promotion_effect/q14_promotion_effect.3.query.sqlpp
@@ -32,4 +32,4 @@
 let lp = {'p_type': p.p_type, 'l_extendedprice': l.l_extendedprice, 'l_discount': l.l_discount}
 where ((l.l_partkey = p.p_partkey) and (l.l_shipdate >= '1995-09-01') and (l.l_shipdate < '1995-10-01'))
 group by 1 as t
-;
+group as g(lp as lp);
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-12/q2-12.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-12/q2-12.1.adm
new file mode 100644
index 0000000..f845003
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-12/q2-12.1.adm
@@ -0,0 +1,2 @@
+{ "sig_id": 14, "total_count": 3, "chapter_breakdown": [ { "sig_id": 14, "$1": 3 } ] }
+{ "sig_id": 31, "total_count": 1, "chapter_breakdown": [ { "sig_id": 31, "$1": 1 } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-7/q2-7.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-7/q2-7.1.adm
new file mode 100644
index 0000000..5839a99
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-7/q2-7.1.adm
@@ -0,0 +1,2 @@
+{ "sig_id": 14, "total_count": 3, "chapter_breakdown": [ { "chapter_name": "Laguna Beach", "$2": [ { "e": { "Event": { "event_id": 1023, "name": "Art Opening: Southern Orange County Beaches", "organizers": {{ { "name": "Jane Smith" } }}, "sponsoring_sigs": [ { "sig_id": 14, "chapter_name": "San Clemente" }, { "sig_id": 14, "chapter_name": "Laguna Beach" } ], "interest_keywords": {{ "art", "landscape", "nature", "vernissage" }}, "start_time": datetime("2011-02-24T02:00:00.000Z"), "end_time": datetime("2011-02-24T05:00:00.000Z") }, "sponsor": { "sig_id": 14, "chapter_name": "Laguna Beach" } } }, { "e": { "Event": { "event_id": 1042, "name": "Orange County Landmarks", "organizers": {{ { "name": "John Smith" } }}, "sponsoring_sigs": [ { "sig_id": 14, "chapter_name": "Laguna Beach" } ], "interest_keywords": {{ "architecture", "photography" }}, "price": 10.0, "start_time": datetime("2011-02-24T01:00:00.000Z"), "end_time": datetime("2011-02-24T03:00:00.000Z") }, "sponsor": { "sig_id": 14, "chapter_name": "Laguna Beach" } } } ] }, { "chapter_name": "San Clemente", "$2": [ { "e": { "Event": { "event_id": 1023, "name": "Art Opening: Southern Orange County Beaches", "organizers": {{ { "name": "Jane Smith" } }}, "sponsoring_sigs": [ { "sig_id": 14, "chapter_name": "San Clemente" }, { "sig_id": 14, "chapter_name": "Laguna Beach" } ], "interest_keywords": {{ "art", "landscape", "nature", "vernissage" }}, "start_time": datetime("2011-02-24T02:00:00.000Z"), "end_time": datetime("2011-02-24T05:00:00.000Z") }, "sponsor": { "sig_id": 14, "chapter_name": "San Clemente" } } } ] } ] }
+{ "sig_id": 31, "total_count": 1, "chapter_breakdown": [ { "chapter_name": "Huntington Beach", "$2": [ { "e": { "Event": { "event_id": 941, "name": "Intro to Scuba Diving", "organizers": {{ { "name": "Joseph Surfer", "affiliation": "Huntington Beach Scuba Assoc." } }}, "sponsoring_sigs": [ { "sig_id": 31, "chapter_name": "Huntington Beach" } ], "interest_keywords": {{ "scuba", "diving", "aquatics" }}, "price": 40.0, "start_time": datetime("2010-10-16T17:00:00.000Z"), "end_time": datetime("2010-10-16T20:00:00.000Z") }, "sponsor": { "sig_id": 31, "chapter_name": "Huntington Beach" } } } ] } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-9/q2-9.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-9/q2-9.1.adm
new file mode 100644
index 0000000..9f5968c
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/dapd/q2-9/q2-9.1.adm
@@ -0,0 +1,2 @@
+{ "sig_id": 14, "total_count": 3, "chapter_breakdown": [ { "sig_id": 14, "chapter_name": "Laguna Beach", "escount": 2 }, { "sig_id": 14, "chapter_name": "San Clemente", "escount": 1 } ] }
+{ "sig_id": 31, "total_count": 1, "chapter_breakdown": [ { "sig_id": 31, "chapter_name": "Huntington Beach", "escount": 1 } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/global-aggregate/q09/q09.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/global-aggregate/q09/q09.1.adm
new file mode 100644
index 0000000..17e22f6
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/global-aggregate/q09/q09.1.adm
@@ -0,0 +1 @@
+{ "count": 10, "t": 1 }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-971-aql/query-ASTERIXDB-971-aql.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-971-aql/query-ASTERIXDB-971-aql.1.adm
new file mode 100644
index 0000000..c828226
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-971-aql/query-ASTERIXDB-971-aql.1.adm
@@ -0,0 +1,2 @@
+{ "x": 1, "z": [ { "id": 1, "sum": 100 } ] }
+{ "x": 2, "z": [ { "id": 2, "sum": 150 } ] }
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-971-sqlpp/query-ASTERIXDB-971-sqlpp.1.adm b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-971-sqlpp/query-ASTERIXDB-971-sqlpp.1.adm
new file mode 100644
index 0000000..6ec06aa
--- /dev/null
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results/misc/query-ASTERIXDB-971-sqlpp/query-ASTERIXDB-971-sqlpp.1.adm
@@ -0,0 +1,2 @@
+[ { "x": 1, "z": [ { "id": 1, "sum": 100 } ] } ]
+[ { "x": 2, "z": [ { "id": 2, "sum": 150 } ] } ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/dapd/q2/q2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/dapd/q2/q2.3.ast
index f8a709b..06b8dff 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/dapd/q2/q2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/dapd/q2/q2.3.ast
@@ -30,20 +30,6 @@
   ]
   AS Variable [ Name=$sponsor ]
 ]
-Let Variable [ Name=$es ]
-  :=
-  RecordConstructor [
-    (
-      LiteralExpr [STRING] [event]
-      :
-      Variable [ Name=$event ]
-    )
-    (
-      LiteralExpr [STRING] [sponsor]
-      :
-      Variable [ Name=$sponsor ]
-    )
-  ]
 Groupby
   Variable [ Name=$sig_id ]
   :=
@@ -51,11 +37,10 @@
     Variable [ Name=$sponsor ]
     Field=sig_id
   ]
-  GROUP AS Variable [ Name=#1 ]
+  GROUP AS Variable [ Name=$es ]
   (
-    es:=Variable [ Name=$es ]
-    sponsor:=Variable [ Name=$sponsor ]
     event:=Variable [ Name=$event ]
+    sponsor:=Variable [ Name=$sponsor ]
   )
 
 Let Variable [ Name=$sig_sponsorship_count ]
@@ -63,13 +48,10 @@
   FunctionCall test.sql-count@1[
     (
       SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=es
+      LiteralExpr [LONG] [1]
       ]
-      ]
-      FROM [        Variable [ Name=#1 ]
-        AS Variable [ Name=#2 ]
+      FROM [        Variable [ Name=$es ]
+        AS Variable [ Name=#1 ]
       ]
     )
   ]
@@ -90,12 +72,12 @@
           (
             SELECT ELEMENT [
             FieldAccessor [
-              Variable [ Name=#4 ]
+              Variable [ Name=#3 ]
               Field=e
             ]
             ]
-            FROM [              Variable [ Name=#3 ]
-              AS Variable [ Name=#4 ]
+            FROM [              Variable [ Name=#2 ]
+              AS Variable [ Name=#3 ]
             ]
           )
         ]
@@ -115,15 +97,9 @@
         ]
         Field=chapter_name
       ]
-      GROUP AS Variable [ Name=#3 ]
+      GROUP AS Variable [ Name=#2 ]
       (
         e:=Variable [ Name=$e ]
-        sig_sponsorship_count:=Variable [ Name=$sig_sponsorship_count ]
-        es:=Variable [ Name=$es ]
-        event:=Variable [ Name=$event ]
-        sponsor:=Variable [ Name=$sponsor ]
-        sig_id:=Variable [ Name=$sig_id ]
-        #1:=Variable [ Name=#1 ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/flwor/at02/at02.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/flwor/at02/at02.3.ast
index afd1f81..755ff18 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/flwor/at02/at02.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/flwor/at02/at02.3.ast
@@ -82,8 +82,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    m:=Variable [ Name=$m ]
     u:=Variable [ Name=$u ]
+    m:=Variable [ Name=$m ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/flwor/query-issue550/query-issue550.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/flwor/query-issue550/query-issue550.3.ast
index f8988ad..e5a516d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/flwor/query-issue550/query-issue550.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/flwor/query-issue550/query-issue550.3.ast
@@ -181,6 +181,5 @@
   GROUP AS Variable [ Name=#1 ]
   (
     s:=Variable [ Name=$s ]
-    sample:=Variable [ Name=$sample ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_1/dblp-1_1.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_1/dblp-1_1.3.ast
index 884a1aa..165a711 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_1/dblp-1_1.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_1/dblp-1_1.3.ast
@@ -23,8 +23,8 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    token:=Variable [ Name=$token ]
     paper:=Variable [ Name=$paper ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.3.ast
index 0279463..1d14a93 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2.1.1/dblp-1_2.3.ast
@@ -29,18 +29,16 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    id:=Variable [ Name=$id ]
-    token:=Variable [ Name=$token ]
     paper:=Variable [ Name=$paper ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
   FunctionCall fuzzyjoin.sql-count@1[
     (
       SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=id
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [id]
       ]
       ]
       FROM [        Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2.1/dblp-1_2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2.1/dblp-1_2.3.ast
index 0279463..1d14a93 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2.1/dblp-1_2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2.1/dblp-1_2.3.ast
@@ -29,18 +29,16 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    id:=Variable [ Name=$id ]
-    token:=Variable [ Name=$token ]
     paper:=Variable [ Name=$paper ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
   FunctionCall fuzzyjoin.sql-count@1[
     (
       SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=id
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [id]
       ]
       ]
       FROM [        Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2/dblp-1_2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2/dblp-1_2.3.ast
index 37f1f7c..7306e80 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2/dblp-1_2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-1_2/dblp-1_2.3.ast
@@ -29,18 +29,16 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    paperid:=Variable [ Name=$paperid ]
-    token:=Variable [ Name=$token ]
     paper:=Variable [ Name=$paper ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
   FunctionCall fuzzyjoin.sql-count@1[
     (
       SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=paperid
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [paperid]
       ]
       ]
       FROM [        Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.3.ast
index 378d301..fb7aaec 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2.1_5.3.1/dblp-2.3.ast
@@ -96,24 +96,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_1/dblp-2_1.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_1/dblp-2_1.3.ast
index d77ee91..172b607 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_1/dblp-2_1.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_1/dblp-2_1.3.ast
@@ -60,10 +60,8 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_2/dblp-2_2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_2/dblp-2_2.3.ast
index de0c379..4d4ecc8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_2/dblp-2_2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_2/dblp-2_2.3.ast
@@ -66,20 +66,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_3/dblp-2_3.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_3/dblp-2_3.3.ast
index 0359a32..0e7d067 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_3/dblp-2_3.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_3/dblp-2_3.3.ast
@@ -69,21 +69,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_4/dblp-2_4.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_4/dblp-2_4.3.ast
index b43a06c..b290858 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_4/dblp-2_4.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_4/dblp-2_4.3.ast
@@ -72,22 +72,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.1/dblp-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.1/dblp-2_5.3.ast
index c8a4003..244cb0b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.1/dblp-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.1/dblp-2_5.3.ast
@@ -82,23 +82,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.2/dblp-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.2/dblp-2_5.3.ast
index c8a4003..244cb0b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.2/dblp-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.2/dblp-2_5.3.ast
@@ -82,23 +82,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.ast
index c8a4003..244cb0b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.3.1/dblp-2_5.3.ast
@@ -82,23 +82,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.ast
index c8a4003..244cb0b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5.3/dblp-2_5.3.ast
@@ -82,23 +82,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5/dblp-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5/dblp-2_5.3.ast
index 3ae14cf..60e0b24 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5/dblp-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-2_5/dblp-2_5.3.ast
@@ -82,23 +82,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1.1/dblp-3_1.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1.1/dblp-3_1.3.ast
index 350a380..fd16f56 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1.1/dblp-3_1.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1.1/dblp-3_1.3.ast
@@ -40,7 +40,9 @@
         LiteralExpr [STRING] [sim]
         :
         IndexAccessor [
-          Variable [ Name=$sim ]
+          FunctionCall Metadata.dataset@1[
+            LiteralExpr [STRING] [sim]
+          ]
           Index:           LiteralExpr [LONG] [0]
         ]
       )
@@ -131,14 +133,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenLeft:=Variable [ Name=$lenLeft ]
-                prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-                paperRight:=Variable [ Name=$paperRight ]
-                prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
-                paperLeft:=Variable [ Name=$paperLeft ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -222,16 +218,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenRight:=Variable [ Name=$lenRight ]
-                tokensLeft:=Variable [ Name=$tokensLeft ]
-                lenLeft:=Variable [ Name=$lenLeft ]
-                prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-                paperRight:=Variable [ Name=$paperRight ]
-                prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
-                paperLeft:=Variable [ Name=$paperLeft ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -321,15 +309,10 @@
       ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensRight:=Variable [ Name=$tokensRight ]
-        lenRight:=Variable [ Name=$lenRight ]
-        tokensLeft:=Variable [ Name=$tokensLeft ]
-        lenLeft:=Variable [ Name=$lenLeft ]
-        prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-        paperRight:=Variable [ Name=$paperRight ]
-        prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
         paperLeft:=Variable [ Name=$paperLeft ]
+        prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
+        paperRight:=Variable [ Name=$paperRight ]
+        prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1.2/dblp-3_1.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1.2/dblp-3_1.3.ast
index 350a380..fd16f56 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1.2/dblp-3_1.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1.2/dblp-3_1.3.ast
@@ -40,7 +40,9 @@
         LiteralExpr [STRING] [sim]
         :
         IndexAccessor [
-          Variable [ Name=$sim ]
+          FunctionCall Metadata.dataset@1[
+            LiteralExpr [STRING] [sim]
+          ]
           Index:           LiteralExpr [LONG] [0]
         ]
       )
@@ -131,14 +133,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenLeft:=Variable [ Name=$lenLeft ]
-                prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-                paperRight:=Variable [ Name=$paperRight ]
-                prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
-                paperLeft:=Variable [ Name=$paperLeft ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -222,16 +218,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenRight:=Variable [ Name=$lenRight ]
-                tokensLeft:=Variable [ Name=$tokensLeft ]
-                lenLeft:=Variable [ Name=$lenLeft ]
-                prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-                paperRight:=Variable [ Name=$paperRight ]
-                prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
-                paperLeft:=Variable [ Name=$paperLeft ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -321,15 +309,10 @@
       ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensRight:=Variable [ Name=$tokensRight ]
-        lenRight:=Variable [ Name=$lenRight ]
-        tokensLeft:=Variable [ Name=$tokensLeft ]
-        lenLeft:=Variable [ Name=$lenLeft ]
-        prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-        paperRight:=Variable [ Name=$paperRight ]
-        prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
         paperLeft:=Variable [ Name=$paperLeft ]
+        prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
+        paperRight:=Variable [ Name=$paperRight ]
+        prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1/dblp-3_1.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1/dblp-3_1.3.ast
index 75f9c99..05a8114 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1/dblp-3_1.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-3_1/dblp-3_1.3.ast
@@ -50,7 +50,9 @@
         LiteralExpr [STRING] [sim]
         :
         IndexAccessor [
-          Variable [ Name=$sim ]
+          FunctionCall Metadata.dataset@1[
+            LiteralExpr [STRING] [sim]
+          ]
           Index:           LiteralExpr [LONG] [0]
         ]
       )
@@ -141,14 +143,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenLeft:=Variable [ Name=$lenLeft ]
-                prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-                paperRight:=Variable [ Name=$paperRight ]
-                prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
-                paperLeft:=Variable [ Name=$paperLeft ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -232,16 +228,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenRight:=Variable [ Name=$lenRight ]
-                tokensLeft:=Variable [ Name=$tokensLeft ]
-                lenLeft:=Variable [ Name=$lenLeft ]
-                prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-                paperRight:=Variable [ Name=$paperRight ]
-                prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
-                paperLeft:=Variable [ Name=$paperLeft ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -331,15 +319,10 @@
       ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensRight:=Variable [ Name=$tokensRight ]
-        lenRight:=Variable [ Name=$lenRight ]
-        tokensLeft:=Variable [ Name=$tokensLeft ]
-        lenLeft:=Variable [ Name=$lenLeft ]
-        prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
-        paperRight:=Variable [ Name=$paperRight ]
-        prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
         paperLeft:=Variable [ Name=$paperLeft ]
+        prefixTokenLeft:=Variable [ Name=$prefixTokenLeft ]
+        paperRight:=Variable [ Name=$paperRight ]
+        prefixTokenRight:=Variable [ Name=$prefixTokenRight ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.3.ast
index d24bda4..d3b6600 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_1/dblp-csx-2_1.3.ast
@@ -102,13 +102,8 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
@@ -182,14 +177,8 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
@@ -282,13 +271,10 @@
   Variable [ Name=$sim ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.3.ast
index 150b749..af18d99 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_2/dblp-csx-2_2.3.ast
@@ -108,23 +108,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
@@ -195,24 +188,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#4 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#3 ]
@@ -296,13 +281,10 @@
   Variable [ Name=$sim ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.3.ast
index 31b79d2..e72a255 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_3/dblp-csx-2_3.3.ast
@@ -114,24 +114,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
@@ -208,26 +200,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#4 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#3 ]
@@ -305,15 +287,10 @@
   Variable [ Name=$sim ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    idCSX:=Variable [ Name=$idCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    idDBLP:=Variable [ Name=$idDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.3.ast
index f6dcead..ce16186 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_4/dblp-csx-2_4.3.ast
@@ -117,25 +117,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
@@ -215,28 +206,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#4 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#3 ]
@@ -304,17 +283,10 @@
   Variable [ Name=$sim ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-    idCSX:=Variable [ Name=$idCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-    idDBLP:=Variable [ Name=$idDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.3.ast
index 936ac81..2b10846 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.1/dblp-csx-2_5.3.ast
@@ -17,7 +17,9 @@
     LiteralExpr [STRING] [sim]
     :
     IndexAccessor [
-      Variable [ Name=$sim ]
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [sim]
+      ]
       Index:       LiteralExpr [LONG] [0]
     ]
   )
@@ -122,26 +124,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
@@ -226,30 +218,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenCSX:=Variable [ Name=$lenCSX ]
-            tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#4 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#3 ]
@@ -310,19 +288,10 @@
   Variable [ Name=$idCSX ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    lenCSX:=Variable [ Name=$lenCSX ]
-    tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-    idCSX:=Variable [ Name=$idCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    lenDBLP:=Variable [ Name=$lenDBLP ]
-    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-    idDBLP:=Variable [ Name=$idDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.3.ast
index 936ac81..2b10846 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.2/dblp-csx-2_5.3.ast
@@ -17,7 +17,9 @@
     LiteralExpr [STRING] [sim]
     :
     IndexAccessor [
-      Variable [ Name=$sim ]
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [sim]
+      ]
       Index:       LiteralExpr [LONG] [0]
     ]
   )
@@ -122,26 +124,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
@@ -226,30 +218,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenCSX:=Variable [ Name=$lenCSX ]
-            tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#4 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#3 ]
@@ -310,19 +288,10 @@
   Variable [ Name=$idCSX ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    lenCSX:=Variable [ Name=$lenCSX ]
-    tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-    idCSX:=Variable [ Name=$idCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    lenDBLP:=Variable [ Name=$lenDBLP ]
-    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-    idDBLP:=Variable [ Name=$idDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.ast
index b445f35..8ac97a6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.3.1/dblp-csx-2_5.3.ast
@@ -122,26 +122,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
@@ -226,30 +216,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenCSX:=Variable [ Name=$lenCSX ]
-            tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#4 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#3 ]
@@ -313,19 +289,10 @@
   Variable [ Name=$sim ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    lenCSX:=Variable [ Name=$lenCSX ]
-    tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-    idCSX:=Variable [ Name=$idCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    lenDBLP:=Variable [ Name=$lenDBLP ]
-    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-    idDBLP:=Variable [ Name=$idDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.ast
index 936ac81..2b10846 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5.3/dblp-csx-2_5.3.ast
@@ -17,7 +17,9 @@
     LiteralExpr [STRING] [sim]
     :
     IndexAccessor [
-      Variable [ Name=$sim ]
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [sim]
+      ]
       Index:       LiteralExpr [LONG] [0]
     ]
   )
@@ -122,26 +124,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
@@ -226,30 +218,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenCSX:=Variable [ Name=$lenCSX ]
-            tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#4 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#3 ]
@@ -310,19 +288,10 @@
   Variable [ Name=$idCSX ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    lenCSX:=Variable [ Name=$lenCSX ]
-    tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-    idCSX:=Variable [ Name=$idCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    lenDBLP:=Variable [ Name=$lenDBLP ]
-    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-    idDBLP:=Variable [ Name=$idDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.3.ast
index b445f35..8ac97a6 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-2_5/dblp-csx-2_5.3.ast
@@ -122,26 +122,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#1 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#2 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#1 ]
@@ -226,30 +216,16 @@
           Variable [ Name=$token ]
           GROUP AS Variable [ Name=#3 ]
           (
-            id:=Variable [ Name=$id ]
-            token:=Variable [ Name=$token ]
             paper:=Variable [ Name=$paper ]
-            tokenUnranked:=Variable [ Name=$tokenUnranked ]
-            lenCSX:=Variable [ Name=$lenCSX ]
-            tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-            paperDBLP:=Variable [ Name=$paperDBLP ]
+            token:=Variable [ Name=$token ]
           )
 
         Orderby
           FunctionCall fuzzyjoin.sql-count@1[
             (
               SELECT ELEMENT [
-              FieldAccessor [
-                Variable [ Name=#4 ]
-                Field=id
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [id]
               ]
               ]
               FROM [                Variable [ Name=#3 ]
@@ -313,19 +289,10 @@
   Variable [ Name=$sim ]
   GROUP AS Variable [ Name=#5 ]
   (
-    sim:=Variable [ Name=$sim ]
-    tokensCSX:=Variable [ Name=$tokensCSX ]
-    lenCSX:=Variable [ Name=$lenCSX ]
-    tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-    idCSX:=Variable [ Name=$idCSX ]
-    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-    lenDBLP:=Variable [ Name=$lenDBLP ]
-    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-    idDBLP:=Variable [ Name=$idDBLP ]
-    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-    paperCSX:=Variable [ Name=$paperCSX ]
-    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
     paperDBLP:=Variable [ Name=$paperDBLP ]
+    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+    paperCSX:=Variable [ Name=$paperCSX ]
+    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.3.ast
index 6ecd6a4..ed3dd63 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_1/dblp-csx-3_1.3.ast
@@ -125,13 +125,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -205,14 +200,8 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
@@ -305,13 +294,10 @@
       Variable [ Name=$sim ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.3.ast
index b82fc31..ef063ba5 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_2/dblp-csx-3_2.3.ast
@@ -131,23 +131,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#2 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#1 ]
@@ -218,24 +211,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#4 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#3 ]
@@ -319,13 +304,10 @@
       Variable [ Name=$sim ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.3.ast
index 8fcf073..2d7c141 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_3/dblp-csx-3_3.3.ast
@@ -137,24 +137,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#2 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#1 ]
@@ -231,26 +223,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                idCSX:=Variable [ Name=$idCSX ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#4 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#3 ]
@@ -328,15 +310,10 @@
       Variable [ Name=$sim ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        idCSX:=Variable [ Name=$idCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        idDBLP:=Variable [ Name=$idDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.3.ast
index b3923a8..c68832a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_4/dblp-csx-3_4.3.ast
@@ -140,25 +140,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#2 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#1 ]
@@ -238,28 +229,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-                idCSX:=Variable [ Name=$idCSX ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#4 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#3 ]
@@ -327,17 +306,10 @@
       Variable [ Name=$sim ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-        idCSX:=Variable [ Name=$idCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-        idDBLP:=Variable [ Name=$idDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.3.ast
index bf3eb4e..b12fe05 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.1/dblp-csx-3_5.3.ast
@@ -40,7 +40,9 @@
         LiteralExpr [STRING] [sim]
         :
         IndexAccessor [
-          Variable [ Name=$sim ]
+          FunctionCall Metadata.dataset@1[
+            LiteralExpr [STRING] [sim]
+          ]
           Index:           LiteralExpr [LONG] [0]
         ]
       )
@@ -145,26 +147,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#2 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#1 ]
@@ -249,30 +241,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenCSX:=Variable [ Name=$lenCSX ]
-                tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-                idCSX:=Variable [ Name=$idCSX ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#4 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#3 ]
@@ -333,19 +311,10 @@
       Variable [ Name=$idCSX ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        lenCSX:=Variable [ Name=$lenCSX ]
-        tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-        idCSX:=Variable [ Name=$idCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        lenDBLP:=Variable [ Name=$lenDBLP ]
-        tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-        idDBLP:=Variable [ Name=$idDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.3.ast
index bf3eb4e..b12fe05 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.2/dblp-csx-3_5.3.ast
@@ -40,7 +40,9 @@
         LiteralExpr [STRING] [sim]
         :
         IndexAccessor [
-          Variable [ Name=$sim ]
+          FunctionCall Metadata.dataset@1[
+            LiteralExpr [STRING] [sim]
+          ]
           Index:           LiteralExpr [LONG] [0]
         ]
       )
@@ -145,26 +147,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#2 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#1 ]
@@ -249,30 +241,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenCSX:=Variable [ Name=$lenCSX ]
-                tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-                idCSX:=Variable [ Name=$idCSX ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#4 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#3 ]
@@ -333,19 +311,10 @@
       Variable [ Name=$idCSX ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        lenCSX:=Variable [ Name=$lenCSX ]
-        tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-        idCSX:=Variable [ Name=$idCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        lenDBLP:=Variable [ Name=$lenDBLP ]
-        tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-        idDBLP:=Variable [ Name=$idDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.ast
index bf3eb4e..b12fe05 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.3.1/dblp-csx-3_5.3.ast
@@ -40,7 +40,9 @@
         LiteralExpr [STRING] [sim]
         :
         IndexAccessor [
-          Variable [ Name=$sim ]
+          FunctionCall Metadata.dataset@1[
+            LiteralExpr [STRING] [sim]
+          ]
           Index:           LiteralExpr [LONG] [0]
         ]
       )
@@ -145,26 +147,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#2 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#1 ]
@@ -249,30 +241,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenCSX:=Variable [ Name=$lenCSX ]
-                tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-                idCSX:=Variable [ Name=$idCSX ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#4 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#3 ]
@@ -333,19 +311,10 @@
       Variable [ Name=$idCSX ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        lenCSX:=Variable [ Name=$lenCSX ]
-        tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-        idCSX:=Variable [ Name=$idCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        lenDBLP:=Variable [ Name=$lenDBLP ]
-        tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-        idDBLP:=Variable [ Name=$idDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.ast
index 44ac6dd..43d5d8d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.3/dblp-csx-3_5.3.ast
@@ -145,26 +145,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#2 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#1 ]
@@ -249,30 +239,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenCSX:=Variable [ Name=$lenCSX ]
-                tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-                idCSX:=Variable [ Name=$idCSX ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#4 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#3 ]
@@ -336,19 +312,10 @@
       Variable [ Name=$sim ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        lenCSX:=Variable [ Name=$lenCSX ]
-        tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-        idCSX:=Variable [ Name=$idCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        lenDBLP:=Variable [ Name=$lenDBLP ]
-        tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-        idDBLP:=Variable [ Name=$idDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.3.ast
index 6bc2b0b..866ebd8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.4.1/dblp-csx-3_5.3.ast
@@ -87,7 +87,9 @@
             LiteralExpr [STRING] [sim]
             :
             IndexAccessor [
-              Variable [ Name=$sim ]
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [sim]
+              ]
               Index:               LiteralExpr [LONG] [0]
             ]
           )
@@ -192,26 +194,16 @@
                   Variable [ Name=$token ]
                   GROUP AS Variable [ Name=#1 ]
                   (
-                    id:=Variable [ Name=$id ]
-                    token:=Variable [ Name=$token ]
                     paper:=Variable [ Name=$paper ]
-                    tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                    lenDBLP:=Variable [ Name=$lenDBLP ]
-                    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                    idDBLP:=Variable [ Name=$idDBLP ]
-                    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                    paperCSX:=Variable [ Name=$paperCSX ]
-                    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                    paperDBLP:=Variable [ Name=$paperDBLP ]
+                    token:=Variable [ Name=$token ]
                   )
 
                 Orderby
                   FunctionCall fuzzyjoin.sql-count@1[
                     (
                       SELECT ELEMENT [
-                      FieldAccessor [
-                        Variable [ Name=#2 ]
-                        Field=id
+                      FunctionCall Metadata.dataset@1[
+                        LiteralExpr [STRING] [id]
                       ]
                       ]
                       FROM [                        Variable [ Name=#1 ]
@@ -296,30 +288,16 @@
                   Variable [ Name=$token ]
                   GROUP AS Variable [ Name=#3 ]
                   (
-                    id:=Variable [ Name=$id ]
-                    token:=Variable [ Name=$token ]
                     paper:=Variable [ Name=$paper ]
-                    tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                    lenCSX:=Variable [ Name=$lenCSX ]
-                    tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-                    idCSX:=Variable [ Name=$idCSX ]
-                    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                    lenDBLP:=Variable [ Name=$lenDBLP ]
-                    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                    idDBLP:=Variable [ Name=$idDBLP ]
-                    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                    paperCSX:=Variable [ Name=$paperCSX ]
-                    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                    paperDBLP:=Variable [ Name=$paperDBLP ]
+                    token:=Variable [ Name=$token ]
                   )
 
                 Orderby
                   FunctionCall fuzzyjoin.sql-count@1[
                     (
                       SELECT ELEMENT [
-                      FieldAccessor [
-                        Variable [ Name=#4 ]
-                        Field=id
+                      FunctionCall Metadata.dataset@1[
+                        LiteralExpr [STRING] [id]
                       ]
                       ]
                       FROM [                        Variable [ Name=#3 ]
@@ -380,19 +358,10 @@
           Variable [ Name=$idCSX ]
           GROUP AS Variable [ Name=#5 ]
           (
-            sim:=Variable [ Name=$sim ]
-            tokensCSX:=Variable [ Name=$tokensCSX ]
-            lenCSX:=Variable [ Name=$lenCSX ]
-            tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
             paperDBLP:=Variable [ Name=$paperDBLP ]
+            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+            paperCSX:=Variable [ Name=$paperCSX ]
+            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
           )
 
       )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.3.ast
index 9545fb1..e802dde 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5.4/dblp-csx-3_5.3.ast
@@ -87,7 +87,9 @@
             LiteralExpr [STRING] [sim]
             :
             IndexAccessor [
-              Variable [ Name=$sim ]
+              FunctionCall Metadata.dataset@1[
+                LiteralExpr [STRING] [sim]
+              ]
               Index:               LiteralExpr [LONG] [0]
             ]
           )
@@ -192,26 +194,16 @@
                   Variable [ Name=$token ]
                   GROUP AS Variable [ Name=#1 ]
                   (
-                    id:=Variable [ Name=$id ]
-                    token:=Variable [ Name=$token ]
                     paper:=Variable [ Name=$paper ]
-                    tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                    lenDBLP:=Variable [ Name=$lenDBLP ]
-                    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                    idDBLP:=Variable [ Name=$idDBLP ]
-                    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                    paperCSX:=Variable [ Name=$paperCSX ]
-                    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                    paperDBLP:=Variable [ Name=$paperDBLP ]
+                    token:=Variable [ Name=$token ]
                   )
 
                 Orderby
                   FunctionCall fuzzyjoin.sql-count@1[
                     (
                       SELECT ELEMENT [
-                      FieldAccessor [
-                        Variable [ Name=#2 ]
-                        Field=id
+                      FunctionCall Metadata.dataset@1[
+                        LiteralExpr [STRING] [id]
                       ]
                       ]
                       FROM [                        Variable [ Name=#1 ]
@@ -296,30 +288,16 @@
                   Variable [ Name=$token ]
                   GROUP AS Variable [ Name=#3 ]
                   (
-                    id:=Variable [ Name=$id ]
-                    token:=Variable [ Name=$token ]
                     paper:=Variable [ Name=$paper ]
-                    tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                    lenCSX:=Variable [ Name=$lenCSX ]
-                    tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-                    idCSX:=Variable [ Name=$idCSX ]
-                    tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                    lenDBLP:=Variable [ Name=$lenDBLP ]
-                    tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                    idDBLP:=Variable [ Name=$idDBLP ]
-                    prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                    paperCSX:=Variable [ Name=$paperCSX ]
-                    prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                    paperDBLP:=Variable [ Name=$paperDBLP ]
+                    token:=Variable [ Name=$token ]
                   )
 
                 Orderby
                   FunctionCall fuzzyjoin.sql-count@1[
                     (
                       SELECT ELEMENT [
-                      FieldAccessor [
-                        Variable [ Name=#4 ]
-                        Field=id
+                      FunctionCall Metadata.dataset@1[
+                        LiteralExpr [STRING] [id]
                       ]
                       ]
                       FROM [                        Variable [ Name=#3 ]
@@ -380,19 +358,10 @@
           Variable [ Name=$idCSX ]
           GROUP AS Variable [ Name=#5 ]
           (
-            sim:=Variable [ Name=$sim ]
-            tokensCSX:=Variable [ Name=$tokensCSX ]
-            lenCSX:=Variable [ Name=$lenCSX ]
-            tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-            idCSX:=Variable [ Name=$idCSX ]
-            tokensDBLP:=Variable [ Name=$tokensDBLP ]
-            lenDBLP:=Variable [ Name=$lenDBLP ]
-            tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-            idDBLP:=Variable [ Name=$idDBLP ]
-            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-            paperCSX:=Variable [ Name=$paperCSX ]
-            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
             paperDBLP:=Variable [ Name=$paperDBLP ]
+            prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+            paperCSX:=Variable [ Name=$paperCSX ]
+            prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
           )
 
       )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.3.ast
index 44ac6dd..43d5d8d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/fuzzyjoin/dblp-csx-3_5/dblp-csx-3_5.3.ast
@@ -145,26 +145,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#1 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#2 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#1 ]
@@ -249,30 +239,16 @@
               Variable [ Name=$token ]
               GROUP AS Variable [ Name=#3 ]
               (
-                id:=Variable [ Name=$id ]
-                token:=Variable [ Name=$token ]
                 paper:=Variable [ Name=$paper ]
-                tokenUnranked:=Variable [ Name=$tokenUnranked ]
-                lenCSX:=Variable [ Name=$lenCSX ]
-                tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-                idCSX:=Variable [ Name=$idCSX ]
-                tokensDBLP:=Variable [ Name=$tokensDBLP ]
-                lenDBLP:=Variable [ Name=$lenDBLP ]
-                tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-                idDBLP:=Variable [ Name=$idDBLP ]
-                prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-                paperCSX:=Variable [ Name=$paperCSX ]
-                prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
-                paperDBLP:=Variable [ Name=$paperDBLP ]
+                token:=Variable [ Name=$token ]
               )
 
             Orderby
               FunctionCall fuzzyjoin.sql-count@1[
                 (
                   SELECT ELEMENT [
-                  FieldAccessor [
-                    Variable [ Name=#4 ]
-                    Field=id
+                  FunctionCall Metadata.dataset@1[
+                    LiteralExpr [STRING] [id]
                   ]
                   ]
                   FROM [                    Variable [ Name=#3 ]
@@ -336,19 +312,10 @@
       Variable [ Name=$sim ]
       GROUP AS Variable [ Name=#5 ]
       (
-        sim:=Variable [ Name=$sim ]
-        tokensCSX:=Variable [ Name=$tokensCSX ]
-        lenCSX:=Variable [ Name=$lenCSX ]
-        tokensUnrankedCSX:=Variable [ Name=$tokensUnrankedCSX ]
-        idCSX:=Variable [ Name=$idCSX ]
-        tokensDBLP:=Variable [ Name=$tokensDBLP ]
-        lenDBLP:=Variable [ Name=$lenDBLP ]
-        tokensUnrankedDBLP:=Variable [ Name=$tokensUnrankedDBLP ]
-        idDBLP:=Variable [ Name=$idDBLP ]
-        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
-        paperCSX:=Variable [ Name=$paperCSX ]
-        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
         paperDBLP:=Variable [ Name=$paperDBLP ]
+        prefixTokenDBLP:=Variable [ Name=$prefixTokenDBLP ]
+        paperCSX:=Variable [ Name=$paperCSX ]
+        prefixTokenCSX:=Variable [ Name=$prefixTokenCSX ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_02/hdfs_02.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_02/hdfs_02.3.ast
index 9d99609..f1ac649 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_02/hdfs_02.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_02/hdfs_02.3.ast
@@ -11,17 +11,7 @@
     LiteralExpr [STRING] [count]
     :
     FunctionCall test.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=token
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$token ]
     ]
   )
 ]
@@ -45,8 +35,8 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    token:=Variable [ Name=$token ]
     line:=Variable [ Name=$line ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_03/hdfs_03.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_03/hdfs_03.3.ast
index 9d99609..f1ac649 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_03/hdfs_03.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_03/hdfs_03.3.ast
@@ -11,17 +11,7 @@
     LiteralExpr [STRING] [count]
     :
     FunctionCall test.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=token
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$token ]
     ]
   )
 ]
@@ -45,8 +35,8 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    token:=Variable [ Name=$token ]
     line:=Variable [ Name=$line ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_shortcircuit/hdfs_shortcircuit.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_shortcircuit/hdfs_shortcircuit.3.ast
index 9d99609..f1ac649 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_shortcircuit/hdfs_shortcircuit.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hdfs/hdfs_shortcircuit/hdfs_shortcircuit.3.ast
@@ -11,17 +11,7 @@
     LiteralExpr [STRING] [count]
     :
     FunctionCall test.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=token
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$token ]
     ]
   )
 ]
@@ -45,8 +35,8 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    token:=Variable [ Name=$token ]
     line:=Variable [ Name=$line ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.3.ast
index 9d99609..f1ac649 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/hints/issue_251_dataset_hint_6/issue_251_dataset_hint_6.3.ast
@@ -11,17 +11,7 @@
     LiteralExpr [STRING] [count]
     :
     FunctionCall test.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=token
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$token ]
     ]
   )
 ]
@@ -45,8 +35,8 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    token:=Variable [ Name=$token ]
     line:=Variable [ Name=$line ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/misc/groupby-orderby-count/groupby-orderby-count.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/misc/groupby-orderby-count/groupby-orderby-count.3.ast
index b1d80ff..259f96d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/misc/groupby-orderby-count/groupby-orderby-count.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/misc/groupby-orderby-count/groupby-orderby-count.3.ast
@@ -11,17 +11,7 @@
     LiteralExpr [STRING] [count]
     :
     FunctionCall twitter.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#3 ]
-          Field=token
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#3 ]
-        ]
-      )
+      Variable [ Name=$token ]
     ]
   )
 ]
@@ -45,23 +35,13 @@
   Variable [ Name=$token ]
   GROUP AS Variable [ Name=#1 ]
   (
-    token:=Variable [ Name=$token ]
     t:=Variable [ Name=$t ]
+    token:=Variable [ Name=$token ]
   )
 
 Orderby
   FunctionCall twitter.count@1[
-    (
-      SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=token
-      ]
-      ]
-      FROM [        Variable [ Name=#1 ]
-        AS Variable [ Name=#2 ]
-      ]
-    )
+    Variable [ Name=$token ]
   ]
   DESC
   Variable [ Name=$tok ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/open-closed/query-issue456/query-issue456.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/open-closed/query-issue456/query-issue456.3.ast
index df48810..1dc9f40 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/open-closed/query-issue456/query-issue456.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/open-closed/query-issue456/query-issue456.3.ast
@@ -6,9 +6,8 @@
   FunctionCall test.sql-count@1[
     (
       SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=id
+      FunctionCall Metadata.dataset@1[
+        LiteralExpr [STRING] [id]
       ]
       ]
       FROM [        Variable [ Name=#1 ]
@@ -38,7 +37,6 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    id:=Variable [ Name=$id ]
     x:=Variable [ Name=$x ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/open-closed/query-proposal02/query-proposal02.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/open-closed/query-proposal02/query-proposal02.3.ast
index 94a37bf..806f0da 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/open-closed/query-proposal02/query-proposal02.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/open-closed/query-proposal02/query-proposal02.3.ast
@@ -59,8 +59,8 @@
   Variable [ Name=$reftopic ]
   GROUP AS Variable [ Name=#1 ]
   (
-    reftopic:=Variable [ Name=$reftopic ]
     tweet:=Variable [ Name=$tweet ]
+    reftopic:=Variable [ Name=$reftopic ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-no-complex-types/tiny-social-example-no-complex-types.9.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-no-complex-types/tiny-social-example-no-complex-types.9.ast
index 5e4e36a..19427c1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-no-complex-types/tiny-social-example-no-complex-types.9.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-no-complex-types/tiny-social-example-no-complex-types.9.ast
@@ -44,8 +44,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    f:=Variable [ Name=$f ]
     r:=Variable [ Name=$r ]
+    f:=Variable [ Name=$f ]
   )
 
 Let Variable [ Name=$count ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-only-lists/tiny-social-example-only-lists.9.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-only-lists/tiny-social-example-only-lists.9.ast
index 5e4e36a..19427c1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-only-lists/tiny-social-example-only-lists.9.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-only-lists/tiny-social-example-only-lists.9.ast
@@ -44,8 +44,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    f:=Variable [ Name=$f ]
     r:=Variable [ Name=$r ]
+    f:=Variable [ Name=$f ]
   )
 
 Let Variable [ Name=$count ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-only-records/tiny-social-example-only-records.9.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-only-records/tiny-social-example-only-records.9.ast
index 5e4e36a..19427c1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-only-records/tiny-social-example-only-records.9.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/records/get-record-fields/tiny-social-example-only-records/tiny-social-example-only-records.9.ast
@@ -44,8 +44,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    f:=Variable [ Name=$f ]
     r:=Variable [ Name=$r ]
+    f:=Variable [ Name=$f ]
   )
 
 Let Variable [ Name=$count ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/semistructured/count-nullable/count-nullable.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/semistructured/count-nullable/count-nullable.3.ast
index cde6b6d..5d1a417 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/semistructured/count-nullable/count-nullable.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/semistructured/count-nullable/count-nullable.3.ast
@@ -11,17 +11,7 @@
     LiteralExpr [STRING] [count]
     :
     FunctionCall test.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=c
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$c ]
     ]
   )
 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.3.ast
index 657dce3..91e9410 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/spatial/cell-aggregation-with-filtering/cell-aggregation-with-filtering.3.ast
@@ -88,25 +88,13 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    region:=Variable [ Name=$region ]
-    keywords:=Variable [ Name=$keywords ]
     t:=Variable [ Name=$t ]
   )
 
 Let Variable [ Name=$num ]
   :=
   FunctionCall test.count@1[
-    (
-      SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=t
-      ]
-      ]
-      FROM [        Variable [ Name=#1 ]
-        AS Variable [ Name=#2 ]
-      ]
-    )
+    Variable [ Name=$t ]
   ]
 Orderby
   Variable [ Name=$num ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/spatial/cell-aggregation/cell-aggregation.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/spatial/cell-aggregation/cell-aggregation.3.ast
index 193a14b..6f827cf 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/spatial/cell-aggregation/cell-aggregation.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/spatial/cell-aggregation/cell-aggregation.3.ast
@@ -45,17 +45,7 @@
     Let Variable [ Name=$num ]
       :=
       FunctionCall test.count@1[
-        (
-          SELECT ELEMENT [
-          FieldAccessor [
-            Variable [ Name=#2 ]
-            Field=o
-          ]
-          ]
-          FROM [            Variable [ Name=#1 ]
-            AS Variable [ Name=#2 ]
-          ]
-        )
+        Variable [ Name=$o ]
       ]
     Orderby
       Variable [ Name=$num ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temp-dataset/q01_pricing_summary_report_nt/q01_pricing_summary_report_nt.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temp-dataset/q01_pricing_summary_report_nt/q01_pricing_summary_report_nt.3.ast
index ae8f04d..815615d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temp-dataset/q01_pricing_summary_report_nt/q01_pricing_summary_report_nt.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temp-dataset/q01_pricing_summary_report_nt/q01_pricing_summary_report_nt.3.ast
@@ -167,17 +167,7 @@
     LiteralExpr [STRING] [count_order]
     :
     FunctionCall tpch.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=l
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$l ]
     ]
   )
 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_0/overlap_bins_gby_0.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_0/overlap_bins_gby_0.3.ast
index bff5906..cf3af4c 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_0/overlap_bins_gby_0.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_0/overlap_bins_gby_0.3.ast
@@ -88,8 +88,8 @@
       Variable [ Name=$j ]
       GROUP AS Variable [ Name=#1 ]
       (
-        j:=Variable [ Name=$j ]
         i:=Variable [ Name=$i ]
+        j:=Variable [ Name=$j ]
       )
 
     Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_1/overlap_bins_gby_1.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_1/overlap_bins_gby_1.3.ast
index 19503b9..7d10b8d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_1/overlap_bins_gby_1.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_1/overlap_bins_gby_1.3.ast
@@ -104,8 +104,8 @@
   Variable [ Name=$j ]
   GROUP AS Variable [ Name=#1 ]
   (
-    j:=Variable [ Name=$j ]
     i2:=Variable [ Name=$i2 ]
+    j:=Variable [ Name=$j ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
index c43f1c7..e9435d1 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/temporal/overlap_bins_gby_3/overlap_bins_gby_3.3.ast
@@ -68,7 +68,6 @@
         GROUP AS Variable [ Name=#1 ]
         (
           i:=Variable [ Name=$i ]
-          bin:=Variable [ Name=$bin ]
         )
 
       Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite-open/group-by.26.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite-open/group-by.26.ast
index db9a752..16e5ee8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite-open/group-by.26.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite-open/group-by.26.ast
@@ -113,7 +113,7 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    employment:=Variable [ Name=$employment ]
     fbu:=Variable [ Name=$fbu ]
+    employment:=Variable [ Name=$employment ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite-open/query-ASTERIXDB-1263.23.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite-open/query-ASTERIXDB-1263.23.ast
index 586630d..73652a0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite-open/query-ASTERIXDB-1263.23.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite-open/query-ASTERIXDB-1263.23.ast
@@ -51,9 +51,6 @@
     GROUP AS Variable [ Name=#2 ]
     (
       k:=Variable [ Name=$k ]
-      t:=Variable [ Name=$t ]
-      h:=Variable [ Name=$h ]
-      #1:=Variable [ Name=#1 ]
     )
 
   Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite/query-ASTERIXDB-1263.23.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite/query-ASTERIXDB-1263.23.ast
index 586630d..73652a0 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite/query-ASTERIXDB-1263.23.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tinysocial/tinysocial-suite/query-ASTERIXDB-1263.23.ast
@@ -51,9 +51,6 @@
     GROUP AS Variable [ Name=#2 ]
     (
       k:=Variable [ Name=$k ]
-      t:=Variable [ Name=$t ]
-      h:=Variable [ Name=$h ]
-      #1:=Variable [ Name=#1 ]
     )
 
   Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q03_shipping_priority_nt/q03_shipping_priority_nt.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q03_shipping_priority_nt/q03_shipping_priority_nt.3.ast
index 4b04e3a..47d5a97 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q03_shipping_priority_nt/q03_shipping_priority_nt.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q03_shipping_priority_nt/q03_shipping_priority_nt.3.ast
@@ -117,9 +117,9 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    l:=Variable [ Name=$l ]
-    o:=Variable [ Name=$o ]
     c:=Variable [ Name=$c ]
+    o:=Variable [ Name=$o ]
+    l:=Variable [ Name=$l ]
   )
 
 Let Variable [ Name=$revenue ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q04_order_priority/q04_order_priority.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q04_order_priority/q04_order_priority.3.ast
index e50b0b0..6d2ab55 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q04_order_priority/q04_order_priority.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q04_order_priority/q04_order_priority.3.ast
@@ -43,17 +43,7 @@
     LiteralExpr [STRING] [count]
     :
     FunctionCall tpch.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=o
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$o ]
     ]
   )
 ]
@@ -108,8 +98,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    t:=Variable [ Name=$t ]
     o:=Variable [ Name=$o ]
+    t:=Variable [ Name=$t ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q05_local_supplier_volume/q05_local_supplier_volume.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q05_local_supplier_volume/q05_local_supplier_volume.3.ast
index fefccd1..5ee4bfe 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q05_local_supplier_volume/q05_local_supplier_volume.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q05_local_supplier_volume/q05_local_supplier_volume.3.ast
@@ -299,8 +299,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    o1:=Variable [ Name=$o1 ]
     c:=Variable [ Name=$c ]
+    o1:=Variable [ Name=$o1 ]
   )
 
 Let Variable [ Name=$revenue ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q07_volume_shipping/q07_volume_shipping.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q07_volume_shipping/q07_volume_shipping.3.ast
index f7aeb0f..cc99aab 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q07_volume_shipping/q07_volume_shipping.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q07_volume_shipping/q07_volume_shipping.3.ast
@@ -367,9 +367,8 @@
   Variable [ Name=$l_year0 ]
   GROUP AS Variable [ Name=#1 ]
   (
-    l_year0:=Variable [ Name=$l_year0 ]
-    t:=Variable [ Name=$t ]
     locs:=Variable [ Name=$locs ]
+    t:=Variable [ Name=$t ]
   )
 
 Let Variable [ Name=$revenue ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q11_important_stock/q11_important_stock.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q11_important_stock/q11_important_stock.3.ast
index 14caa44..8de0c01 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q11_important_stock/q11_important_stock.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q11_important_stock/q11_important_stock.3.ast
@@ -192,9 +192,8 @@
       ]
       GROUP AS Variable [ Name=#1 ]
       (
-        sn:=Variable [ Name=$sn ]
         ps:=Variable [ Name=$ps ]
-        sum:=Variable [ Name=$sum ]
+        sn:=Variable [ Name=$sn ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q12_shipping/q12_shipping.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q12_shipping/q12_shipping.3.ast
index 3da470a..edd1cd8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q12_shipping/q12_shipping.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q12_shipping/q12_shipping.3.ast
@@ -188,8 +188,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    o:=Variable [ Name=$o ]
     l:=Variable [ Name=$l ]
+    o:=Variable [ Name=$o ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q14_promotion_effect/q14_promotion_effect.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q14_promotion_effect/q14_promotion_effect.3.ast
index 1bd404d..ed68ae8 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q14_promotion_effect/q14_promotion_effect.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q14_promotion_effect/q14_promotion_effect.3.ast
@@ -146,10 +146,8 @@
   Variable [ Name=$t ]
   :=
   LiteralExpr [LONG] [1]
-  GROUP AS Variable [ Name=#1 ]
+  GROUP AS Variable [ Name=$g ]
   (
     lp:=Variable [ Name=$lp ]
-    p:=Variable [ Name=$p ]
-    l:=Variable [ Name=$l ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q18_large_volume_customer/q18_large_volume_customer.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q18_large_volume_customer/q18_large_volume_customer.3.ast
index 8f4559e..1e4ac7b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q18_large_volume_customer/q18_large_volume_customer.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q18_large_volume_customer/q18_large_volume_customer.3.ast
@@ -98,8 +98,6 @@
       GROUP AS Variable [ Name=#1 ]
       (
         l:=Variable [ Name=$l ]
-        o:=Variable [ Name=$o ]
-        c:=Variable [ Name=$c ]
       )
 
   )
@@ -192,10 +190,10 @@
   ]
   GROUP AS Variable [ Name=#2 ]
   (
-    l:=Variable [ Name=$l ]
-    t:=Variable [ Name=$t ]
-    o:=Variable [ Name=$o ]
     c:=Variable [ Name=$c ]
+    o:=Variable [ Name=$o ]
+    t:=Variable [ Name=$t ]
+    l:=Variable [ Name=$l ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.3.ast
index 6d09b11..0d5ca25 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q21_suppliers_who_kept_orders_waiting/q21_suppliers_who_kept_orders_waiting.3.ast
@@ -442,17 +442,7 @@
 Let Variable [ Name=$numwait ]
   :=
   FunctionCall tpch.count@1[
-    (
-      SELECT ELEMENT [
-      FieldAccessor [
-        Variable [ Name=#2 ]
-        Field=t4
-      ]
-      ]
-      FROM [        Variable [ Name=#1 ]
-        AS Variable [ Name=#2 ]
-      ]
-    )
+    Variable [ Name=$t4 ]
   ]
 Orderby
   Variable [ Name=$numwait ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q22_global_sales_opportunity/q22_global_sales_opportunity.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q22_global_sales_opportunity/q22_global_sales_opportunity.3.ast
index f6eaeaf..cab2a8f 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q22_global_sales_opportunity/q22_global_sales_opportunity.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/q22_global_sales_opportunity/q22_global_sales_opportunity.3.ast
@@ -132,7 +132,6 @@
   GROUP AS Variable [ Name=#1 ]
   (
     ct:=Variable [ Name=$ct ]
-    avg:=Variable [ Name=$avg ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue601/query-issue601.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue601/query-issue601.3.ast
index b0c1038..758fd5a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue601/query-issue601.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue601/query-issue601.3.ast
@@ -11,17 +11,7 @@
     LiteralExpr [STRING] [count_order]
     :
     FunctionCall tpch.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=l
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$l ]
     ]
   )
 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue785-2/query-issue785-2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue785-2/query-issue785-2.3.ast
index 97006bf..991c38a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue785-2/query-issue785-2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue785-2/query-issue785-2.3.ast
@@ -122,10 +122,9 @@
       ]
       GROUP AS Variable [ Name=#1 ]
       (
-        orders:=Variable [ Name=$orders ]
-        customer:=Variable [ Name=$customer ]
         n:=Variable [ Name=$n ]
-        t:=Variable [ Name=$t ]
+        customer:=Variable [ Name=$customer ]
+        orders:=Variable [ Name=$orders ]
       )
 
     Let Variable [ Name=$sum ]
@@ -204,7 +203,5 @@
   GROUP AS Variable [ Name=#2 ]
   (
     x:=Variable [ Name=$x ]
-    X:=Variable [ Name=$X ]
-    t:=Variable [ Name=$t ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue785/query-issue785.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue785/query-issue785.3.ast
index 602feb1..61e0ca4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue785/query-issue785.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue785/query-issue785.3.ast
@@ -38,9 +38,6 @@
         GROUP AS Variable [ Name=#3 ]
         (
           i:=Variable [ Name=$i ]
-          x:=Variable [ Name=$x ]
-          nation_key:=Variable [ Name=$nation_key ]
-          #2:=Variable [ Name=#2 ]
         )
 
       Let Variable [ Name=$sum ]
@@ -156,9 +153,9 @@
       ]
       GROUP AS Variable [ Name=#1 ]
       (
-        orders:=Variable [ Name=$orders ]
-        customer:=Variable [ Name=$customer ]
         n:=Variable [ Name=$n ]
+        customer:=Variable [ Name=$customer ]
+        orders:=Variable [ Name=$orders ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue786/query-issue786.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue786/query-issue786.3.ast
index 2c51fb4..5908531 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue786/query-issue786.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch-sql-like/query-issue786/query-issue786.3.ast
@@ -81,10 +81,8 @@
         ]
         GROUP AS Variable [ Name=#1 ]
         (
-          customer:=Variable [ Name=$customer ]
           orders:=Variable [ Name=$orders ]
-          sn:=Variable [ Name=$sn ]
-          nation:=Variable [ Name=$nation ]
+          customer:=Variable [ Name=$customer ]
         )
 
       Let Variable [ Name=$sum ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/nest_aggregate/nest_aggregate.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/nest_aggregate/nest_aggregate.3.ast
index 2c323ea..0207a57 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/nest_aggregate/nest_aggregate.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/nest_aggregate/nest_aggregate.3.ast
@@ -81,10 +81,8 @@
         ]
         GROUP AS Variable [ Name=#1 ]
         (
-          customer:=Variable [ Name=$customer ]
           orders:=Variable [ Name=$orders ]
-          sn:=Variable [ Name=$sn ]
-          nation:=Variable [ Name=$nation ]
+          customer:=Variable [ Name=$customer ]
         )
 
       Let Variable [ Name=$sum ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q01_pricing_summary_report_nt/q01_pricing_summary_report_nt.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q01_pricing_summary_report_nt/q01_pricing_summary_report_nt.3.ast
index ae8f04d..815615d 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q01_pricing_summary_report_nt/q01_pricing_summary_report_nt.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q01_pricing_summary_report_nt/q01_pricing_summary_report_nt.3.ast
@@ -167,17 +167,7 @@
     LiteralExpr [STRING] [count_order]
     :
     FunctionCall tpch.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=l
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$l ]
     ]
   )
 ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q03_shipping_priority_nt/q03_shipping_priority_nt.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q03_shipping_priority_nt/q03_shipping_priority_nt.3.ast
index 4b04e3a..47d5a97 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q03_shipping_priority_nt/q03_shipping_priority_nt.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q03_shipping_priority_nt/q03_shipping_priority_nt.3.ast
@@ -117,9 +117,9 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    l:=Variable [ Name=$l ]
-    o:=Variable [ Name=$o ]
     c:=Variable [ Name=$c ]
+    o:=Variable [ Name=$o ]
+    l:=Variable [ Name=$l ]
   )
 
 Let Variable [ Name=$revenue ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q04_order_priority/q04_order_priority.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q04_order_priority/q04_order_priority.3.ast
index 30df063..14ee9fc 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q04_order_priority/q04_order_priority.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q04_order_priority/q04_order_priority.3.ast
@@ -108,8 +108,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    t:=Variable [ Name=$t ]
     o:=Variable [ Name=$o ]
+    t:=Variable [ Name=$t ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q05_local_supplier_volume/q05_local_supplier_volume.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q05_local_supplier_volume/q05_local_supplier_volume.3.ast
index fefccd1..5ee4bfe 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q05_local_supplier_volume/q05_local_supplier_volume.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q05_local_supplier_volume/q05_local_supplier_volume.3.ast
@@ -299,8 +299,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    o1:=Variable [ Name=$o1 ]
     c:=Variable [ Name=$c ]
+    o1:=Variable [ Name=$o1 ]
   )
 
 Let Variable [ Name=$revenue ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q07_volume_shipping/q07_volume_shipping.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q07_volume_shipping/q07_volume_shipping.3.ast
index f7aeb0f..cc99aab 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q07_volume_shipping/q07_volume_shipping.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q07_volume_shipping/q07_volume_shipping.3.ast
@@ -367,9 +367,8 @@
   Variable [ Name=$l_year0 ]
   GROUP AS Variable [ Name=#1 ]
   (
-    l_year0:=Variable [ Name=$l_year0 ]
-    t:=Variable [ Name=$t ]
     locs:=Variable [ Name=$locs ]
+    t:=Variable [ Name=$t ]
   )
 
 Let Variable [ Name=$revenue ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q11_important_stock/q11_important_stock.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q11_important_stock/q11_important_stock.3.ast
index 14caa44..8de0c01 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q11_important_stock/q11_important_stock.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q11_important_stock/q11_important_stock.3.ast
@@ -192,9 +192,8 @@
       ]
       GROUP AS Variable [ Name=#1 ]
       (
-        sn:=Variable [ Name=$sn ]
         ps:=Variable [ Name=$ps ]
-        sum:=Variable [ Name=$sum ]
+        sn:=Variable [ Name=$sn ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q12_shipping/q12_shipping.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q12_shipping/q12_shipping.3.ast
index 6ad3a5b..fa86271 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q12_shipping/q12_shipping.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q12_shipping/q12_shipping.3.ast
@@ -185,8 +185,8 @@
   ]
   GROUP AS Variable [ Name=#1 ]
   (
-    o:=Variable [ Name=$o ]
     l:=Variable [ Name=$l ]
+    o:=Variable [ Name=$o ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q14_promotion_effect/q14_promotion_effect.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q14_promotion_effect/q14_promotion_effect.3.ast
index f619293..e52e659 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q14_promotion_effect/q14_promotion_effect.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q14_promotion_effect/q14_promotion_effect.3.ast
@@ -143,10 +143,8 @@
   Variable [ Name=$t ]
   :=
   LiteralExpr [LONG] [1]
-  GROUP AS Variable [ Name=#1 ]
+  GROUP AS Variable [ Name=$g ]
   (
     lp:=Variable [ Name=$lp ]
-    p:=Variable [ Name=$p ]
-    l:=Variable [ Name=$l ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q17_large_gby_variant/q17_large_gby_variant.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q17_large_gby_variant/q17_large_gby_variant.3.ast
index 4c84266..c5ed1ef 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q17_large_gby_variant/q17_large_gby_variant.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q17_large_gby_variant/q17_large_gby_variant.3.ast
@@ -11,17 +11,7 @@
     LiteralExpr [STRING] [t_count]
     :
     FunctionCall tpch.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=l
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$l ]
     ]
   )
   (
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q18_large_volume_customer/q18_large_volume_customer.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q18_large_volume_customer/q18_large_volume_customer.3.ast
index d220f48..a6eebfd 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q18_large_volume_customer/q18_large_volume_customer.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q18_large_volume_customer/q18_large_volume_customer.3.ast
@@ -98,8 +98,6 @@
       GROUP AS Variable [ Name=#1 ]
       (
         l:=Variable [ Name=$l ]
-        o:=Variable [ Name=$o ]
-        c:=Variable [ Name=$c ]
       )
 
   )
@@ -190,10 +188,10 @@
   ]
   GROUP AS Variable [ Name=#2 ]
   (
-    l:=Variable [ Name=$l ]
-    t:=Variable [ Name=$t ]
-    o:=Variable [ Name=$o ]
     c:=Variable [ Name=$c ]
+    o:=Variable [ Name=$o ]
+    t:=Variable [ Name=$t ]
+    l:=Variable [ Name=$l ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.3.ast
index 5032a49..b7ff109 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/q22_global_sales_opportunity/q22_global_sales_opportunity.3.ast
@@ -77,17 +77,7 @@
     LiteralExpr [STRING] [numcust]
     :
     FunctionCall tpch.count@1[
-      (
-        SELECT ELEMENT [
-        FieldAccessor [
-          Variable [ Name=#2 ]
-          Field=ct
-        ]
-        ]
-        FROM [          Variable [ Name=#1 ]
-          AS Variable [ Name=#2 ]
-        ]
-      )
+      Variable [ Name=$ct ]
     ]
   )
   (
@@ -132,7 +122,6 @@
   GROUP AS Variable [ Name=#1 ]
   (
     ct:=Variable [ Name=$ct ]
-    avg:=Variable [ Name=$avg ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue562/query-issue562.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue562/query-issue562.3.ast
index fd595c3..cac889b 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue562/query-issue562.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue562/query-issue562.3.ast
@@ -255,7 +255,6 @@
   GROUP AS Variable [ Name=#1 ]
   (
     ct:=Variable [ Name=$ct ]
-    avg:=Variable [ Name=$avg ]
   )
 
 Orderby
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue785-2/query-issue785-2.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue785-2/query-issue785-2.3.ast
index 97006bf..991c38a 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue785-2/query-issue785-2.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue785-2/query-issue785-2.3.ast
@@ -122,10 +122,9 @@
       ]
       GROUP AS Variable [ Name=#1 ]
       (
-        orders:=Variable [ Name=$orders ]
-        customer:=Variable [ Name=$customer ]
         n:=Variable [ Name=$n ]
-        t:=Variable [ Name=$t ]
+        customer:=Variable [ Name=$customer ]
+        orders:=Variable [ Name=$orders ]
       )
 
     Let Variable [ Name=$sum ]
@@ -204,7 +203,5 @@
   GROUP AS Variable [ Name=#2 ]
   (
     x:=Variable [ Name=$x ]
-    X:=Variable [ Name=$X ]
-    t:=Variable [ Name=$t ]
   )
 
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue785/query-issue785.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue785/query-issue785.3.ast
index 602feb1..61e0ca4 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue785/query-issue785.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue785/query-issue785.3.ast
@@ -38,9 +38,6 @@
         GROUP AS Variable [ Name=#3 ]
         (
           i:=Variable [ Name=$i ]
-          x:=Variable [ Name=$x ]
-          nation_key:=Variable [ Name=$nation_key ]
-          #2:=Variable [ Name=#2 ]
         )
 
       Let Variable [ Name=$sum ]
@@ -156,9 +153,9 @@
       ]
       GROUP AS Variable [ Name=#1 ]
       (
-        orders:=Variable [ Name=$orders ]
-        customer:=Variable [ Name=$customer ]
         n:=Variable [ Name=$n ]
+        customer:=Variable [ Name=$customer ]
+        orders:=Variable [ Name=$orders ]
       )
 
   )
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue786/query-issue786.3.ast b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue786/query-issue786.3.ast
index 2c51fb4..5908531 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue786/query-issue786.3.ast
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/results_parser_sqlpp/tpch/query-issue786/query-issue786.3.ast
@@ -81,10 +81,8 @@
         ]
         GROUP AS Variable [ Name=#1 ]
         (
-          customer:=Variable [ Name=$customer ]
           orders:=Variable [ Name=$orders ]
-          sn:=Variable [ Name=$sn ]
-          nation:=Variable [ Name=$nation ]
+          customer:=Variable [ Name=$customer ]
         )
 
       Let Variable [ Name=$sum ]
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
index 862ca26..cf5bda3 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite.xml
@@ -3257,6 +3257,11 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="misc">
+      <compilation-unit name="query-ASTERIXDB-971">
+        <output-dir compare="Text">query-ASTERIXDB-971-aql</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
       <compilation-unit name="query-ASTERIXDB-1531">
         <output-dir compare="Text">query-ASTERIXDB-1531</output-dir>
       </compilation-unit>
diff --git a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
index 7d2af51..e0e6e87 100644
--- a/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
+++ b/asterixdb/asterix-app/src/test/resources/runtimets/testsuite_sqlpp.xml
@@ -1364,7 +1364,7 @@
     <test-case FilePath="custord">
       <compilation-unit name="join_q_09">
         <output-dir compare="Text">join_q_01</output-dir>
-        <expected-error>Cannot resolve ambiguous alias (variable) reference for identifier age</expected-error>
+        <expected-error>Cannot resolve ambiguous alias reference for undefined identifier age</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="custord">
@@ -1420,6 +1420,12 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="dapd">
+      <compilation-unit name="q2-2-negative">
+        <output-dir compare="Text">q2</output-dir>
+        <expected-error>Cannot find dataset e in dataverse test nor an alias with name e</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dapd">
       <compilation-unit name="q2-3">
         <output-dir compare="Text">q2</output-dir>
       </compilation-unit>
@@ -1439,6 +1445,36 @@
         <output-dir compare="Text">q2</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="dapd">
+      <compilation-unit name="q2-7">
+        <output-dir compare="Text">q2-7</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dapd">
+      <compilation-unit name="q2-8">
+        <output-dir compare="Text">q2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dapd">
+      <compilation-unit name="q2-9">
+        <output-dir compare="Text">q2-9</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dapd">
+      <compilation-unit name="q2-10">
+        <output-dir compare="Text">q2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dapd">
+      <compilation-unit name="q2-11">
+        <output-dir compare="Text">q2</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="dapd">
+      <compilation-unit name="q2-12">
+        <output-dir compare="Text">q2-12</output-dir>
+      </compilation-unit>
+    </test-case>
     <!--
         <test-case FilePath="dapd">
           <compilation-unit name="q3">
@@ -2355,7 +2391,7 @@
     <test-case FilePath="global-aggregate">
       <compilation-unit name="q05_error">
         <output-dir compare="Text">q01</output-dir>
-        <expected-error>The first argument should be a RECORD, but it is [ FacebookUserType: open</expected-error>
+        <expected-error>The first argument of a field access should be a RECORD, but it is [ FacebookUserType: open</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="global-aggregate">
@@ -2375,6 +2411,16 @@
         <output-dir compare="Text">q08</output-dir>
       </compilation-unit>
     </test-case>
+    <test-case FilePath="global-aggregate">
+      <compilation-unit name="q09">
+        <output-dir compare="Text">q09</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="global-aggregate">
+      <compilation-unit name="q10">
+        <output-dir compare="Text">q09</output-dir>
+      </compilation-unit>
+    </test-case>
   </test-group>
   <test-group name="group-by">
     <test-case FilePath="group-by">
@@ -2408,6 +2454,12 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="group-by">
+      <compilation-unit name="sugar-01-negative">
+        <output-dir compare="Text">core-01</output-dir>
+        <expected-error>The first argument of a field access should be a RECORD, but it is [ EmpType</expected-error>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="group-by">
       <compilation-unit name="sugar-01-2">
         <output-dir compare="Text">core-01</output-dir>
       </compilation-unit>
@@ -2983,6 +3035,11 @@
       </compilation-unit>
     </test-case>
     <test-case FilePath="misc">
+      <compilation-unit name="query-ASTERIXDB-971">
+        <output-dir compare="Text">query-ASTERIXDB-971-sqlpp</output-dir>
+      </compilation-unit>
+    </test-case>
+    <test-case FilePath="misc">
       <compilation-unit name="query-ASTERIXDB-1531">
         <output-dir compare="Text">query-ASTERIXDB-1531</output-dir>
       </compilation-unit>
@@ -7650,7 +7707,7 @@
     <test-case FilePath="union">
       <compilation-unit name="union_negative_2">
         <output-dir compare="Text">union</output-dir>
-        <expected-error>Undefined alias (variable) reference for identifier t</expected-error>
+        <expected-error>Cannot find dataset t in dataverse TinySocial nor an alias with name t</expected-error>
       </compilation-unit>
     </test-case>
     <test-case FilePath="union">
diff --git a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/visitor/AQLToSQLPPPrintVisitor.java b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/visitor/AQLToSQLPPPrintVisitor.java
index 2af2816..0525f80 100644
--- a/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/visitor/AQLToSQLPPPrintVisitor.java
+++ b/asterixdb/asterix-lang-aql/src/main/java/org/apache/asterix/lang/aql/visitor/AQLToSQLPPPrintVisitor.java
@@ -406,7 +406,7 @@
         for (GbyVariableExpressionPair keyPair : gbyClause.getDecorPairList()) {
             producedVars.add(keyPair.getVar());
         }
-        producedVars.addAll(gbyClause.getWithVarList());
+        producedVars.addAll(gbyClause.getWithVarMap().values());
         return producedVars;
     }
 
diff --git a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
index b690f03..9cffda0 100644
--- a/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
+++ b/asterixdb/asterix-lang-aql/src/main/javacc/AQL.jj
@@ -2409,7 +2409,7 @@
     // GbyVariableExpressionPair pair = new GbyVariableExpressionPair();
     List<GbyVariableExpressionPair> vePairList = new ArrayList<GbyVariableExpressionPair>();
     List<GbyVariableExpressionPair> decorPairList = new ArrayList<GbyVariableExpressionPair>();
-    List<VariableExpr> withVarList= new ArrayList<VariableExpr>();
+    Map<Expression, VariableExpr> withVarMap = new HashMap<Expression, VariableExpr>();
     VariableExpr var = null;
     VariableExpr withVar = null;
     Expression expr = null;
@@ -2465,20 +2465,20 @@
     {
       if(withVar.getIsNewVar()==true)
           throw new ParseException("can't find variable " + withVar.getVar());
-      withVarList.add(withVar);
+      withVarMap.put(withVar, withVar);
       newScope.addNewVarSymbolToScope(withVar.getVar());
     }
     (<COMMA> withVar = VariableRef()
     {
       if(withVar.getIsNewVar()==true)
           throw new ParseException("can't find variable " + withVar.getVar());
-      withVarList.add(withVar);
+      withVarMap.put(withVar, withVar);
       newScope.addNewVarSymbolToScope(withVar.getVar());
     })*
     {
       gbc.setGbyPairList(vePairList);
       gbc.setDecorPairList(decorPairList);
-      gbc.setWithVarList(withVarList);
+      gbc.setWithVarMap(withVarMap);
       replaceCurrentScope(newScope);
       return gbc;
     }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/GroupbyClause.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/GroupbyClause.java
index 3565c5a..0f75839 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/GroupbyClause.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/clause/GroupbyClause.java
@@ -20,6 +20,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
 
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.lang.common.base.Clause;
@@ -35,7 +36,7 @@
 
     private List<GbyVariableExpressionPair> gbyPairList;
     private List<GbyVariableExpressionPair> decorPairList;
-    private List<VariableExpr> withVarList;
+    private Map<Expression, VariableExpr> withVarMap;
     private VariableExpr groupVar;
     private List<Pair<Expression, Identifier>> groupFieldList = new ArrayList<>();
     private boolean hashGroupByHint;
@@ -46,17 +47,17 @@
     }
 
     public GroupbyClause(List<GbyVariableExpressionPair> gbyPairList, List<GbyVariableExpressionPair> decorPairList,
-            List<VariableExpr> withVarList, VariableExpr groupVarExpr,
+            Map<Expression, VariableExpr> withVarList, VariableExpr groupVarExpr,
             List<Pair<Expression, Identifier>> groupFieldList, boolean hashGroupByHint) {
         this(gbyPairList, decorPairList, withVarList, groupVarExpr, groupFieldList, hashGroupByHint, false);
     }
 
     public GroupbyClause(List<GbyVariableExpressionPair> gbyPairList, List<GbyVariableExpressionPair> decorPairList,
-            List<VariableExpr> withVarList, VariableExpr groupVarExpr,
+            Map<Expression, VariableExpr> withVarList, VariableExpr groupVarExpr,
             List<Pair<Expression, Identifier>> groupFieldList, boolean hashGroupByHint, boolean groupAll) {
         this.gbyPairList = gbyPairList;
         this.decorPairList = decorPairList;
-        this.withVarList = withVarList;
+        this.withVarMap = withVarList;
         this.groupVar = groupVarExpr;
         if (groupFieldList != null) {
             this.groupFieldList = groupFieldList;
@@ -73,12 +74,12 @@
         this.gbyPairList = vePairList;
     }
 
-    public List<VariableExpr> getWithVarList() {
-        return withVarList;
+    public Map<Expression, VariableExpr> getWithVarMap() {
+        return withVarMap;
     }
 
-    public void setWithVarList(List<VariableExpr> withVarList) {
-        this.withVarList = withVarList;
+    public void setWithVarMap(Map<Expression, VariableExpr> withVarList) {
+        this.withVarMap = withVarList;
     }
 
     public VariableExpr getGroupVar() {
@@ -127,8 +128,8 @@
         return decorPairList != null && !decorPairList.isEmpty();
     }
 
-    public boolean hasWithList() {
-        return withVarList != null && !withVarList.isEmpty();
+    public boolean hasWithMap() {
+        return withVarMap != null && !withVarMap.isEmpty();
     }
 
     public boolean hasGroupVar() {
@@ -146,7 +147,7 @@
     @Override
     public int hashCode() {
         return ObjectUtils.hashCodeMulti(decorPairList, gbyPairList, groupAll, groupFieldList, groupVar,
-                hashGroupByHint, withVarList);
+                hashGroupByHint, withVarMap);
     }
 
     @Override
@@ -162,6 +163,6 @@
                 && ObjectUtils.equals(gbyPairList, target.gbyPairList) && groupAll == target.groupAll
                 && ObjectUtils.equals(groupFieldList, target.groupFieldList);
         return equals && ObjectUtils.equals(groupVar, target.groupVar) && hashGroupByHint == target.hashGroupByHint
-                && ObjectUtils.equals(withVarList, target.withVarList);
+                && ObjectUtils.equals(withVarMap, target.withVarMap);
     }
 }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/context/Scope.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/context/Scope.java
index 595fb11..97cad5e 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/context/Scope.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/context/Scope.java
@@ -224,4 +224,8 @@
         }
         return vars;
     }
+
+    public Scope getParentScope(){
+        return parent;
+    }
 }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java
index 534c74f..dbaea37 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/expression/VariableExpr.java
@@ -27,7 +27,6 @@
 public class VariableExpr implements Expression {
     private VarIdentifier var;
     private boolean isNewVar;
-    private boolean namedValueAccess = false;
 
     public VariableExpr() {
         super();
@@ -66,14 +65,6 @@
         return visitor.visit(this, arg);
     }
 
-    public void setNamedValueAccess(boolean namedValueAccess) {
-        this.namedValueAccess = namedValueAccess;
-    }
-
-    public boolean namedValueAccess() {
-        return namedValueAccess;
-    }
-
     @Override
     public int hashCode() {
         return ObjectUtils.hashCode(var);
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ExpressionSubstitutionEnvironment.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ExpressionSubstitutionEnvironment.java
deleted file mode 100644
index 8f5597f..0000000
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/rewrites/ExpressionSubstitutionEnvironment.java
+++ /dev/null
@@ -1,165 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.lang.common.rewrites;
-
-import java.util.ArrayDeque;
-import java.util.Collection;
-import java.util.Deque;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Map.Entry;
-
-import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.base.ILangExpression;
-import org.apache.asterix.lang.common.expression.VariableExpr;
-
-import com.google.common.collect.HashMultiset;
-import com.google.common.collect.Multiset;
-
-/**
- * This class is in charge of substitute expressions by a given mapping while
- * traversing a given AST. The traversal and expression substitution should
- * be based on the correct variable scoping. In order to support scoping at the
- * caller, this class provides methods like mark, reset and pop.
- */
-public class ExpressionSubstitutionEnvironment {
-
-    @FunctionalInterface
-    public static interface FreeVariableCollector {
-        public Collection<VariableExpr> getFreeVariable(ILangExpression expr) throws AsterixException;
-    }
-
-    @FunctionalInterface
-    public static interface DeepCopier {
-        public ILangExpression deepCopy(ILangExpression expr) throws AsterixException;
-    }
-
-    private Map<Expression, Expression> exprMap = new HashMap<>();
-    private Map<VariableExpr, Expression> freeVarToExprMap = new HashMap<>();
-
-    // We use multiset here because variables can be defined multiple times
-    // in the scope stack.
-    private Multiset<Expression> disabledExpr = HashMultiset.create();
-
-    // Snapshots of variables that should be disabled for replacement,
-    // e.g., if a variable is redefined in a closer scope.
-    private Deque<Multiset<Expression>> disabledExprBackup = new ArrayDeque<>();
-
-    public ExpressionSubstitutionEnvironment() {
-        // Default constructor.
-    }
-
-    public ExpressionSubstitutionEnvironment(Map<Expression, Expression> map, FreeVariableCollector freeVarCollector)
-            throws AsterixException {
-        addMapping(map, freeVarCollector);
-    }
-
-    /**
-     * Finds a substitution expression.
-     *
-     * @param expr
-     *            the original expression.
-     * @return the new, replaced expression.
-     */
-    public Expression findSubstitution(Expression expr, DeepCopier deepCopier) throws AsterixException {
-        Expression replacementExpr = exprMap.get(expr);
-        if (replacementExpr != null && !disabledExpr.contains(replacementExpr)) {
-            return (Expression) deepCopier.deepCopy(replacementExpr);
-        }
-        return expr;
-    }
-
-    /**
-     * Disable a substitution when a free variable in the expression is re-defined.
-     *
-     * @param var
-     *            a re-defined variable.
-     */
-    public void disableVariable(VariableExpr var) {
-        Expression expr = freeVarToExprMap.get(var);
-        if (expr != null) {
-            disabledExpr.add(expr);
-        }
-    }
-
-    /**
-     * Re-enable a substitution when a re-defined variable exits its scope.
-     *
-     * @param var
-     *            a re-defined variable.
-     */
-    public void enableVariable(VariableExpr var) {
-        Expression expr = freeVarToExprMap.get(var);
-        if (expr != null) {
-            disabledExpr.remove(expr);
-        }
-    }
-
-    /**
-     * Tasks a snapshot of the current states.
-     *
-     * @return the snapshot id that can be reset to in the future.
-     */
-    public int mark() {
-        Multiset<Expression> copyOfDisabledExprs = HashMultiset.create();
-        copyOfDisabledExprs.addAll(disabledExpr);
-        disabledExprBackup.push(copyOfDisabledExprs);
-        return disabledExprBackup.size() - 1;
-    }
-
-    /**
-     * Resets the internal states to a snapshot.
-     *
-     * @param depth,
-     *            the snapshot id that the caller wants to recover to.
-     */
-    public void reset(int depth) {
-        while (disabledExprBackup.size() > depth) {
-            disabledExpr = disabledExprBackup.pop();
-        }
-    }
-
-    /**
-     * Restores to the most-recent snapshot.
-     */
-    public void pop() {
-        if (!disabledExprBackup.isEmpty()) {
-            disabledExpr = disabledExprBackup.pop();
-        }
-    }
-
-    @Override
-    public String toString() {
-        return exprMap.toString();
-    }
-
-    private void addMapping(Map<Expression, Expression> map, FreeVariableCollector freeVarCollector)
-            throws AsterixException {
-        exprMap.putAll(map);
-        // Put free variable to target expression map.
-        for (Entry<Expression, Expression> entry : map.entrySet()) {
-            Expression targetExpr = entry.getKey();
-            for (VariableExpr freeVar : freeVarCollector.getFreeVariable(targetExpr)) {
-                freeVarToExprMap.put(freeVar, targetExpr);
-            }
-        }
-    }
-
-}
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java
index a217bea..c2a6f38 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/struct/VarIdentifier.java
@@ -22,22 +22,32 @@
 
 public final class VarIdentifier extends Identifier {
     private int id = 0;
+    private boolean namedValueAccess = false;
 
     public VarIdentifier() {
         super();
     }
 
+    public VarIdentifier(VarIdentifier v){
+        this(v.getValue(), v.getId(), v.namedValueAccess());
+    }
+
     public VarIdentifier(String value) {
-        super();
-        this.value = value;
+        this(value, 0);
     }
 
     public VarIdentifier(String value, int id) {
+        this(value, id, false);
+    }
+
+    private VarIdentifier(String value, int id, boolean namedValueAccess) {
         super();
         this.value = value;
         this.id = id;
+        this.namedValueAccess = namedValueAccess;
     }
 
+
     public void setId(int id) {
         this.id = id;
     }
@@ -53,6 +63,14 @@
         return vi;
     }
 
+    public void setNamedValueAccess(boolean namedValueAccess) {
+        this.namedValueAccess = namedValueAccess;
+    }
+
+    public boolean namedValueAccess() {
+        return namedValueAccess;
+    }
+
     @Override
     public int hashCode() {
         return ObjectUtils.hashCodeMulti(value);
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
index 9ffcf8d..3fdb141 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/CloneAndSubstituteVariablesVisitor.java
@@ -19,8 +19,10 @@
 package org.apache.asterix.lang.common.visitor;
 
 import java.util.ArrayList;
-import java.util.LinkedList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.lang.common.base.Expression;
@@ -88,15 +90,12 @@
         if (gc.hasGroupVar()) {
             newGroupVar = generateNewVariable(context, gc.getGroupVar());
         }
-        List<VariableExpr> wList = new LinkedList<>();
-        if (gc.hasWithList()) {
-            for (VariableExpr w : gc.getWithVarList()) {
-                VarIdentifier newVar = context.getRewrittenVar(w.getVar().getId());
-                if (newVar == null) {
-                    throw new AsterixException("Could not find a rewritten variable identifier for " + w);
-                }
-                VariableExpr newWithVar = new VariableExpr(newVar);
-                wList.add(newWithVar);
+        Map<Expression, VariableExpr> newWithMap = new HashMap<>();
+        if (gc.hasWithMap()) {
+            for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
+                Expression newKeyVar = (Expression) entry.getKey().accept(this, env).first;
+                VariableExpr newValueVar = generateNewVariable(context, entry.getValue());
+                newWithMap.put(newKeyVar, newValueVar);
             }
         }
         List<Pair<Expression, Identifier>> newGroupFieldList = new ArrayList<>();
@@ -106,7 +105,7 @@
                 newGroupFieldList.add(new Pair<Expression, Identifier>(newExpr, varId.second));
             }
         }
-        GroupbyClause newGroup = new GroupbyClause(newGbyList, newDecorList, wList, newGroupVar, newGroupFieldList,
+        GroupbyClause newGroup = new GroupbyClause(newGbyList, newDecorList, newWithMap, newGroupVar, newGroupFieldList,
                 gc.hasHashGroupByHint(), gc.isGroupAll());
         return new Pair<>(newGroup, newSubs);
     }
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
index 54795bc..5feb61b 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/FormatPrintVisitor.java
@@ -25,6 +25,7 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
@@ -327,9 +328,23 @@
             out.print(" decor ");
             printDelimitedGbyExpressions(gc.getDecorPairList(), step + 2);
         }
-        if (gc.hasWithList()) {
+        if (gc.hasWithMap()) {
             out.print(" with ");
-            this.printDelimitedExpressions(gc.getWithVarList(), COMMA, step + 2);
+            Map<Expression, VariableExpr> withVarMap = gc.getWithVarMap();
+            int index = 0;
+            int size = withVarMap.size();
+            for (Entry<Expression, VariableExpr> entry : withVarMap.entrySet()) {
+                Expression key = entry.getKey();
+                VariableExpr value = entry.getValue();
+                key.accept(this, step + 2);
+                if (!key.equals(value)) {
+                    out.print(" as ");
+                    value.accept(this, step + 2);
+                }
+                if (++index < size) {
+                    out.print(COMMA);
+                }
+            }
         }
         out.println();
         return null;
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/QueryPrintVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/QueryPrintVisitor.java
index a32a3c8..a5c9efc 100644
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/QueryPrintVisitor.java
+++ b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/QueryPrintVisitor.java
@@ -21,6 +21,7 @@
 import java.io.PrintWriter;
 import java.util.Iterator;
 import java.util.List;
+import java.util.Map.Entry;
 
 import org.apache.asterix.common.config.DatasetConfig.DatasetType;
 import org.apache.asterix.common.exceptions.AsterixException;
@@ -251,10 +252,16 @@
                 pair.getExpr().accept(this, step + 1);
             }
         }
-        if (gc.hasWithList()) {
+        if (gc.hasWithMap()) {
             out.println(skip(step + 1) + "With");
-            for (VariableExpr exp : gc.getWithVarList()) {
-                exp.accept(this, step + 1);
+            for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
+                Expression key = entry.getKey();
+                VariableExpr value = entry.getValue();
+                key.accept(this, step + 1);
+                if (!key.equals(value)) {
+                    out.println(skip(step + 1) + "AS");
+                    value.accept(this, step + 1);
+                }
             }
         }
         out.println();
diff --git a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/SubstituteExpressionVisitor.java b/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/SubstituteExpressionVisitor.java
deleted file mode 100644
index 073e413..0000000
--- a/asterixdb/asterix-lang-common/src/main/java/org/apache/asterix/lang/common/visitor/SubstituteExpressionVisitor.java
+++ /dev/null
@@ -1,245 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.lang.common.visitor;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.clause.LetClause;
-import org.apache.asterix.lang.common.clause.LimitClause;
-import org.apache.asterix.lang.common.clause.OrderbyClause;
-import org.apache.asterix.lang.common.clause.WhereClause;
-import org.apache.asterix.lang.common.expression.CallExpr;
-import org.apache.asterix.lang.common.expression.FieldAccessor;
-import org.apache.asterix.lang.common.expression.FieldBinding;
-import org.apache.asterix.lang.common.expression.IfExpr;
-import org.apache.asterix.lang.common.expression.IndexAccessor;
-import org.apache.asterix.lang.common.expression.ListConstructor;
-import org.apache.asterix.lang.common.expression.LiteralExpr;
-import org.apache.asterix.lang.common.expression.OperatorExpr;
-import org.apache.asterix.lang.common.expression.QuantifiedExpression;
-import org.apache.asterix.lang.common.expression.RecordConstructor;
-import org.apache.asterix.lang.common.expression.UnaryExpr;
-import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.rewrites.ExpressionSubstitutionEnvironment;
-import org.apache.asterix.lang.common.rewrites.ExpressionSubstitutionEnvironment.DeepCopier;
-import org.apache.asterix.lang.common.statement.FunctionDecl;
-import org.apache.asterix.lang.common.statement.Query;
-import org.apache.asterix.lang.common.struct.QuantifiedPair;
-import org.apache.asterix.lang.common.visitor.base.AbstractQueryExpressionVisitor;
-
-public abstract class SubstituteExpressionVisitor
-        extends AbstractQueryExpressionVisitor<Expression, ExpressionSubstitutionEnvironment> {
-    protected final DeepCopier deepCopier;
-
-    public SubstituteExpressionVisitor(DeepCopier deepCopier) {
-        this.deepCopier = deepCopier;
-    }
-
-    @Override
-    public Expression visit(LetClause lc, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        // Marks the binding variable for future visiting until it exists its scope.
-        env.disableVariable(lc.getVarExpr());
-        lc.setBindingExpr(lc.getBindingExpr().accept(this, env));
-        return null;
-    }
-
-    @Override
-    public Expression visit(Query q, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        q.setBody(q.getBody().accept(this, env));
-        return null;
-    }
-
-    @Override
-    public Expression visit(FunctionDecl fd, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        // Do nothing for a function declaration.
-        return null;
-    }
-
-    @Override
-    public Expression visit(LiteralExpr l, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        return env.findSubstitution(l, deepCopier);
-    }
-
-    @Override
-    public Expression visit(VariableExpr v, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        return env.findSubstitution(v, deepCopier);
-    }
-
-    @Override
-    public Expression visit(ListConstructor lc, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newLc = env.findSubstitution(lc, deepCopier);
-        if (newLc == lc) {
-            lc.setExprList(rewriteExpressionList(lc.getExprList(), env));
-            return lc;
-        } else {
-            return newLc.accept(this, env);
-        }
-    }
-
-    @Override
-    public Expression visit(RecordConstructor rc, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newRc = env.findSubstitution(rc, deepCopier);
-        if (newRc == rc) {
-            for (FieldBinding fb : rc.getFbList()) {
-                fb.setLeftExpr(fb.getLeftExpr().accept(this, env));
-                fb.setRightExpr(fb.getRightExpr().accept(this, env));
-            }
-            return rc;
-        } else {
-            return newRc.accept(this, env);
-        }
-    }
-
-    @Override
-    public Expression visit(OperatorExpr operatorExpr, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newOpertorExpr = env.findSubstitution(operatorExpr, deepCopier);
-        if (newOpertorExpr == operatorExpr) {
-            operatorExpr.setExprList(rewriteExpressionList(operatorExpr.getExprList(), env));
-            return operatorExpr;
-        } else {
-            return newOpertorExpr.accept(this, env);
-        }
-    }
-
-    @Override
-    public Expression visit(FieldAccessor fa, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newFa = env.findSubstitution(fa, deepCopier);
-        if (newFa == fa) {
-            fa.setExpr(fa.getExpr().accept(this, env));
-            return fa;
-        } else {
-            return newFa.accept(this, env);
-        }
-    }
-
-    @Override
-    public Expression visit(IndexAccessor ia, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newIa = env.findSubstitution(ia, deepCopier);
-        if (newIa == ia) {
-            ia.setExpr(ia.getExpr().accept(this, env));
-            ia.setIndexExpr(ia.getIndexExpr().accept(this, env));
-            return ia;
-        } else {
-            return newIa.accept(this, env);
-        }
-    }
-
-    @Override
-    public Expression visit(IfExpr ifexpr, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newIfExpr = env.findSubstitution(ifexpr, deepCopier);
-        if (newIfExpr == ifexpr) {
-            ifexpr.setCondExpr(ifexpr.getCondExpr().accept(this, env));
-            ifexpr.setThenExpr(ifexpr.getThenExpr().accept(this, env));
-            ifexpr.setElseExpr(ifexpr.getElseExpr().accept(this, env));
-            return ifexpr;
-        } else {
-            return newIfExpr.accept(this, env);
-        }
-    }
-
-    @Override
-    public Expression visit(QuantifiedExpression qe, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newQe = env.findSubstitution(qe, deepCopier);
-        if (newQe == qe) {
-            // Rewrites the quantifier list.
-            for (QuantifiedPair pair : qe.getQuantifiedList()) {
-                pair.setExpr(pair.getExpr().accept(this, env));
-            }
-
-            // Rewrites the condition.
-            for (QuantifiedPair pair : qe.getQuantifiedList()) {
-                // Marks each binding var.
-                env.disableVariable(pair.getVarExpr());
-            }
-            qe.setSatisfiesExpr(qe.getSatisfiesExpr().accept(this, env));
-            for (QuantifiedPair pair : qe.getQuantifiedList()) {
-                // Let each binding var exit its scope.
-                env.enableVariable(pair.getVarExpr());
-            }
-            return qe;
-        } else {
-            return newQe.accept(this, env);
-        }
-    }
-
-    @Override
-    public Expression visit(WhereClause wc, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        wc.setWhereExpr(wc.getWhereExpr().accept(this, env));
-        return null;
-    }
-
-    @Override
-    public Expression visit(OrderbyClause oc, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        oc.setOrderbyList(rewriteExpressionList(oc.getOrderbyList(), env));
-        return null;
-    }
-
-    @Override
-    public Expression visit(LimitClause lc, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        lc.setLimitExpr(lc.getLimitExpr().accept(this, env));
-        if (lc.hasOffset()) {
-            lc.setOffset(lc.getOffset().accept(this, env));
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(UnaryExpr u, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newU = env.findSubstitution(u, deepCopier);
-        if (newU == u) {
-            u.setExpr(u.getExpr().accept(this, env));
-            return u;
-        } else {
-            return newU.accept(this, env);
-        }
-    }
-
-    @Override
-    public Expression visit(CallExpr callExpr, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newCallExpr = env.findSubstitution(callExpr, deepCopier);
-        if (newCallExpr == callExpr) {
-            callExpr.setExprList(rewriteExpressionList(callExpr.getExprList(), env));
-            return callExpr;
-        } else {
-            return newCallExpr.accept(this, env);
-        }
-    }
-
-    /**
-     * Rewrites the expression list.
-     *
-     * @param exprs,
-     *            list of expressions.
-     * @param env,
-     *            ExpressionSubstitutionEnvironment.
-     * @return a list of rewritten expressions.
-     * @throws AsterixException
-     */
-    protected List<Expression> rewriteExpressionList(List<Expression> exprs, ExpressionSubstitutionEnvironment env)
-            throws AsterixException {
-        List<Expression> newExprs = new ArrayList<>();
-        for (Expression expr : exprs) {
-            newExprs.add(env.findSubstitution(expr, deepCopier));
-        }
-        return newExprs;
-    }
-}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppFunctionBodyRewriter.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppFunctionBodyRewriter.java
index 43fa4a2..7a26c6b 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppFunctionBodyRewriter.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppFunctionBodyRewriter.java
@@ -43,9 +43,6 @@
         // Substitutes group-by key expressions.
         substituteGroupbyKeyExpression();
 
-        // Inlines WITH expressions.
-        inlineWithExpressions();
-
         // Rewrites SQL-92 global aggregations.
         rewriteGlobalAggregations();
 
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
index 3f7cb31..1ce5de7 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/SqlppQueryRewriter.java
@@ -107,9 +107,6 @@
         // Substitutes group-by key expressions.
         substituteGroupbyKeyExpression();
 
-        // Inlines WITH expressions.
-        inlineWithExpressions();
-
         // Rewrites SQL-92 global aggregations.
         rewriteGlobalAggregations();
 
@@ -141,6 +138,10 @@
         // Replace global variable access with the dataset function for inlined expressions.
         variableCheckAndRewrite(true);
 
+        // Inlines WITH expressions after variableCheckAndRewrite(...) so that the variable scoping for WITH
+        // expression is correct.
+        inlineWithExpressions();
+
         // Sets the var counter of the query.
         topExpr.setVarCounter(context.getVarCounter());
     }
@@ -170,7 +171,7 @@
             return;
         }
         // Inlines with expressions.
-        InlineWithExpressionVisitor inlineWithExpressionVisitor = new InlineWithExpressionVisitor();
+        InlineWithExpressionVisitor inlineWithExpressionVisitor = new InlineWithExpressionVisitor(context);
         inlineWithExpressionVisitor.visit(topExpr, null);
     }
 
@@ -189,7 +190,7 @@
         }
         // Substitute group-by key expressions that appear in the select clause.
         SubstituteGroupbyExpressionWithVariableVisitor substituteGbyExprVisitor =
-                new SubstituteGroupbyExpressionWithVariableVisitor();
+                new SubstituteGroupbyExpressionWithVariableVisitor(context);
         substituteGbyExprVisitor.visit(topExpr, null);
     }
 
@@ -216,8 +217,8 @@
             return;
         }
         // Inline column aliases.
-        InlineColumnAliasVisitor inlineColumnAliasVisitor = new InlineColumnAliasVisitor();
-        inlineColumnAliasVisitor.visit(topExpr, false);
+        InlineColumnAliasVisitor inlineColumnAliasVisitor = new InlineColumnAliasVisitor(context);
+        inlineColumnAliasVisitor.visit(topExpr, null);
     }
 
     protected void variableCheckAndRewrite(boolean overwrite) throws AsterixException {
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineColumnAliasVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineColumnAliasVisitor.java
index ea0aa86..36786cd 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineColumnAliasVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineColumnAliasVisitor.java
@@ -18,204 +18,106 @@
  */
 package org.apache.asterix.lang.sqlpp.rewrites.visitor;
 
-import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import java.util.Map.Entry;
 
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.base.Expression.Kind;
+import org.apache.asterix.lang.common.base.ILangExpression;
 import org.apache.asterix.lang.common.base.Literal;
-import org.apache.asterix.lang.common.clause.GroupbyClause;
+import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.clause.LetClause;
-import org.apache.asterix.lang.common.clause.LimitClause;
-import org.apache.asterix.lang.common.clause.OrderbyClause;
-import org.apache.asterix.lang.common.clause.WhereClause;
-import org.apache.asterix.lang.common.expression.CallExpr;
-import org.apache.asterix.lang.common.expression.FieldAccessor;
 import org.apache.asterix.lang.common.expression.FieldBinding;
-import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
-import org.apache.asterix.lang.common.expression.IfExpr;
-import org.apache.asterix.lang.common.expression.IndexAccessor;
-import org.apache.asterix.lang.common.expression.ListConstructor;
 import org.apache.asterix.lang.common.expression.LiteralExpr;
-import org.apache.asterix.lang.common.expression.OperatorExpr;
-import org.apache.asterix.lang.common.expression.QuantifiedExpression;
 import org.apache.asterix.lang.common.expression.RecordConstructor;
-import org.apache.asterix.lang.common.expression.UnaryExpr;
 import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.parser.ScopeChecker;
-import org.apache.asterix.lang.common.rewrites.VariableSubstitutionEnvironment;
-import org.apache.asterix.lang.common.statement.FunctionDecl;
-import org.apache.asterix.lang.common.statement.Query;
-import org.apache.asterix.lang.common.struct.QuantifiedPair;
-import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
-import org.apache.asterix.lang.sqlpp.clause.FromClause;
-import org.apache.asterix.lang.sqlpp.clause.FromTerm;
-import org.apache.asterix.lang.sqlpp.clause.HavingClause;
-import org.apache.asterix.lang.sqlpp.clause.JoinClause;
-import org.apache.asterix.lang.sqlpp.clause.NestClause;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
+import org.apache.asterix.lang.common.struct.VarIdentifier;
 import org.apache.asterix.lang.sqlpp.clause.Projection;
 import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
 import org.apache.asterix.lang.sqlpp.clause.SelectClause;
 import org.apache.asterix.lang.sqlpp.clause.SelectElement;
 import org.apache.asterix.lang.sqlpp.clause.SelectRegular;
-import org.apache.asterix.lang.sqlpp.clause.SelectSetOperation;
-import org.apache.asterix.lang.sqlpp.clause.UnnestClause;
-import org.apache.asterix.lang.sqlpp.expression.CaseExpression;
-import org.apache.asterix.lang.sqlpp.expression.IndependentSubquery;
 import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
-import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
-import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
-import org.apache.asterix.lang.sqlpp.util.SqlppVariableSubstitutionUtil;
 import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
-import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppQueryExpressionVisitor;
+import org.apache.asterix.lang.sqlpp.visitor.SqlppSubstituteExpressionVisitor;
+import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
 
-public class InlineColumnAliasVisitor extends AbstractSqlppQueryExpressionVisitor<Void, Boolean> {
+public class InlineColumnAliasVisitor extends AbstractSqlppExpressionScopingVisitor {
 
-    private final ScopeChecker scopeChecker = new ScopeChecker();
-
-    @Override
-    public Void visit(WhereClause whereClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        whereClause.getWhereExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
+    public InlineColumnAliasVisitor(LangRewritingContext context) {
+        super(context);
     }
 
     @Override
-    public Void visit(FromClause fromClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        for (FromTerm fromTerm : fromClause.getFromTerms()) {
-            fromTerm.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        return null;
-    }
+    public Expression visit(SelectBlock selectBlock, ILangExpression arg) throws AsterixException {
+        // Gets the map from select clause.
+        Map<Expression, Expression> map = getMap(selectBlock.getSelectClause());
 
-    @Override
-    public Void visit(FromTerm fromTerm, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        fromTerm.getLeftExpression().accept(this, overwriteWithGbyKeyVarRefs);
-        // A from binding variable will override the alias to substitute.
-        scopeChecker.getCurrentScope().removeSymbolExpressionMapping(fromTerm.getLeftVariable());
-        if (fromTerm.hasPositionalVariable()) {
-            scopeChecker.getCurrentScope().removeSymbolExpressionMapping(fromTerm.getPositionalVariable());
-        }
-
-        for (AbstractBinaryCorrelateClause correlate : fromTerm.getCorrelateClauses()) {
-            correlate.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(JoinClause joinClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        joinClause.getRightExpression().accept(this, overwriteWithGbyKeyVarRefs);
-        removeSubsutitions(joinClause);
-        joinClause.getConditionExpression().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    @Override
-    public Void visit(NestClause nestClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        nestClause.getRightExpression().accept(this, overwriteWithGbyKeyVarRefs);
-        nestClause.getConditionExpression().accept(this, overwriteWithGbyKeyVarRefs);
-        removeSubsutitions(nestClause);
-        return null;
-    }
-
-    @Override
-    public Void visit(UnnestClause unnestClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        unnestClause.getRightExpression().accept(this, overwriteWithGbyKeyVarRefs);
-        removeSubsutitions(unnestClause);
-        return null;
-    }
-
-    @Override
-    public Void visit(Projection projection, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        if (projection.star() || projection.getName() == null) {
-            return null;
-        }
-        projection.getExpression().accept(this, overwriteWithGbyKeyVarRefs);
-        VariableExpr columnAlias =
-                new VariableExpr(SqlppVariableUtil.toInternalVariableIdentifier(projection.getName()));
-        VariableSubstitutionEnvironment env = scopeChecker.getCurrentScope().getVarSubstitutionEnvironment();
-        Expression gbyKey = (Expression) SqlppRewriteUtil.deepCopy(env.findSubstitution(columnAlias));
-        if (overwriteWithGbyKeyVarRefs) {
-            if (gbyKey != null) {
-                projection.setExpression(gbyKey);
-            }
-        } else {
-            scopeChecker.getCurrentScope().addSymbolExpressionMappingToScope(columnAlias, projection.getExpression());
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(SelectBlock selectBlock, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        // Traverses the select block in the order of "select", "group-by",
-        // "group-by" lets and "having".
-        // The first pass over the select clause will not overwrite projection expressions.
-        selectBlock.getSelectClause().accept(this, false);
-
+        // Removes all FROM/LET binding variables
         if (selectBlock.hasFromClause()) {
-            selectBlock.getFromClause().accept(this, overwriteWithGbyKeyVarRefs);
+            map.keySet().removeAll(SqlppVariableUtil.getBindingVariables(selectBlock.getFromClause()));
         }
         if (selectBlock.hasLetClauses()) {
-            for (LetClause letClause : selectBlock.getLetList()) {
-                letClause.accept(this, overwriteWithGbyKeyVarRefs);
-            }
+            map.keySet().removeAll(SqlppVariableUtil.getBindingVariables(selectBlock.getLetList()));
         }
+
+        // Creates a substitution visitor.
+        SqlppSubstituteExpressionVisitor visitor = new SqlppSubstituteExpressionVisitor(context, map);
+
+        // Rewrites GROUP BY/LET/HAVING clauses.
         if (selectBlock.hasGroupbyClause()) {
-            selectBlock.getGroupbyClause().accept(this, overwriteWithGbyKeyVarRefs);
+            selectBlock.getGroupbyClause().accept(visitor, arg);
         }
         if (selectBlock.hasLetClausesAfterGroupby()) {
-            for (LetClause letClauseAfterGby : selectBlock.getLetListAfterGroupby()) {
-                letClauseAfterGby.accept(this, true);
+            for (LetClause letClause : selectBlock.getLetListAfterGroupby()) {
+                letClause.accept(visitor, arg);
             }
         }
         if (selectBlock.hasHavingClause()) {
-            selectBlock.getHavingClause().accept(this, overwriteWithGbyKeyVarRefs);
+            selectBlock.getHavingClause().accept(visitor, arg);
         }
+        SelectExpression selectExpression = (SelectExpression) arg;
 
-        // Visit select clause again to overwrite projection expressions to group-by
-        // key variable references if any group-by key is the original projection
-        // column alias.
-        selectBlock.getSelectClause().accept(this, true);
-        return null;
+        // For SET operation queries, column aliases will not substitute ORDER BY nor LIMIT expressions.
+        if (!selectExpression.getSelectSetOperation().hasRightInputs()) {
+            if (selectExpression.hasOrderby()) {
+                selectExpression.getOrderbyClause().accept(visitor, arg);
+            }
+            if (selectExpression.hasLimit()) {
+                selectExpression.getLimitClause().accept(visitor, arg);
+            }
+        }
+        return super.visit(selectBlock, arg);
     }
 
-    @Override
-    public Void visit(SelectClause selectClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
+    private Map<Expression, Expression> getMap(SelectClause selectClause) throws AsterixException {
         if (selectClause.selectElement()) {
-            selectClause.getSelectElement().accept(this, overwriteWithGbyKeyVarRefs);
+            return getMap(selectClause.getSelectElement());
         }
         if (selectClause.selectRegular()) {
-            selectClause.getSelectRegular().accept(this, overwriteWithGbyKeyVarRefs);
+            return getMap(selectClause.getSelectRegular());
         }
         return null;
     }
 
-    @Override
-    public Void visit(SelectElement selectElement, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
+    private Map<Expression, Expression> getMap(SelectElement selectElement) {
         Expression expr = selectElement.getExpression();
-        expr.accept(this, overwriteWithGbyKeyVarRefs);
         if (expr.getKind() == Kind.RECORD_CONSTRUCTOR_EXPRESSION) {
             // Rewrite top-level field names (aliases), in order to be consistent with SelectRegular.
-            mapForRecordConstructor(overwriteWithGbyKeyVarRefs, (RecordConstructor) expr);
+            return mapRecordConstructor((RecordConstructor) expr);
         }
-        return null;
+        return Collections.emptyMap();
     }
 
-    /**
-     * Map aliases for a record constructor in SELECT ELEMENT.
-     *
-     * @param overwriteWithGbyKeyVarRefs,
-     *            whether we rewrite the record constructor with mapped group-by key variables.
-     * @param rc,
-     *            the RecordConstructor expression.
-     * @throws AsterixException
-     */
-    private void mapForRecordConstructor(Boolean overwriteWithGbyKeyVarRefs, RecordConstructor rc)
-            throws AsterixException {
+    private Map<Expression, Expression> getMap(SelectRegular selectRegular) {
+        return mapProjections(selectRegular.getProjections());
+    }
+
+    private Map<Expression, Expression> mapRecordConstructor(RecordConstructor rc) {
+        Map<Expression, Expression> exprMap = new HashMap<>();
         for (FieldBinding binding : rc.getFbList()) {
             Expression leftExpr = binding.getLeftExpr();
             // We only need to deal with the case that the left expression (for a field name) is
@@ -226,263 +128,20 @@
             }
             LiteralExpr literalExpr = (LiteralExpr) leftExpr;
             if (literalExpr.getValue().getLiteralType() == Literal.Type.STRING) {
-                String fieldName = literalExpr.getValue().getStringValue();
-                VariableExpr columnAlias = new VariableExpr(SqlppVariableUtil.toInternalVariableIdentifier(fieldName));
-                VariableSubstitutionEnvironment env = scopeChecker.getCurrentScope().getVarSubstitutionEnvironment();
-                if (overwriteWithGbyKeyVarRefs) {
-                    // Rewrites the field value expression by the mapped grouping key
-                    // (for the column alias) if there exists such a mapping.
-                    Expression gbyKey = (Expression) SqlppRewriteUtil.deepCopy(env.findSubstitution(columnAlias));
-                    if (gbyKey != null) {
-                        binding.setRightExpr(gbyKey);
-                    }
-                } else {
-                    // If this is the first pass, map a field name (i.e., column alias) to the field expression.
-                    scopeChecker.getCurrentScope().addSymbolExpressionMappingToScope(columnAlias,
-                            binding.getRightExpr());
-                }
+                String fieldName = SqlppVariableUtil.toInternalVariableName(literalExpr.getValue().getStringValue());
+                exprMap.put(new VariableExpr(new VarIdentifier(fieldName)), binding.getRightExpr());
             }
         }
+        return exprMap;
     }
 
-    @Override
-    public Void visit(SelectRegular selectRegular, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        for (Projection projection : selectRegular.getProjections()) {
-            projection.accept(this, overwriteWithGbyKeyVarRefs);
+    private Map<Expression, Expression> mapProjections(List<Projection> projections) {
+        Map<Expression, Expression> exprMap = new HashMap<>();
+        for (Projection projection : projections) {
+            exprMap.put(
+                    new VariableExpr(new VarIdentifier(SqlppVariableUtil.toInternalVariableName(projection.getName()))),
+                    projection.getExpression());
         }
-        return null;
-    }
-
-    @Override
-    public Void visit(SelectSetOperation selectSetOperation, Boolean overwriteWithGbyKeyVarRefs)
-            throws AsterixException {
-        selectSetOperation.getLeftInput().accept(this, overwriteWithGbyKeyVarRefs);
-        for (SetOperationRight right : selectSetOperation.getRightInputs()) {
-            right.getSetOperationRightInput().accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(SelectExpression selectExpression, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        scopeChecker.createNewScope();
-
-        // Visits let bindings.
-        if (selectExpression.hasLetClauses()) {
-            for (LetClause lc : selectExpression.getLetList()) {
-                lc.accept(this, overwriteWithGbyKeyVarRefs);
-            }
-        }
-
-        // Visits selectSetOperation
-        SelectSetOperation selectSetOperation = selectExpression.getSelectSetOperation();
-        selectSetOperation.accept(this, overwriteWithGbyKeyVarRefs);
-
-        // If there is a UNION in the selectSetOperation, we cannot overwrite order by or limit.
-        if (!selectSetOperation.hasRightInputs()) {
-            // Visits order by.
-            if (selectExpression.hasOrderby()) {
-                selectExpression.getOrderbyClause().accept(this, overwriteWithGbyKeyVarRefs);
-            }
-            // Visits limit.
-            if (selectExpression.hasLimit()) {
-                selectExpression.getLimitClause().accept(this, overwriteWithGbyKeyVarRefs);
-            }
-        }
-
-        // Exits the scope that were entered within this select expression
-        scopeChecker.removeCurrentScope();
-        return null;
-    }
-
-    @Override
-    public Void visit(LetClause letClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        VariableSubstitutionEnvironment env = scopeChecker.getCurrentScope().getVarSubstitutionEnvironment();
-        if (overwriteWithGbyKeyVarRefs) {
-            Expression newBindExpr = (Expression) SqlppVariableSubstitutionUtil
-                    .substituteVariableWithoutContext(letClause.getBindingExpr(), env);
-            letClause.setBindingExpr(newBindExpr);
-        }
-        letClause.getBindingExpr().accept(this, false);
-        // A let binding variable will override the alias to substitute.
-        scopeChecker.getCurrentScope().removeSymbolExpressionMapping(letClause.getVarExpr());
-        return null;
-    }
-
-    @Override
-    public Void visit(OrderbyClause oc, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        VariableSubstitutionEnvironment env = scopeChecker.getCurrentScope().getVarSubstitutionEnvironment();
-        List<Expression> orderExprs = new ArrayList<>();
-        for (Expression orderExpr : oc.getOrderbyList()) {
-            orderExprs.add((Expression) SqlppVariableSubstitutionUtil.substituteVariableWithoutContext(orderExpr, env));
-            orderExpr.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        oc.setOrderbyList(orderExprs);
-        return null;
-    }
-
-    @Override
-    public Void visit(GroupbyClause gc, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        VariableSubstitutionEnvironment env = scopeChecker.getCurrentScope().getVarSubstitutionEnvironment();
-        Map<VariableExpr, VariableExpr> oldGbyExprsToNewGbyVarMap = new HashMap<>();
-        for (GbyVariableExpressionPair gbyVarExpr : gc.getGbyPairList()) {
-            Expression oldGbyExpr = gbyVarExpr.getExpr();
-            Expression newExpr =
-                    (Expression) SqlppVariableSubstitutionUtil.substituteVariableWithoutContext(oldGbyExpr, env);
-            newExpr.accept(this, overwriteWithGbyKeyVarRefs);
-            gbyVarExpr.setExpr(newExpr);
-            if (oldGbyExpr.getKind() == Kind.VARIABLE_EXPRESSION) {
-                VariableExpr oldGbyVarExpr = (VariableExpr) oldGbyExpr;
-                if (env.findSubstitution(oldGbyVarExpr) != null) {
-                    // Re-mapping that needs to be added.
-                    oldGbyExprsToNewGbyVarMap.put(oldGbyVarExpr, gbyVarExpr.getVar());
-                }
-            }
-        }
-        for (Entry<VariableExpr, VariableExpr> entry : oldGbyExprsToNewGbyVarMap.entrySet()) {
-            // The group-by key variable will override the alias to substitute.
-            scopeChecker.getCurrentScope().removeSymbolExpressionMapping(entry.getKey());
-            scopeChecker.getCurrentScope().addSymbolExpressionMappingToScope(entry.getKey(), entry.getValue());
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(LimitClause limitClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        limitClause.getLimitExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    @Override
-    public Void visit(HavingClause havingClause, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        VariableSubstitutionEnvironment env = scopeChecker.getCurrentScope().getVarSubstitutionEnvironment();
-        Expression newFilterExpr = (Expression) SqlppVariableSubstitutionUtil
-                .substituteVariableWithoutContext(havingClause.getFilterExpression(), env);
-        newFilterExpr.accept(this, overwriteWithGbyKeyVarRefs);
-        havingClause.setFilterExpression(newFilterExpr);
-        return null;
-    }
-
-    @Override
-    public Void visit(Query q, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        q.getBody().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    @Override
-    public Void visit(FunctionDecl fd, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        scopeChecker.createNewScope();
-        fd.getFuncBody().accept(this, overwriteWithGbyKeyVarRefs);
-        scopeChecker.removeCurrentScope();
-        return null;
-    }
-
-    @Override
-    public Void visit(LiteralExpr l, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        return null;
-    }
-
-    @Override
-    public Void visit(ListConstructor lc, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        for (Expression expr : lc.getExprList()) {
-            expr.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(RecordConstructor rc, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        for (FieldBinding binding : rc.getFbList()) {
-            binding.getLeftExpr().accept(this, false);
-            binding.getRightExpr().accept(this, false);
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(OperatorExpr operatorExpr, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        for (Expression expr : operatorExpr.getExprList()) {
-            expr.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(IfExpr ifExpr, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        ifExpr.getCondExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        ifExpr.getThenExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        ifExpr.getElseExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    @Override
-    public Void visit(QuantifiedExpression qe, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        for (QuantifiedPair pair : qe.getQuantifiedList()) {
-            pair.getExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        qe.getSatisfiesExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    @Override
-    public Void visit(CallExpr callExpr, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        for (Expression expr : callExpr.getExprList()) {
-            expr.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(VariableExpr varExpr, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        return null;
-    }
-
-    @Override
-    public Void visit(UnaryExpr u, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        u.getExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    @Override
-    public Void visit(FieldAccessor fa, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        fa.getExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    @Override
-    public Void visit(IndexAccessor ia, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        ia.getExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        Expression indexExpr = ia.getExpr();
-        if (indexExpr != null) {
-            indexExpr.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        return null;
-    }
-
-    @Override
-    public Void visit(IndependentSubquery independentSubquery, Boolean overwriteWithGbyKeyVarRefs)
-            throws AsterixException {
-        independentSubquery.getExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    @Override
-    public Void visit(CaseExpression caseExpression, Boolean overwriteWithGbyKeyVarRefs) throws AsterixException {
-        caseExpression.getConditionExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        for (Expression expr : caseExpression.getWhenExprs()) {
-            expr.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        for (Expression expr : caseExpression.getThenExprs()) {
-            expr.accept(this, overwriteWithGbyKeyVarRefs);
-        }
-        caseExpression.getElseExpr().accept(this, overwriteWithGbyKeyVarRefs);
-        return null;
-    }
-
-    private void removeSubsutitions(AbstractBinaryCorrelateClause unnestClause) {
-        scopeChecker.getCurrentScope().removeSymbolExpressionMapping(unnestClause.getRightVariable());
-        if (unnestClause.hasPositionalVariable()) {
-            scopeChecker.getCurrentScope().removeSymbolExpressionMapping(unnestClause.getPositionalVariable());
-        }
+        return exprMap;
     }
 }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java
index a01c09f..7a4f0fe 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/InlineWithExpressionVisitor.java
@@ -18,6 +18,8 @@
  */
 package org.apache.asterix.lang.sqlpp.rewrites.visitor;
 
+import static org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil.substituteExpression;
+
 import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -27,37 +29,45 @@
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.ILangExpression;
 import org.apache.asterix.lang.common.clause.LetClause;
-import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.sqlpp.expression.IndependentSubquery;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
 import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
-import org.apache.asterix.lang.sqlpp.util.SqlppVariableSubstitutionUtil;
-import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor;
+import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
+import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
 
-public class InlineWithExpressionVisitor extends AbstractSqlppSimpleExpressionVisitor {
+public class InlineWithExpressionVisitor extends AbstractSqlppExpressionScopingVisitor {
+
+    public InlineWithExpressionVisitor(LangRewritingContext context) {
+        super(context);
+    }
 
     @Override
     public Expression visit(SelectExpression selectExpression, ILangExpression arg) throws AsterixException {
         if (selectExpression.hasLetClauses()) {
             // Inlines the leading WITH list.
-            Map<VariableExpr, Expression> varExprMap = new HashMap<>();
+            Map<Expression, Expression> varExprMap = new HashMap<>();
             List<LetClause> withs = selectExpression.getLetList();
             Iterator<LetClause> with = withs.iterator();
             while (with.hasNext()) {
                 LetClause letClause = with.next();
                 // Replaces the let binding Expr.
                 Expression expr = letClause.getBindingExpr();
-                letClause.setBindingExpr(
-                        (Expression) SqlppVariableSubstitutionUtil.substituteVariableWithoutContext(expr, varExprMap));
+                Expression newBindingExpr = SqlppRewriteUtil.substituteExpression(expr, varExprMap, context);
+                letClause.setBindingExpr(newBindingExpr);
+
+                // Performs the rewriting recursively in the newBindingExpr itself.
+                super.visit(newBindingExpr, arg);
+
+                // Removes the WITH entry and adds variable-expr mapping into the varExprMap.
                 with.remove();
                 Expression bindingExpr = letClause.getBindingExpr();
                 // Wraps the binding expression with IndependentSubquery, so that free identifier references
                 // in the binding expression will not be resolved use outer-scope variables.
-                varExprMap.put(letClause.getVarExpr(), new IndependentSubquery(bindingExpr));
+                varExprMap.put(letClause.getVarExpr(), bindingExpr);
             }
 
             // Inlines WITH expressions into the select expression.
-            SelectExpression newSelectExpression = (SelectExpression) SqlppVariableSubstitutionUtil
-                    .substituteVariableWithoutContext(selectExpression, varExprMap);
+            SelectExpression newSelectExpression = (SelectExpression) substituteExpression(selectExpression,
+                    varExprMap, context);
 
             // Continues to visit the rewritten select expression.
             return super.visit(newSelectExpression, arg);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGlobalAggregationSugarVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGlobalAggregationSugarVisitor.java
index 98d18c2..6308d7f 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGlobalAggregationSugarVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGlobalAggregationSugarVisitor.java
@@ -19,6 +19,7 @@
 package org.apache.asterix.lang.sqlpp.rewrites.visitor;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
 
 import org.apache.asterix.common.exceptions.AsterixException;
@@ -27,7 +28,6 @@
 import org.apache.asterix.lang.common.clause.GroupbyClause;
 import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
 import org.apache.asterix.lang.common.expression.LiteralExpr;
-import org.apache.asterix.lang.common.expression.VariableExpr;
 import org.apache.asterix.lang.common.literal.IntegerLiteral;
 import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
 import org.apache.asterix.lang.sqlpp.clause.SelectClause;
@@ -51,9 +51,8 @@
                 List<GbyVariableExpressionPair> gbyPairList = new ArrayList<>();
                 gbyPairList.add(new GbyVariableExpressionPair(null, new LiteralExpr(new IntegerLiteral(1))));
                 List<GbyVariableExpressionPair> decorPairList = new ArrayList<>();
-                List<VariableExpr> withVarList = new ArrayList<>();
-                GroupbyClause gbyClause = new GroupbyClause(gbyPairList, decorPairList, withVarList, null, null, false,
-                        true);
+                GroupbyClause gbyClause = new GroupbyClause(gbyPairList, decorPairList, new HashMap<>(), null, null,
+                        false, true);
                 selectBlock.setGroupbyClause(gbyClause);
             }
         }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java
index 47aa02b..996a2ec 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupBySugarVisitor.java
@@ -22,7 +22,6 @@
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashMap;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
@@ -30,7 +29,6 @@
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.base.ILangExpression;
 import org.apache.asterix.lang.common.expression.CallExpr;
 import org.apache.asterix.lang.common.expression.FieldAccessor;
@@ -46,7 +44,6 @@
 import org.apache.asterix.lang.sqlpp.struct.SetOperationInput;
 import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
 import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
-import org.apache.asterix.lang.sqlpp.util.SqlppVariableSubstitutionUtil;
 import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
 import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
 
@@ -83,24 +80,20 @@
 public class SqlppGroupBySugarVisitor extends AbstractSqlppExpressionScopingVisitor {
 
     private final Expression groupVar;
-    private final Collection<VariableExpr> targetVars;
-    private final Collection<VariableExpr> allVisableVars;
+    private final Collection<VariableExpr> fieldVars;
 
     public SqlppGroupBySugarVisitor(LangRewritingContext context, Expression groupVar,
-            Collection<VariableExpr> targetVars, Collection<VariableExpr> allVisableVars) {
+            Collection<VariableExpr> fieldVars) {
         super(context);
         this.groupVar = groupVar;
-        this.targetVars = targetVars;
-        this.allVisableVars = allVisableVars;
-        allVisableVars.remove(groupVar);
+        this.fieldVars = fieldVars;
     }
 
     @Override
     public Expression visit(CallExpr callExpr, ILangExpression arg) throws AsterixException {
         List<Expression> newExprList = new ArrayList<>();
         FunctionSignature signature = callExpr.getFunctionSignature();
-        boolean aggregate = FunctionMapUtil.isSql92AggregateFunction(signature)
-                || FunctionMapUtil.isCoreAggregateFunction(signature);
+        boolean aggregate = FunctionMapUtil.isSql92AggregateFunction(signature);
         boolean rewritten = false;
         for (Expression expr : callExpr.getExprList()) {
             Expression newExpr = aggregate ? wrapAggregationArgument(expr) : expr;
@@ -118,54 +111,32 @@
 
     private Expression wrapAggregationArgument(Expression argExpr) throws AsterixException {
         Expression expr = argExpr;
-        if (expr.getKind() == Kind.SELECT_EXPRESSION) {
-            return expr;
-        }
-        Set<VariableExpr> definedVars = scopeChecker.getCurrentScope().getLiveVariables();
-        allVisableVars.addAll(definedVars);
         Set<VariableExpr> freeVars = SqlppRewriteUtil.getFreeVariable(expr);
 
-        // Whether we need to resolve undefined variables.
-        boolean needResolve = !allVisableVars.containsAll(freeVars);
-
-        Set<VariableExpr> vars = new HashSet<>(targetVars);
-        vars.removeAll(definedVars); // Exclude re-defined local variables.
-        if (!needResolve && !vars.containsAll(freeVars)) {
-            return expr;
-        }
-
-        VariableExpr var = new VariableExpr(context.newVariable());
-        FromTerm fromTerm = new FromTerm(groupVar, var, null, null);
+        VariableExpr fromBindingVar = new VariableExpr(context.newVariable());
+        FromTerm fromTerm = new FromTerm(groupVar, fromBindingVar, null, null);
         FromClause fromClause = new FromClause(Collections.singletonList(fromTerm));
 
+        // Maps field variable expressions to field accesses.
+        Map<Expression, Expression> varExprMap = new HashMap<>();
+        for (VariableExpr usedVar : freeVars) {
+            // Reference to a field in the group variable.
+            if (fieldVars.contains(usedVar)) {
+                // Rewrites to a reference to a field in the group variable.
+                varExprMap.put(usedVar,
+                                new FieldAccessor(fromBindingVar, SqlppVariableUtil.toUserDefinedVariableName(usedVar
+                                        .getVar())));
+            }
+        }
+
         // Select clause.
-        SelectElement selectElement = new SelectElement(expr);
+        SelectElement selectElement = new SelectElement(
+                SqlppRewriteUtil.substituteExpression(expr, varExprMap, context));
         SelectClause selectClause = new SelectClause(selectElement, null, false);
 
         // Construct the select expression.
         SelectBlock selectBlock = new SelectBlock(selectClause, fromClause, null, null, null, null, null);
         SelectSetOperation selectSetOperation = new SelectSetOperation(new SetOperationInput(selectBlock, null), null);
-        SelectExpression selectExpression = new SelectExpression(null, selectSetOperation, null, null, true);
-
-        // replace variable expressions with field access
-        Map<VariableExpr, Expression> varExprMap = new HashMap<>();
-        for (VariableExpr usedVar : freeVars) {
-            if (allVisableVars.contains(usedVar)) {
-                // Reference to a defined variable.
-                if (vars.contains(usedVar)) {
-                    // Reference to a variable defined before the group-by,
-                    // i.e., not a variable defined by a LET after the group-by.
-                    varExprMap.put(usedVar,
-                            new FieldAccessor(var, SqlppVariableUtil.toUserDefinedVariableName(usedVar.getVar())));
-                }
-            } else {
-                // Reference to an undefined variable.
-                varExprMap.put(usedVar,
-                        this.wrapWithResolveFunction(usedVar, new HashSet<>(Collections.singleton(var))));
-            }
-        }
-        selectElement.setExpression(
-                (Expression) SqlppVariableSubstitutionUtil.substituteVariableWithoutContext(expr, varExprMap));
-        return selectExpression;
+        return new SelectExpression(null, selectSetOperation, null, null, true);
     }
 }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
index 6575752..0170709 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppGroupByVisitor.java
@@ -19,9 +19,11 @@
 package org.apache.asterix.lang.sqlpp.rewrites.visitor;
 
 import java.util.ArrayList;
+import java.util.Collection;
+import java.util.HashMap;
 import java.util.HashSet;
-import java.util.Iterator;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.asterix.common.exceptions.AsterixException;
@@ -29,13 +31,17 @@
 import org.apache.asterix.lang.common.base.ILangExpression;
 import org.apache.asterix.lang.common.clause.GroupbyClause;
 import org.apache.asterix.lang.common.clause.LetClause;
-import org.apache.asterix.lang.common.context.Scope;
+import org.apache.asterix.lang.common.clause.LimitClause;
+import org.apache.asterix.lang.common.clause.OrderbyClause;
 import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
 import org.apache.asterix.lang.common.expression.VariableExpr;
 import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
 import org.apache.asterix.lang.common.struct.Identifier;
 import org.apache.asterix.lang.common.struct.VarIdentifier;
+import org.apache.asterix.lang.sqlpp.clause.FromClause;
+import org.apache.asterix.lang.sqlpp.clause.HavingClause;
 import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
+import org.apache.asterix.lang.sqlpp.clause.SelectClause;
 import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
 import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
 import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
@@ -88,8 +94,9 @@
     public Expression visit(SelectBlock selectBlock, ILangExpression arg) throws AsterixException {
         // Traverses the select block in the order of "from", "let"s, "where",
         // "group by", "let"s, "having" and "select".
+        FromClause fromClause = selectBlock.getFromClause();
         if (selectBlock.hasFromClause()) {
-            selectBlock.getFromClause().accept(this, arg);
+            fromClause.accept(this, arg);
         }
         if (selectBlock.hasLetClauses()) {
             List<LetClause> letList = selectBlock.getLetList();
@@ -101,48 +108,110 @@
             selectBlock.getWhereClause().accept(this, arg);
         }
         if (selectBlock.hasGroupbyClause()) {
-            selectBlock.getGroupbyClause().accept(this, arg);
-            Set<VariableExpr> withVarSet = new HashSet<>(selectBlock.getGroupbyClause().getWithVarList());
-            withVarSet.remove(selectBlock.getGroupbyClause().getGroupVar());
+            GroupbyClause groupbyClause = selectBlock.getGroupbyClause();
+            groupbyClause.accept(this, fromClause);
+            Collection<VariableExpr> visibleVarsInCurrentScope = SqlppVariableUtil.getBindingVariables(groupbyClause);
 
-            Set<VariableExpr> allVisableVars = SqlppVariableUtil
-                    .getLiveVariables(scopeChecker.getCurrentScope());
+            VariableExpr groupVar = groupbyClause.getGroupVar();
+            Set<VariableExpr> groupFieldVars = getGroupFieldVariables(groupbyClause);
+
+            Collection<VariableExpr> freeVariablesInGbyLets = new HashSet<>();
             if (selectBlock.hasLetClausesAfterGroupby()) {
                 List<LetClause> letListAfterGby = selectBlock.getLetListAfterGroupby();
                 for (LetClause letClauseAfterGby : letListAfterGby) {
                     letClauseAfterGby.accept(this, arg);
                     // Rewrites each let clause after the group-by.
-                    SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(selectBlock.getGroupbyClause().getGroupVar(),
-                            withVarSet, allVisableVars, letClauseAfterGby, context);
-                    // Adds let vars to all visiable vars.
-                    allVisableVars.add(letClauseAfterGby.getVarExpr());
+                    SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(groupVar, groupFieldVars, letClauseAfterGby,
+                            context);
+                    Collection<VariableExpr> freeVariablesInLet = SqlppVariableUtil.getFreeVariables(letClauseAfterGby
+                            .getBindingExpr());
+                    freeVariablesInLet.removeAll(visibleVarsInCurrentScope);
+                    freeVariablesInGbyLets.addAll(freeVariablesInLet);
+                    visibleVarsInCurrentScope.add(letClauseAfterGby.getVarExpr());
                 }
             }
 
+            Collection<VariableExpr> freeVariables = new HashSet<>();
             if (selectBlock.hasHavingClause()) {
-                selectBlock.getHavingClause().accept(this, arg);
                 // Rewrites the having clause.
-                SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(selectBlock.getGroupbyClause().getGroupVar(),
-                        withVarSet, allVisableVars, selectBlock.getHavingClause(), context);
+                HavingClause havingClause = selectBlock.getHavingClause();
+                havingClause.accept(this, arg);
+                SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(groupVar, groupFieldVars, havingClause, context);
+                freeVariables.addAll(SqlppVariableUtil.getFreeVariables(havingClause));
             }
 
             SelectExpression parentSelectExpression = (SelectExpression) arg;
-            if (parentSelectExpression.hasOrderby()) {
-                // Rewrites the order-by clause.
-                SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(selectBlock.getGroupbyClause().getGroupVar(),
-                        withVarSet, allVisableVars, parentSelectExpression.getOrderbyClause(), context);
-            }
-            if (parentSelectExpression.hasLimit()) {
-                // Rewrites the limit clause.
-                SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(selectBlock.getGroupbyClause().getGroupVar(),
-                        withVarSet, allVisableVars, parentSelectExpression.getLimitClause(), context);
+            // We cannot rewrite ORDER BY and LIMIT if it's a SET operation query.
+            if (!parentSelectExpression.getSelectSetOperation().hasRightInputs()) {
+                if (parentSelectExpression.hasOrderby()) {
+                    // Rewrites the ORDER BY clause.
+                    OrderbyClause orderbyClause = parentSelectExpression.getOrderbyClause();
+                    orderbyClause.accept(this, arg);
+                    SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(groupVar, groupFieldVars, orderbyClause,
+                            context);
+                    freeVariables.addAll(SqlppVariableUtil.getFreeVariables(orderbyClause));
+                }
+                if (parentSelectExpression.hasLimit()) {
+                    // Rewrites the LIMIT clause.
+                    LimitClause limitClause = parentSelectExpression.getLimitClause();
+                    limitClause.accept(this, arg);
+                    SqlppRewriteUtil
+                            .rewriteExpressionUsingGroupVariable(groupVar, groupFieldVars, limitClause, context);
+                    freeVariables.addAll(SqlppVariableUtil.getFreeVariables(limitClause));
+                }
             }
 
             // Visits the select clause.
-            selectBlock.getSelectClause().accept(this, arg);
+            SelectClause selectClause = selectBlock.getSelectClause();
+            selectClause.accept(this, arg);
             // Rewrites the select clause.
-            SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(selectBlock.getGroupbyClause().getGroupVar(),
-                    withVarSet, allVisableVars, selectBlock.getSelectClause(), context);
+            SqlppRewriteUtil.rewriteExpressionUsingGroupVariable(groupVar, groupFieldVars, selectClause, context);
+            freeVariables.addAll(SqlppVariableUtil.getFreeVariables(selectClause));
+            freeVariables.removeAll(visibleVarsInCurrentScope);
+
+            // Gets the final free variables.
+            freeVariables.addAll(freeVariablesInGbyLets);
+
+            // Gets outer scope variables.
+            Collection<VariableExpr> decorVars = SqlppVariableUtil.getLiveVariables(
+                    scopeChecker.getCurrentScope(), true);
+            decorVars.removeAll(visibleVarsInCurrentScope);
+
+            // Need path resolution or not?
+            boolean needResolution = !decorVars.containsAll(freeVariables);
+            // If path resolution is needed, we need to include all outer scope variables in the decoration list.
+            // Otherwise, we only need to retain used free variables.
+            if (needResolution) {
+                // Tracks used variables, including WITH variables.
+                decorVars.retainAll(freeVariables);
+                // Adds all non-WITH outer scope variables, for path resolution.
+                Collection<VariableExpr> visibleOuterScopeNonWithVars = SqlppVariableUtil.getLiveVariables(
+                        scopeChecker.getCurrentScope(), false);
+                visibleOuterScopeNonWithVars.removeAll(visibleVarsInCurrentScope);
+                decorVars.addAll(visibleOuterScopeNonWithVars);
+            } else {
+                // Only retains used free variables.
+                decorVars.retainAll(freeVariables);
+            }
+            if (!decorVars.isEmpty()) {
+                // Adds used WITH variables.
+                Collection<VariableExpr> visibleOuterScopeNonWithVars = SqlppVariableUtil.getLiveVariables(
+                        scopeChecker.getCurrentScope(), false);
+                visibleOuterScopeNonWithVars.retainAll(freeVariables);
+                decorVars.addAll(visibleOuterScopeNonWithVars);
+
+                // Adds necessary decoration variables for the GROUP BY.
+                // NOTE: we need to include WITH binding variables so as they can be evaluated before
+                // the GROUP BY instead of being inlined as part of nested pipepline. The current optimzier
+                // is not able to optimize the latter case. The following query is such an example:
+                // asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/dapd/q2-11
+                List<GbyVariableExpressionPair> decorList = new ArrayList<>();
+                for (VariableExpr var : decorVars) {
+                    decorList.add(new GbyVariableExpressionPair((VariableExpr) SqlppRewriteUtil.deepCopy(var),
+                            (Expression) SqlppRewriteUtil.deepCopy(var)));
+                }
+                groupbyClause.getDecorPairList().addAll(decorList);
+            }
         } else {
             selectBlock.getSelectClause().accept(this, arg);
         }
@@ -151,43 +220,35 @@
 
     @Override
     public Expression visit(GroupbyClause gc, ILangExpression arg) throws AsterixException {
-        Scope newScope = scopeChecker.extendCurrentScopeNoPush(true);
-        // Puts all group-by variables into the symbol set of the new scope.
-        for (GbyVariableExpressionPair gbyVarExpr : gc.getGbyPairList()) {
-            gbyVarExpr.setExpr(gbyVarExpr.getExpr().accept(this, arg));
-            VariableExpr gbyVar = gbyVarExpr.getVar();
-            if (gbyVar != null) {
-                newScope.addNewVarSymbolToScope(gbyVarExpr.getVar().getVar());
-            }
-        }
-        // Puts all live variables into withVarList.
-        List<VariableExpr> withVarList = new ArrayList<>();
-        Iterator<Identifier> varIterator = scopeChecker.getCurrentScope().liveSymbols();
-        while (varIterator.hasNext()) {
-            Identifier ident = varIterator.next();
+        // Puts all FROM binding variables into withVarList.
+        FromClause fromClause = (FromClause) arg;
+        Collection<VariableExpr> fromBindingVars =
+                fromClause == null ? new ArrayList<>() : SqlppVariableUtil.getBindingVariables(fromClause);
+        Map<Expression, VariableExpr> withVarMap = new HashMap<>();
+        for (VariableExpr fromBindingVar : fromBindingVars) {
             VariableExpr varExpr = new VariableExpr();
-            if (ident instanceof VarIdentifier) {
-                varExpr.setIsNewVar(false);
-                varExpr.setVar((VarIdentifier) ident);
-                withVarList.add(varExpr);
-                newScope.addNewVarSymbolToScope((VarIdentifier) ident);
-            }
+            varExpr.setIsNewVar(false);
+            varExpr.setVar(fromBindingVar.getVar());
+            VariableExpr newVarExpr = (VariableExpr) SqlppRewriteUtil.deepCopy(varExpr);
+            withVarMap.put(varExpr, newVarExpr);
         }
-
         // Sets the field list for the group variable.
         List<Pair<Expression, Identifier>> groupFieldList = new ArrayList<>();
         if (!gc.hasGroupFieldList()) {
-            for (VariableExpr varExpr : withVarList) {
+            for (VariableExpr varExpr : fromBindingVars) {
                 Pair<Expression, Identifier> varIdPair = new Pair<>(new VariableExpr(varExpr.getVar()),
                         SqlppVariableUtil.toUserDefinedVariableName(varExpr.getVar()));
                 groupFieldList.add(varIdPair);
             }
             gc.setGroupFieldList(groupFieldList);
         } else {
-            // Check the scopes of group field variables.
             for (Pair<Expression, Identifier> groupField : gc.getGroupFieldList()) {
-                Expression newVar = groupField.first.accept(this, arg);
-                groupFieldList.add(new Pair<>(newVar, groupField.second));
+                Expression newFieldExpr = groupField.first.accept(this, arg);
+                groupFieldList.add(new Pair<>(newFieldExpr, groupField.second));
+                // Adds a field binding variable into withVarList.
+                VariableExpr bindingVar = new VariableExpr(
+                        new VarIdentifier(SqlppVariableUtil.toInternalVariableName(groupField.second.getValue())));
+                withVarMap.put(newFieldExpr, bindingVar);
             }
         }
         gc.setGroupFieldList(groupFieldList);
@@ -197,15 +258,25 @@
             VariableExpr groupVar = new VariableExpr(context.newVariable());
             gc.setGroupVar(groupVar);
         }
-        newScope.addNewVarSymbolToScope(gc.getGroupVar().getVar());
 
         // Adds the group variable into the "with" (i.e., re-binding) variable list.
         VariableExpr gbyVarRef = new VariableExpr(gc.getGroupVar().getVar());
         gbyVarRef.setIsNewVar(false);
-        withVarList.add(gbyVarRef);
-        gc.setWithVarList(withVarList);
+        withVarMap.put(gbyVarRef, (VariableExpr) SqlppRewriteUtil.deepCopy(gbyVarRef));
+        gc.setWithVarMap(withVarMap);
 
-        scopeChecker.replaceCurrentScope(newScope);
-        return null;
+        // Call super.visit(...) to scope variables.
+        return super.visit(gc, arg);
+    }
+
+    private Set<VariableExpr> getGroupFieldVariables(GroupbyClause groupbyClause) {
+        Set<VariableExpr> fieldVars = new HashSet<>();
+        if (groupbyClause.hasGroupFieldList()) {
+            for (Pair<Expression, Identifier> groupField : groupbyClause.getGroupFieldList()) {
+                fieldVars.add(new VariableExpr(new VarIdentifier(SqlppVariableUtil
+                        .toInternalVariableName(groupField.second.getValue()))));
+            }
+        }
+        return fieldVars;
     }
 }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java
index d2730ff..c765726 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SqlppInlineUdfsVisitor.java
@@ -26,7 +26,6 @@
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.IRewriterFactory;
 import org.apache.asterix.lang.common.clause.LetClause;
-import org.apache.asterix.lang.common.expression.VariableExpr;
 import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
 import org.apache.asterix.lang.common.statement.FunctionDecl;
 import org.apache.asterix.lang.common.visitor.AbstractInlineUdfsVisitor;
@@ -47,7 +46,7 @@
 import org.apache.asterix.lang.sqlpp.expression.IndependentSubquery;
 import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
 import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
-import org.apache.asterix.lang.sqlpp.util.SqlppVariableSubstitutionUtil;
+import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
 import org.apache.asterix.lang.sqlpp.visitor.SqlppCloneAndSubstituteVariablesVisitor;
 import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
 import org.apache.asterix.metadata.declared.AqlMetadataProvider;
@@ -75,8 +74,8 @@
     @Override
     protected Expression generateQueryExpression(List<LetClause> letClauses, Expression returnExpr)
             throws AsterixException {
-        Map<VariableExpr, Expression> varExprMap = extractLetBindingVariableExpressionMappings(letClauses);
-        return (Expression) SqlppVariableSubstitutionUtil.substituteVariableWithoutContext(returnExpr, varExprMap);
+        Map<Expression, Expression> varExprMap = extractLetBindingVariableExpressionMappings(letClauses);
+        return (Expression) SqlppRewriteUtil.substituteExpression(returnExpr, varExprMap, context);
     }
 
     @Override
@@ -249,13 +248,13 @@
         return inlined || result.first;
     }
 
-    private Map<VariableExpr, Expression> extractLetBindingVariableExpressionMappings(List<LetClause> letClauses)
+    private Map<Expression, Expression> extractLetBindingVariableExpressionMappings(List<LetClause> letClauses)
             throws AsterixException {
-        Map<VariableExpr, Expression> varExprMap = new HashMap<>();
+        Map<Expression, Expression> varExprMap = new HashMap<>();
         for (LetClause lc : letClauses) {
             // inline let variables one by one iteratively.
-            lc.setBindingExpr((Expression) SqlppVariableSubstitutionUtil
-                    .substituteVariableWithoutContext(lc.getBindingExpr(), varExprMap));
+            lc.setBindingExpr((Expression) SqlppRewriteUtil.substituteExpression(lc.getBindingExpr(),
+                    varExprMap, context));
             varExprMap.put(lc.getVarExpr(), lc.getBindingExpr());
         }
         return varExprMap;
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SubstituteGroupbyExpressionWithVariableVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SubstituteGroupbyExpressionWithVariableVisitor.java
index c5cd60e..eb2f463 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SubstituteGroupbyExpressionWithVariableVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/SubstituteGroupbyExpressionWithVariableVisitor.java
@@ -25,21 +25,25 @@
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.base.Expression.Kind;
+import org.apache.asterix.lang.common.clause.LetClause;
 import org.apache.asterix.lang.common.expression.CallExpr;
 import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
-import org.apache.asterix.lang.common.rewrites.ExpressionSubstitutionEnvironment;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
 import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
 import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
 import org.apache.asterix.lang.sqlpp.util.FunctionMapUtil;
-import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
-import org.apache.asterix.lang.sqlpp.visitor.SqlppSubstituteExpressionsVisitor;
-import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppSimpleExpressionVisitor;
+import org.apache.asterix.lang.sqlpp.visitor.SqlppSubstituteExpressionVisitor;
+import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
 
 // Replaces expressions that appear in having/select/order-by/limit clause and are identical to some
 // group by key expression with the group by key expression.
-public class SubstituteGroupbyExpressionWithVariableVisitor extends AbstractSqlppSimpleExpressionVisitor {
+public class SubstituteGroupbyExpressionWithVariableVisitor extends AbstractSqlppExpressionScopingVisitor {
+
+    public SubstituteGroupbyExpressionWithVariableVisitor(LangRewritingContext context) {
+        super(context);
+    }
 
     @Override
     public Expression visit(SelectBlock selectBlock, ILangExpression arg) throws AsterixException {
@@ -53,21 +57,28 @@
             }
 
             // Creates a substitution visitor.
-            ExpressionSubstitutionEnvironment env =
-                    new ExpressionSubstitutionEnvironment(map, SqlppVariableUtil::getFreeVariables);
-            SubstituteGroupbyExpressionVisitor visitor = new SubstituteGroupbyExpressionVisitor();
+            SubstituteGroupbyExpressionVisitor visitor = new SubstituteGroupbyExpressionVisitor(context, map);
 
-            // Rewrites having/select/order-by/limit clauses.
+            // Rewrites LET/HAVING/SELECT clauses.
+            if(selectBlock.hasLetClausesAfterGroupby()){
+                for(LetClause letClause : selectBlock.getLetListAfterGroupby()){
+                    letClause.accept(this, arg);
+                }
+            }
             if (selectBlock.hasHavingClause()) {
-                selectBlock.getHavingClause().accept(visitor, env);
+                selectBlock.getHavingClause().accept(visitor, arg);
             }
-            selectBlock.getSelectClause().accept(visitor, env);
+            selectBlock.getSelectClause().accept(visitor, arg);
             SelectExpression selectExpression = (SelectExpression) arg;
-            if (selectExpression.hasOrderby()) {
-                selectExpression.getOrderbyClause().accept(visitor, env);
-            }
-            if (selectExpression.hasLimit()) {
-                selectExpression.getLimitClause().accept(visitor, env);
+
+            // For SET operation queries, the GROUP BY key variables will not substitute ORDER BY nor LIMIT expressions.
+            if (!selectExpression.getSelectSetOperation().hasRightInputs()) {
+                if (selectExpression.hasOrderby()) {
+                    selectExpression.getOrderbyClause().accept(visitor, arg);
+                }
+                if (selectExpression.hasLimit()) {
+                    selectExpression.getLimitClause().accept(visitor, arg);
+                }
             }
         }
         return super.visit(selectBlock, arg);
@@ -75,15 +86,19 @@
 
 }
 
-class SubstituteGroupbyExpressionVisitor extends SqlppSubstituteExpressionsVisitor {
+class SubstituteGroupbyExpressionVisitor extends SqlppSubstituteExpressionVisitor {
+
+    public SubstituteGroupbyExpressionVisitor(LangRewritingContext context, Map<Expression, Expression> exprMap) {
+        super(context, exprMap);
+    }
 
     @Override
-    public Expression visit(CallExpr callExpr, ExpressionSubstitutionEnvironment env) throws AsterixException {
+    public Expression visit(CallExpr callExpr, ILangExpression arg) throws AsterixException {
         FunctionSignature signature = callExpr.getFunctionSignature();
         if (FunctionMapUtil.isSql92AggregateFunction(signature)) {
             return callExpr;
         } else {
-            return super.visit(callExpr, env);
+            return super.visit(callExpr, arg);
         }
     }
 }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
index 79c99b8..9769d4f 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/rewrites/visitor/VariableCheckAndRewriteVisitor.java
@@ -26,8 +26,8 @@
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.common.functions.FunctionSignature;
 import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.base.Expression.Kind;
 import org.apache.asterix.lang.common.expression.CallExpr;
 import org.apache.asterix.lang.common.expression.FieldAccessor;
 import org.apache.asterix.lang.common.expression.LiteralExpr;
@@ -102,7 +102,12 @@
         if (!rewriteNeeded(varExpr)) {
             return varExpr;
         }
-        Set<VariableExpr> liveVars = SqlppVariableUtil.getLiveVariables(scopeChecker.getCurrentScope());
+        // Note: WITH variables are not used for path resolution. The reason is that
+        // the accurate typing for ordered list with an UNION item type is not implemented.
+        // We currently type it as [ANY]. If we include WITH variables for path resolution,
+        // it will lead to ambiguities and the plan is going to be very complex.  An example query is:
+        // asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/subquery/exists
+        Set<VariableExpr> liveVars = SqlppVariableUtil.getLiveVariables(scopeChecker.getCurrentScope(), false);
         boolean resolveAsDataset = resolveDatasetFirst(arg) && datasetExists(dataverseName, datasetName);
         if (resolveAsDataset) {
             return wrapWithDatasetFunction(dataverseName, datasetName);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppRewriteUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppRewriteUtil.java
index 9bc1813..519963a 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppRewriteUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppRewriteUtil.java
@@ -20,6 +20,7 @@
 
 import java.util.Collection;
 import java.util.HashSet;
+import java.util.Map;
 import java.util.Set;
 
 import org.apache.asterix.common.exceptions.AsterixException;
@@ -27,10 +28,12 @@
 import org.apache.asterix.lang.common.base.ILangExpression;
 import org.apache.asterix.lang.common.expression.VariableExpr;
 import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
+import org.apache.asterix.lang.common.statement.Query;
 import org.apache.asterix.lang.sqlpp.rewrites.visitor.SqlppGroupBySugarVisitor;
 import org.apache.asterix.lang.sqlpp.visitor.CheckSubqueryVisitor;
 import org.apache.asterix.lang.sqlpp.visitor.DeepCopyVisitor;
 import org.apache.asterix.lang.sqlpp.visitor.FreeVariableVisitor;
+import org.apache.asterix.lang.sqlpp.visitor.SqlppSubstituteExpressionVisitor;
 
 public class SqlppRewriteUtil {
 
@@ -39,10 +42,9 @@
 
     // Applying sugar rewriting for group-by.
     public static Expression rewriteExpressionUsingGroupVariable(VariableExpr groupVar,
-            Collection<VariableExpr> targetVarList, Collection<VariableExpr> allVisableVars, ILangExpression expr,
+            Collection<VariableExpr> fieldVars, ILangExpression expr,
             LangRewritingContext context) throws AsterixException {
-        SqlppGroupBySugarVisitor visitor =
-                new SqlppGroupBySugarVisitor(context, groupVar, targetVarList, allVisableVars);
+        SqlppGroupBySugarVisitor visitor = new SqlppGroupBySugarVisitor(context, groupVar, fieldVars);
         return expr.accept(visitor, null);
     }
 
@@ -70,4 +72,31 @@
         return expr.accept(visitor, null);
     }
 
+    /**
+     * Substitutes expression with replacement expressions according to the exprMap.
+     *
+     * @param expression
+     *            ,
+     *            an input expression.
+     * @param exprMap
+     *            a map that maps expressions to their corresponding replacement expressions.
+     * @return an expression, where sub-expressions of the input expression (including the input expression itself)
+     *         are replaced with deep copies with their mapped replacements in the exprMap if there exists such a
+     *         replacement expression.
+     * @throws AsterixException
+     */
+    public static Expression substituteExpression(Expression expression, Map<Expression, Expression> exprMap,
+            LangRewritingContext context) throws AsterixException {
+        if (exprMap.isEmpty()) {
+            return expression;
+        }
+        // Creates a wrapper query for the expression so that if the expression itself
+        // is the key, it can also be replaced.
+        Query wrapper = new Query(false);
+        wrapper.setBody(expression);
+        // Creates a substitution visitor.
+        SqlppSubstituteExpressionVisitor visitor = new SqlppSubstituteExpressionVisitor(context, exprMap);
+        wrapper.accept(visitor, wrapper);
+        return wrapper.getBody();
+    }
 }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableSubstitutionUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableSubstitutionUtil.java
deleted file mode 100644
index 322b5b6..0000000
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableSubstitutionUtil.java
+++ /dev/null
@@ -1,92 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.lang.sqlpp.util;
-
-import java.util.Map;
-
-import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.base.ILangExpression;
-import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
-import org.apache.asterix.lang.common.rewrites.VariableSubstitutionEnvironment;
-import org.apache.asterix.lang.sqlpp.visitor.SqlppCloneAndSubstituteVariablesVisitor;
-import org.apache.asterix.lang.sqlpp.visitor.SqlppSubstituteVariablesVisitor;
-
-public class SqlppVariableSubstitutionUtil {
-
-    /**
-     * Substitute variables with corresponding expressions according to the varExprMap.
-     * The substitution should be done BEFORE unique ids are assigned to variables.
-     * In other words, when we call this method, ids of all variables are zero.
-     *
-     * @param expression,
-     *            the expression for substituting variables.
-     * @param varExprMap
-     *            a map that maps variables to their corresponding expressions.
-     * @return a new expression in which variables are substituted.
-     * @throws AsterixException
-     */
-    public static ILangExpression substituteVariableWithoutContext(ILangExpression expression,
-            Map<VariableExpr, Expression> varExprMap) throws AsterixException {
-        if (varExprMap.isEmpty()) {
-            return expression;
-        }
-        VariableSubstitutionEnvironment env = new VariableSubstitutionEnvironment(varExprMap);
-        return substituteVariableWithoutContext(expression, env);
-    }
-
-    /**
-     * Substitute variables with corresponding expressions according to the varExprMap.
-     * The substitution should be done BEFORE unique ids are assigned to variables.
-     * In other words, when we call this method, ids of all variables are zero.
-     *
-     * @param expression,
-     *            the expression for substituting variables.
-     * @param env,
-     *            internally contains a map that maps variables to their corresponding expressions.
-     * @return a new expression in which variables are substituted.
-     * @throws AsterixException
-     */
-    public static ILangExpression substituteVariableWithoutContext(ILangExpression expression,
-            VariableSubstitutionEnvironment env) throws AsterixException {
-        SqlppSubstituteVariablesVisitor visitor = new SqlppSubstituteVariablesVisitor();
-        return expression.accept(visitor, env).first;
-    }
-
-    /**
-     * Substitute variables with corresponding expressions according to the varExprMap.
-     * The substitution should be done AFTER unique ids are assigned to different variables.
-     *
-     * @param expression,
-     *            the expression for substituting variables.
-     * @param varExprMap,
-     *            a map that maps variables to their corresponding expressions.
-     * @param context,
-     *            manages the ids of variables so as to guarantee the uniqueness of ids for different variables (even with the same name).
-     * @return a cloned new expression in which variables are substituted, and its bounded variables have new unique ids.
-     * @throws AsterixException
-     */
-    public static ILangExpression cloneAndSubstituteVariable(ILangExpression expression,
-            Map<VariableExpr, Expression> varExprMap, LangRewritingContext context) throws AsterixException {
-        SqlppCloneAndSubstituteVariablesVisitor visitor = new SqlppCloneAndSubstituteVariablesVisitor(context);
-        VariableSubstitutionEnvironment env = new VariableSubstitutionEnvironment(varExprMap);
-        return expression.accept(visitor, env).first;
-    }
-}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java
index b2a07e1..5352804 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/util/SqlppVariableUtil.java
@@ -77,12 +77,18 @@
         return varName;
     }
 
-    public static Set<VariableExpr> getLiveVariables(Scope scope) {
+    public static Set<VariableExpr> getLiveVariables(Scope scope, boolean includeWithVariables) {
         Set<VariableExpr> results = new HashSet<>();
         Set<VariableExpr> liveVars = scope.getLiveVariables();
         Iterator<VariableExpr> liveVarIter = liveVars.iterator();
         while (liveVarIter.hasNext()) {
-            results.add(liveVarIter.next());
+            VariableExpr liveVar = liveVarIter.next();
+            // Variables defined in WITH clauses are named value access.
+            // TODO(buyingi): remove this if block once we can accurately type
+            // ordered lists with UNION item type. Currently it is typed as [ANY].
+            if (includeWithVariables || !liveVar.getVar().namedValueAccess()) {
+                results.add(liveVar);
+            }
         }
         return results;
     }
@@ -148,7 +154,9 @@
                 bindingVars.add(var);
             }
         }
-        bindingVars.addAll(gbyClause.getWithVarList());
+        if (gbyClause.hasWithMap()) {
+            bindingVars.addAll(gbyClause.getWithVarMap().values());
+        }
         bindingVars.add(gbyClause.getGroupVar());
         return bindingVars;
     }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
index d752396..75c5307 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/DeepCopyVisitor.java
@@ -19,7 +19,10 @@
 package org.apache.asterix.lang.sqlpp.visitor;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.lang.common.base.Expression;
@@ -256,7 +259,7 @@
     public GroupbyClause visit(GroupbyClause gc, Void arg) throws AsterixException {
         List<GbyVariableExpressionPair> gbyPairList = new ArrayList<>();
         List<GbyVariableExpressionPair> decorPairList = new ArrayList<>();
-        List<VariableExpr> withVarList = new ArrayList<>();
+        Map<Expression, VariableExpr> withVarMap = new HashMap<>();
         VariableExpr groupVarExpr = null;
         List<Pair<Expression, Identifier>> groupFieldList = new ArrayList<>();
         for (GbyVariableExpressionPair gbyVarExpr : gc.getGbyPairList()) {
@@ -269,8 +272,9 @@
             decorPairList.add(new GbyVariableExpressionPair(var == null ? null : (VariableExpr) var.accept(this, arg),
                     (Expression) gbyVarExpr.getExpr().accept(this, arg)));
         }
-        for (VariableExpr withVar : gc.getWithVarList()) {
-            withVarList.add((VariableExpr) withVar.accept(this, arg));
+        for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
+            withVarMap.put((Expression) entry.getKey().accept(this, arg),
+                    (VariableExpr) entry.getValue().accept(this, arg));
         }
         if (gc.hasGroupVar()) {
             groupVarExpr = (VariableExpr) gc.getGroupVar().accept(this, arg);
@@ -278,7 +282,7 @@
         for (Pair<Expression, Identifier> field : gc.getGroupFieldList()) {
             groupFieldList.add(new Pair<>((Expression) field.first.accept(this, arg), field.second));
         }
-        return new GroupbyClause(gbyPairList, decorPairList, withVarList, groupVarExpr, groupFieldList,
+        return new GroupbyClause(gbyPairList, decorPairList, withVarMap, groupVarExpr, groupFieldList,
                 gc.hasHashGroupByHint(), gc.isGroupAll());
     }
 
@@ -386,10 +390,8 @@
 
     @Override
     public VariableExpr visit(VariableExpr varExpr, Void arg) throws AsterixException {
-        VariableExpr clonedVar =
-                new VariableExpr(new VarIdentifier(varExpr.getVar().getValue(), varExpr.getVar().getId()));
+        VariableExpr clonedVar = new VariableExpr(new VarIdentifier(varExpr.getVar()));
         clonedVar.setIsNewVar(varExpr.getIsNewVar());
-        clonedVar.setNamedValueAccess(varExpr.namedValueAccess());
         return clonedVar;
     }
 
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
index 20b144c..3a9bebf 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/FreeVariableVisitor.java
@@ -23,8 +23,8 @@
 import java.util.List;
 
 import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.lang.common.base.Clause.ClauseType;
 import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.base.Clause.ClauseType;
 import org.apache.asterix.lang.common.clause.GroupbyClause;
 import org.apache.asterix.lang.common.clause.LetClause;
 import org.apache.asterix.lang.common.clause.LimitClause;
@@ -144,7 +144,9 @@
 
     @Override
     public Void visit(Projection projection, Collection<VariableExpr> freeVars) throws AsterixException {
-        projection.getExpression().accept(this, freeVars);
+        if (!projection.star()) {
+            projection.getExpression().accept(this, freeVars);
+        }
         return null;
     }
 
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
index 23181e4..81aba54 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppCloneAndSubstituteVariablesVisitor.java
@@ -22,9 +22,9 @@
 import java.util.List;
 
 import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.lang.common.base.Clause.ClauseType;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.ILangExpression;
+import org.apache.asterix.lang.common.base.Clause.ClauseType;
 import org.apache.asterix.lang.common.clause.GroupbyClause;
 import org.apache.asterix.lang.common.clause.LetClause;
 import org.apache.asterix.lang.common.clause.LimitClause;
@@ -86,8 +86,8 @@
             VariableSubstitutionEnvironment env) throws AsterixException {
         VariableExpr leftVar = fromTerm.getLeftVariable();
         VariableExpr newLeftVar = generateNewVariable(context, leftVar);
-        VariableExpr newLeftPosVar = fromTerm.hasPositionalVariable()
-                ? generateNewVariable(context, fromTerm.getPositionalVariable()) : null;
+        VariableExpr newLeftPosVar = fromTerm.hasPositionalVariable() ? generateNewVariable(context,
+                fromTerm.getPositionalVariable()) : null;
         Expression newLeftExpr = (Expression) visitUnnesBindingExpression(fromTerm.getLeftExpression(), env).first;
         List<AbstractBinaryCorrelateClause> newCorrelateClauses = new ArrayList<>();
 
@@ -108,6 +108,11 @@
                 // The right-hand-side of join and nest could not be correlated with the left side,
                 // therefore we propagate the original substitution environment.
                 newCorrelateClauses.add((AbstractBinaryCorrelateClause) correlateClause.accept(this, env).first);
+                // Join binding variables should be removed for further traversal.
+                currentEnv.removeSubstitution(correlateClause.getRightVariable());
+                if (correlateClause.hasPositionalVariable()) {
+                    currentEnv.removeSubstitution(correlateClause.getPositionalVariable());
+                }
             }
         }
         return new Pair<>(new FromTerm(newLeftExpr, newLeftVar, newLeftPosVar, newCorrelateClauses), currentEnv);
@@ -118,8 +123,8 @@
             VariableSubstitutionEnvironment env) throws AsterixException {
         VariableExpr rightVar = joinClause.getRightVariable();
         VariableExpr newRightVar = generateNewVariable(context, rightVar);
-        VariableExpr newRightPosVar = joinClause.hasPositionalVariable()
-                ? generateNewVariable(context, joinClause.getPositionalVariable()) : null;
+        VariableExpr newRightPosVar = joinClause.hasPositionalVariable() ? generateNewVariable(context,
+                joinClause.getPositionalVariable()) : null;
 
         // Visits the right expression.
         Expression newRightExpr = (Expression) visitUnnesBindingExpression(joinClause.getRightExpression(), env).first;
@@ -133,8 +138,8 @@
         // The condition can refer to the newRightVar and newRightPosVar.
         Expression conditionExpr = (Expression) joinClause.getConditionExpression().accept(this, currentEnv).first;
 
-        JoinClause newJoinClause =
-                new JoinClause(joinClause.getJoinType(), newRightExpr, newRightVar, newRightPosVar, conditionExpr);
+        JoinClause newJoinClause = new JoinClause(joinClause.getJoinType(), newRightExpr, newRightVar, newRightPosVar,
+                conditionExpr);
         return new Pair<>(newJoinClause, currentEnv);
     }
 
@@ -143,8 +148,8 @@
             VariableSubstitutionEnvironment env) throws AsterixException {
         VariableExpr rightVar = nestClause.getRightVariable();
         VariableExpr newRightVar = generateNewVariable(context, rightVar);
-        VariableExpr newRightPosVar = nestClause.hasPositionalVariable()
-                ? generateNewVariable(context, nestClause.getPositionalVariable()) : null;
+        VariableExpr newRightPosVar = nestClause.hasPositionalVariable() ? generateNewVariable(context,
+                nestClause.getPositionalVariable()) : null;
 
         // Visits the right expression.
         Expression rightExpr = (Expression) nestClause.getRightExpression().accept(this, env).first;
@@ -158,8 +163,8 @@
         // The condition can refer to the newRightVar and newRightPosVar.
         Expression conditionExpr = (Expression) nestClause.getConditionExpression().accept(this, currentEnv).first;
 
-        NestClause newJoinClause =
-                new NestClause(nestClause.getJoinType(), rightExpr, newRightVar, newRightPosVar, conditionExpr);
+        NestClause newJoinClause = new NestClause(nestClause.getJoinType(), rightExpr, newRightVar, newRightPosVar,
+                conditionExpr);
         return new Pair<>(newJoinClause, currentEnv);
     }
 
@@ -168,8 +173,8 @@
             VariableSubstitutionEnvironment env) throws AsterixException {
         VariableExpr rightVar = unnestClause.getRightVariable();
         VariableExpr newRightVar = generateNewVariable(context, rightVar);
-        VariableExpr newRightPosVar = unnestClause.hasPositionalVariable()
-                ? generateNewVariable(context, unnestClause.getPositionalVariable()) : null;
+        VariableExpr newRightPosVar = unnestClause.hasPositionalVariable() ? generateNewVariable(context,
+                unnestClause.getPositionalVariable()) : null;
 
         // Visits the right expression.
         Expression rightExpr = (Expression) visitUnnesBindingExpression(unnestClause.getRightExpression(), env).first;
@@ -181,8 +186,8 @@
             currentEnv.removeSubstitution(newRightPosVar);
         }
         // The condition can refer to the newRightVar and newRightPosVar.
-        UnnestClause newJoinClause =
-                new UnnestClause(unnestClause.getJoinType(), rightExpr, newRightVar, newRightPosVar);
+        UnnestClause newJoinClause = new UnnestClause(unnestClause.getJoinType(), rightExpr, newRightVar,
+                newRightPosVar);
         return new Pair<>(newJoinClause, currentEnv);
     }
 
@@ -217,7 +222,7 @@
 
         if (selectBlock.hasLetClauses()) {
             for (LetClause letClause : selectBlock.getLetList()) {
-                newLet = letClause.accept(this, env);
+                newLet = letClause.accept(this, currentEnv);
                 currentEnv = newLet.second;
                 newLetClauses.add(letClause);
             }
@@ -233,7 +238,7 @@
             currentEnv = newGroupby.second;
             if (selectBlock.hasLetClausesAfterGroupby()) {
                 for (LetClause letClauseAfterGby : selectBlock.getLetListAfterGroupby()) {
-                    newLet = letClauseAfterGby.accept(this, env);
+                    newLet = letClauseAfterGby.accept(this, currentEnv);
                     currentEnv = newLet.second;
                     newLetClausesAfterGby.add(letClauseAfterGby);
                 }
@@ -260,13 +265,13 @@
             VariableSubstitutionEnvironment env) throws AsterixException {
         boolean distinct = selectClause.distinct();
         if (selectClause.selectElement()) {
-            Pair<ILangExpression, VariableSubstitutionEnvironment> newSelectElement =
-                    selectClause.getSelectElement().accept(this, env);
+            Pair<ILangExpression, VariableSubstitutionEnvironment> newSelectElement = selectClause.getSelectElement()
+                    .accept(this, env);
             return new Pair<>(new SelectClause((SelectElement) newSelectElement.first, null, distinct),
                     newSelectElement.second);
         } else {
-            Pair<ILangExpression, VariableSubstitutionEnvironment> newSelectRegular =
-                    selectClause.getSelectRegular().accept(this, env);
+            Pair<ILangExpression, VariableSubstitutionEnvironment> newSelectRegular = selectClause.getSelectRegular()
+                    .accept(this, env);
             return new Pair<>(new SelectClause(null, (SelectRegular) newSelectRegular.first, distinct),
                     newSelectRegular.second);
         }
@@ -275,8 +280,8 @@
     @Override
     public Pair<ILangExpression, VariableSubstitutionEnvironment> visit(SelectElement selectElement,
             VariableSubstitutionEnvironment env) throws AsterixException {
-        Pair<ILangExpression, VariableSubstitutionEnvironment> newExpr =
-                selectElement.getExpression().accept(this, env);
+        Pair<ILangExpression, VariableSubstitutionEnvironment> newExpr = selectElement.getExpression()
+                .accept(this, env);
         return new Pair<>(new SelectElement((Expression) newExpr.first), newExpr.second);
     }
 
@@ -296,32 +301,36 @@
         SetOperationInput leftInput = selectSetOperation.getLeftInput();
         SetOperationInput newLeftInput;
 
+        Pair<ILangExpression, VariableSubstitutionEnvironment> leftResult;
         // Sets the left input.
         if (leftInput.selectBlock()) {
-            Pair<ILangExpression, VariableSubstitutionEnvironment> p = leftInput.getSelectBlock().accept(this, env);
-            newLeftInput = new SetOperationInput((SelectBlock) p.first, null);
+            leftResult = leftInput.getSelectBlock().accept(this, env);
+            newLeftInput = new SetOperationInput((SelectBlock) leftResult.first, null);
         } else {
-            Pair<ILangExpression, VariableSubstitutionEnvironment> p = leftInput.getSubquery().accept(this, env);
-            newLeftInput = new SetOperationInput(null, (SelectExpression) p.first);
+            leftResult = leftInput.getSubquery().accept(this, env);
+            newLeftInput = new SetOperationInput(null, (SelectExpression) leftResult.first);
         }
 
         // Sets the right input
         List<SetOperationRight> newRightInputs = new ArrayList<>();
-        for (SetOperationRight right : selectSetOperation.getRightInputs()) {
-            SetOperationInput newRightInput;
-            SetOperationInput rightInput = right.getSetOperationRightInput();
-            if (rightInput.selectBlock()) {
-                Pair<ILangExpression, VariableSubstitutionEnvironment> p =
-                        rightInput.getSelectBlock().accept(this, env);
-                newRightInput = new SetOperationInput((SelectBlock) p.first, null);
-            } else {
-                Pair<ILangExpression, VariableSubstitutionEnvironment> p = rightInput.getSubquery().accept(this, env);
-                newRightInput = new SetOperationInput(null, (SelectExpression) p.first);
+        if (selectSetOperation.hasRightInputs()) {
+            for (SetOperationRight right : selectSetOperation.getRightInputs()) {
+                SetOperationInput newRightInput;
+                SetOperationInput rightInput = right.getSetOperationRightInput();
+                if (rightInput.selectBlock()) {
+                    Pair<ILangExpression, VariableSubstitutionEnvironment> rightResult = rightInput.getSelectBlock()
+                            .accept(this, env);
+                    newRightInput = new SetOperationInput((SelectBlock) rightResult.first, null);
+                } else {
+                    Pair<ILangExpression, VariableSubstitutionEnvironment> rightResult = rightInput.getSubquery()
+                            .accept(this, env);
+                    newRightInput = new SetOperationInput(null, (SelectExpression) rightResult.first);
+                }
+                newRightInputs.add(new SetOperationRight(right.getSetOpType(), right.isSetSemantics(), newRightInput));
             }
-            newRightInputs.add(new SetOperationRight(right.getSetOpType(), right.isSetSemantics(), newRightInput));
         }
         SelectSetOperation newSelectSetOperation = new SelectSetOperation(newLeftInput, newRightInputs);
-        return new Pair<>(newSelectSetOperation, env);
+        return new Pair<>(newSelectSetOperation, selectSetOperation.hasRightInputs() ? env : leftResult.second);
     }
 
     @Override
@@ -348,13 +357,13 @@
         currentEnv = p.second;
 
         if (selectExpression.hasOrderby()) {
-            p = selectExpression.getOrderbyClause().accept(this, env);
+            p = selectExpression.getOrderbyClause().accept(this, currentEnv);
             newOrderbyClause = (OrderbyClause) p.first;
             currentEnv = p.second;
         }
 
         if (selectExpression.hasLimit()) {
-            p = selectExpression.getLimitClause().accept(this, env);
+            p = selectExpression.getLimitClause().accept(this, currentEnv);
             newLimitClause = (LimitClause) p.first;
             currentEnv = p.second;
         }
@@ -383,10 +392,10 @@
     public Pair<ILangExpression, VariableSubstitutionEnvironment> visit(CaseExpression caseExpr,
             VariableSubstitutionEnvironment env) throws AsterixException {
         Expression conditionExpr = (Expression) caseExpr.getConditionExpr().accept(this, env).first;
-        List<Expression> whenExprList =
-                VariableCloneAndSubstitutionUtil.visitAndCloneExprList(caseExpr.getWhenExprs(), env, this);
-        List<Expression> thenExprList =
-                VariableCloneAndSubstitutionUtil.visitAndCloneExprList(caseExpr.getThenExprs(), env, this);
+        List<Expression> whenExprList = VariableCloneAndSubstitutionUtil.visitAndCloneExprList(caseExpr.getWhenExprs(),
+                env, this);
+        List<Expression> thenExprList = VariableCloneAndSubstitutionUtil.visitAndCloneExprList(caseExpr.getThenExprs(),
+                env, this);
         Expression elseExpr = (Expression) caseExpr.getElseExpr().accept(this, env).first;
         CaseExpression newCaseExpr = new CaseExpression(conditionExpr, whenExprList, thenExprList, elseExpr);
         return new Pair<>(newCaseExpr, env);
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteExpressionVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteExpressionVisitor.java
new file mode 100644
index 0000000..9b19d7c
--- /dev/null
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteExpressionVisitor.java
@@ -0,0 +1,69 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.lang.sqlpp.visitor;
+
+import java.util.Collection;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.apache.asterix.common.exceptions.AsterixException;
+import org.apache.asterix.lang.common.base.Expression;
+import org.apache.asterix.lang.common.context.Scope;
+import org.apache.asterix.lang.common.expression.VariableExpr;
+import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
+import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
+import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
+import org.apache.asterix.lang.sqlpp.visitor.base.AbstractSqlppExpressionScopingVisitor;
+
+/**
+ * This visitor is used to substitute expressions in a visiting language structure
+ * with an given map.
+ */
+public class SqlppSubstituteExpressionVisitor extends AbstractSqlppExpressionScopingVisitor {
+
+    private final Map<Expression, Expression> exprMap = new HashMap<>();
+
+    public SqlppSubstituteExpressionVisitor(LangRewritingContext context, Map<Expression, Expression> exprMap) {
+        super(context);
+        this.exprMap.putAll(exprMap);
+    }
+
+    // Note: we intentionally override preVisit instead of postVisit because we wants larger expressions
+    // get substituted first if some of their child expressions are present as keys in the exprMap.
+    // An example is:
+    // asterixdb/asterix-app/src/test/resources/runtimets/queries_sqlpp/group-by/gby-expr-3/gby-expr-3.3.query.sqlpp
+    @Override
+    protected Expression preVisit(Expression expr) throws AsterixException {
+        Expression mappedExpr = exprMap.get(expr);
+        if (mappedExpr == null) {
+            return expr;
+        }
+        Collection<VariableExpr> freeVars = SqlppVariableUtil.getFreeVariables(expr);
+        for (VariableExpr freeVar : freeVars) {
+            Scope currentScope = scopeChecker.getCurrentScope();
+            if (currentScope.findSymbol(freeVar.getVar().getValue()) != null) {
+                // If the expression to be substituted uses variables defined in the outer-most expresion
+                // that is being visited, we shouldn't perform the substitution.
+                return expr;
+            }
+        }
+        // Makes a deep copy before returning to avoid shared references.
+        return (Expression) SqlppRewriteUtil.deepCopy(mappedExpr);
+    }
+}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteExpressionsVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteExpressionsVisitor.java
deleted file mode 100644
index d9b2698..0000000
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteExpressionsVisitor.java
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-
-package org.apache.asterix.lang.sqlpp.visitor;
-
-import java.util.List;
-
-import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.clause.GroupbyClause;
-import org.apache.asterix.lang.common.clause.LetClause;
-import org.apache.asterix.lang.common.expression.GbyVariableExpressionPair;
-import org.apache.asterix.lang.common.rewrites.ExpressionSubstitutionEnvironment;
-import org.apache.asterix.lang.common.visitor.SubstituteExpressionVisitor;
-import org.apache.asterix.lang.sqlpp.clause.AbstractBinaryCorrelateClause;
-import org.apache.asterix.lang.sqlpp.clause.FromClause;
-import org.apache.asterix.lang.sqlpp.clause.FromTerm;
-import org.apache.asterix.lang.sqlpp.clause.HavingClause;
-import org.apache.asterix.lang.sqlpp.clause.JoinClause;
-import org.apache.asterix.lang.sqlpp.clause.NestClause;
-import org.apache.asterix.lang.sqlpp.clause.Projection;
-import org.apache.asterix.lang.sqlpp.clause.SelectBlock;
-import org.apache.asterix.lang.sqlpp.clause.SelectClause;
-import org.apache.asterix.lang.sqlpp.clause.SelectElement;
-import org.apache.asterix.lang.sqlpp.clause.SelectRegular;
-import org.apache.asterix.lang.sqlpp.clause.SelectSetOperation;
-import org.apache.asterix.lang.sqlpp.clause.UnnestClause;
-import org.apache.asterix.lang.sqlpp.expression.CaseExpression;
-import org.apache.asterix.lang.sqlpp.expression.IndependentSubquery;
-import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
-import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
-import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
-import org.apache.asterix.lang.sqlpp.visitor.base.ISqlppVisitor;
-
-public class SqlppSubstituteExpressionsVisitor extends SubstituteExpressionVisitor
-        implements ISqlppVisitor<Expression, ExpressionSubstitutionEnvironment> {
-
-    public SqlppSubstituteExpressionsVisitor() {
-        super(SqlppRewriteUtil::deepCopy);
-    }
-
-    @Override
-    public Expression visit(GroupbyClause gc, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        for (GbyVariableExpressionPair pair : gc.getGbyPairList()) {
-            pair.setExpr(pair.getExpr().accept(this, env));
-        }
-        // Forces from binding variables to exit their scopes, i.e.,
-        // one can still replace from binding variables.
-        env.pop();
-        for (GbyVariableExpressionPair pair : gc.getGbyPairList()) {
-            env.disableVariable(pair.getVar());
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(FromClause fromClause, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        // Marks the states before the from clause, and a consequent
-        // group-by clause will reset env to the state.
-        env.mark();
-        for (FromTerm fromTerm : fromClause.getFromTerms()) {
-            fromTerm.accept(this, env);
-            // From terms are correlated and thus we mask binding variables after
-            // visiting each individual from term.
-            env.disableVariable(fromTerm.getLeftVariable());
-            if (fromTerm.hasPositionalVariable()) {
-                env.disableVariable(fromTerm.getLeftVariable());
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(FromTerm fromTerm, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        fromTerm.setLeftExpression(fromTerm.getLeftExpression().accept(this, env));
-        if (fromTerm.hasCorrelateClauses()) {
-            for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) {
-                correlateClause.accept(this, env);
-            }
-            // correlate clauses are independent and thus we mask their binding variables
-            // after visiting them.
-            for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) {
-                env.disableVariable(correlateClause.getRightVariable());
-                if (correlateClause.hasPositionalVariable()) {
-                    env.disableVariable(correlateClause.getPositionalVariable());
-                }
-            }
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(JoinClause joinClause, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        joinClause.setRightExpression(joinClause.getRightExpression().accept(this, env));
-        // Condition expressions can see the join binding variables, thus we have to mask them for replacement.
-        env.disableVariable(joinClause.getRightVariable());
-        if (joinClause.hasPositionalVariable()) {
-            env.disableVariable(joinClause.getPositionalVariable());
-        }
-        joinClause.setConditionExpression(joinClause.getConditionExpression().accept(this, env));
-        // Re-enable them.
-        env.enableVariable(joinClause.getRightVariable());
-        if (joinClause.hasPositionalVariable()) {
-            env.enableVariable(joinClause.getPositionalVariable());
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(NestClause nestClause, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        nestClause.setRightExpression(nestClause.getRightExpression().accept(this, env));
-        // Condition expressions can see the join binding variables, thus we have to mask them for replacement.
-        env.disableVariable(nestClause.getRightVariable());
-        if (nestClause.hasPositionalVariable()) {
-            env.disableVariable(nestClause.getPositionalVariable());
-        }
-        nestClause.setConditionExpression(nestClause.getConditionExpression().accept(this, env));
-        // Re-enable them.
-        env.enableVariable(nestClause.getRightVariable());
-        if (nestClause.hasPositionalVariable()) {
-            env.enableVariable(nestClause.getPositionalVariable());
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(Projection projection, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        if (!projection.star()) {
-            projection.setExpression(projection.getExpression().accept(this, env));
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(SelectBlock selectBlock, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        // Traverses the select block in the order of "from", "let"s, "where",
-        // "group by", "let"s, "having" and "select".
-        if (selectBlock.hasFromClause()) {
-            selectBlock.getFromClause().accept(this, env);
-        }
-        if (selectBlock.hasLetClauses()) {
-            List<LetClause> letList = selectBlock.getLetList();
-            for (LetClause letClause : letList) {
-                letClause.accept(this, env);
-            }
-        }
-        if (selectBlock.hasWhereClause()) {
-            selectBlock.getWhereClause().accept(this, env);
-        }
-        if (selectBlock.hasGroupbyClause()) {
-            selectBlock.getGroupbyClause().accept(this, env);
-        }
-        if (selectBlock.hasLetClausesAfterGroupby()) {
-            List<LetClause> letListAfterGby = selectBlock.getLetListAfterGroupby();
-            for (LetClause letClauseAfterGby : letListAfterGby) {
-                letClauseAfterGby.accept(this, env);
-            }
-        }
-        if (selectBlock.hasHavingClause()) {
-            selectBlock.getHavingClause().accept(this, env);
-        }
-        selectBlock.getSelectClause().accept(this, env);
-        return null;
-    }
-
-    @Override
-    public Expression visit(SelectClause selectClause, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        if (selectClause.selectElement()) {
-            selectClause.getSelectElement().accept(this, env);
-        } else {
-            selectClause.getSelectRegular().accept(this, env);
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(SelectElement selectElement, ExpressionSubstitutionEnvironment env)
-            throws AsterixException {
-        selectElement.setExpression(selectElement.getExpression().accept(this, env));
-        return null;
-    }
-
-    @Override
-    public Expression visit(SelectRegular selectRegular, ExpressionSubstitutionEnvironment env)
-            throws AsterixException {
-        for (Projection projection : selectRegular.getProjections()) {
-            projection.accept(this, env);
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(SelectSetOperation selectSetOperation, ExpressionSubstitutionEnvironment env)
-            throws AsterixException {
-        selectSetOperation.getLeftInput().accept(this, env);
-        for (SetOperationRight right : selectSetOperation.getRightInputs()) {
-            right.getSetOperationRightInput().accept(this, env);
-        }
-        return null;
-    }
-
-    @Override
-    public Expression visit(SelectExpression selectExpression, ExpressionSubstitutionEnvironment env)
-            throws AsterixException {
-        // Backups the current states of env and the end of this method will reset to the returned depth.
-        int depth = env.mark();
-        // visit let list
-        if (selectExpression.hasLetClauses()) {
-            for (LetClause letClause : selectExpression.getLetList()) {
-                letClause.accept(this, env);
-            }
-        }
-
-        // visit the main select.
-        selectExpression.getSelectSetOperation().accept(this, env);
-
-        // visit order by.
-        if (selectExpression.hasOrderby()) {
-            selectExpression.getOrderbyClause().accept(this, env);
-        }
-
-        // visit limit
-        if (selectExpression.hasLimit()) {
-            selectExpression.getLimitClause().accept(this, env);
-        }
-
-        // re-enable the replacements all of all binding variables in the current scope.
-        if (selectExpression.hasLetClauses()) {
-            for (LetClause letClause : selectExpression.getLetList()) {
-                env.enableVariable(letClause.getVarExpr());
-            }
-        }
-        // Restores the states of env to be the same as the beginning .
-        env.reset(depth);
-        return selectExpression;
-    }
-
-    @Override
-    public Expression visit(UnnestClause unnestClause, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        unnestClause.setRightExpression(unnestClause.getRightExpression().accept(this, env));
-        return null;
-    }
-
-    @Override
-    public Expression visit(HavingClause havingClause, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        havingClause.setFilterExpression(havingClause.getFilterExpression().accept(this, env));
-        return null;
-    }
-
-    @Override
-    public Expression visit(IndependentSubquery independentSubquery, ExpressionSubstitutionEnvironment env)
-            throws AsterixException {
-        independentSubquery.setExpr(independentSubquery.getExpr().accept(this, env));
-        return null;
-    }
-
-    @Override
-    public Expression visit(CaseExpression caseExpr, ExpressionSubstitutionEnvironment env) throws AsterixException {
-        Expression newCaseExpr = env.findSubstitution(caseExpr, deepCopier);
-        if (newCaseExpr == caseExpr) {
-            caseExpr.setConditionExpr(caseExpr.getConditionExpr().accept(this, env));
-            caseExpr.setWhenExprs(rewriteExpressionList(caseExpr.getWhenExprs(), env));
-            caseExpr.setThenExprs(rewriteExpressionList(caseExpr.getThenExprs(), env));
-            caseExpr.setElseExpr(caseExpr.getElseExpr().accept(this, env));
-            return caseExpr;
-        } else {
-            return newCaseExpr.accept(this, env);
-        }
-    }
-
-}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteVariablesVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteVariablesVisitor.java
deleted file mode 100644
index 923f86d..0000000
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/SqlppSubstituteVariablesVisitor.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- *   http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.asterix.lang.sqlpp.visitor;
-
-import org.apache.asterix.common.exceptions.AsterixException;
-import org.apache.asterix.lang.common.base.Expression;
-import org.apache.asterix.lang.common.expression.VariableExpr;
-import org.apache.asterix.lang.common.rewrites.LangRewritingContext;
-import org.apache.asterix.lang.common.rewrites.VariableSubstitutionEnvironment;
-import org.apache.asterix.lang.sqlpp.util.SqlppRewriteUtil;
-
-public class SqlppSubstituteVariablesVisitor extends SqlppCloneAndSubstituteVariablesVisitor {
-
-    public SqlppSubstituteVariablesVisitor() {
-        super(null);
-    }
-
-    @Override
-    protected Expression rewriteVariableExpr(VariableExpr expr, VariableSubstitutionEnvironment env)
-            throws AsterixException {
-        if (env.constainsOldVar(expr)) {
-            return (Expression) SqlppRewriteUtil.deepCopy(env.findSubstitution(expr));
-        }
-        return expr;
-    }
-
-    @Override
-    public VariableExpr generateNewVariable(LangRewritingContext context, VariableExpr varExpr) {
-        return varExpr;
-    }
-
-}
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
index 13ec855..c13f00d 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppExpressionScopingVisitor.java
@@ -19,7 +19,10 @@
 package org.apache.asterix.lang.sqlpp.visitor.base;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
+import java.util.Map.Entry;
 import java.util.Set;
 
 import org.apache.asterix.common.config.MetadataConstants;
@@ -55,6 +58,7 @@
 import org.apache.asterix.lang.sqlpp.expression.SelectExpression;
 import org.apache.asterix.lang.sqlpp.struct.SetOperationRight;
 import org.apache.asterix.lang.sqlpp.util.SqlppVariableUtil;
+import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.algebricks.core.algebra.base.Counter;
 import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
 
@@ -87,7 +91,7 @@
     public Expression visit(FromTerm fromTerm, ILangExpression arg) throws AsterixException {
         scopeChecker.createNewScope();
         // Visit the left expression of a from term.
-        fromTerm.setLeftExpression(fromTerm.getLeftExpression().accept(this, fromTerm));
+        fromTerm.setLeftExpression(visit(fromTerm.getLeftExpression(), fromTerm));
 
         // Registers the data item variable.
         VariableExpr leftVar = fromTerm.getLeftVariable();
@@ -113,7 +117,7 @@
         // NOTE: the two join branches cannot be correlated, instead of checking
         // the correlation here,
         // we defer the check to the query optimizer.
-        joinClause.setRightExpression(joinClause.getRightExpression().accept(this, joinClause));
+        joinClause.setRightExpression(visit(joinClause.getRightExpression(), joinClause));
 
         // Registers the data item variable.
         VariableExpr rightVar = joinClause.getRightVariable();
@@ -132,7 +136,7 @@
         scopeChecker.pushExistingScope(mergedScope);
         // The condition expression can refer to the just registered variables
         // for the right branch.
-        joinClause.setConditionExpression(joinClause.getConditionExpression().accept(this, joinClause));
+        joinClause.setConditionExpression(visit(joinClause.getConditionExpression(), joinClause));
         return null;
     }
 
@@ -141,7 +145,7 @@
         // NOTE: the two branches of a NEST cannot be correlated, instead of
         // checking the correlation here, we defer the check to the query
         // optimizer.
-        nestClause.setRightExpression(nestClause.getRightExpression().accept(this, nestClause));
+        nestClause.setRightExpression(visit(nestClause.getRightExpression(), nestClause));
 
         // Registers the data item variable.
         VariableExpr rightVar = nestClause.getRightVariable();
@@ -155,13 +159,13 @@
 
         // The condition expression can refer to the just registered variables
         // for the right branch.
-        nestClause.setConditionExpression(nestClause.getConditionExpression().accept(this, nestClause));
+        nestClause.setConditionExpression(visit(nestClause.getConditionExpression(), nestClause));
         return null;
     }
 
     @Override
     public Expression visit(UnnestClause unnestClause, ILangExpression arg) throws AsterixException {
-        unnestClause.setRightExpression(unnestClause.getRightExpression().accept(this, unnestClause));
+        unnestClause.setRightExpression(visit(unnestClause.getRightExpression(), unnestClause));
 
         // register the data item variable
         VariableExpr rightVar = unnestClause.getRightVariable();
@@ -199,7 +203,7 @@
 
     @Override
     public Expression visit(Query q, ILangExpression arg) throws AsterixException {
-        q.setBody(q.getBody().accept(this, q));
+        q.setBody(visit(q.getBody(), q));
         q.setVarCounter(scopeChecker.getVarCounter());
         context.setVarCounter(scopeChecker.getVarCounter());
         return null;
@@ -208,25 +212,53 @@
     @Override
     public Expression visit(FunctionDecl fd, ILangExpression arg) throws AsterixException {
         scopeChecker.createNewScope();
-        fd.setFuncBody(fd.getFuncBody().accept(this, fd));
+        fd.setFuncBody(visit(fd.getFuncBody(), fd));
         scopeChecker.removeCurrentScope();
         return null;
     }
 
     @Override
     public Expression visit(GroupbyClause gc, ILangExpression arg) throws AsterixException {
-        Scope newScope = scopeChecker.extendCurrentScopeNoPush(true);
+        // After a GROUP BY, variables defined before the current SELECT BLOCK (e.g., in a WITH clause
+        // or an outer scope query) should still be visible.
+        Scope newScope = new Scope(scopeChecker, scopeChecker.getCurrentScope().getParentScope());
         // Puts all group-by variables into the symbol set of the new scope.
-        for (GbyVariableExpressionPair gbyVarExpr : gc.getGbyPairList()) {
-            gbyVarExpr.setExpr(gbyVarExpr.getExpr().accept(this, gc));
-            VariableExpr gbyVar = gbyVarExpr.getVar();
-            if (gbyVar != null) {
-                newScope.addNewVarSymbolToScope(gbyVarExpr.getVar().getVar());
+        for (GbyVariableExpressionPair gbyKeyVarExpr : gc.getGbyPairList()) {
+            gbyKeyVarExpr.setExpr(visit(gbyKeyVarExpr.getExpr(), gc));
+            VariableExpr gbyKeyVar = gbyKeyVarExpr.getVar();
+            if (gbyKeyVar != null) {
+                newScope.addNewVarSymbolToScope(gbyKeyVar.getVar());
             }
         }
-        for (VariableExpr withVar : gc.getWithVarList()) {
-            newScope.addNewVarSymbolToScope(withVar.getVar());
+        if (gc.hasGroupFieldList()) {
+            for (Pair<Expression, Identifier> gbyField : gc.getGroupFieldList()) {
+                gbyField.first = visit(gbyField.first, arg);
+            }
         }
+        if (gc.hasDecorList()) {
+            for (GbyVariableExpressionPair decorVarExpr : gc.getDecorPairList()) {
+                decorVarExpr.setExpr(visit(decorVarExpr.getExpr(), gc));
+                VariableExpr decorVar = decorVarExpr.getVar();
+                if (decorVar != null) {
+                    newScope.addNewVarSymbolToScope(decorVar.getVar());
+                }
+            }
+        }
+        if (gc.hasGroupVar()) {
+            scopeChecker.getCurrentScope().addNewVarSymbolToScope(gc.getGroupVar().getVar());
+        }
+        if (gc.hasWithMap()) {
+            Map<Expression, VariableExpr> newWithMap = new HashMap<>();
+            for (Entry<Expression, VariableExpr> entry : gc.getWithVarMap().entrySet()) {
+                Expression expr = visit(entry.getKey(), arg);
+                Expression newKey = expr;
+                VariableExpr value = entry.getValue();
+                newScope.addNewVarSymbolToScope(value.getVar());
+                newWithMap.put(newKey, value);
+            }
+            gc.setWithVarMap(newWithMap);
+        }
+        // Replaces the current scope with the new scope.
         scopeChecker.replaceCurrentScope(newScope);
         return null;
     }
@@ -234,7 +266,10 @@
     @Override
     public Expression visit(LimitClause limitClause, ILangExpression arg) throws AsterixException {
         scopeChecker.pushForbiddenScope(scopeChecker.getCurrentScope());
-        limitClause.setLimitExpr(limitClause.getLimitExpr().accept(this, limitClause));
+        limitClause.setLimitExpr(visit(limitClause.getLimitExpr(), limitClause));
+        if(limitClause.hasOffset()) {
+            limitClause.setOffset(visit(limitClause.getOffset(), limitClause));
+        }
         scopeChecker.popForbiddenScope();
         return null;
     }
@@ -242,7 +277,7 @@
     @Override
     public Expression visit(LetClause letClause, ILangExpression arg) throws AsterixException {
         scopeChecker.extendCurrentScope();
-        letClause.setBindingExpr(letClause.getBindingExpr().accept(this, letClause));
+        letClause.setBindingExpr(visit(letClause.getBindingExpr(), letClause));
         scopeChecker.getCurrentScope().addNewVarSymbolToScope(letClause.getVarExpr().getVar());
         return null;
     }
@@ -255,8 +290,11 @@
         // visit let list
         if (selectExpression.hasLetClauses()) {
             for (LetClause letClause : selectExpression.getLetList()) {
+                // Variables defined in WITH clauses are considered as named access instead of real variables.
+                letClause.getVarExpr().getVar().setNamedValueAccess(true);
                 letClause.accept(this, selectExpression);
             }
+            scopeChecker.createNewScope();
         }
 
         // visit the main select.
@@ -286,7 +324,7 @@
         // variables defined in the parent scope.
         Scope scope = new Scope(scopeChecker, scopeChecker.getCurrentScope(), true);
         scopeChecker.pushExistingScope(scope);
-        independentSubquery.setExpr(independentSubquery.getExpr().accept(this, independentSubquery));
+        independentSubquery.setExpr(visit(independentSubquery.getExpr(), independentSubquery));
         scopeChecker.removeCurrentScope();
         return independentSubquery;
     }
@@ -295,10 +333,10 @@
     public Expression visit(QuantifiedExpression qe, ILangExpression arg) throws AsterixException {
         scopeChecker.createNewScope();
         for (QuantifiedPair pair : qe.getQuantifiedList()) {
-            pair.setExpr(pair.getExpr().accept(this, qe));
+            pair.setExpr(visit(pair.getExpr(), qe));
             scopeChecker.getCurrentScope().addNewVarSymbolToScope(pair.getVarExpr().getVar());
         }
-        qe.setSatisfiesExpr(qe.getSatisfiesExpr().accept(this, qe));
+        qe.setSatisfiesExpr(visit(qe.getSatisfiesExpr(), qe));
         scopeChecker.removeCurrentScope();
         return qe;
     }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
index 423eb40..21883f7 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
+++ b/asterixdb/asterix-lang-sqlpp/src/main/java/org/apache/asterix/lang/sqlpp/visitor/base/AbstractSqlppSimpleExpressionVisitor.java
@@ -21,6 +21,7 @@
 import java.util.ArrayList;
 import java.util.List;
 
+import org.antlr.stringtemplate.language.Expr;
 import org.apache.asterix.common.exceptions.AsterixException;
 import org.apache.asterix.lang.common.base.Expression;
 import org.apache.asterix.lang.common.base.ILangExpression;
@@ -69,7 +70,7 @@
     @Override
     public Expression visit(FromClause fromClause, ILangExpression arg) throws AsterixException {
         for (FromTerm fromTerm : fromClause.getFromTerms()) {
-            fromTerm.accept(this, arg);
+            visit(fromTerm, arg);
         }
         return null;
     }
@@ -77,7 +78,7 @@
     @Override
     public Expression visit(FromTerm fromTerm, ILangExpression arg) throws AsterixException {
         // Visit the left expression of a from term.
-        fromTerm.setLeftExpression(fromTerm.getLeftExpression().accept(this, arg));
+        fromTerm.setLeftExpression(visit(fromTerm.getLeftExpression(), arg));
 
         // Visits join/unnest/nest clauses.
         for (AbstractBinaryCorrelateClause correlateClause : fromTerm.getCorrelateClauses()) {
@@ -88,28 +89,28 @@
 
     @Override
     public Expression visit(JoinClause joinClause, ILangExpression arg) throws AsterixException {
-        joinClause.setRightExpression(joinClause.getRightExpression().accept(this, arg));
-        joinClause.setConditionExpression(joinClause.getConditionExpression().accept(this, arg));
+        joinClause.setRightExpression(visit(joinClause.getRightExpression(), arg));
+        joinClause.setConditionExpression(visit(joinClause.getConditionExpression(), arg));
         return null;
     }
 
     @Override
     public Expression visit(NestClause nestClause, ILangExpression arg) throws AsterixException {
-        nestClause.setRightExpression(nestClause.getRightExpression().accept(this, arg));
-        nestClause.setConditionExpression(nestClause.getConditionExpression().accept(this, arg));
+        nestClause.setRightExpression(visit(nestClause.getRightExpression(), arg));
+        nestClause.setConditionExpression(visit(nestClause.getConditionExpression(), arg));
         return null;
     }
 
     @Override
     public Expression visit(UnnestClause unnestClause, ILangExpression arg) throws AsterixException {
-        unnestClause.setRightExpression(unnestClause.getRightExpression().accept(this, arg));
+        unnestClause.setRightExpression(visit(unnestClause.getRightExpression(), arg));
         return null;
     }
 
     @Override
     public Expression visit(Projection projection, ILangExpression arg) throws AsterixException {
         if (!projection.star()) {
-            projection.setExpression(projection.getExpression().accept(this, arg));
+            projection.setExpression(visit(projection.getExpression(), arg));
         }
         return null;
     }
@@ -159,7 +160,7 @@
 
     @Override
     public Expression visit(SelectElement selectElement, ILangExpression arg) throws AsterixException {
-        selectElement.setExpression(selectElement.getExpression().accept(this, selectElement));
+        selectElement.setExpression(visit(selectElement.getExpression(), selectElement));
         return null;
     }
 
@@ -182,58 +183,54 @@
 
     @Override
     public Expression visit(HavingClause havingClause, ILangExpression arg) throws AsterixException {
-        havingClause.setFilterExpression(havingClause.getFilterExpression().accept(this, havingClause));
+        havingClause.setFilterExpression(visit(havingClause.getFilterExpression(), havingClause));
         return null;
     }
 
     @Override
     public Expression visit(Query q, ILangExpression arg) throws AsterixException {
-        q.setBody(q.getBody().accept(this, q));
+        q.setBody(visit(q.getBody(), q));
         return null;
     }
 
     @Override
     public Expression visit(FunctionDecl fd, ILangExpression arg) throws AsterixException {
-        fd.setFuncBody(fd.getFuncBody().accept(this, fd));
+        fd.setFuncBody(visit(fd.getFuncBody(), fd));
         return null;
     }
 
     @Override
     public Expression visit(WhereClause whereClause, ILangExpression arg) throws AsterixException {
-        whereClause.setWhereExpr(whereClause.getWhereExpr().accept(this, whereClause));
+        whereClause.setWhereExpr(visit(whereClause.getWhereExpr(), whereClause));
         return null;
     }
 
     @Override
     public Expression visit(OrderbyClause oc, ILangExpression arg) throws AsterixException {
-        List<Expression> newOrderbyList = new ArrayList<>();
-        for (Expression orderExpr : oc.getOrderbyList()) {
-            newOrderbyList.add(orderExpr.accept(this, oc));
-        }
-        oc.setOrderbyList(newOrderbyList);
+        oc.setOrderbyList(visit(oc.getOrderbyList(), arg));
         return null;
     }
 
     @Override
     public Expression visit(GroupbyClause gc, ILangExpression arg) throws AsterixException {
         for (GbyVariableExpressionPair gbyVarExpr : gc.getGbyPairList()) {
-            gbyVarExpr.setExpr(gbyVarExpr.getExpr().accept(this, gc));
+            gbyVarExpr.setExpr(visit(gbyVarExpr.getExpr(), gc));
         }
         return null;
     }
 
     @Override
     public Expression visit(LimitClause limitClause, ILangExpression arg) throws AsterixException {
-        limitClause.setLimitExpr(limitClause.getLimitExpr().accept(this, limitClause));
+        limitClause.setLimitExpr(visit(limitClause.getLimitExpr(), limitClause));
         if (limitClause.hasOffset()) {
-            limitClause.setOffset(limitClause.getOffset().accept(this, limitClause));
+            limitClause.setOffset(visit(limitClause.getOffset(), limitClause));
         }
         return null;
     }
 
     @Override
     public Expression visit(LetClause letClause, ILangExpression arg) throws AsterixException {
-        letClause.setBindingExpr(letClause.getBindingExpr().accept(this, letClause));
+        letClause.setBindingExpr(visit(letClause.getBindingExpr(), letClause));
         return null;
     }
 
@@ -275,8 +272,8 @@
     @Override
     public Expression visit(RecordConstructor rc, ILangExpression arg) throws AsterixException {
         for (FieldBinding binding : rc.getFbList()) {
-            binding.setLeftExpr(binding.getLeftExpr().accept(this, rc));
-            binding.setRightExpr(binding.getRightExpr().accept(this, rc));
+            binding.setLeftExpr(visit(binding.getLeftExpr(), rc));
+            binding.setRightExpr(visit(binding.getRightExpr(), rc));
         }
         return rc;
     }
@@ -289,28 +286,24 @@
 
     @Override
     public Expression visit(IfExpr ifExpr, ILangExpression arg) throws AsterixException {
-        ifExpr.setCondExpr(ifExpr.getCondExpr().accept(this, ifExpr));
-        ifExpr.setThenExpr(ifExpr.getThenExpr().accept(this, ifExpr));
-        ifExpr.setElseExpr(ifExpr.getElseExpr().accept(this, ifExpr));
+        ifExpr.setCondExpr(visit(ifExpr.getCondExpr(), ifExpr));
+        ifExpr.setThenExpr(visit(ifExpr.getThenExpr(), ifExpr));
+        ifExpr.setElseExpr(visit(ifExpr.getElseExpr(), ifExpr));
         return ifExpr;
     }
 
     @Override
     public Expression visit(QuantifiedExpression qe, ILangExpression arg) throws AsterixException {
         for (QuantifiedPair pair : qe.getQuantifiedList()) {
-            pair.setExpr(pair.getExpr().accept(this, qe));
+            pair.setExpr(visit(pair.getExpr(), qe));
         }
-        qe.setSatisfiesExpr(qe.getSatisfiesExpr().accept(this, qe));
+        qe.setSatisfiesExpr(visit(qe.getSatisfiesExpr(), qe));
         return qe;
     }
 
     @Override
     public Expression visit(CallExpr callExpr, ILangExpression arg) throws AsterixException {
-        List<Expression> newExprList = new ArrayList<>();
-        for (Expression expr : callExpr.getExprList()) {
-            newExprList.add(expr.accept(this, callExpr));
-        }
-        callExpr.setExprList(newExprList);
+        callExpr.setExprList(visit(callExpr.getExprList(), arg));
         return callExpr;
     }
 
@@ -321,46 +314,57 @@
 
     @Override
     public Expression visit(UnaryExpr u, ILangExpression arg) throws AsterixException {
-        u.setExpr(u.getExpr().accept(this, u));
+        u.setExpr(visit(u.getExpr(), u));
         return u;
     }
 
     @Override
     public Expression visit(FieldAccessor fa, ILangExpression arg) throws AsterixException {
-        fa.setExpr(fa.getExpr().accept(this, fa));
+        fa.setExpr(visit(fa.getExpr(), fa));
         return fa;
     }
 
     @Override
     public Expression visit(IndexAccessor ia, ILangExpression arg) throws AsterixException {
-        ia.setExpr(ia.getExpr().accept(this, ia));
+        ia.setExpr(visit(ia.getExpr(), ia));
         if (ia.getIndexExpr() != null) {
-            ia.setIndexExpr(ia.getIndexExpr());
+            ia.setIndexExpr(visit(ia.getIndexExpr(), arg));
         }
         return ia;
     }
 
     @Override
     public Expression visit(IndependentSubquery independentSubquery, ILangExpression arg) throws AsterixException {
-        independentSubquery.setExpr(independentSubquery.getExpr().accept(this, arg));
+        independentSubquery.setExpr(visit(independentSubquery.getExpr(), arg));
         return independentSubquery;
     }
 
     @Override
     public Expression visit(CaseExpression caseExpr, ILangExpression arg) throws AsterixException {
-        caseExpr.setConditionExpr(caseExpr.getConditionExpr().accept(this, arg));
+        caseExpr.setConditionExpr(visit(caseExpr.getConditionExpr(), arg));
         caseExpr.setWhenExprs(visit(caseExpr.getWhenExprs(), arg));
         caseExpr.setThenExprs(visit(caseExpr.getThenExprs(), arg));
-        caseExpr.setElseExpr(caseExpr.getElseExpr().accept(this, arg));
+        caseExpr.setElseExpr(visit(caseExpr.getElseExpr(), arg));
         return caseExpr;
     }
 
+    protected Expression visit(Expression expr, ILangExpression arg) throws AsterixException{
+        return postVisit(preVisit(expr).accept(this, arg));
+    }
+
+    protected Expression preVisit(Expression expr) throws AsterixException{
+        return expr;
+    }
+
+    protected Expression postVisit(Expression expr) throws AsterixException {
+        return expr;
+    }
+
     private List<Expression> visit(List<Expression> exprs, ILangExpression arg) throws AsterixException {
         List<Expression> newExprList = new ArrayList<>();
         for (Expression expr : exprs) {
-            newExprList.add(expr.accept(this, arg));
+            newExprList.add(visit(expr, arg));
         }
         return newExprList;
     }
-
 }
diff --git a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
index a0a9742..95f09f5 100644
--- a/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
+++ b/asterixdb/asterix-lang-sqlpp/src/main/javacc/SQLPP.jj
@@ -2649,7 +2649,6 @@
     GroupbyClause gbc = new GroupbyClause();
     List<GbyVariableExpressionPair> vePairList = new ArrayList<GbyVariableExpressionPair>();
     VariableExpr var = null;
-    VariableExpr withVar = null;
     Expression expr = null;
     VariableExpr decorVar = null;
     Expression decorExpr = null;
@@ -2721,7 +2720,7 @@
     {
       gbc.setGbyPairList(vePairList);
       gbc.setDecorPairList(new ArrayList<GbyVariableExpressionPair>());
-      gbc.setWithVarList(new ArrayList<VariableExpr>());
+      gbc.setWithVarMap(new HashMap<Expression, VariableExpr>());
       gbc.setGroupVar(groupVar);
       gbc.setGroupFieldList(groupFieldList);
       replaceCurrentScope(newScope);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
index e303d97..97f0ace 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/functions/AsterixBuiltinFunctions.java
@@ -83,6 +83,7 @@
 import org.apache.asterix.om.typecomputer.impl.OrderedListOfAPointTypeComputer;
 import org.apache.asterix.om.typecomputer.impl.OrderedListOfAStringTypeComputer;
 import org.apache.asterix.om.typecomputer.impl.OrderedListOfAnyTypeComputer;
+import org.apache.asterix.om.typecomputer.impl.PropagateTypeComputer;
 import org.apache.asterix.om.typecomputer.impl.RecordAddFieldsTypeComputer;
 import org.apache.asterix.om.typecomputer.impl.RecordMergeTypeComputer;
 import org.apache.asterix.om.typecomputer.impl.RecordRemoveFieldsTypeComputer;
@@ -301,6 +302,10 @@
             "agg-intermediate-avg", 1);
     public static final FunctionIdentifier LOCAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
             "agg-local-avg", 1);
+    public static final FunctionIdentifier FIRST_ELEMENT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "agg-first-element", 1);
+    public static final FunctionIdentifier LOCAL_FIRST_ELEMENT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "agg-local-first-element", 1);
 
     public static final FunctionIdentifier SCALAR_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "avg", 1);
     public static final FunctionIdentifier SCALAR_COUNT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS, "count",
@@ -312,6 +317,8 @@
             "global-avg", 1);
     public static final FunctionIdentifier SCALAR_LOCAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
             "local-avg", 1);
+    public static final FunctionIdentifier SCALAR_FIRST_ELEMENT = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
+            "first-element", 1);
 
     // serializable aggregate functions
     public static final FunctionIdentifier SERIAL_AVG = new FunctionIdentifier(FunctionConstants.ASTERIX_NS,
@@ -864,6 +871,9 @@
         addFunction(SUM, NumericAggTypeComputer.INSTANCE, true);
         addPrivateFunction(LOCAL_SUM, NumericAggTypeComputer.INSTANCE, true);
         addPrivateFunction(GLOBAL_AVG, NullableDoubleTypeComputer.INSTANCE, true);
+        addPrivateFunction(SCALAR_FIRST_ELEMENT, CollectionMemberResultType.INSTANCE, true);
+        addPrivateFunction(FIRST_ELEMENT, PropagateTypeComputer.INSTANCE, true);
+        addPrivateFunction(LOCAL_FIRST_ELEMENT, PropagateTypeComputer.INSTANCE, true);
 
         addPrivateFunction(SERIAL_SQL_AVG, NullableDoubleTypeComputer.INSTANCE, true);
         addPrivateFunction(SERIAL_SQL_COUNT, AInt64TypeComputer.INSTANCE, true);
@@ -1067,6 +1077,8 @@
         scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_MAX), getAsterixFunctionInfo(MAX));
         scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_MIN), getAsterixFunctionInfo(MIN));
         scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_SUM), getAsterixFunctionInfo(SUM));
+        scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_FIRST_ELEMENT),
+                getAsterixFunctionInfo(FIRST_ELEMENT));
         // SQL Aggregate Functions
         scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_SQL_AVG), getAsterixFunctionInfo(SQL_AVG));
         scalarToAggregateFunctionMap.put(getAsterixFunctionInfo(SCALAR_SQL_COUNT), getAsterixFunctionInfo(SQL_COUNT));
@@ -1101,6 +1113,13 @@
         addIntermediateAgg(MAX, MAX);
         addGlobalAgg(MAX, MAX);
 
+        addAgg(SCALAR_FIRST_ELEMENT);
+        addAgg(LOCAL_FIRST_ELEMENT);
+        addLocalAgg(FIRST_ELEMENT, LOCAL_FIRST_ELEMENT);
+        addIntermediateAgg(LOCAL_FIRST_ELEMENT, FIRST_ELEMENT);
+        addIntermediateAgg(FIRST_ELEMENT, FIRST_ELEMENT);
+        addGlobalAgg(FIRST_ELEMENT, FIRST_ELEMENT);
+
         addAgg(MIN);
         addLocalAgg(MIN, LOCAL_MIN);
         addIntermediateAgg(LOCAL_MIN, MIN);
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
index 4332bb1..2931d7e 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/FieldAccessByNameResultType.java
@@ -42,10 +42,12 @@
     @Override
     protected void checkArgType(int argIndex, IAType type) throws AlgebricksException {
         if (argIndex == 0 && type.getTypeTag() != ATypeTag.RECORD) {
-            throw new AlgebricksException("The first argument should be a RECORD, but it is " + type + ".");
+            throw new AlgebricksException("The first argument of a field access should be a RECORD, but it is " + type
+                    + ".");
         }
         if (argIndex == 1 && type.getTypeTag() != ATypeTag.STRING) {
-            throw new AlgebricksException("The second argument should be an STRING, but it is found " + type + ".");
+            throw new AlgebricksException("The second argument of a field access should be an STRING, but it is "
+                    + type + ".");
         }
     }
 
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/PropagateTypeComputer.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/PropagateTypeComputer.java
new file mode 100644
index 0000000..df4524f
--- /dev/null
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/typecomputer/impl/PropagateTypeComputer.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.om.typecomputer.impl;
+
+import org.apache.asterix.om.typecomputer.base.AbstractResultTypeComputer;
+import org.apache.asterix.om.types.IAType;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+
+/**
+ * This type computer just populates whatever input type as the output type.
+ */
+public class PropagateTypeComputer extends AbstractResultTypeComputer {
+
+    public static final PropagateTypeComputer INSTANCE = new PropagateTypeComputer();
+
+    @Override
+    public IAType getResultType(ILogicalExpression expr, IAType... knownTypes) throws AlgebricksException {
+        return knownTypes[0];
+    }
+}
diff --git a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHelper.java b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHelper.java
index 4839c41..588b7d0 100644
--- a/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHelper.java
+++ b/asterixdb/asterix-om/src/main/java/org/apache/asterix/om/types/TypeHelper.java
@@ -50,10 +50,7 @@
             case ANY:
                 return false;
             case UNION:
-                if (!isClosed(((AUnionType) t).getActualType())) {
-                    return false;
-                }
-                return true;
+                return isClosed(((AUnionType) t).getActualType());
             default:
                 return true;
         }
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementAggregateDescriptor.java
new file mode 100644
index 0000000..2a94418
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementAggregateDescriptor.java
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.runtime.aggregates.collections;
+
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
+import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
+import org.apache.asterix.runtime.aggregates.base.AbstractAggregateFunctionDynamicDescriptor;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+
+// This aggregate function simply returns the first item in an input stream.
+public class FirstElementAggregateDescriptor extends AbstractAggregateFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public static final IFunctionDescriptorFactory FACTORY = () -> new FirstElementAggregateDescriptor();
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return AsterixBuiltinFunctions.FIRST_ELEMENT;
+    }
+
+    @Override
+    public IAggregateEvaluatorFactory createAggregateEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+            throws AlgebricksException {
+        return new FirstElementEvalFactory(args, false);
+    }
+
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementEvalFactory.java
new file mode 100644
index 0000000..fe3a7ec
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/FirstElementEvalFactory.java
@@ -0,0 +1,95 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.runtime.aggregates.collections;
+
+import org.apache.asterix.om.types.ATypeTag;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import org.apache.hyracks.api.context.IHyracksTaskContext;
+import org.apache.hyracks.data.std.api.IPointable;
+import org.apache.hyracks.data.std.primitive.VoidPointable;
+import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
+import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
+
+class FirstElementEvalFactory implements IAggregateEvaluatorFactory {
+
+    private static final long serialVersionUID = 1L;
+    private final IScalarEvaluatorFactory[] args;
+    private final boolean isLocal;
+
+    FirstElementEvalFactory(IScalarEvaluatorFactory[] args, boolean isLocal) {
+        this.args = args;
+        this.isLocal = isLocal;
+    }
+
+    @Override
+    public IAggregateEvaluator createAggregateEvaluator(final IHyracksTaskContext ctx) throws AlgebricksException {
+
+        return new IAggregateEvaluator() {
+
+            private boolean first = true;
+            // Needs to copy the bytes from inputVal to outputVal because the byte space of inputVal could be re-used
+            // by consequent tuples.
+            private ArrayBackedValueStorage outputVal = new ArrayBackedValueStorage();
+            private IPointable inputVal = new VoidPointable();
+            private IScalarEvaluator eval = args[0].createScalarEvaluator(ctx);
+            private final byte[] nullBytes = new byte[] { ATypeTag.SERIALIZED_NULL_TYPE_TAG };
+            private final byte[] systemNullBytes = new byte[] { ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG };
+
+            @Override
+            public void init() throws AlgebricksException {
+                first = true;
+            }
+
+            @Override
+            public void step(IFrameTupleReference tuple) throws AlgebricksException {
+                if (!first) {
+                    return;
+                }
+                eval.evaluate(tuple, inputVal);
+                byte typeTagByte = inputVal.getByteArray()[inputVal.getStartOffset()];
+                if(typeTagByte == ATypeTag.SERIALIZED_SYSTEM_NULL_TYPE_TAG){
+                    // Ignores SYSTEM_NULLs generated by local-first-element.
+                    return;
+                }
+                outputVal.assign(inputVal);
+                first = false;
+            }
+
+            @Override
+            public void finish(IPointable result) throws AlgebricksException {
+                if (first) {
+                    result.set(isLocal ? systemNullBytes : nullBytes, 0, 1);
+                    return;
+                }
+                result.set(outputVal);
+            }
+
+            @Override
+            public void finishPartial(IPointable result) throws AlgebricksException {
+                finish(result);
+            }
+
+        };
+    }
+
+}
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LocalFirstElementAggregateDescriptor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LocalFirstElementAggregateDescriptor.java
new file mode 100644
index 0000000..c1465d5
--- /dev/null
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/aggregates/collections/LocalFirstElementAggregateDescriptor.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.asterix.runtime.aggregates.collections;
+
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
+import org.apache.asterix.om.functions.IFunctionDescriptorFactory;
+import org.apache.asterix.runtime.aggregates.base.AbstractAggregateFunctionDynamicDescriptor;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.core.algebra.functions.FunctionIdentifier;
+import org.apache.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
+import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+
+public class LocalFirstElementAggregateDescriptor extends AbstractAggregateFunctionDynamicDescriptor {
+
+    private static final long serialVersionUID = 1L;
+    public static final IFunctionDescriptorFactory FACTORY = () -> new LocalFirstElementAggregateDescriptor();
+
+    @Override
+    public FunctionIdentifier getIdentifier() {
+        return AsterixBuiltinFunctions.LOCAL_FIRST_ELEMENT;
+    }
+
+    @Override
+    public IAggregateEvaluatorFactory createAggregateEvaluatorFactory(final IScalarEvaluatorFactory[] args)
+            throws AlgebricksException {
+        return new FirstElementEvalFactory(args, true);
+    }
+
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/LocalGroupingProperty.java b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/LocalGroupingProperty.java
index 6f4c296..159ed04 100644
--- a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/LocalGroupingProperty.java
+++ b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/properties/LocalGroupingProperty.java
@@ -100,8 +100,8 @@
             }
         }
         if (!newColumns.isEmpty()) {
-            return new LocalGroupingProperty(newColumns,
-                    preferredOrderEnforcer.subList(groupKeys.size(), newColumns.size()));
+            return new LocalGroupingProperty(newColumns, preferredOrderEnforcer == null ? null
+                    : preferredOrderEnforcer.subList(groupKeys.size(), newColumns.size()));
         } else {
             return null;
         }
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EliminateGroupByEmptyKeyRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EliminateGroupByEmptyKeyRule.java
index aab6ce1..8a91cfc 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EliminateGroupByEmptyKeyRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/EliminateGroupByEmptyKeyRule.java
@@ -21,8 +21,9 @@
 import java.util.List;
 
 import org.apache.commons.lang3.mutable.Mutable;
-
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalPlan;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
@@ -41,7 +42,8 @@
 public class EliminateGroupByEmptyKeyRule implements IAlgebraicRewriteRule {
 
     @Override
-    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context) throws AlgebricksException {
+    public boolean rewritePre(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
         return false;
     }
 
@@ -54,7 +56,8 @@
         }
         GroupByOperator groupOp = (GroupByOperator) op;
         List<LogicalVariable> groupVars = groupOp.getGbyVarList();
-        if (groupVars.size() > 0) {
+        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> decorList = groupOp.getDecorList();
+        if (!groupVars.isEmpty() || !decorList.isEmpty()) {
             return false;
         }
         List<ILogicalPlan> nestedPlans = groupOp.getNestedPlans();
@@ -81,7 +84,7 @@
 
     private Mutable<ILogicalOperator> getNestedTupleSourceReference(Mutable<ILogicalOperator> nestedTopOperatorRef) {
         Mutable<ILogicalOperator> currentOpRef = nestedTopOperatorRef;
-        while (currentOpRef.getValue().getInputs() != null && currentOpRef.getValue().getInputs().size() > 0) {
+        while (currentOpRef.getValue().getInputs() != null && !currentOpRef.getValue().getInputs().isEmpty()) {
             currentOpRef = currentOpRef.getValue().getInputs().get(0);
         }
         return currentOpRef;
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGroupByDecorVariablesRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGroupByDecorVariablesRule.java
new file mode 100644
index 0000000..a2ad732
--- /dev/null
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractGroupByDecorVariablesRule.java
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.hyracks.algebricks.rewriter.rules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.commons.lang3.mutable.Mutable;
+import org.apache.commons.lang3.mutable.MutableObject;
+import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.hyracks.algebricks.common.utils.Pair;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
+import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
+import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalExpressionTag;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
+import org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
+import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
+
+/**
+ * This rule normalizes an GroupBy operator. It extracts non-variable-reference decoration expressions
+ * as a separate assign operator before the GroupBy operator.
+ * The reason that we have this rule is that in various rules as well as the code generation for the
+ * GroupBy operator we assumed that decoration expressions can only be variable reference expressions.
+ */
+public class ExtractGroupByDecorVariablesRule implements IAlgebraicRewriteRule {
+
+    @Override
+    public boolean rewritePost(Mutable<ILogicalOperator> opRef, IOptimizationContext context)
+            throws AlgebricksException {
+        ILogicalOperator op = opRef.getValue();
+        if (op.getOperatorTag() != LogicalOperatorTag.GROUP) {
+            return false;
+        }
+        GroupByOperator groupByOperator = (GroupByOperator) op;
+        List<Pair<LogicalVariable, Mutable<ILogicalExpression>>> decorList = groupByOperator.getDecorList();
+
+        // Returns immediately if there is no decoration entry.
+        if (groupByOperator.getDecorList() == null || groupByOperator.getDecorList().isEmpty()) {
+            return false;
+        }
+
+        // Goes over the decoration list and performs the rewrite.
+        boolean changed = false;
+        List<LogicalVariable> vars = new ArrayList<>();
+        List<Mutable<ILogicalExpression>> exprs = new ArrayList<>();
+        for (Pair<LogicalVariable, Mutable<ILogicalExpression>> decorVarExpr : decorList) {
+            Mutable<ILogicalExpression> exprRef = decorVarExpr.second;
+            ILogicalExpression expr = exprRef.getValue();
+            if (expr ==null || expr.getExpressionTag() == LogicalExpressionTag.VARIABLE) {
+                continue;
+            }
+            // Rewrites the decoration entry if the decoration expression is not a variable reference expression.
+            changed = true;
+            LogicalVariable newVar = context.newVar();
+            vars.add(newVar);
+            exprs.add(exprRef);
+
+            // Normalizes the decor entry -- expression be a variable reference
+            decorVarExpr.second = new MutableObject<>(new VariableReferenceExpression(newVar));
+        }
+        if (!changed) {
+            return false;
+        }
+
+        // Injects an assign operator to evaluate the decoration expression.
+        AssignOperator assignOperator = new AssignOperator(vars, exprs);
+        assignOperator.getInputs().addAll(op.getInputs());
+        op.getInputs().set(0, new MutableObject<>(assignOperator));
+        return changed;
+    }
+}
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveCartesianProductWithEmptyBranchRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveCartesianProductWithEmptyBranchRule.java
index de35fb5..bd5d646 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveCartesianProductWithEmptyBranchRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveCartesianProductWithEmptyBranchRule.java
@@ -18,13 +18,18 @@
  */
 package org.apache.hyracks.algebricks.rewriter.rules;
 
+import java.util.HashSet;
+import java.util.Set;
+
 import org.apache.commons.lang3.mutable.Mutable;
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
 import org.apache.hyracks.algebricks.core.algebra.base.IOptimizationContext;
 import org.apache.hyracks.algebricks.core.algebra.base.LogicalOperatorTag;
+import org.apache.hyracks.algebricks.core.algebra.base.LogicalVariable;
 import org.apache.hyracks.algebricks.core.algebra.expressions.ConstantExpression;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractBinaryJoinOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
 import org.apache.hyracks.algebricks.core.rewriter.base.IAlgebraicRewriteRule;
 
 /**
@@ -58,7 +63,12 @@
         return false;
     }
 
-    private boolean emptyBranch(ILogicalOperator op) {
-        return op.getOperatorTag() == LogicalOperatorTag.EMPTYTUPLESOURCE;
+    private boolean emptyBranch(ILogicalOperator op) throws AlgebricksException {
+        if (op.getOperatorTag() == LogicalOperatorTag.EMPTYTUPLESOURCE) {
+            return true;
+        }
+        Set<LogicalVariable> liveVariables = new HashSet<>();
+        VariableUtilities.getLiveVariables(op, liveVariables);
+        return liveVariables.isEmpty();
     }
 }
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
index b25497c..139f1ed 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/RemoveUnusedAssignAndAggregateRule.java
@@ -26,9 +26,9 @@
 import java.util.Set;
 
 import org.apache.commons.lang3.mutable.Mutable;
-
 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.utils.ListSet;
+import org.apache.hyracks.algebricks.common.utils.Pair;
 import org.apache.hyracks.algebricks.common.utils.Triple;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalExpression;
 import org.apache.hyracks.algebricks.core.algebra.base.ILogicalOperator;
@@ -40,6 +40,7 @@
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AbstractOperatorWithNestedPlans;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AggregateOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator;
+import org.apache.hyracks.algebricks.core.algebra.operators.logical.GroupByOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnionAllOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.UnnestOperator;
 import org.apache.hyracks.algebricks.core.algebra.operators.logical.visitors.VariableUtilities;
@@ -119,35 +120,40 @@
     private int removeFromAssigns(AbstractLogicalOperator op, Set<LogicalVariable> toRemove,
             IOptimizationContext context) throws AlgebricksException {
         switch (op.getOperatorTag()) {
-            case ASSIGN: {
+            case ASSIGN:
                 AssignOperator assign = (AssignOperator) op;
                 if (removeUnusedVarsAndExprs(toRemove, assign.getVariables(), assign.getExpressions())) {
                     context.computeAndSetTypeEnvironmentForOperator(assign);
                 }
                 return assign.getVariables().size();
-            }
-            case AGGREGATE: {
+            case AGGREGATE:
                 AggregateOperator agg = (AggregateOperator) op;
                 if (removeUnusedVarsAndExprs(toRemove, agg.getVariables(), agg.getExpressions())) {
                     context.computeAndSetTypeEnvironmentForOperator(agg);
                 }
                 return agg.getVariables().size();
-            }
-            case UNNEST: {
+            case UNNEST:
                 UnnestOperator uOp = (UnnestOperator) op;
                 LogicalVariable pVar = uOp.getPositionalVariable();
                 if (pVar != null && toRemove.contains(pVar)) {
                     uOp.setPositionalVariable(null);
                 }
                 break;
-            }
-            case UNIONALL: {
+            case UNIONALL:
                 UnionAllOperator unionOp = (UnionAllOperator) op;
                 if (removeUnusedVarsFromUnionAll(unionOp, toRemove)) {
                     context.computeAndSetTypeEnvironmentForOperator(unionOp);
                 }
                 return unionOp.getVariableMappings().size();
-            }
+            case GROUP:
+                GroupByOperator groupByOp = (GroupByOperator) op;
+                if (removeUnusedVarsFromGroupBy(groupByOp, toRemove)) {
+                    context.computeAndSetTypeEnvironmentForOperator(groupByOp);
+                }
+                return groupByOp.getGroupByList().size() + groupByOp.getNestedPlans().size()
+                        + groupByOp.getDecorList().size();
+            default:
+                break;
         }
         return -1;
     }
@@ -171,6 +177,20 @@
         return modified;
     }
 
+    private boolean removeUnusedVarsFromGroupBy(GroupByOperator groupByOp, Set<LogicalVariable> toRemove) {
+        Iterator<Pair<LogicalVariable, Mutable<ILogicalExpression>>> iter = groupByOp.getDecorList().iterator();
+        boolean modified = false;
+        while (iter.hasNext()) {
+            Pair<LogicalVariable, Mutable<ILogicalExpression>> varMapping = iter.next();
+            LogicalVariable decorVar = varMapping.first;
+            if (decorVar != null && toRemove.contains(decorVar)) {
+                iter.remove();
+                modified = true;
+            }
+        }
+        return modified;
+    }
+
     private boolean removeUnusedVarsAndExprs(Set<LogicalVariable> toRemove, List<LogicalVariable> varList,
             List<Mutable<ILogicalExpression>> exprList) {
         boolean changed = false;
@@ -206,25 +226,22 @@
         }
         boolean removeUsedVars = true;
         switch (op.getOperatorTag()) {
-            case ASSIGN: {
+            case ASSIGN:
                 AssignOperator assign = (AssignOperator) op;
                 toRemove.addAll(assign.getVariables());
                 break;
-            }
-            case AGGREGATE: {
+            case AGGREGATE:
                 AggregateOperator agg = (AggregateOperator) op;
                 toRemove.addAll(agg.getVariables());
                 break;
-            }
-            case UNNEST: {
+            case UNNEST:
                 UnnestOperator uOp = (UnnestOperator) op;
                 LogicalVariable pVar = uOp.getPositionalVariable();
                 if (pVar != null) {
                     toRemove.add(pVar);
                 }
                 break;
-            }
-            case UNIONALL: {
+            case UNIONALL:
                 UnionAllOperator unionOp = (UnionAllOperator) op;
                 for (Triple<LogicalVariable, LogicalVariable, LogicalVariable> varMapping : unionOp
                         .getVariableMappings()) {
@@ -232,7 +249,17 @@
                 }
                 removeUsedVars = false;
                 break;
-            }
+            case GROUP:
+                GroupByOperator groupByOp = (GroupByOperator) op;
+                for (Pair<LogicalVariable, Mutable<ILogicalExpression>> decorMapping : groupByOp.getDecorList()) {
+                    LogicalVariable decorVar = decorMapping.first;
+                    if (decorVar != null) {
+                        toRemove.add(decorVar);
+                    }
+                }
+                break;
+            default:
+                break;
         }
         if (removeUsedVars) {
             List<LogicalVariable> used = new LinkedList<LogicalVariable>();
