public Var getShadowed() { return shadowed.asVar(); } }
@Override public void visit(ExprVar nv) { action.var(acc, nv.asVar()) ; }
@Override public void visit(ExprVar nv) { action.var(acc, nv.asVar()) ; }
public void visit(OpGroup opGroup, Map<Var, Var> subs) { List<ExprAggregator> a = opGroup.getAggregators(); for (ExprAggregator ea : a) { // Substitute generated var for actual Var givenVar = ea.getAggVar().asVar(); Var realVar = (subs.containsKey(givenVar)) ? subs.get(givenVar) : givenVar; // Copy aggregator across (?) Expr myAggr = query.allocAggregate(ea.getAggregator()); varExpression.put(realVar, myAggr); //query.addResultVar(realVar, myAggr); } VarExprList b = opGroup.getGroupVars(); for (Var v : b.getVars()) { Expr e = b.getExpr(v); if (e != null) { query.addGroupBy(v, e); } else { query.addGroupBy(v); } } opGroup.getSubOp().visit(this); }
@Override public void visit(OpGroup opGroup) { List<ExprAggregator> a = opGroup.getAggregators(); // Aggregators are broken up in the algebra, split between a // group and an assignment (extend or assign) using a generated var. // We record them here and insert later. for (ExprAggregator ea : a) { // Substitute generated var for actual Var givenVar = ea.getAggVar().asVar(); // Copy aggregator across (?) Expr myAggr = query.allocAggregate(ea.getAggregator()); varExpression.put(givenVar, myAggr); } VarExprList b = opGroup.getGroupVars(); for (Var v : b.getVars()) { Expr e = b.getExpr(v); if (e != null) { query.addGroupBy(v, e); } else { query.addGroupBy(v); } } groupDepth++; opGroup.getSubOp().visit(this); groupDepth--; }
@Override public void visit(OpGroup opGroup) { for(Entry<Var, Expr> e : opGroup.getGroupVars().getExprs().entrySet()) { add(processVar(e.getKey())); for(Var v : e.getValue().getVarsMentioned()) { add(processVar(v)); } } for(ExprAggregator e : opGroup.getAggregators()) { add(processVar(e.getAggVar().asVar())); if (e.getExpr() != null) { for(Var v : e.getExpr().getVarsMentioned()) { add(processVar(v)); } } if (e.getAggregator().getExpr() != null) { for(Var v : e.getAggregator().getExpr().getVarsMentioned()) { add(processVar(v)); } } } }
@Override public QueryIterator exec(Binding binding, Node name, ExprList args, ExecutionContext execCxt) { // Eval if possible. ExprList evalArgs = new ExprList() ; for (Expr e : args) { if ( e.isVariable() ) { Var v = e.getExprVar().asVar() ; // Special case - allow unevaluated variables. if ( binding.contains(v) ) evalArgs.add(e.eval(binding, execCxt)) ; else evalArgs.add(e) ; } else { NodeValue x = e.eval(binding, execCxt) ; evalArgs.add(x) ; } } return execEval(binding, evalArgs, execCxt) ; }
@Override public QueryIterator exec(Binding binding, Node name, ExprList args, ExecutionContext execCxt) { // Eval if possible. ExprList evalArgs = new ExprList() ; for (Expr e : args) { if ( e.isVariable() ) { Var v = e.getExprVar().asVar() ; // Special case - allow unevaluated variables. if ( binding.contains(v) ) evalArgs.add(e.eval(binding, execCxt)) ; else evalArgs.add(e) ; } else { NodeValue x = e.eval(binding, execCxt) ; evalArgs.add(x) ; } } return execEval(binding, evalArgs, execCxt) ; }
SortCondition scBuilder(Item item) { int direction = Query.ORDER_DEFAULT ; if ( item.isTagged("asc") || item.isTagged("desc") ) { BuilderLib.checkList(item) ; BuilderLib.checkLength(2, item.getList(), "Direction corrupt") ; if ( item.isTagged("asc") ) direction = Query.ORDER_ASCENDING ; else direction = Query.ORDER_DESCENDING ; item = item.getList().get(1) ; } Expr expr = BuilderExpr.buildExpr(item) ; if ( expr.isVariable() ) return new SortCondition(expr.getExprVar().asVar(), direction) ; else return new SortCondition(expr, direction) ; }
SortCondition scBuilder(Item item) { int direction = Query.ORDER_DEFAULT ; if ( item.isTagged("asc") || item.isTagged("desc") ) { BuilderLib.checkList(item) ; BuilderLib.checkLength(2, item.getList(), "Direction corrupt") ; if ( item.isTagged("asc") ) direction = Query.ORDER_ASCENDING ; else direction = Query.ORDER_DESCENDING ; item = item.getList().get(1) ; } Expr expr = BuilderExpr.buildExpr(item) ; if ( expr.isVariable() ) return new SortCondition(expr.getExprVar().asVar(), direction) ; else return new SortCondition(expr, direction) ; }