private Rendering(final TupleExpr node, @Nullable final Dataset dataset) { this.root = new QueryRoot(Preconditions.checkNotNull(node)); this.dataset = dataset; this.builder = new StringBuilder(); this.namespaces = Sets.newHashSet(); this.indent = 0; emit(Query.create(this.root, this.dataset, SPARQLRenderer.this.forceSelect)); this.body = this.builder.toString(); this.builder.setLength(0); }
@Override public void meet(QueryRoot node) { node.getArg().visit(this); }
QueryRoot group = new QueryRoot(tupleNode); visitGroupGraphPattern((Resource)elements); tupleNode = group.getArg(); namedGraph = oldGraph; Resource entry = iter.next(); tupleNode = new SingletonSet(); QueryRoot groupRoot = new QueryRoot(tupleNode); visitGroupGraphPattern(entry); TupleExpr groupExpr = groupRoot.getArg(); if (prev != null) { groupExpr = new Union(prev, groupExpr); QueryRoot groupRoot = new QueryRoot(tupleNode); visitGroupGraphPattern((Resource)elements); LeftJoin leftJoin = new LeftJoin(); currentNode.replaceWith(leftJoin); leftJoin.setLeftArg(currentNode); leftJoin.setRightArg(groupRoot.getArg()); tupleNode = leftJoin; currentNode = null; QueryRoot groupRoot = new QueryRoot(tupleNode); visitGroupGraphPattern((Resource)elements); Difference difference = new Difference(); currentNode.replaceWith(difference); difference.setLeftArg(currentNode); difference.setRightArg(groupRoot.getArg()); tupleNode = difference;
Rendering(final TupleExpr node, @Nullable final Dataset dataset, final boolean query) { this.root = new QueryRoot(Objects.requireNonNull(node)); this.dataset = dataset; this.builder = new StringBuilder(); this.namespaces = new HashSet<>(); this.indent = 0; if (query) { emit(Query.create(this.root, this.dataset, SPARQLRenderer.this.forceSelect)); } else { emit(node); } this.body = this.builder.toString(); this.builder.setLength(0); }
@Override public void meet(QueryRoot node) { node.getArg().visit(this); }
public void visitDeleteWhere(Resource query) throws OpenRDFException { SingletonSet stub = new SingletonSet(); tupleRoot = new QueryRoot(stub); tupleNode = stub; visitWhere(query); tupleNode.setParentNode(null); updateRoot = new Modify(tupleNode, null, tupleNode.clone()); }
return evaluate(((QueryRoot)expr).getArg(), bindings);
public TupleExpr optimize(TupleExpr expr, Dataset dataset, BindingSet bindings, EvaluationStrategy strategy) { // Clone the tuple expression to allow for more aggressive optimisations TupleExpr tupleExpr = expr.clone(); if (!(tupleExpr instanceof QueryRoot)) { // Add a dummy root node to the tuple expressions to allow the // optimisers to modify the actual root node tupleExpr = new QueryRoot(tupleExpr); } coreOptimizations(strategy, tupleExpr, dataset, bindings); rdbmsOptimizations(tupleExpr, dataset, bindings); new SqlConstantOptimizer().optimize(tupleExpr, dataset, bindings); return tupleExpr; }
public void visitInsertData(Resource query) throws OpenRDFException { SingletonSet stub = new SingletonSet(); tupleRoot = new QueryRoot(stub); tupleNode = stub; TupleExpr insertExpr; Value insert = Statements.singleValue(query, SP.DATA_PROPERTY, store); if (!(insert instanceof Resource)) { throw new MalformedSpinException( String.format("Value of %s is not a resource", SP.DATA_PROPERTY)); } visitInsert((Resource)insert); insertExpr = tupleNode; insertExpr.setParentNode(null); DataVisitor visitor = new DataVisitor(); insertExpr.visit(visitor); updateRoot = new InsertData(visitor.getData()); }
public void visitDeleteData(Resource query) throws OpenRDFException { SingletonSet stub = new SingletonSet(); tupleRoot = new QueryRoot(stub); tupleNode = stub; TupleExpr deleteExpr; Value delete = Statements.singleValue(query, SP.DATA_PROPERTY, store); if (!(delete instanceof Resource)) { throw new MalformedSpinException( String.format("Value of %s is not a resource", SP.DATA_PROPERTY)); } visitDelete((Resource)delete); deleteExpr = tupleNode; deleteExpr.setParentNode(null); DataVisitor visitor = new DataVisitor(); deleteExpr.visit(visitor); updateRoot = new DeleteData(visitor.getData()); }
protected void executeModify(Modify modify, UpdateContext uc, int maxExecutionTime) throws SailException { try { TupleExpr whereClause = modify.getWhereExpr(); if (!(whereClause instanceof QueryRoot)) { whereClause = new QueryRoot(whereClause); } CloseableIteration<? extends BindingSet, QueryEvaluationException> sourceBindings; sourceBindings = evaluateWhereClause(whereClause, uc, maxExecutionTime); try { while (sourceBindings.hasNext()) { BindingSet sourceBinding = sourceBindings.next(); deleteBoundTriples(sourceBinding, modify.getDeleteExpr(), uc); insertBoundTriples(sourceBinding, modify.getInsertExpr(), uc); } } finally { sourceBindings.close(); } } catch (QueryEvaluationException e) { throw new SailException(e); } }
private TupleExpr optimize(TupleExpr parsed, Dataset dataset, BindingSet bindings, EvaluationStrategyImpl strategy) throws SailException { logger.trace("Incoming query model:\n{}", parsed.toString()); // Clone the tuple expression to allow for more aggressive optimisations TupleExpr query = new QueryRoot(parsed.clone()); new BindingAssigner().optimize(query, dataset, bindings); new ConstantOptimizer(strategy).optimize(query, dataset, bindings); new CompareOptimizer().optimize(query, dataset, bindings); new ConjunctiveConstraintSplitter().optimize(query, dataset, bindings); new DisjunctiveConstraintOptimizer().optimize(query, dataset, bindings); new SameTermFilterOptimizer().optimize(query, dataset, bindings); new QueryModelPruner().optimize(query, dataset, bindings); new QueryMultiJoinOptimizer().optimize(query, dataset, bindings); // new FilterOptimizer().optimize(query, dataset, bindings); new EmptyPatternOptimizer(members).optimize(query, dataset, bindings); boolean distinct = federation.isDistinct(); PrefixHashSet local = federation.getLocalPropertySpace(); new FederationJoinOptimizer(members, distinct, local).optimize(query, dataset, bindings); new OwnedTupleExprPruner().optimize(query, dataset, bindings); new QueryModelPruner().optimize(query, dataset, bindings); new QueryMultiJoinOptimizer().optimize(query, dataset, bindings); new PrepareOwnedTupleExpr().optimize(query, dataset, bindings); logger.trace("Optimized query model:\n{}", query.toString()); return query; }
private TupleExpr optimize(TupleExpr parsed, Dataset dataset, BindingSet bindings, EvaluationStrategy strategy) throws SailException { LOGGER.trace("Incoming query model:\n{}", parsed); // Clone the tuple expression to allow for more aggressive optimisations TupleExpr query = new QueryRoot(parsed.clone()); new BindingAssigner().optimize(query, dataset, bindings); new ConstantOptimizer(strategy).optimize(query, dataset, bindings); new CompareOptimizer().optimize(query, dataset, bindings); new ConjunctiveConstraintSplitter().optimize(query, dataset, bindings); new DisjunctiveConstraintOptimizer().optimize(query, dataset, bindings); new SameTermFilterOptimizer().optimize(query, dataset, bindings); new QueryModelPruner().optimize(query, dataset, bindings); new QueryMultiJoinOptimizer().optimize(query, dataset, bindings); // new FilterOptimizer().optimize(query, dataset, bindings); new EmptyPatternOptimizer(members).optimize(query, dataset, bindings); boolean distinct = federation.isDistinct(); PrefixHashSet local = federation.getLocalPropertySpace(); new FederationJoinOptimizer(members, distinct, local).optimize(query, dataset, bindings); new OwnedTupleExprPruner().optimize(query, dataset, bindings); new QueryModelPruner().optimize(query, dataset, bindings); new QueryMultiJoinOptimizer().optimize(query, dataset, bindings); new PrepareOwnedTupleExpr().optimize(query, dataset, bindings); LOGGER.trace("Optimized query model:\n{}", query); return query; }
tupleExpr = new QueryRoot(tupleExpr);
tupleExpr = new QueryRoot(tupleExpr);
tupleExpr = new QueryRoot(tupleExpr);
private TupleExpr optimize(TupleExpr query, Dataset dataset, BindingSet bindings) { ValueFactory vf = sail.getValueFactory(); InvalidTripleSource source = new InvalidTripleSource(vf); EvaluationStrategyImpl strategy = new EvaluationStrategyImpl(source); if (query instanceof QueryRoot) { query = query.clone(); } else { query = new QueryRoot(query.clone()); } new BindingAssigner().optimize(query, dataset, bindings); new ConstantOptimizer(strategy).optimize(query, dataset, bindings); new CompareOptimizer().optimize(query, dataset, bindings); new ConjunctiveConstraintSplitter().optimize(query, dataset, bindings); new DisjunctiveConstraintOptimizer().optimize(query, dataset, bindings); new SameTermFilterOptimizer().optimize(query, dataset, bindings); new QueryModelNormalizer().optimize(query, dataset, bindings); new QueryJoinOptimizer().optimize(query, dataset, bindings); new IterativeEvaluationOptimizer().optimize(query, dataset, bindings); return query; }
tupleExpr = new QueryRoot(tupleExpr);
TupleExpr query = new QueryRoot(op.getTupleExpr().clone()); BindingSet bindings = op.getBindingSet(); boolean inf = op.isIncludeInferred();