public static <A> GraphTraversal<A, A> start() { return new DefaultGraphTraversal<>(); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!TraversalHelper.hasStepOfClass(MatchStep.class, traversal)) return; TraversalHelper.getStepsOfClass(MatchStep.class, traversal).forEach(matchStep -> { // match().select().where() --> match(where()).select() // match().select().dedup() --> match(dedup()).select() Step<?, ?> nextStep = matchStep.getNextStep(); while (nextStep instanceof WherePredicateStep || nextStep instanceof WhereTraversalStep || (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty()) || (nextStep instanceof SelectStep && ((SelectStep) nextStep).getLocalChildren().isEmpty()) || (nextStep instanceof SelectOneStep && ((SelectOneStep) nextStep).getLocalChildren().isEmpty())) { if (nextStep instanceof WherePredicateStep || nextStep instanceof WhereTraversalStep) { traversal.removeStep(nextStep); matchStep.addGlobalChild(traversal instanceof GraphTraversal ? new DefaultGraphTraversal<>().addStep(nextStep) : new DefaultTraversal<>().addStep(nextStep)); nextStep = matchStep.getNextStep(); } else if (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty() && !TraversalHelper.onGraphComputer(traversal)) { traversal.removeStep(nextStep); matchStep.setDedupLabels(((DedupGlobalStep<?>) nextStep).getScopeKeys()); nextStep = matchStep.getNextStep(); } else if (nextStep.getLabels().isEmpty()) { nextStep = nextStep.getNextStep(); } else break; } }); }
handlePropertiesSteps(new String[]{propertyKey}, propertyFetcher); } else if (t instanceof DefaultGraphTraversal) { List<Step> steps = ((DefaultGraphTraversal) t).getSteps(); steps.forEach(step -> { if (step instanceof TraversalMapStep) {
/** * Spawns a {@link GraphTraversal} starting with all vertices or some subset of vertices as specified by their * unique identifier. */ public GraphTraversal<Vertex, Vertex> V(final Object... vertexIds) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.V, vertexIds); final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new GraphStep<>(traversal, Vertex.class, true, vertexIds)); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!TraversalHelper.hasStepOfClass(MatchStep.class, traversal)) return; TraversalHelper.getStepsOfClass(MatchStep.class, traversal).forEach(matchStep -> { // match().select().where() --> match(where()).select() // match().select().dedup() --> match(dedup()).select() Step<?, ?> nextStep = matchStep.getNextStep(); while (nextStep instanceof WherePredicateStep || nextStep instanceof WhereTraversalStep || (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty()) || (nextStep instanceof SelectStep && ((SelectStep) nextStep).getLocalChildren().isEmpty()) || (nextStep instanceof SelectOneStep && ((SelectOneStep) nextStep).getLocalChildren().isEmpty())) { if (nextStep instanceof WherePredicateStep || nextStep instanceof WhereTraversalStep) { traversal.removeStep(nextStep); matchStep.addGlobalChild(traversal instanceof GraphTraversal ? new DefaultGraphTraversal<>().addStep(nextStep) : new DefaultTraversal<>().addStep(nextStep)); nextStep = matchStep.getNextStep(); } else if (nextStep instanceof DedupGlobalStep && !((DedupGlobalStep) nextStep).getScopeKeys().isEmpty() && ((DedupGlobalStep) nextStep).getLocalChildren().isEmpty() && !TraversalHelper.onGraphComputer(traversal)) { traversal.removeStep(nextStep); matchStep.setDedupLabels(((DedupGlobalStep<?>) nextStep).getScopeKeys()); nextStep = matchStep.getNextStep(); } else if (nextStep.getLabels().isEmpty()) { nextStep = nextStep.getNextStep(); } else break; } }); }
/** * Spawns a {@link GraphTraversal} by adding a vertex with the specified label. */ public GraphTraversal<Vertex, Vertex> addV(final String label) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.addV, label); final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new AddVertexStartStep(traversal, label)); }
/** * Spawns a {@link GraphTraversal} by adding a vertex with the label as determined by a {@link Traversal}. */ public GraphTraversal<Vertex, Vertex> addV(final Traversal<?, String> vertexLabelTraversal) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.addV, vertexLabelTraversal); final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new AddVertexStartStep(traversal, vertexLabelTraversal)); }
/** * Spawns a {@link GraphTraversal} starting it with arbitrary values. */ public <S> GraphTraversal<S, S> inject(S... starts) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.inject, starts); final GraphTraversal.Admin<S, S> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new InjectStep<S>(traversal, starts)); }
/** * Spawns a {@link GraphTraversal} by adding a edge with a label as specified by the provided {@link Traversal}. */ public GraphTraversal<Edge, Edge> addE(final Traversal<?, String> edgeLabelTraversal) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.addE, edgeLabelTraversal); final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new AddEdgeStartStep(traversal, edgeLabelTraversal)); }
/** * Spawns a {@link GraphTraversal} by adding a vertex with the default label. */ public GraphTraversal<Vertex, Vertex> addV() { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.addV); final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new AddVertexStartStep(traversal, (String)null)); }
/** * Spawns a {@link GraphTraversal} by adding a edge with the specified label. */ public GraphTraversal<Edge, Edge> addE(final String label) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.addE, label); final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new AddEdgeStartStep(traversal, label)); }
/** * Spawns a {@link GraphTraversal} starting with all edges or some subset of edges as specified by their unique * identifier. */ public GraphTraversal<Edge, Edge> E(final Object... edgesIds) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.E, edgesIds); final GraphTraversal.Admin<Edge, Edge> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new GraphStep<>(traversal, Edge.class, true, edgesIds)); }
/** * Performs a read or write based operation on the {@link Graph} backing this {@code GraphTraversalSource}. This * step can be accompanied by the {@link GraphTraversal#with(String, Object)} modulator for further configuration * and must be accompanied by a {@link GraphTraversal#read()} or {@link GraphTraversal#write()} modulator step * which will terminate the traversal. * * @param file the name of file for which the read or write will apply - note that the context of how this * parameter is used is wholly dependent on the implementation * @return the traversal with the {@link IoStep} added * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#io-step" target="_blank">Reference Documentation - IO Step</a> * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#read-step" target="_blank">Reference Documentation - Read Step</a> * @see <a href="http://tinkerpop.apache.org/docs/${project.version}/reference/#write-step" target="_blank">Reference Documentation - Write Step</a> * @since 3.4.0 */ public <S> GraphTraversal<S, S> io(final String file) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.io, file); final GraphTraversal.Admin<S,S> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new IoStep<S>(traversal, file)); }
/** * Execute the Cypher query with provided parameters and get the result set as a {@link GraphTraversal}. * * @param query the Cypher query to execute * @param parameters the parameters of the Cypher query * @return a fluent Gremlin traversal */ public <S, E> GraphTraversal<S, E> cypher(final String query, final Map<String, Object> parameters) { this.tx().readWrite(); final GraphTraversal.Admin<S, E> traversal = new DefaultGraphTraversal<>(this); traversal.addStep(new CypherStartStep(traversal, query, new Neo4jCypherIterator<>((Iterator) this.baseGraph.execute(query, parameters), this))); return traversal; }
TraversalHelper.insertBeforeStep(new IdStep(computerTraversal), barrier, computerTraversal); if (!(MessagePassingReductionStrategy.endsWithElement(null == barrier ? computerTraversal.getEndStep() : barrier))) { Traversal.Admin newChildTraversal = new DefaultGraphTraversal<>(); TraversalHelper.removeToTraversal(computerTraversal.getStartStep() instanceof GraphStep ? computerTraversal.getStartStep().getNextStep() :
public static <A> GraphTraversal<A, A> start() { return new DefaultGraphTraversal<>(); }
/** * Builds a {@link Translator} that translates Cypher queries * to Gremlin anonymous {@code GraphTraversal}. * <p> * See: https://tinkerpop.apache.org/docs/current/reference/#traversal * * @return builder for translator to Gremlin traversal */ public FlavorBuilder<GraphTraversal, org.apache.tinkerpop.gremlin.process.traversal.P> traversal() { return traversal(new DefaultGraphTraversal()); }
@Override @SuppressWarnings({ "unchecked" }) public GraphTraversal<E, E> toTraversal() { GraphQueryBuilderStarterImpl self = GraphQueryBuilderStarterImpl.this; Set<E> elements = this.toSet(); if (elements.isEmpty()) { return new DefaultGraphTraversal<>(self.graph); } Object[] elementArray = elements.toArray(); if (Vertex.class.isAssignableFrom(this.clazz)) { // vertex iterator return (GraphTraversal<E, E>) self.graph.traversal().V(elementArray); } else if (Edge.class.isAssignableFrom(this.clazz)) { // edge iterator return (GraphTraversal<E, E>) self.graph.traversal().E(elementArray); } else { throw new IllegalArgumentException("Unknown element class: '" + this.clazz.getName() + "'!"); } }
/** * Spawns a {@link GraphTraversal} starting with all vertices or some subset of vertices as specified by their * unique identifier. */ public GraphTraversal<Vertex, Vertex> V(final Object... vertexIds) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.V, vertexIds); final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new GraphStep<>(traversal, Vertex.class, true, vertexIds)); }
/** * Spawns a {@link GraphTraversal} by adding a vertex with the label as determined by a {@link Traversal}. */ public GraphTraversal<Vertex, Vertex> addV(final Traversal<?, String> vertexLabelTraversal) { final GraphTraversalSource clone = this.clone(); clone.bytecode.addStep(GraphTraversal.Symbols.addV, vertexLabelTraversal); final GraphTraversal.Admin<Vertex, Vertex> traversal = new DefaultGraphTraversal<>(clone); return traversal.addStep(new AddVertexStartStep(traversal, vertexLabelTraversal)); }