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 OpAssign or add to an existing one. * This cooperation collapses what would otherwise be stacks * of OpExtend. */ static public Op assign(Op op, Var var, Expr expr) { if ( !(op instanceof OpAssign) ) return create(op, var, expr) ; OpAssign opAssign = (OpAssign)op ; if ( opAssign.assignments.contains(var) ) // Same variable : // Layer one assignment over the top of another return create(op, var, expr) ; opAssign.add(var, expr) ; return opAssign ; }
/** 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) ; }
/** Create an OpExtend or add to an existing one. * This operation collapses what would otherwise be stacks * of OpExtend. */ static public Op extend(Op op, VarExprList exprs) { if ( !(op instanceof OpExtend) ) return create(op, exprs) ; OpExtend opExtend = (OpExtend)op ; for (Var var : exprs.getVars()) { if ( opExtend.assignments.contains(var) ) return create(op, exprs) ; } opExtend.assignments.addAll(exprs) ; return opExtend ; }
/** Create an v or add to an existing one. * This operation collapses what would otherwise be stacks * of OpAssign. */ static public Op assign(Op op, VarExprList exprs) { if ( !(op instanceof OpAssign) ) return create(op, exprs) ; OpAssign opAssign = (OpAssign)op ; for (Var var : exprs.getVars()) { if ( opAssign.assignments.contains(var) ) return create(op, exprs) ; } opAssign.assignments.addAll(exprs) ; return opAssign ; }
@Override public void startElement(ElementSubQuery el) { if(el.getQuery().isQueryResultStar()) { Set<Var> queryVars = new LinkedHashSet<>() ; PatternVars.vars(queryVars, el.getQuery().getQueryPattern()) ; for(String varName : preBoundVars) { if(!SH.currentShapeVar.getVarName().equals(varName) && !SH.shapesGraphVar.getVarName().equals(varName)) { if(!queryVars.contains(Var.alloc(varName))) { results.add("Sub-query must return all potentially pre-bound variables including $" + varName); } } } } else { VarExprList project = el.getQuery().getProject(); for(String varName : preBoundVars) { if(!SH.currentShapeVar.getVarName().equals(varName) && !SH.shapesGraphVar.getVarName().equals(varName)) { if(!project.contains(Var.alloc(varName))) { results.add("Sub-query must return all potentially pre-bound variables including $" + varName); } } } } }
@Override public void startElement(ElementSubQuery el) { if(el.getQuery().isQueryResultStar()) { Set<Var> queryVars = new LinkedHashSet<>() ; PatternVars.vars(queryVars, el.getQuery().getQueryPattern()) ; for(String varName : preBoundVars) { if(!SH.currentShapeVar.getVarName().equals(varName) && !SH.shapesGraphVar.getVarName().equals(varName)) { if(!queryVars.contains(Var.alloc(varName))) { results.add("Sub-query must return all potentially pre-bound variables including $" + varName); } } } } else { VarExprList project = el.getQuery().getProject(); for(String varName : preBoundVars) { if(!SH.currentShapeVar.getVarName().equals(varName) && !SH.shapesGraphVar.getVarName().equals(varName)) { if(!project.contains(Var.alloc(varName))) { results.add("Sub-query must return all potentially pre-bound variables including $" + varName); } } } } }
private VarExprList processAssignments(OpExtendAssign opAssign) { VarExprList orig = opAssign.getVarExprList(); if (!orig.contains(this.var)) return null; if (!orig.getExpr(this.var).equals(this.expr)) return null; VarExprList modified = new VarExprList(); for (Var v : orig.getVars()) { if (!v.equals(this.var)) { modified.add(v, orig.getExpr(v)); } } if (modified.size() > 0 && modified.size() == orig.size()) return null; return modified; }
/** * Add all the variables from the select handler variable. * * @param selectHandler * The select handler to copy the variables from. */ public void addAll(SelectHandler selectHandler) { setReduced(selectHandler.query.isReduced()); setDistinct(selectHandler.query.isDistinct()); query.setQueryResultStar(selectHandler.query.isQueryResultStar()); VarExprList shProjectVars = selectHandler.query.getProject(); VarExprList qProjectVars = query.getProject(); for (Var var : shProjectVars.getVars()) { // make sure there are no duplicates if (!qProjectVars.contains(var)) { qProjectVars.add(var, shProjectVars.getExpr(var)); } } aggHandler.addAll( selectHandler.aggHandler ); }
/** * Add all the variables from the select handler variable. * * @param selectHandler * The select handler to copy the variables from. */ public void addAll(SelectHandler selectHandler) { setReduced(selectHandler.query.isReduced()); setDistinct(selectHandler.query.isDistinct()); query.setQueryResultStar(selectHandler.query.isQueryResultStar()); VarExprList shProjectVars = selectHandler.query.getProject(); VarExprList qProjectVars = query.getProject(); for (Var var : shProjectVars.getVars()) { // make sure there are no duplicates if (!qProjectVars.contains(var)) { qProjectVars.add(var, shProjectVars.getExpr(var)); } } aggHandler.addAll( selectHandler.aggHandler ); }
} else { for(Var var : vars) { if(!query.getProject().contains(var)) { query.getProject().add(var);