use of org.apache.asterix.lang.common.expression.VariableExpr in project asterixdb by apache.
the class CloneAndSubstituteVariablesVisitor method visit.
@Override
public Pair<ILangExpression, VariableSubstitutionEnvironment> visit(QuantifiedExpression qe, VariableSubstitutionEnvironment env) throws CompilationException {
List<QuantifiedPair> oldPairs = qe.getQuantifiedList();
List<QuantifiedPair> newPairs = new ArrayList<>(oldPairs.size());
VariableSubstitutionEnvironment newSubs = env;
for (QuantifiedPair t : oldPairs) {
VariableExpr newVar = generateNewVariable(context, t.getVarExpr());
newSubs = VariableCloneAndSubstitutionUtil.eliminateSubstFromList(newVar, newSubs);
Pair<ILangExpression, VariableSubstitutionEnvironment> p1 = visitUnnesBindingExpression(t.getExpr(), newSubs);
QuantifiedPair t2 = new QuantifiedPair(newVar, (Expression) p1.first);
newPairs.add(t2);
}
Pair<ILangExpression, VariableSubstitutionEnvironment> p2 = qe.getSatisfiesExpr().accept(this, newSubs);
QuantifiedExpression qe2 = new QuantifiedExpression(qe.getQuantifier(), newPairs, (Expression) p2.first);
return new Pair<>(qe2, newSubs);
}
use of org.apache.asterix.lang.common.expression.VariableExpr in project asterixdb by apache.
the class CloneAndSubstituteVariablesVisitor method visit.
@Override
public Pair<ILangExpression, VariableSubstitutionEnvironment> visit(GroupbyClause gc, VariableSubstitutionEnvironment env) throws CompilationException {
VariableSubstitutionEnvironment newSubs = env;
List<GbyVariableExpressionPair> newGbyList = VariableCloneAndSubstitutionUtil.substInVarExprPair(context, gc.getGbyPairList(), newSubs, this);
List<GbyVariableExpressionPair> newDecorList = gc.hasDecorList() ? VariableCloneAndSubstitutionUtil.substInVarExprPair(context, gc.getDecorPairList(), newSubs, this) : new ArrayList<>();
VariableExpr newGroupVar = null;
if (gc.hasGroupVar()) {
newGroupVar = generateNewVariable(context, gc.getGroupVar());
}
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<>();
if (gc.hasGroupFieldList()) {
for (Pair<Expression, Identifier> varId : gc.getGroupFieldList()) {
Expression newExpr = (Expression) varId.first.accept(this, env).first;
newGroupFieldList.add(new Pair<>(newExpr, varId.second));
}
}
GroupbyClause newGroup = new GroupbyClause(newGbyList, newDecorList, newWithMap, newGroupVar, newGroupFieldList, gc.hasHashGroupByHint(), gc.isGroupAll());
return new Pair<>(newGroup, newSubs);
}
use of org.apache.asterix.lang.common.expression.VariableExpr in project asterixdb by apache.
the class FormatPrintVisitor method visit.
@Override
public Void visit(GroupbyClause gc, Integer step) throws CompilationException {
if (gc.hasHashGroupByHint()) {
out.println(skip(step) + "/* +hash */");
}
out.print(skip(step) + "group by ");
printDelimitedGbyExpressions(gc.getGbyPairList(), step + 2);
if (gc.hasDecorList()) {
out.print(" decor ");
printDelimitedGbyExpressions(gc.getDecorPairList(), step + 2);
}
if (gc.hasWithMap()) {
out.print(" with ");
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;
}
use of org.apache.asterix.lang.common.expression.VariableExpr in project asterixdb by apache.
the class Scope method getLiveVariables.
public Set<VariableExpr> getLiveVariables() {
Set<VariableExpr> vars = new HashSet<VariableExpr>();
Iterator<Identifier> identifierIterator = liveSymbols();
while (identifierIterator.hasNext()) {
Identifier identifier = identifierIterator.next();
if (identifier instanceof VarIdentifier) {
vars.add(new VariableExpr((VarIdentifier) identifier));
}
}
return vars;
}
use of org.apache.asterix.lang.common.expression.VariableExpr in project asterixdb by apache.
the class ClauseComparator method extractLetBindingVariables.
// Extracts the variables to be substituted.
private Map<VariableExpr, Expression> extractLetBindingVariables(List<Clause> clauses, GroupbyClause cuttingGbyClause) throws CompilationException {
Map<VariableExpr, Expression> varExprMap = new HashMap<VariableExpr, Expression>();
int gbyIndex = clauses.indexOf(cuttingGbyClause);
for (int i = gbyIndex + 1; i < clauses.size(); i++) {
Clause cl = clauses.get(i);
if (cl.getClauseType() == ClauseType.LET_CLAUSE) {
LetClause letClause = (LetClause) cl;
// inline let variables one by one iteratively.
letClause.setBindingExpr((Expression) AQLVariableSubstitutionUtil.substituteVariable(letClause.getBindingExpr(), varExprMap));
varExprMap.put(letClause.getVarExpr(), letClause.getBindingExpr());
}
}
return varExprMap;
}
Aggregations