This is an automated email from the ASF dual-hosted git repository. colegreer pushed a commit to branch repeatLimit in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 83ba4d1fedbdb9762e062cd7b5a17d25de27b12e Author: Andrea Child <andrea.ch...@improving.com> AuthorDate: Thu Aug 28 09:36:59 2025 -0700 Modify counter key to account for nested repeats. Added temporary playground test for various traversals. Added information for logging. --- .../traversal/step/filter/RangeGlobalStep.java | 10 +- .../gremlin/structure/util/StringFactory.java | 7 +- .../tinkergraph/structure/TinkerGraphPlayTest.java | 380 ++++++++++++++++++++- 3 files changed, 385 insertions(+), 12 deletions(-) diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java index 004d52e0d9..0ec51e0b76 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java @@ -24,9 +24,11 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser; import org.apache.tinkerpop.gremlin.process.traversal.step.Bypassing; import org.apache.tinkerpop.gremlin.process.traversal.step.FilteringBarrier; import org.apache.tinkerpop.gremlin.process.traversal.step.Ranging; +import org.apache.tinkerpop.gremlin.process.traversal.traverser.B_LP_NL_O_P_S_SE_SL_Traverser; import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement; import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet; import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException; +import org.apache.tinkerpop.gremlin.structure.Vertex; import org.apache.tinkerpop.gremlin.structure.util.StringFactory; import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils; @@ -70,9 +72,13 @@ public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging, // Determine which counter to use AtomicLong currentCounter = this.counter; - if (usePerIterationCounters && traverser.loops() > 0) { - String iterationKey = this.getId() + ":" + traverser.loops(); + if (usePerIterationCounters) { + // Create counter key that isolates between different repeat step contexts + String pathStructure = String.valueOf(traverser.path().size()); + String iterationKey = this.getId() + ":" + traverser.loops() + ":" + pathStructure; + Object vId = ((Vertex) ((B_LP_NL_O_P_S_SE_SL_Traverser) traverser).get()).property("id").value(); currentCounter = perIterationCounters.computeIfAbsent(iterationKey, k -> new AtomicLong(0L)); + System.out.printf("IterationKey: %s Traverser: %s Path: %s Counter: %s High: %s%n", iterationKey, vId, traverser.path(), currentCounter.get(), this.high); } if (this.high != -1 && currentCounter.get() >= this.high) { diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java index 49206cf8e3..23ac3d831c 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java @@ -268,6 +268,11 @@ public final class StringFactory { } public static String pathString(final Path path) { - return PATH + L_BRACKET + String.join(", ", IteratorUtils.map(path, Objects::toString)) + R_BRACKET; + return PATH + L_BRACKET + String.join(", ", IteratorUtils.map(path, p -> { + if (p instanceof Vertex) { + return ((Vertex) p).property("id").value().toString(); + } + return Objects.toString(p); + })) + R_BRACKET; } } diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java index c4903013d8..4a455a58a1 100644 --- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java +++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/structure/TinkerGraphPlayTest.java @@ -18,16 +18,21 @@ */ package org.apache.tinkerpop.gremlin.tinkergraph.structure; +import java.util.Arrays; +import java.util.List; +import java.util.function.BiFunction; +import java.util.function.Supplier; import org.apache.tinkerpop.gremlin.process.computer.Computer; import org.apache.tinkerpop.gremlin.process.traversal.P; +import org.apache.tinkerpop.gremlin.process.traversal.Path; import org.apache.tinkerpop.gremlin.process.traversal.Traversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; -import org.apache.tinkerpop.gremlin.process.traversal.step.util.WithOptions; import org.apache.tinkerpop.gremlin.process.traversal.step.util.event.ConsoleMutationListener; import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.EventStrategy; import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.PathRetractionStrategy; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.T; import org.apache.tinkerpop.gremlin.structure.Vertex; @@ -39,14 +44,8 @@ import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.Arrays; -import java.util.List; -import java.util.function.BiFunction; -import java.util.function.Supplier; - import static org.apache.tinkerpop.gremlin.process.traversal.Operator.sum; import static org.apache.tinkerpop.gremlin.process.traversal.P.neq; -import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal.Symbols.values; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.choose; @@ -58,14 +57,377 @@ import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.sack; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.select; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.union; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.valueMap; -import static org.apache.tinkerpop.gremlin.structure.Column.keys; /** - * @author Stephen Mallette (http://stephen.genoprime.com) + * @author Stephen Mallette (http://stephen.genoprime.com); */ public class TinkerGraphPlayTest { private static final Logger logger = LoggerFactory.getLogger(TinkerGraphPlayTest.class); + @Test + @Ignore + public void testIterationScopedRangeGlobalInRepeat() { + GraphTraversalSource g = TinkerGraph.open().traversal().withoutStrategies(RepeatUnrollStrategy.class); + load(g); + GraphTraversal<Vertex, Path> basic = g.V().has("id", "l1-0").repeat(__.limit(1).out("knows")).times(2).path().by("id"); + toListAndPrint("basic", basic); + GraphTraversal<Vertex, Path> chained = g.V().has("id", "l2-0").repeat(__.limit(1).out("knows")).times(2).repeat(__.limit(1).in("knows")).times(2).path().by("id"); + toListAndPrint("chained", chained); + GraphTraversal<Vertex, Path> nested = g.V().has("id", "l3-0").repeat(__.limit(1).out("knows").repeat(__.limit(1).in("knows")).times(2)).times(2).path().by("id"); + toListAndPrint("nested", nested); + GraphTraversal<Vertex, Path> nestedUnfolded = g.V().has("id", "l3-0") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).in("knows") + .path().by("id"); + toListAndPrint("nestedUnfolded", nestedUnfolded); + + GraphTraversal<Vertex, Path> tripleNested = g.V().has("id", "l1-0") + .repeat(__.limit(1).out("knows") + .repeat(__.limit(1).in("knows") + .repeat(__.limit(1).out("knows")) + .times(2)) + .times(2)) + .times(2) + .path().by("id"); + toListAndPrint("tripleNested", tripleNested); + + GraphTraversal<Vertex, Path> tripleNestedUnfolded = g.V().has("id", "l1-0") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .limit(1).in("knows") + .limit(1).out("knows") + .limit(1).out("knows") + .path().by("id"); + toListAndPrint("tripleNestedUnfolded", tripleNestedUnfolded); + + GraphTraversal<Vertex, Path> nested2 = g.V().has("id", "l3-0").out("knows"). + repeat(__.limit(1).out("knows").repeat(__.limit(1).in("knows")).times(2)). + times(2).path().by("id"); + toListAndPrint("nested2", nested2); +// GraphTraversal<Vertex, Object> aggregate = g.V().has("id", "l1-0").repeat(__.limit(1).out("knows").aggregate("x")).times(2).cap("x"); +// toListAndPrint("aggregate", aggregate); + } + + private void toListAndPrint(String header, GraphTraversal t) { + System.out.println("=====" + header + "==================================="); + System.out.println(t); + List<?> list = t.toList(); + for (Object o : list) { + System.out.println(o); + } + } + + private void load(GraphTraversalSource g) { + g.V().drop(); + + g.addV("node").property("id","l1-0").iterate(); + + g.addV("node").property("id","l2-0").iterate(); + g.addV("node").property("id","l2-1").iterate(); + + g.addV("node").property("id","l3-0").iterate(); + g.addV("node").property("id","l3-1").iterate(); + g.addV("node").property("id","l3-2").iterate(); + + g.addV("node").property("id","l4-0").iterate(); + g.addV("node").property("id","l4-1").iterate(); + g.addV("node").property("id","l4-2").iterate(); + g.addV("node").property("id","l4-3").iterate(); + + g.addV("node").property("id","l5-0").iterate(); + g.addV("node").property("id","l5-1").iterate(); + g.addV("node").property("id","l5-2").iterate(); + g.addV("node").property("id","l5-3").iterate(); + g.addV("node").property("id","l5-4").iterate(); + + g.V().has("id","l1-0").as("n1").V().has("id","l2-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l1-0").as("n1").V().has("id","l2-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l2-0").as("n1").V().has("id","l3-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l2-0").as("n1").V().has("id","l3-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l2-0").as("n1").V().has("id","l3-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l2-1").as("n1").V().has("id","l3-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l2-1").as("n1").V().has("id","l3-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l2-1").as("n1").V().has("id","l3-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l3-0").as("n1").V().has("id","l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-0").as("n1").V().has("id","l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-0").as("n1").V().has("id","l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-0").as("n1").V().has("id","l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-1").as("n1").V().has("id","l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-1").as("n1").V().has("id","l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-1").as("n1").V().has("id","l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-1").as("n1").V().has("id","l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-2").as("n1").V().has("id","l4-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-2").as("n1").V().has("id","l4-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-2").as("n1").V().has("id","l4-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l3-2").as("n1").V().has("id","l4-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l4-0").as("n1").V().has("id","l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-0").as("n1").V().has("id","l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-0").as("n1").V().has("id","l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-0").as("n1").V().has("id","l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-0").as("n1").V().has("id","l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l1-0").as("n1").V().has("id","l2-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l1-0").as("n1").V().has("id","l2-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l2-0").as("n1").V().has("id","l3-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l2-0").as("n1").V().has("id","l3-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l2-0").as("n1").V().has("id","l3-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l2-1").as("n1").V().has("id","l3-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l2-1").as("n1").V().has("id","l3-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l2-1").as("n1").V().has("id","l3-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l3-0").as("n1").V().has("id","l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-0").as("n1").V().has("id","l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-0").as("n1").V().has("id","l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-0").as("n1").V().has("id","l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-1").as("n1").V().has("id","l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-1").as("n1").V().has("id","l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-1").as("n1").V().has("id","l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-1").as("n1").V().has("id","l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-2").as("n1").V().has("id","l4-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-2").as("n1").V().has("id","l4-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-2").as("n1").V().has("id","l4-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l3-2").as("n1").V().has("id","l4-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l4-0").as("n1").V().has("id","l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-0").as("n1").V().has("id","l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-0").as("n1").V().has("id","l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-0").as("n1").V().has("id","l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-0").as("n1").V().has("id","l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-1").as("n1").V().has("id","l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-2").as("n1").V().has("id","l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l4-3").as("n1").V().has("id","l5-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + + // Add layer 6 nodes + g.addV("node").property("id","l6-0").iterate(); + g.addV("node").property("id","l6-1").iterate(); + g.addV("node").property("id","l6-2").iterate(); + g.addV("node").property("id","l6-3").iterate(); + g.addV("node").property("id","l6-4").iterate(); + g.addV("node").property("id","l6-5").iterate(); + + g.V().has("id","l5-0").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l5-1").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l5-2").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l5-3").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l5-4").as("n1").V().has("id","l6-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + + // Connect layer 5 to layer 6 with "friend" edges (same pattern) + g.V().has("id","l5-0").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-0").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l5-1").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-1").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l5-2").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-2").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l5-3").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-3").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l5-4").as("n1").V().has("id","l6-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l5-4").as("n1").V().has("id","l6-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + + // Add layer 7 nodes + g.addV("node").property("id","l7-0").iterate(); + g.addV("node").property("id","l7-1").iterate(); + g.addV("node").property("id","l7-2").iterate(); + g.addV("node").property("id","l7-3").iterate(); + g.addV("node").property("id","l7-4").iterate(); + g.addV("node").property("id","l7-5").iterate(); + g.addV("node").property("id","l7-6").iterate(); + + // Connect layer 6 to layer 7 with "knows" edges + g.V().has("id","l6-0").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l6-1").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l6-2").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l6-3").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l6-4").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + g.V().has("id","l6-5").as("n1").V().has("id","l7-0").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-1").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-2").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-3").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-4").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-5").as("n2").addE("knows").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-6").as("n2").addE("knows").from("n1").to("n2").iterate(); + + // Connect layer 6 to layer 7 with "friend" edges + g.V().has("id","l6-0").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-0").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l6-1").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-1").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l6-2").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-2").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l6-3").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-3").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l6-4").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-4").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + + g.V().has("id","l6-5").as("n1").V().has("id","l7-0").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-1").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-2").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-3").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-4").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-5").as("n2").addE("friend").from("n1").to("n2").iterate(); + g.V().has("id","l6-5").as("n1").V().has("id","l7-6").as("n2").addE("friend").from("n1").to("n2").iterate(); + } + @Test @Ignore public void testPlay8() throws Exception {