public static Step getNextNonIdentityStep(final Step start) { Step currentStep = start.getNextStep(); //Skip over identity steps while (currentStep instanceof IdentityStep) currentStep = currentStep.getNextStep(); return currentStep; }
public static Step getNextNonIdentityStep(final Step start) { Step currentStep = start.getNextStep(); //Skip over identity steps while (currentStep instanceof IdentityStep) currentStep = currentStep.getNextStep(); return currentStep; }
static boolean validFoldInHasContainer(final Step<?, ?> tinkerpopStep, final boolean defaultValue){ Step<?, ?> currentStep = tinkerpopStep; Boolean toReturn = null; while (!(currentStep instanceof EmptyStep)) { if (currentStep instanceof HasContainerHolder) { final Iterable<HasContainer> containers = ((HasContainerHolder) currentStep).getHasContainers(); toReturn = toReturn == null ? validJanusGraphHas(containers) : toReturn && validJanusGraphHas(containers); } else if (!(currentStep instanceof IdentityStep) && !(currentStep instanceof NoOpBarrierStep) && !(currentStep instanceof RangeGlobalStep) && !(currentStep instanceof OrderGlobalStep)) { toReturn = toReturn == null ? false : (toReturn && defaultValue); break; } currentStep = currentStep.getNextStep(); } return Boolean.TRUE.equals(toReturn); }
static void localFoldInHasContainer(final HasStepFolder janusgraphStep, final Step<?, ?> tinkerpopStep, final Traversal.Admin<?, ?> traversal, final Traversal<?, ?> rootTraversal){ Step<?, ?> currentStep = tinkerpopStep; while (true) { if (currentStep instanceof HasContainerHolder) { final Iterable<HasContainer> containers = ((HasContainerHolder) currentStep).getHasContainers().stream().map(c -> JanusGraphPredicate.Converter.convert(c)).collect(Collectors.toList()); final List<HasContainer> hasContainers = janusgraphStep.addLocalAll(containers); currentStep.getLabels().forEach(janusgraphStep::addLabel); traversal.removeStep(currentStep); currentStep = foldInOrder(janusgraphStep, currentStep, traversal, rootTraversal, janusgraphStep instanceof JanusGraphStep && ((JanusGraphStep)janusgraphStep).returnsVertex(), hasContainers); foldInRange(janusgraphStep, currentStep, traversal, hasContainers); } else if (!(currentStep instanceof IdentityStep) && !(currentStep instanceof NoOpBarrierStep)) { break; } currentStep = currentStep.getNextStep(); } }
break; currentStep = currentStep.getNextStep();
public static void foldInHasContainer(final HasStepFolder titanStep, final Traversal.Admin<?, ?> traversal) { Step<?, ?> currentStep = titanStep.getNextStep(); while (true) { if (currentStep instanceof HasContainerHolder) { Iterable<HasContainer> containers = ((HasContainerHolder) currentStep).getHasContainers(); if (validTitanHas(containers)) { titanStep.addAll(containers); currentStep.getLabels().forEach(titanStep::addLabel); traversal.removeStep(currentStep); } } else if (currentStep instanceof IdentityStep) { // do nothing, has no impact } else { break; } currentStep = currentStep.getNextStep(); } }
static void foldInHasContainer(final HasStepFolder janusgraphStep, final Traversal.Admin<?, ?> traversal, final Traversal<?, ?> rootTraversal) { Step<?, ?> currentStep = janusgraphStep.getNextStep(); while (true) { if (currentStep instanceof OrStep && janusgraphStep instanceof JanusGraphStep) { for (final Traversal.Admin<?, ?> child : ((OrStep<?>) currentStep).getLocalChildren()) { if (!validFoldInHasContainer(child.getStartStep(), false)){ return; } } ((OrStep<?>) currentStep).getLocalChildren().forEach(t ->localFoldInHasContainer(janusgraphStep, t.getStartStep(), t, rootTraversal)); traversal.removeStep(currentStep); } else if (currentStep instanceof HasContainerHolder){ final Iterable<HasContainer> containers = ((HasContainerHolder) currentStep).getHasContainers().stream().map(c -> JanusGraphPredicate.Converter.convert(c)).collect(Collectors.toList()); if (validFoldInHasContainer(currentStep, true)) { janusgraphStep.addAll(containers); currentStep.getLabels().forEach(janusgraphStep::addLabel); traversal.removeStep(currentStep); } } else if (!(currentStep instanceof IdentityStep) && !(currentStep instanceof NoOpBarrierStep) && !(currentStep instanceof HasContainerHolder)) { break; } currentStep = currentStep.getNextStep(); } }
break; currentStep = currentStep.getNextStep();
break; currentStep = currentStep.getNextStep();
public static Set<String> getReferencedLabelsAfterStep(Step<?, ?> step) { final Set<String> labels = new HashSet<>(); while (!(step instanceof EmptyStep)) { labels.addAll(PathUtil.getReferencedLabels(step)); step = step.getNextStep(); } return labels; }
private static Step<?, ?> getFirstLegalOLAPStep(Step<?, ?> currentStep) { while (!(currentStep instanceof EmptyStep)) { if (!(currentStep instanceof VertexComputing)) return currentStep; currentStep = currentStep.getNextStep(); } return EmptyStep.instance(); }
private static Step<?, ?> getLastLegalOLAPStep(Step<?, ?> currentStep) { while (currentStep instanceof VertexComputing) currentStep = currentStep.getNextStep(); while (!(currentStep instanceof EmptyStep)) { if (currentStep instanceof VertexComputing) return currentStep.getPreviousStep(); currentStep = currentStep.getNextStep(); } return EmptyStep.instance(); }
public static TraversalType getTraversalType(final Traversal.Admin<Object, Object> traversal) { final Step<?, ?> nextStep = traversal.getStartStep().getNextStep(); if (nextStep instanceof WherePredicateStep) return TraversalType.WHERE_PREDICATE; else if (nextStep instanceof WhereTraversalStep) return TraversalType.WHERE_TRAVERSAL; else return TraversalType.MATCH_TRAVERSAL; }
public static void extractCount(Step<?, ?> newStep, Traversal.Admin<?, ?> traversal) { Step<?, ?> step = newStep; do { step = step.getNextStep(); if (step instanceof CountGlobalStep) { QueryHolder holder = (QueryHolder) newStep; holder.setCount(); } } while (step instanceof CountGlobalStep || step instanceof FilterStep || step instanceof IdentityStep || step instanceof NoOpBarrierStep); }
private boolean doStrategy(final Step step) { if (!(step instanceof CountGlobalStep) || !(step.getNextStep() instanceof IsStep) || step.getPreviousStep() instanceof RangeGlobalStep) // if a RangeStep was provided, assume that the user knows what he's doing return false; final Step parent = step.getTraversal().getParent().asStep(); return (parent instanceof FilterStep || parent.getLabels().isEmpty()) && // if the parent is labeled, then the count matters !(parent.getNextStep() instanceof MatchStep.MatchEndStep && // if this is in a pattern match, then don't do it. ((MatchStep.MatchEndStep) parent.getNextStep()).getMatchKey().isPresent()); } }
private static boolean insertElementId(final Step<?, ?> barrier) { if (!(barrier instanceof Barrier)) return false; else if (!endsWithElement(barrier.getPreviousStep())) return false; else if (barrier instanceof CountGlobalStep) return true; else if (barrier instanceof DedupGlobalStep && ((DedupGlobalStep) barrier).getScopeKeys().isEmpty() && ((DedupGlobalStep) barrier).getLocalChildren().isEmpty() && barrier.getNextStep() instanceof CountGlobalStep) return true; else return false; }
public static <S, E> void removeToTraversal(final Step<S, ?> startStep, final Step<?, E> endStep, final Traversal.Admin<S, E> newTraversal) { final Traversal.Admin<?, ?> originalTraversal = startStep.getTraversal(); Step<?, ?> currentStep = startStep; while (currentStep != endStep && !(currentStep instanceof EmptyStep)) { final Step<?, ?> temp = currentStep.getNextStep(); originalTraversal.removeStep(currentStep); newTraversal.addStep(currentStep); currentStep = temp; } }
protected boolean isEndStep() { return this.getNextStep() instanceof ComputerResultStep || (this.getNextStep() instanceof ProfileStep && this.getNextStep().getNextStep() instanceof ComputerResultStep); }
/** * Checks whether a given step is optimizable or not. * * @param step the step to check * @return <code>true</code> if the step is optimizable, otherwise <code>false</code> */ private static boolean isOptimizable(final Step step) { return ((step instanceof VertexStep && ((VertexStep) step).returnsVertex()) || (step instanceof PropertiesStep && PropertyType.VALUE.equals(((PropertiesStep) step).getReturnType()))) && (step.getTraversal().getEndStep().getLabels().isEmpty() || step.getNextStep() instanceof CountGlobalStep); }
public static void extractHasContainer(HugeVertexStep<?> newStep, Traversal.Admin<?, ?> traversal) { Step<?, ?> step = newStep; do { if (step instanceof HasStep) { HasContainerHolder holder = (HasContainerHolder) step; for (HasContainer has : holder.getHasContainers()) { newStep.addHasContainer(has); } TraversalHelper.copyLabels(step, step.getPreviousStep(), false); traversal.removeStep(step); } step = step.getNextStep(); } while (step instanceof HasStep || step instanceof NoOpBarrierStep); }