public static <S, E> Step<?, E> insertTraversal(final Step<?, S> previousStep, final Traversal.Admin<S, E> insertTraversal, final Traversal.Admin<?, ?> traversal) { return TraversalHelper.insertTraversal(stepIndex(previousStep, traversal), insertTraversal, traversal); }
private static final boolean processTraversalFilterStep(final TraversalFilterStep<?> step, final Traversal.Admin<?, ?> traversal) { final Traversal.Admin<?, ?> childTraversal = step.getLocalChildren().get(0); if (TraversalHelper.hasAllStepsOfClass(childTraversal, FilterStep.class) && !TraversalHelper.hasStepOfClass(childTraversal, DropStep.class, RangeGlobalStep.class, DedupGlobalStep.class, LambdaHolder.class)) { TraversalHelper.applySingleLevelStrategies(traversal, childTraversal, InlineFilterStrategy.class); final Step<?, ?> finalStep = childTraversal.getEndStep(); TraversalHelper.insertTraversal((Step) step, childTraversal, traversal); TraversalHelper.copyLabels(step, finalStep, false); traversal.removeStep(step); return true; } return false; }
private static final boolean processAndStep(final AndStep<?> step, final Traversal.Admin<?, ?> traversal) { boolean process = true; for (final Traversal.Admin<?, ?> childTraversal : step.getLocalChildren()) { if (!TraversalHelper.hasAllStepsOfClass(childTraversal, FilterStep.class) || TraversalHelper.hasStepOfClass(childTraversal, DropStep.class, RangeGlobalStep.class, DedupGlobalStep.class, LambdaHolder.class)) { process = false; break; } } if (process) { final List<Traversal.Admin<?, ?>> childTraversals = (List) step.getLocalChildren(); Step<?, ?> finalStep = null; for (int i = childTraversals.size() - 1; i >= 0; i--) { final Traversal.Admin<?, ?> childTraversal = childTraversals.get(i); TraversalHelper.applySingleLevelStrategies(traversal, childTraversal, InlineFilterStrategy.class); if (null == finalStep) finalStep = childTraversal.getEndStep(); TraversalHelper.insertTraversal((Step) step, childTraversals.get(i), traversal); } if (null != finalStep) TraversalHelper.copyLabels(step, finalStep, false); traversal.removeStep(step); return true; } return false; }
newChildTraversal = newChildTraversal.getSteps().size() > 1 ? (Traversal.Admin) __.local(newChildTraversal) : newChildTraversal; if (null == barrier) TraversalHelper.insertTraversal(0, newChildTraversal, computerTraversal); else TraversalHelper.insertTraversal(barrier.getPreviousStep(), newChildTraversal, computerTraversal);
final int loops = (int) ((LoopTraversal) repeatStep.getUntilTraversal()).getMaxLoops(); for (int j = 0; j < loops; j++) { TraversalHelper.insertTraversal(insertIndex, repeatTraversal.clone(), traversal); insertIndex = insertIndex + repeatLength; if ((j != (loops - 1) || !(traversal.getSteps().get(insertIndex).getNextStep() instanceof Barrier)) // only add a final NoOpBarrier is subsequent step is not a barrier
private static final boolean processMatchStep(final MatchStep<?, ?> step, final Traversal.Admin<?, ?> traversal) { if (step.getPreviousStep() instanceof EmptyStep) return false; boolean changed = false; final String startLabel = MatchStep.Helper.computeStartLabel(step.getGlobalChildren()); for (final Traversal.Admin<?, ?> matchTraversal : new ArrayList<>(step.getGlobalChildren())) { if (TraversalHelper.hasAllStepsOfClass(matchTraversal, HasStep.class, MatchStep.MatchStartStep.class, MatchStep.MatchEndStep.class) && matchTraversal.getStartStep() instanceof MatchStep.MatchStartStep && startLabel.equals(((MatchStep.MatchStartStep) matchTraversal.getStartStep()).getSelectKey().orElse(null))) { changed = true; step.removeGlobalChild(matchTraversal); final String endLabel = ((MatchStep.MatchEndStep) matchTraversal.getEndStep()).getMatchKey().orElse(null); // why would this exist? but just in case matchTraversal.removeStep(0); // remove MatchStartStep matchTraversal.removeStep(matchTraversal.getSteps().size() - 1); // remove MatchEndStep TraversalHelper.applySingleLevelStrategies(traversal, matchTraversal, InlineFilterStrategy.class); matchTraversal.getEndStep().addLabel(startLabel); if (null != endLabel) matchTraversal.getEndStep().addLabel(endLabel); TraversalHelper.insertTraversal((Step) step.getPreviousStep(), matchTraversal, traversal); } } if (step.getGlobalChildren().isEmpty()) traversal.removeStep(step); return changed; }
__.has(partitionKey, P.within(new ArrayList<>(readPartitions))), __.__()).filter(new PartitionKeyHider()); TraversalHelper.insertTraversal(step, choose.asAdmin(), traversal); __.properties(step.getPropertyKeys()).has(partitionKey, P.within(new ArrayList<>(readPartitions))).filter(new PartitionKeyHider()).value(), __.__().filter(new PartitionKeyHider())); TraversalHelper.insertTraversal(step, choose.asAdmin(), traversal); traversal.removeStep(step); } else {
temp.addStep(new PropertiesStep<>(temp, PropertyType.PROPERTY, ((PropertyMapStep) step).getPropertyKeys())); if ('v' == propertyType) TraversalHelper.insertTraversal(0, nonCheckPropertyCriterion.clone(), temp); else temp.addStep(checkPropertyCriterion.clone()); temp.addStep(new PropertiesStep<>(temp, PropertyType.PROPERTY, ((ElementValueTraversal) t).getPropertyKey())); if ('v' == propertyType) TraversalHelper.insertTraversal(0, nonCheckPropertyCriterion.clone(), temp); else temp.addStep(checkPropertyCriterion.clone()); TraversalHelper.insertTraversal((Step) step, temp, traversal); TraversalHelper.copyLabels(step, temp.getEndStep(), true); } else { if ('v' == propertyType) { TraversalHelper.insertAfterStep(propertyValueStep, propertiesStep, traversal); TraversalHelper.insertTraversal(propertiesStep, nonCheckPropertyCriterion.clone(), traversal); } else { TraversalHelper.insertAfterStep(propertyValueStep, propertiesStep, traversal);
public static <S, E> Step<?, E> insertTraversal(final Step<?, S> previousStep, final Traversal.Admin<S, E> insertTraversal, final Traversal.Admin<?, ?> traversal) { return TraversalHelper.insertTraversal(stepIndex(previousStep, traversal), insertTraversal, traversal); }
private static final boolean processAndStep(final AndStep<?> step, final Traversal.Admin<?, ?> traversal) { boolean process = true; for (final Traversal.Admin<?, ?> childTraversal : step.getLocalChildren()) { if (!TraversalHelper.hasAllStepsOfClass(childTraversal, FilterStep.class) || TraversalHelper.hasStepOfClass(childTraversal, DropStep.class, RangeGlobalStep.class, DedupGlobalStep.class, LambdaHolder.class)) { process = false; break; } } if (process) { final List<Traversal.Admin<?, ?>> childTraversals = (List) step.getLocalChildren(); Step<?, ?> finalStep = null; for (int i = childTraversals.size() - 1; i >= 0; i--) { final Traversal.Admin<?, ?> childTraversal = childTraversals.get(i); TraversalHelper.applySingleLevelStrategies(traversal, childTraversal, InlineFilterStrategy.class); if (null == finalStep) finalStep = childTraversal.getEndStep(); TraversalHelper.insertTraversal((Step) step, childTraversals.get(i), traversal); } if (null != finalStep) TraversalHelper.copyLabels(step, finalStep, false); traversal.removeStep(step); return true; } return false; }
private static final boolean processTraversalFilterStep(final TraversalFilterStep<?> step, final Traversal.Admin<?, ?> traversal) { final Traversal.Admin<?, ?> childTraversal = step.getLocalChildren().get(0); if (TraversalHelper.hasAllStepsOfClass(childTraversal, FilterStep.class) && !TraversalHelper.hasStepOfClass(childTraversal, DropStep.class, RangeGlobalStep.class, DedupGlobalStep.class, LambdaHolder.class)) { TraversalHelper.applySingleLevelStrategies(traversal, childTraversal, InlineFilterStrategy.class); final Step<?, ?> finalStep = childTraversal.getEndStep(); TraversalHelper.insertTraversal((Step) step, childTraversal, traversal); TraversalHelper.copyLabels(step, finalStep, false); traversal.removeStep(step); return true; } return false; }
newChildTraversal = newChildTraversal.getSteps().size() > 1 ? (Traversal.Admin) __.local(newChildTraversal) : newChildTraversal; if (null == barrier) TraversalHelper.insertTraversal(0, newChildTraversal, computerTraversal); else TraversalHelper.insertTraversal(barrier.getPreviousStep(), newChildTraversal, computerTraversal);
private static final boolean processMatchStep(final MatchStep<?, ?> step, final Traversal.Admin<?, ?> traversal) { if (step.getPreviousStep() instanceof EmptyStep) return false; boolean changed = false; final String startLabel = MatchStep.Helper.computeStartLabel(step.getGlobalChildren()); for (final Traversal.Admin<?, ?> matchTraversal : new ArrayList<>(step.getGlobalChildren())) { if (TraversalHelper.hasAllStepsOfClass(matchTraversal, HasStep.class, MatchStep.MatchStartStep.class, MatchStep.MatchEndStep.class) && matchTraversal.getStartStep() instanceof MatchStep.MatchStartStep && startLabel.equals(((MatchStep.MatchStartStep) matchTraversal.getStartStep()).getSelectKey().orElse(null))) { changed = true; step.removeGlobalChild(matchTraversal); final String endLabel = ((MatchStep.MatchEndStep) matchTraversal.getEndStep()).getMatchKey().orElse(null); // why would this exist? but just in case matchTraversal.removeStep(0); // remove MatchStartStep matchTraversal.removeStep(matchTraversal.getSteps().size() - 1); // remove MatchEndStep TraversalHelper.applySingleLevelStrategies(traversal, matchTraversal, InlineFilterStrategy.class); matchTraversal.getEndStep().addLabel(startLabel); if (null != endLabel) matchTraversal.getEndStep().addLabel(endLabel); TraversalHelper.insertTraversal((Step) step.getPreviousStep(), matchTraversal, traversal); } } if (step.getGlobalChildren().isEmpty()) traversal.removeStep(step); return changed; }
final int loops = (int) ((LoopTraversal) repeatStep.getUntilTraversal()).getMaxLoops(); for (int j = 0; j < loops; j++) { TraversalHelper.insertTraversal(insertIndex, repeatTraversal.clone(), traversal); insertIndex = insertIndex + repeatLength; if ((j != (loops - 1) || !(traversal.getSteps().get(insertIndex).getNextStep() instanceof Barrier)) // only add a final NoOpBarrier is subsequent step is not a barrier
__.has(partitionKey, P.within(new ArrayList<>(readPartitions))), __.__()).filter(new PartitionKeyHider()); TraversalHelper.insertTraversal(step, choose.asAdmin(), traversal); __.properties(step.getPropertyKeys()).has(partitionKey, P.within(new ArrayList<>(readPartitions))).filter(new PartitionKeyHider()).value(), __.__().filter(new PartitionKeyHider())); TraversalHelper.insertTraversal(step, choose.asAdmin(), traversal); traversal.removeStep(step); } else {
temp.addStep(new PropertiesStep<>(temp, PropertyType.PROPERTY, ((PropertyMapStep) step).getPropertyKeys())); if ('v' == propertyType) TraversalHelper.insertTraversal(0, nonCheckPropertyCriterion.clone(), temp); else temp.addStep(checkPropertyCriterion.clone()); temp.addStep(new PropertiesStep<>(temp, PropertyType.PROPERTY, ((ElementValueTraversal) t).getPropertyKey())); if ('v' == propertyType) TraversalHelper.insertTraversal(0, nonCheckPropertyCriterion.clone(), temp); else temp.addStep(checkPropertyCriterion.clone()); TraversalHelper.insertTraversal((Step) step, temp, traversal); TraversalHelper.copyLabels(step, temp.getEndStep(), true); } else { if ('v' == propertyType) { TraversalHelper.insertAfterStep(propertyValueStep, propertiesStep, traversal); TraversalHelper.insertTraversal(propertiesStep, nonCheckPropertyCriterion.clone(), traversal); } else { TraversalHelper.insertAfterStep(propertyValueStep, propertiesStep, traversal);