public VarExprList(Var var, Expr expr) { this() ; add(var, expr) ; }
final protected void add(Var var, Expr expr) { assignments.add(var, expr) ; }
public void addAll(VarExprList other) { for ( Var v : other.vars ) { Expr e = other.getExpr( v ); add( v, e ); } }
public void add(Var var, Expr expr) { if ( expr == null ) { add(var) ; return ; } if ( var == null ) throw new ARQInternalErrorException("Attempt to add a named expression with a null variable") ; if ( exprs.containsKey(var) ) throw new ARQInternalErrorException("Attempt to assign an expression again") ; add(var) ; exprs.put(var, expr) ; }
/** Make a OpExtend - this does not aggregate (extend .. (extend ...)) */ public static Op create(Op op, Var var, Expr expr) { VarExprList x = new VarExprList() ; x.add(var, expr) ; return new OpExtend(op, x) ; }
public static VarExprList createFromMap(Map<Var, Expr> map) { VarExprList result = new VarExprList(); for(Entry<Var, Expr> e : map.entrySet()) { Var v = e.getKey(); Expr w = e.getValue(); if(w.isVariable() && v.equals(w.asVar())) { result.add(v); } else { result.add(v, w); } } return result; } public static VarExprList createFromVarMap(Map<Var, Var> varMap) {
private static void _addVarExpr(VarExprList varExprList, Var v, Expr expr) { if ( varExprList.contains(v) ) // SELECT ?x (?a+?b AS ?x) // SELECT (2*?a AS ?x) (?a+?b AS ?x) throw new QueryBuildException("Duplicate variable in result projection '"+v+"'") ; varExprList.add(v, expr) ; }
/** Create an OpExtend or add to an existing one. * This cooperation collapses what would otherwise be stacks * of OpExtend. */ static public Op extend(Op op, Var var, Expr expr) { if ( !(op instanceof OpExtend) ) return create(op, var, expr) ; OpExtend opExtend = (OpExtend)op ; if ( opExtend.assignments.contains(var) ) return create(op, var, expr) ; opExtend.assignments.add(var, expr) ; return opExtend ; }
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) ; }
/** Apply the NodeTransform to the variables of a VarExprList. */ public static VarExprList transformVars(NodeTransform transform, VarExprList varExprList) { VarExprList varExprList2 = new VarExprList() ; boolean changed = false ; // Just variables. for ( Var v : varExprList.getVars() ) { Expr expr = varExprList.getExpr(v) ; Var v2 = (Var)transform.apply(v) ; if ( ! Objects.equals(v, v2) ) changed = true ; varExprList2.add(v2, expr) ; } if ( ! changed ) return varExprList ; return varExprList2 ; }
private VarExprList processVarExprList(VarExprList exprs, ExprTransform transform) { VarExprList newExprs = new VarExprList(); for (Var v : exprs.getVars()) { Expr e = exprs.getExpr(v); Expr e2 = ExprTransformer.transform(transform, e); newExprs.add(v, e2); } return newExprs; }
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 processUnused(VarExprList assignments) { if (Collections.disjoint(assignments.getVars(), this.tracker.getAssignments().keySet())) return null; VarExprList singleUse = new VarExprList(); for (Var var : assignments.getVars()) { if (this.tracker.getUsageCount(var) == 1) singleUse.add(var, assignments.getExpr(var)); } // If nothing is single use if (singleUse.size() == 0) return null; return singleUse; }
public void addGroupBy(Var v, Expr expr) { if ( v == null ) v = allocInternVar() ; if ( expr.isVariable() && v.isAllocVar() ) { // It was (?x) with no AS - keep the name by adding by variable. addGroupBy(expr.asVar()) ; return ; } groupVars.add(v, expr) ; }
public static Query wrapAsSubQuery(Query query, Var v) { Element esq = new ElementSubQuery(query); Query result = new Query(); result.setQuerySelectType(); result.getProject().add(v); result.setQueryPattern(esq); return result; }
public static Query createSubQuery(Query query, Var var) { Element esq = new ElementSubQuery(query); Query result = new Query(); result.setQuerySelectType(); result.getProject().add(var); result.setQueryPattern(esq); return result; }
public static Query createQueryCount(Var countVar, Element e, Long limit) { if(limit != null) { e = limitElement(e, limit); } Var tmpVar = Var.alloc(countVar.getName() + "_tmp_"); Query result = new Query(); result.setQuerySelectType(); result.getProject().add(countVar, new ExprAggregator(tmpVar, new AggCount())); result.setQueryPattern(e); return result; }
public static Query createQueryCount(Var countVar, Element e, Long limit) { if(limit != null) { e = limitElement(e, limit); } Var tmpVar = Var.alloc(countVar.getName() + "_tmp_"); Query result = new Query(); result.setQuerySelectType(); result.getProject().add(countVar, new ExprAggregator(tmpVar, new AggCount())); result.setQueryPattern(e); return result; }