public static <E extends Ranging> void foldInRange(final HasStepFolder titanStep, final Traversal.Admin<?, ?> traversal) { Step<?, ?> nextStep = TitanTraversalUtil.getNextNonIdentityStep(titanStep); if (nextStep instanceof RangeGlobalStep) { RangeGlobalStep range = (RangeGlobalStep) nextStep; int limit = QueryUtil.convertLimit(range.getHighRange()); titanStep.setLimit(QueryUtil.mergeLimits(limit, titanStep.getLimit())); if (range.getLowRange() == 0) { //Range can be removed since there is no offset nextStep.getLabels().forEach(titanStep::addLabel); traversal.removeStep(nextStep); } } }
holder.setRange(0, range.getHighRange()); } else { long limit = holder.setRange(range.getLowRange(), range.getHighRange()); RangeGlobalStep<Object> newRange = new RangeGlobalStep<>( traversal, 0, limit); TraversalHelper.replaceStep(range, newRange, traversal);
@Override public void addBarrier(final TraverserSet<S> barrier) { IteratorUtils.removeOnNext(barrier.iterator()).forEachRemaining(traverser -> { traverser.setSideEffects(this.getTraversal().getSideEffects()); this.addStart(traverser); }); }
Step nextStep = TitanTraversalUtil.getNextNonIdentityStep(vstep); if (nextStep instanceof RangeGlobalStep) { int limit = QueryUtil.convertLimit(((RangeGlobalStep) nextStep).getHighRange()); vstep.setLimit(QueryUtil.mergeLimits(limit, vstep.getLimit()));
if ((traversal.getSteps().size() > indexOfRepeatStep + 1) && traversal.getSteps().get(indexOfRepeatStep + 1) instanceof RangeGlobalStep) { RangeGlobalStep<?> rgs = (RangeGlobalStep<?>) traversal.getSteps().get(indexOfRepeatStep + 1); long high = rgs.getHighRange(); if (high == -1) { sqlgRepeatStepBarrier.setSqlgRangeHolder(SqlgRangeHolder.from(rgs.getLowRange())); } else { sqlgRepeatStepBarrier.setSqlgRangeHolder(SqlgRangeHolder.from(Range.between(rgs.getLowRange(), high))); for (String label : rgs.getLabels()) { sqlgRepeatStepBarrier.addLabel(label);
/** * Filters out the first {@code n} objects in the traversal. * * @param skip the number of objects to skip * @return the traversal with an appended {@link RangeGlobalStep} * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#skip-step" target="_blank">Reference Documentation - Skip Step</a> * @since 3.3.0 */ public default GraphTraversal<S, E> skip(final long skip) { this.asAdmin().getBytecode().addStep(Symbols.skip, skip); return this.asAdmin().addStep(new RangeGlobalStep<>(this.asAdmin(), skip, -1)); }
@Override public MemoryComputeKey<TraverserSet<S>> getMemoryComputeKey() { return MemoryComputeKey.of(this.getId(), new RangeBiOperator<>(this.high), false, true); }
final Step nextStep = JanusGraphTraversalUtil.getNextNonIdentityStep(vertexStep); if (nextStep instanceof RangeGlobalStep) { final int limit = QueryUtil.convertLimit(((RangeGlobalStep) nextStep).getHighRange()); vertexStep.setLimit(0, QueryUtil.mergeHighLimits(limit, vertexStep.getHighLimit()));
if ((traversal.getSteps().size() > indexOfRepeatStep + 1) && traversal.getSteps().get(indexOfRepeatStep + 1) instanceof RangeGlobalStep) { RangeGlobalStep<?> rgs = (RangeGlobalStep<?>) traversal.getSteps().get(indexOfRepeatStep + 1); long high = rgs.getHighRange(); if (high == -1) { sqlgRepeatStepBarrier.setSqlgRangeHolder(SqlgRangeHolder.from(rgs.getLowRange())); } else { sqlgRepeatStepBarrier.setSqlgRangeHolder(SqlgRangeHolder.from(Range.between(rgs.getLowRange(), high))); for (String label : rgs.getLabels()) { sqlgRepeatStepBarrier.addLabel(label);
/** * Filter the objects in the traversal by the number of them to pass through the stream, where only the first * {@code n} objects are allowed as defined by the {@code limit} argument. * * @param limit the number at which to end the stream * @return the traversal with an appended {@link RangeGlobalStep} * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#limit-step" target="_blank">Reference Documentation - Limit Step</a> * @since 3.0.0-incubating */ public default GraphTraversal<S, E> limit(final long limit) { this.asAdmin().getBytecode().addStep(Symbols.limit, limit); return this.asAdmin().addStep(new RangeGlobalStep<>(this.asAdmin(), 0, limit)); }
@Override public MemoryComputeKey<TraverserSet<S>> getMemoryComputeKey() { return MemoryComputeKey.of(this.getId(), new RangeBiOperator<>(this.high), false, true); }
static void foldInRange(final HasStepFolder janusgraphStep, final Step<?, ?> tinkerpopStep, final Traversal.Admin<?, ?> traversal, final List<HasContainer> hasContainers) { final Step<?, ?> nextStep = tinkerpopStep instanceof IdentityStep ? JanusGraphTraversalUtil.getNextNonIdentityStep(tinkerpopStep): tinkerpopStep; if (nextStep instanceof RangeGlobalStep) { final RangeGlobalStep range = (RangeGlobalStep) nextStep; int low = 0; if (janusgraphStep instanceof JanusGraphStep) { low = QueryUtil.convertLimit(range.getLowRange()); low = QueryUtil.mergeLowLimits(low, hasContainers == null ? janusgraphStep.getLowLimit(): janusgraphStep.getLocalLowLimit(hasContainers)); } int high = QueryUtil.convertLimit(range.getHighRange()); high = QueryUtil.mergeHighLimits(high, hasContainers == null ? janusgraphStep.getHighLimit(): janusgraphStep.getLocalHighLimit(hasContainers)); if (hasContainers == null) { janusgraphStep.setLimit(low, high); } else { janusgraphStep.setLocalLimit(hasContainers, low, high); } if (janusgraphStep instanceof JanusGraphStep || range.getLowRange() == 0) { //Range can be removed since there is JanusGraphStep or no offset nextStep.getLabels().forEach(janusgraphStep::addLabel); traversal.removeStep(nextStep); } } } }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!TraversalHelper.onGraphComputer(traversal)) return; final List<OrderGlobalStep> orders = TraversalHelper.getStepsOfClass(OrderGlobalStep.class, traversal); for (final OrderGlobalStep order : orders) { RangeGlobalStep range = null; Step<?, ?> currentStep = order.getNextStep(); while (true) { if (currentStep instanceof RangeGlobalStep) { range = (RangeGlobalStep) currentStep; break; } else if (!LEGAL_STEPS.contains(currentStep.getClass())) break; else currentStep = currentStep.getNextStep(); } if (null != range) order.setLimit(range.getHighRange()); } }
holder.setRange(0, range.getHighRange()); } else { long limit = holder.setRange(range.getLowRange(), range.getHighRange()); RangeGlobalStep<Object> newRange = new RangeGlobalStep<>( traversal, 0, limit); TraversalHelper.replaceStep(range, newRange, traversal);
/** * Filter the objects in the traversal by the number of them to pass through the stream. Those before the value * of {@code low} do not pass through and those that exceed the value of {@code high} will end the iteration. * * @param low the number at which to start allowing objects through the stream * @param high the number at which to end the stream - use {@code -1} to emit all remaining objects * @return the traversal with an appended {@link RangeGlobalStep} * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#range-step" target="_blank">Reference Documentation - Range Step</a> * @since 3.0.0-incubating */ public default GraphTraversal<S, E> range(final long low, final long high) { this.asAdmin().getBytecode().addStep(Symbols.range, low, high); return this.asAdmin().addStep(new RangeGlobalStep<>(this.asAdmin(), low, high)); }
@Override public void addBarrier(final TraverserSet<S> barrier) { IteratorUtils.removeOnNext(barrier.iterator()).forEachRemaining(traverser -> { traverser.setSideEffects(this.getTraversal().getSideEffects()); this.addStart(traverser); }); }
public static <E extends Ranging> void foldInRange(final HasStepFolder titanStep, final Traversal.Admin<?, ?> traversal) { Step<?, ?> nextStep = TitanTraversalUtil.getNextNonIdentityStep(titanStep); if (nextStep instanceof RangeGlobalStep) { RangeGlobalStep range = (RangeGlobalStep) nextStep; int limit = QueryUtil.convertLimit(range.getHighRange()); titanStep.setLimit(QueryUtil.mergeLimits(limit, titanStep.getLimit())); if (range.getLowRange() == 0) { //Range can be removed since there is no offset nextStep.getLabels().forEach(titanStep::addLabel); traversal.removeStep(nextStep); } } }
this.edgeLegality.put(Direction.IN, new HashMap<>()); this.edgeLegality.put(Direction.BOTH, new HashMap<>()); if (this.edgeFilter.getEndStep() instanceof RangeGlobalStep && 0 == ((RangeGlobalStep) this.edgeFilter.getEndStep()).getHighRange()) this.allowNoEdges = true;
/** * Filters out the first {@code n} objects in the traversal. * * @param scope the scope of how to apply the {@code tail} * @param skip the number of objects to skip * @return the traversal with an appended {@link RangeGlobalStep} or {@link RangeLocalStep} depending on {@code scope} * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#skip-step" target="_blank">Reference Documentation - Skip Step</a> * @since 3.3.0 */ public default <E2> GraphTraversal<S, E2> skip(final Scope scope, final long skip) { this.asAdmin().getBytecode().addStep(Symbols.skip, scope, skip); return this.asAdmin().addStep(scope.equals(Scope.global) ? new RangeGlobalStep<>(this.asAdmin(), skip, -1) : new RangeLocalStep<>(this.asAdmin(), skip, -1)); }
long high = rgs.getHighRange(); if (high == -1) { this.currentReplacedStep.setSqlgRangeHolder(SqlgRangeHolder.from(rgs.getLowRange())); } else { this.currentReplacedStep.setSqlgRangeHolder(SqlgRangeHolder.from(Range.between(rgs.getLowRange(), high)));