@Override public boolean equalTo(Element el2, NodeIsomorphismMap isoMap) { if ( ! ( el2 instanceof ElementAssign ) ) return false ; ElementAssign f2 = (ElementAssign)el2 ; if ( ! this.getVar().equals(f2.getVar() )) return false ; if ( ! this.getExpr().equals(f2.getExpr()) ) return false ; return true ; }
@Override public Element transform(ElementAssign el, Var v, Expr expr2) { if ( el.getVar() == v && el.getExpr() == expr2 ) return el ; return new ElementAssign(v, expr2) ; }
@Override public void visit(ElementAssign el) { acc.add(el.getVar()) ; }
@Override public void visit(OpAssign opAssign) { Element e = asElement(opAssign.getSubOp()) ; // If (assign ... (table unit)), and first in group, don't add the empty group. insertIntoGroup(currentGroup(), e) ; processAssigns(Arrays.asList(opAssign), (var,expr)->{ currentGroup().addElement(new ElementAssign(var,expr)) ; }) ; }
final public Element Assignment() throws ParseException { Var v ; Expr expr ; jj_consume_token(LET); jj_consume_token(LPAREN); v = Var(); jj_consume_token(ASSIGN); expr = Expression(); jj_consume_token(RPAREN); {if (true) return new ElementAssign(v, expr) ;} throw new Error("Missing return statement in function"); }
@Override public void visit(ElementAssign el) { Node n = changeNode(el.getVar()); if (n.equals(el.getVar())) { ExprRewriter exprRewriter = new ExprRewriter(values); el.getExpr().visit(exprRewriter); push(new ElementAssign(el.getVar(), exprRewriter.getResult())); } else { // push( new ElementAssign( el.getVar(), NodeValue.makeNode( n )) ); // no op push(new ElementTriplesBlock()); } }
@Override public void visit(OpAssign opAssign) { opAssign.getSubOp().visit(this) ; // Go through each var and get the assigned expression for ( Var v : opAssign.getVarExprList().getVars() ) { Expr e = opAssign.getVarExprList().getExpr(v); // Substitute group aggregate expressions in for generated vars SubExprForVar sefr = new SubExprForVar(varExpression); Expr tr = ExprTransformer.transform(sefr, e); // If in top level we defer assignment to SELECT section // This also covers the GROUP recombine // NOTE: this means we can't round trip top-level BINDs if (inTopLevel()) { varExpression.put(v, tr); } else { Element elt = new ElementAssign(v, e) ; ElementGroup g = currentGroup() ; g.addElement(elt) ; } } }
@Override public void visit(ElementAssign el) { Node n = changeNode(el.getVar()); if (n.equals(el.getVar())) { ExprRewriter exprRewriter = new ExprRewriter(values); el.getExpr().visit(exprRewriter); push(new ElementAssign(el.getVar(), exprRewriter.getResult())); } else { // push( new ElementAssign( el.getVar(), NodeValue.makeNode( n )) ); // no op push(new ElementTriplesBlock()); } }