/** * Add a binding to the where clause. * * @param expr * The expression to bind. * @param var * The variable to bind it to. */ public void addBind(Expr expr, Var var) { getClause().addElement(new ElementBind(var, expr)); }
/** * add an expression as a filter. * * @param expr * The expression to add. */ public void addFilter(Expr expr) { getClause().addElement(new ElementFilter(expr)); }
/** * Add a subquery to the where clause. * * @param subQuery * The sub query to add. */ public void addSubQuery(AbstractQueryBuilder<?> subQuery) { getClause().addElement(subQuery.asSubQuery()); }
/** * Add a subquery to the where clause. * * @param subQuery * The sub query to add. */ public void addSubQuery(AbstractQueryBuilder<?> subQuery) { getClause().addElement(makeSubQuery(subQuery)); }
/** * Add a subquery to the where clause. * * @param subQuery * The sub query to add. */ public void addSubQuery(AbstractQueryBuilder<?> subQuery) { getClause().addElement(makeSubQuery(subQuery)); }
/** * add an expression as a filter. * * @param expr * The expression to add. */ public void addFilter(Expr expr) { getClause().addElement(new ElementFilter(expr)); }
/** * Add an expression string as a filter. * * @param expression * The expression string to add. * @throws ParseException * If the expression can not be parsed. */ public void addFilter(String expression) throws ParseException { getClause().addElement(new ElementFilter(ExprUtils.parse(query, expression, true))); }
/** * Add a binding to the where clause. * * @param expression * The expression to bind. * @param var * The variable to bind it to. * @throws ParseException */ public void addBind(String expression, Var var) throws ParseException { getClause().addElement(new ElementBind(var, parseExpr(expression))); }
/** * Add a graph to the where clause. * * @param graph * The name of the graph. * @param subQuery * The where handler that defines the graph. */ public void addGraph(Node graph, WhereHandler subQuery) { getClause().addElement(new ElementNamedGraph(graph, subQuery.getElement())); }
/** * Add a binding to the where clause. * * @param expression * The expression to bind. * @param var * The variable to bind it to. * @throws ParseException */ public void addBind(String expression, Var var) throws ParseException { getClause().addElement(new ElementBind(var, ExprUtils.parse(query, expression, true))); }
/** * Add an expression string as a filter. * * @param expression * The expression string to add. * @throws ParseException * If the expression can not be parsed. */ public void addFilter(String expression) throws ParseException { getClause().addElement(new ElementFilter(parseExpr(expression))); }
/** * Add the contents of a where handler as an optional statement. * * @param whereHandler * The where handler to use as the optional statement. */ public void addOptional(WhereHandler whereHandler) { getClause().addElement(new ElementOptional(whereHandler.getClause())); }
@Override public void visit(OpMinus opMinus) { Element eLeft = asElement(opMinus.getLeft()) ; Element eRight = asElementGroup(opMinus.getRight()) ; ElementMinus elMinus = new ElementMinus(eRight) ; ElementGroup g = currentGroup() ; if ( !emptyGroup(eLeft) ) g.addElement(eLeft) ; g.addElement(elMinus) ; }
@Override public void visit(OpPath opPath) { ElementPathBlock epb = new ElementPathBlock() ; epb.addTriplePath(opPath.getTriplePath()) ; ElementGroup g = currentGroup() ; g.addElement(epb) ; }
private void convertAsSubQuery(Op op) { Converter subConverter = new Converter(op) ; ElementSubQuery subQuery = new ElementSubQuery(subConverter.convert()) ; ElementGroup g = currentGroup() ; g.addElement(subQuery) ; }
private Element fixupGroupsOfOne(ElementGroup eg) { ElementTransform transform = new ElementTransformCleanGroupsOfOne() ; ExprTransform exprTransform = new ExprTransformApplyElementTransform(transform) ; Element el2 = ElementTransformer.transform(eg, transform, exprTransform) ; // Top level is always a group or a subquery. if ( ! ( el2 instanceof ElementGroup ) && ! ( el2 instanceof ElementSubQuery ) ) { ElementGroup eg2 = new ElementGroup() ; eg2.addElement(el2); el2 = eg2 ; } return el2 ; }
@Override public void visit(ElementGroup el) { ElementGroup retval = new ElementGroup(); for (Element e : el.getElements()) { e.visit(this); retval.addElement(getResult()); } push(retval); }
@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)) ; }) ; }
private void processQueryPattern(Op op, List<OpExtend> assignments) { op.visit(this) ; ElementGroup eg = this.currentGroup ; processExtends(assignments,(v,e)->eg.addElement(new ElementBind(v, e)) ) ; Element e = fixupGroupsOfOne(eg) ; query.setQueryPattern(e) ; query.setQuerySelectType() ; }
@Override public void visit(OpService opService) { // Hmm - if the subnode has been optimized, we may fail. Op op = opService.getSubOp() ; Element x = asElement(opService.getSubOp()) ; Element elt = new ElementService(opService.getService(), x, opService.getSilent()) ; currentGroup().addElement(elt) ; }