public void addAll(VarExprList other) { for ( Iterator<Var> iter = other.vars.iterator() ; iter.hasNext() ; ) { Var v = iter.next () ; Expr e = other.getExpr(v) ; add(v, e) ; } }
public void addAll(VarExprList other) { for ( Iterator<Var> iter = other.vars.iterator() ; iter.hasNext() ; ) { Var v = iter.next () ; Expr e = other.getExpr(v) ; add(v, e) ; } }
private static String fmtExprList(VarExprList exprList) { StringBuilder sb = new StringBuilder() ; boolean first = true ; for ( Iterator<Var> iter = exprList.getVars().iterator() ; iter.hasNext() ; ) { Var v = iter.next(); Expr e = exprList.getExpr(v) ; if ( ! first ) sb.append(" ") ; first = false ; sb.append("(").append(e).append(" AS ").append(v).append(")") ; } return sb.toString() ; }
private static String fmtExprList(VarExprList exprList) { StringBuilder sb = new StringBuilder() ; boolean first = true ; for ( Iterator<Var> iter = exprList.getVars().iterator() ; iter.hasNext() ; ) { Var v = iter.next(); Expr e = exprList.getExpr(v) ; if ( ! first ) sb.append(" ") ; first = false ; sb.append("(").append(e).append(" AS ").append(v).append(")") ; } return sb.toString() ; }
private static void checkExprListAssignment(Collection<Var> vars, VarExprList exprList) { Set<Var> vars2 = new LinkedHashSet<Var>(vars) ; for ( Iterator<Var> iter = exprList.getVars().iterator() ; iter.hasNext() ; ) { // In scope? Var v = iter.next(); Expr e = exprList.getExpr(v) ; checkAssignment(vars2, e, v) ; vars2.add(v) ; } }
private static void checkExprListAssignment(Collection<Var> vars, VarExprList exprList) { Set<Var> vars2 = new LinkedHashSet<Var>(vars) ; for ( Iterator<Var> iter = exprList.getVars().iterator() ; iter.hasNext() ; ) { // In scope? Var v = iter.next(); Expr e = exprList.getExpr(v) ; checkAssignment(vars2, e, v) ; vars2.add(v) ; } }
private static void _addVar(VarExprList varExprList, Var v) { if ( varExprList.contains(v) ) { Expr expr = varExprList.getExpr(v) ; if ( expr != null ) // SELECT (?a+?b AS ?x) ?x throw new QueryBuildException("Duplicate variable (had an expression) in result projection '"+v+"'") ; // SELECT ?x ?x if ( ! ARQ.allowDuplicateSelectColumns ) return ; // else drop thorugh and have two variables of the same name. } varExprList.add(v) ; }
private static void _addVar(VarExprList varExprList, Var v) { if ( varExprList.contains(v) ) { Expr expr = varExprList.getExpr(v) ; if ( expr != null ) // SELECT (?a+?b AS ?x) ?x throw new QueryBuildException("Duplicate variable (had an expression) in result projection '"+v+"'") ; // SELECT ?x ?x if ( ! ARQ.allowDuplicateSelectColumns ) return ; // else drop thorugh and have two variables of the same name. } varExprList.add(v) ; }
private VarExprList transformVarExprList(VarExprList varExprList) { VarExprList varExprList2 = new VarExprList() ; for ( Var v : varExprList.getVars() ) { // if ( binding.contains(v)) // // Already bound. No need to do anything because the // // logical assignment will test value. // continue ; Expr expr = varExprList.getExpr(v) ; expr = expr.copySubstitute(binding) ; varExprList2.add(v, expr) ; } return varExprList2 ; }
private VarExprList transformVarExprList(VarExprList varExprList) { VarExprList varExprList2 = new VarExprList() ; for ( Var v : varExprList.getVars() ) { // if ( binding.contains(v)) // // Already bound. No need to do anything because the // // logical assignment will test value. // continue ; Expr expr = varExprList.getExpr(v) ; expr = expr.copySubstitute(binding) ; varExprList2.add(v, expr) ; } return varExprList2 ; }
private VarExprList process(VarExprList varExpr) { List<Var> vars = varExpr.getVars() ; VarExprList varExpr2 = new VarExprList() ; boolean changed = false ; for ( Var v : vars ) { Expr e = varExpr.getExpr(v) ; Expr e2 = e ; if ( e != null ) e2 = ExprTransformer.transform(exprTransform, e) ; if ( e2 == null ) varExpr2.add(v) ; else varExpr2.add(v, e2) ; if ( e != e2 ) changed = true ; } if ( ! changed ) return varExpr ; return varExpr2 ; }
private static VarExprList process(VarExprList varExpr, ExprTransform exprTransform) { List<Var> vars = varExpr.getVars() ; VarExprList varExpr2 = new VarExprList() ; boolean changed = false ; for ( Var v : vars ) { Expr e = varExpr.getExpr(v) ; Expr e2 = e ; if ( e != null ) e2 = transform(e, exprTransform) ; if ( e2 == null ) varExpr2.add(v) ; else varExpr2.add(v, e2) ; if ( e != e2 ) changed = true ; } if ( ! changed ) return varExpr ; return varExpr2 ; }
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); }
/** Do a node->node conversion of a VarExprList - return original VarExprList for "no change" */ public static VarExprList transform(NodeTransform nodeTransform, VarExprList varExprList) { VarExprList varExprList2 = new VarExprList() ; boolean changed = false ; for ( Var v : varExprList.getVars() ) { Expr expr = varExprList.getExpr(v) ; Var v2 = (Var)nodeTransform.convert(v) ; Expr expr2 = ( expr != null ) ? transform(nodeTransform, expr) : null ; if ( ! equal(v, v2) || ! equal(expr, expr2) ) changed = true ; varExprList2.add(v2, expr2) ; } if ( ! changed ) return varExprList ; return varExprList2 ; }
/** Do a node->node conversion of a VarExprList - return original VarExprList for "no change" */ public static VarExprList transform(NodeTransform nodeTransform, VarExprList varExprList) { VarExprList varExprList2 = new VarExprList() ; boolean changed = false ; for ( Var v : varExprList.getVars() ) { Expr expr = varExprList.getExpr(v) ; Var v2 = (Var)nodeTransform.convert(v) ; Expr expr2 = ( expr != null ) ? transform(nodeTransform, expr) : null ; if ( ! equal(v, v2) || ! equal(expr, expr2) ) changed = true ; varExprList2.add(v2, expr2) ; } if ( ! changed ) return varExprList ; return varExprList2 ; }
public void visit(OpExtend opExtend) { /** * Special case: group involves and internal assignment * e.g. (assign ((?.1 ?.0)) (group () ((?.0 (count))) * We attempt to intercept that here. */ if (opExtend.getSubOp() instanceof OpGroup) { Map<Var, Var> subs = new HashMap<Var, Var>(); Expr exp; for (Var v: opExtend.getVarExprList().getVars()) { exp = opExtend.getVarExprList().getExpr(v); if (exp.isVariable()) subs.put(exp.asVar(), v); else throw new ARQNotImplemented("Expected simple assignment for group"); } visit((OpGroup) opExtend.getSubOp(), subs); return; } opExtend.getSubOp().visit(this) ; for ( Var v : opExtend.getVarExprList().getVars() ) { Element elt = new ElementAssign(v, opExtend.getVarExprList().getExpr(v)) ; ElementGroup g = currentGroup() ; g.addElement(elt) ; } }
public void visit(OpAssign opAssign) { /** * Special case: group involves and internal assignment * e.g. (assign ((?.1 ?.0)) (group () ((?.0 (count))) * We attempt to intercept that here. */ if (opAssign.getSubOp() instanceof OpGroup) { Map<Var, Var> subs = new HashMap<Var, Var>(); Expr exp; for (Var v: opAssign.getVarExprList().getVars()) { exp = opAssign.getVarExprList().getExpr(v); if (exp.isVariable()) subs.put(exp.asVar(), v); else throw new ARQNotImplemented("Expected simple assignment for group"); } visit((OpGroup) opAssign.getSubOp(), subs); return; } opAssign.getSubOp().visit(this) ; for ( Var v : opAssign.getVarExprList().getVars() ) { Element elt = new ElementAssign(v, opAssign.getVarExprList().getExpr(v)) ; ElementGroup g = currentGroup() ; g.addElement(elt) ; } }
@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--; }
private void writeNamedExprList(VarExprList project) { start() ; boolean first = true ; for ( Var v : project.getVars() ) { if ( ! first ) out.print(" ") ; first = false ; Expr expr = project.getExpr(v) ; if ( expr != null ) { start() ; out.print(v.toString()) ; out.print(" ") ; WriterExpr.output(out, expr, sContext) ; finish() ; } else out.print(v.toString()) ; } finish() ; }
private void writeNamedExprList(VarExprList project) { start() ; boolean first = true ; for ( Var v : project.getVars() ) { if ( ! first ) out.print(" ") ; first = false ; Expr expr = project.getExpr(v) ; if ( expr != null ) { start() ; out.print(v.toString()) ; out.print(" ") ; String $ = WriterExpr.asString(expr) ; WriterExpr.output(out, expr, sContext) ; finish() ; } else out.print(v.toString()) ; } finish() ; }