@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep) || TraversalHelper.onGraphComputer(traversal)) return; final List<Step> steps = traversal.getSteps(); if (steps.size() < 2 || !(steps.get(0) instanceof GraphStep) || 0 != ((GraphStep) steps.get(0)).getIds().length || !(steps.get(steps.size() - 1) instanceof CountGlobalStep)) return; for (int i = 1; i < steps.size() - 1; i++) { final Step current = steps.get(i); if (!(//current instanceof MapStep || // MapSteps will not necessarily emit an element as demonstrated in https://issues.apache.org/jira/browse/TINKERPOP-1958 current instanceof IdentityStep || current instanceof NoOpBarrierStep || current instanceof CollectingBarrierStep) || (current instanceof TraversalParent && TraversalHelper.anyStepRecursively(s -> (s instanceof SideEffectStep || s instanceof AggregateStep), (TraversalParent) current))) return; } final Class<? extends Element> elementClass = ((GraphStep<?, ?>) steps.get(0)).getReturnClass(); TraversalHelper.removeAllSteps(traversal); traversal.addStep(new TinkerCountGlobalStep<>(traversal, elementClass)); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep)) return; // remote step wraps the traversal and emits the results from the remote connection. final RemoteStep<?, ?> remoteStep = new RemoteStep<>(traversal, remoteConnection); TraversalHelper.removeAllSteps(traversal); traversal.addStep(remoteStep); // validations assert traversal.getStartStep().equals(remoteStep); assert traversal.getSteps().size() == 1; assert traversal.getEndStep() == remoteStep; } }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep)) return; if (traversal.getSteps().size() == 1 && traversal.getEndStep() instanceof InjectStep) { final InjectStep stepWithSparql = (InjectStep) traversal.getEndStep(); final Object[] injections = stepWithSparql.getInjections(); if (injections.length == 1 && injections[0] instanceof String) { final String sparql = (String) injections[0]; final Traversal<Vertex, ?> sparqlTraversal = SparqlToGremlinCompiler.compile( traversal.getGraph().get(), sparql); TraversalHelper.removeAllSteps(traversal); sparqlTraversal.asAdmin().getSteps().forEach(s -> traversal.addStep(s)); } } } }
assert !traversal.isLocked(); traversal.setSideEffects(translatedTraversal.getSideEffects()); TraversalHelper.removeAllSteps(traversal); TraversalHelper.removeToTraversal((Step) translatedTraversal.getStartStep(), EmptyStep.instance(), traversal);
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep) || TraversalHelper.onGraphComputer(traversal)) return; final List<Step> steps = traversal.getSteps(); if (steps.size() < 2 || !(steps.get(0) instanceof GraphStep) || 0 != ((GraphStep) steps.get(0)).getIds().length || !(steps.get(steps.size() - 1) instanceof CountGlobalStep)) return; for (int i = 1; i < steps.size() - 1; i++) { final Step current = steps.get(i); if (!(//current instanceof MapStep || // MapSteps will not necessarily emit an element as demonstrated in https://issues.apache.org/jira/browse/TINKERPOP-1958 current instanceof IdentityStep || current instanceof NoOpBarrierStep || current instanceof CollectingBarrierStep) || (current instanceof TraversalParent && TraversalHelper.anyStepRecursively(s -> (s instanceof SideEffectStep || s instanceof AggregateStep), (TraversalParent) current))) return; } final Class<? extends Element> elementClass = ((GraphStep<?, ?>) steps.get(0)).getReturnClass(); TraversalHelper.removeAllSteps(traversal); traversal.addStep(new TinkerCountGlobalStep<>(traversal, elementClass)); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep) || TraversalHelper.onGraphComputer(traversal)) return; final List<Step> steps = traversal.getSteps(); if (steps.size() < 2 || !(steps.get(0) instanceof GraphStep) || 0 != ((GraphStep) steps.get(0)).getIds().length || !(steps.get(steps.size() - 1) instanceof CountGlobalStep)) return; for (int i = 1; i < steps.size() - 1; i++) { final Step current = steps.get(i); if (!(//current instanceof MapStep || // MapSteps will not necessarily emit an element as demonstrated in https://issues.apache.org/jira/browse/TINKERPOP-1958 current instanceof IdentityStep || current instanceof NoOpBarrierStep || current instanceof CollectingBarrierStep) || (current instanceof TraversalParent && TraversalHelper.anyStepRecursively(s -> (s instanceof SideEffectStep || s instanceof AggregateStep), (TraversalParent) current))) return; } final Class<? extends Element> elementClass = ((GraphStep<?, ?>) steps.get(0)).getReturnClass(); TraversalHelper.removeAllSteps(traversal); traversal.addStep(new TinkerCountGlobalStep<>(traversal, elementClass)); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep)) return; // remote step wraps the traversal and emits the results from the remote connection. final RemoteStep<?, ?> remoteStep = new RemoteStep<>(traversal, remoteConnection); TraversalHelper.removeAllSteps(traversal); traversal.addStep(remoteStep); // validations assert traversal.getStartStep().equals(remoteStep); assert traversal.getSteps().size() == 1; assert traversal.getEndStep() == remoteStep; } }
@Override public void apply(Traversal.Admin<?, ?> traversal) { if (!(traversal.getParent() instanceof EmptyStep) || TraversalHelper.onGraphComputer(traversal)) return; List<Step> steps = traversal.getSteps(); if (steps.size() < 2) return; Step<?, ?> startStep = traversal.getStartStep(); Step<?, ?> endStep = traversal.getEndStep(); if (steps.size() == 2 && startStep instanceof OrientGraphStep && endStep instanceof CountGlobalStep) { OrientGraphStep step = (OrientGraphStep) startStep; if (step.getHasContainers().size() == 1) { List<HasContainer> hasContainers = step.getHasContainers(); List<String> classes = hasContainers.stream().filter(this::isLabelFilter).map(this::extractLabels) .flatMap((s) -> s.stream()).collect(Collectors.toList()); if(classes.size() > 0) { TraversalHelper.removeAllSteps(traversal); traversal.addStep(new OrientClassCountStep(traversal, classes, step.isVertexStep())); } } else if (step.getHasContainers().size() == 0) { TraversalHelper.removeAllSteps(traversal); String baseClass = step.isVertexStep() ? "V" : "E"; traversal.addStep(new OrientClassCountStep(traversal, Collections.singletonList(baseClass), step.isVertexStep())); } } }
assert !traversal.isLocked(); traversal.setSideEffects(translatedTraversal.getSideEffects()); TraversalHelper.removeAllSteps(traversal); TraversalHelper.removeToTraversal((Step) translatedTraversal.getStartStep(), EmptyStep.instance(), traversal);