public void optimize(TupleExpr query, Dataset dataset, BindingSet bindings) { try { query.visit(this); } catch (RepositoryException e) { throw new UndeclaredThrowableException(e); } }
public void optimize(TupleExpr query, Dataset dataset, BindingSet bindings) { try { query.visit(this); } catch (RepositoryException e) { throw new UndeclaredThrowableException(e); } }
@Override public void meet(Projection node) { this.projection = node; node.getArg().visit(this); }
@Override public void meet(Filter node) { nodeCount += 1; node.getArg().visit(this); }
@Override public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings) { QuerySegmentMatchVisitor visitor = new QuerySegmentMatchVisitor(); tupleExpr.visit(visitor); }
@Override public void meet(Order node) throws RDFHandlerException { node.getArg().visit(this); }
@Override public void meet(Extension node) throws RDFHandlerException { node.getArg().visit(this); }
/** * Applies generally applicable optimizations: path expressions are sorted * from more to less specific. * * @param query * @throws StoreException */ public void optimize(TupleExpr tupleExpr, Dataset dataset, BindingSet bindings) { tupleExpr.visit(new JoinVisitor()); }
@Override public void meet(Filter node) { // Skip boolean constraints node.getArg().visit(this); }
public synchronized double getCardinality(TupleExpr expr) { if (cc == null) { cc = createCardinalityCalculator(); } expr.visit(cc); return cc.getCardinality(); }
@Override public void meet(Extension node) { if (node.getArg().getBindingNames().containsAll(filterVars)) { node.getArg().visit(this); } else { relocate(filter, node); } }
@Override public void meet(Distinct node) throws RDFHandlerException { node.getArg().visit(this); handler.handleStatement( valueFactory.createStatement(subject, SP.DISTINCT_PROPERTY, BooleanLiteral.TRUE)); }
@Override public void meet(LeftJoin leftJoin) { if (leftJoin.getLeftArg().getBindingNames().containsAll(filterVars)) { leftJoin.getLeftArg().visit(this); } else { relocate(filter, leftJoin); } }
@Override protected void meetNode(final QueryModelNode node) { // By default, do not traverse assert node instanceof TupleExpr; if (node instanceof UnaryTupleOperator) { if (((UnaryTupleOperator) node).getArg().getBindingNames() .containsAll(filterVars)) { ((UnaryTupleOperator) node).getArg().visit(this); } } relocate(filter, (TupleExpr) node); }
@Override public void meet(Filter node) { FilterVarReNamer fvr = new FilterVarReNamer(varChanges, valMap); node.getCondition().visit(fvr); node.getArg().visit(this); }
private void renameVar(Var oldVar, Var newVar, Filter filter) { filter.getArg().visit(new VarRenamer(oldVar.getName(), newVar.getName())); // TODO: skip this step if old variable name is not used // Replace SameTerm-filter with an Extension, the old variable name // might still be relevant to nodes higher in the tree Extension extension = new Extension(filter.getArg()); extension.addElement(new ExtensionElem(new Var(newVar.getName()), oldVar.getName())); filter.replaceWith(extension); }