@Override public Node get(Expr var) { return bind.get(var); }
/** * TODO: remove duplicates in getVariables() * use case: * function us:fun(?x){let (select ?x where {}) {}} * variable ?x appears twice in the stack because it is redefined in the let clause */ public static Mapping create(Query q, Binder b) { ArrayList<Node> lvar = new ArrayList(); ArrayList<Node> lval = new ArrayList(); for (Expr var : b.getVariables()) { Node node = q.getProperAndSubSelectNode(var.getLabel()); if (node != null && !lvar.contains(node)) { lvar.add(node); lval.add(b.get(var)); } } Mapping m = Mapping.create(lvar, lval); return m; }
/** * Copy this Bind local variable stack into this memory Use case: function * xt:foo(?x) { exists { ?x ex:pp ?y } } */ void copy(Binder bind, Exp exp) { List<Node> list = exp.getNodes(); for (Expr var : bind.getVariables()) { Node qn = getNode(var.getLabel(), list); if (qn == null) { } else { push(qn, bind.get(var)); } } }
@Override public Node get(Expr var) { return getCreateBind().get(var); }
public Node getNode2(Expr var) { switch (var.subtype()) { case ExprType.LOCAL: return bind.get(var); case ExprType.UNDEF: return null; case ExprType.GLOBAL: default: int index = var.getIndex(); if (index == ExprType.UNBOUND) { index = getIndex(var.getLabel()); var.setIndex(index); if (index == ExprType.UNBOUND) { return null; } } return getNode(index); } }