@SuppressWarnings("deprecation") private void initialize() { assert !initialized; initialized = true; assert getReturnType().forProperties() || (orders.isEmpty() && hasContainers.isEmpty()); if (!starts.hasNext()) throw FastNoSuchElementException.instance(); List<Traverser.Admin<Element>> elements = new ArrayList<>(); starts.forEachRemaining(v -> elements.add(v)); starts.add(elements.iterator()); assert elements.size() > 0; useMultiQuery = useMultiQuery && elements.stream().noneMatch(e -> !(e.get() instanceof Vertex)); if (useMultiQuery) { TitanMultiVertexQuery mquery = TitanTraversalUtil.getTx(traversal).multiQuery(); elements.forEach(e -> mquery.addVertex((Vertex) e.get())); makeQuery(mquery); multiQueryResults = mquery.properties(); } }
public AbstractStep(final Traversal.Admin traversal) { this.traversal = traversal; this.starts = new ExpandableStepIterator<>(this); }
@Override public void processAllStarts() { if (this.starts.hasNext()) { if (Integer.MAX_VALUE == this.maxBarrierSize) { this.starts.forEachRemaining(this.traverserSet::add); } else { while (this.starts.hasNext() && this.traverserSet.size() < this.maxBarrierSize) { this.traverserSet.add(this.starts.next()); } } } }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { return this.starts.next(); } }
@Override public boolean hasNextBarrier() { return this.starts.hasNext(); }
@Override protected Traverser.Admin<S> processNextStart() { if (this.first) { if (null != this.start) { if (this.start instanceof Iterator) this.starts.add(this.getTraversal().getTraverserGenerator().generateIterator((Iterator<S>) this.start, this, 1l)); else this.starts.add(this.getTraversal().getTraverserGenerator().generate((S) this.start, this, 1l)); } this.first = false; } /// final Traverser.Admin<S> start = this.starts.next(); if (start.get() instanceof Attachable && this.getTraversal().getGraph().isPresent() && (!(start.get() instanceof VertexProperty) || null != ((VertexProperty) start.get()).element())) start.set(((Attachable<S>) start.get()).attach(Attachable.Method.get(this.getTraversal().getGraph().get()))); return start; }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { if (this.starts.hasNext()) { this.starts.forEachRemaining(start -> { start.setSideEffects(new DefaultTraversalSideEffects() {{ register("_whereStep", () -> start, (sAdmin, sAdmin2) -> sAdmin);
@Override public void addStarts(final Iterator<Traverser.Admin<S>> starts) { this.starts.add(starts); }
@Override public void reset() { this.starts.clear(); this.nextEnd = null; }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { return this.starts.next(); }
@Override public Traverser.Admin<S> processNextStart() { if (this.bypass) { // If we are bypassing this step, let everything through. return this.starts.next(); } else { // Pull everything available before we start delivering from the tail buffer. if (this.starts.hasNext()) { this.starts.forEachRemaining(this::addTail); } // Pull the oldest traverser from the tail buffer. final Traverser.Admin<S> oldest = this.tail.pop(); // Trim any excess from the oldest traverser. final long excess = this.tailBulk - this.limit; if (excess > 0) { oldest.setBulk(oldest.bulk() - excess); // Account for the loss of excess in the tail buffer this.tailBulk -= excess; } // Account for the loss of bulk in the tail buffer as we emit the oldest traverser. this.tailBulk -= oldest.bulk(); return oldest; } }
@Override public boolean hasNextBarrier() { return this.starts.hasNext(); }
@Override protected Traverser.Admin<Long> processNextStart() { if (!distinctQueryStack.isEmpty()) { try { String sql = "\nSELECT\n\tcount(1)\nFROM" + distinctQueryStack.getFirst().constructSql(distinctQueryStack).split("\\bFROM\\b", 2)[1]; ResultSet resultSet = executeQuery(sqlgGraph, sql, distinctQueryStack).getLeft(); if (resultSet.next()) { distinctQueryStack.clear(); Long count = resultSet.getLong(1); starts.add(getTraversal().getTraverserGenerator().generate(count, this, 1L)); return starts.next(); } } catch (SQLException e) { throw (NoSuchElementException) new NoSuchElementException("optimized count failed").initCause(e); } } throw FastNoSuchElementException.instance(); }
@Override public void addStart(final Traverser.Admin<S> start) { this.starts.add(start); }
@Override public void reset() { this.starts.clear(); this.nextEnd = null; }
@Override public void processAllStarts() { if (this.hasProcessedOnce && !this.starts.hasNext()) return; this.hasProcessedOnce = true; if (this.seed == null) this.seed = this.seedSupplier.get(); while (this.starts.hasNext()) this.seed = this.reducingBiOperator.apply(this.seed, this.projectTraverser(this.starts.next())); }
@SuppressWarnings("deprecation") private void initialize() { assert !initialized; initialized = true; if (useMultiQuery) { if (!starts.hasNext()) throw FastNoSuchElementException.instance(); TitanMultiVertexQuery mquery = TitanTraversalUtil.getTx(traversal).multiQuery(); List<Traverser.Admin<Vertex>> vertices = new ArrayList<>(); starts.forEachRemaining(v -> { vertices.add(v); mquery.addVertex(v.get()); }); starts.add(vertices.iterator()); assert vertices.size() > 0; makeQuery(mquery); multiQueryResults = (Vertex.class.isAssignableFrom(getReturnClass())) ? mquery.vertices() : mquery.edges(); } }
@Override protected Traverser.Admin<S> processNextStart() throws NoSuchElementException { return this.starts.next(); } }
@Override public void processAllStarts() { if (this.starts.hasNext()) { if (Integer.MAX_VALUE == this.maxBarrierSize) { this.starts.forEachRemaining(this.traverserSet::add); } else { while (this.starts.hasNext() && this.traverserSet.size() < this.maxBarrierSize) { this.traverserSet.add(this.starts.next()); } } } }