@Test public void testSupportDirectCommitOfSchemaChangesForConnection() { GraphTraversalSource g = prepareGraphForDirectCommitTests(); g.addV("user").as("p1").addV("user").addE("knows").from("p1").iterate(); }
@Test public void testSupportDirectCommitOfSchemaChangesForEdgeProperties() { GraphTraversalSource g = prepareGraphForDirectCommitTests(); g.addV("user").as("p1").addV("user").addE("knows").from("p1").property("id", 10).iterate(); }
@Override public Traversal<Edge, Edge> get_g_addEXknowsX_fromXaX_toXbX_propertyXweight_0_1X(final Vertex a, final Vertex b) { return g.addE("knows").from(a).to(b).property("weight", 0.1d); }
@Override public Traversal<Vertex, Edge> get_g_V_asXaX_inXcreatedX_addEXcreatedByX_fromXaX_propertyXyear_2009X_propertyXacl_publicX() { return g.V().as("a").in("created").addE("createdBy").from("a").property("year", 2009).property("acl", "public"); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_out_addInE() { assertTraversal(create().V().as("a").out().addE("test").from("a"), true); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_In_addEXINX() { assertTraversal(create().V().as("a").in().addE("test").from("a"), true); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_In_addInE() { assertTraversal(create().V().as("a").in().addE("test").from("a"), true); }
@Override public Traversal<Vertex, Edge> get_g_V_hasLabelXpersonX_asXpX_VXsoftwareX_addInEXuses_pX() { final List<Vertex> software = g.V().hasLabel("software").toList(); return g.V().hasLabel("person").as("p").V(software).addE("uses").from("p"); } }
@Override public Traversal<Vertex, Path> get_g_VX1X_asXaX_outXcreatedX_asXbX_inXcreatedX_asXcX_cyclicPath_fromXaX_toXbX_path(final Object v1Id) { return g.V(v1Id).as("a").out("created").as("b").in("created").as("c").cyclicPath().from("a").to("b").path(); } }
@Benchmark public Edge testAddE() { return g.V(a).as("a").V(b).as("b").addE("knows").from("a").to("b").next(); }
@Override public Traversal<Vertex, Path> get_g_V_asXaX_out_asXbX_out_asXcX_path_fromXbX_toXcX_byXnameX() { return g.V().as("a").out().as("b").out().as("c").path().from("b").to("c").by("name"); } }
@Test @FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE) public void shouldUseActualEdgeWhenAdded() { final AtomicBoolean triggered = new AtomicBoolean(false); final Vertex v = graph.addVertex(); final Object id = v.id(); final AtomicReference<Edge> eventedEdge = new AtomicReference<>(); final MutationListener listener = new AbstractMutationListener() { @Override public void edgeAdded(final Edge element) { eventedEdge.set(element); assertEquals("self", element.label()); assertEquals(id, element.inVertex().id()); assertEquals(id, element.outVertex().id()); assertThat(element.properties().hasNext(), is(false)); triggered.set(true); } }; final EventStrategy.Builder builder = EventStrategy.build().addListener(listener).detach(EventStrategy.Detachment.REFERENCE); if (graph.features().graph().supportsTransactions()) builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph)); final EventStrategy eventStrategy = builder.create(); final GraphTraversalSource gts = create(eventStrategy); final Edge e = gts.V(v).as("a").addE("self").property("here", "there").from("a").to("a").next(); tryCommit(graph); assertVertexEdgeCounts(graph, 1, 1); assertThat(triggered.get(), is(true)); assertEquals(e, eventedEdge.get()); }
@Override public Traversal<Vertex, Path> get_g_V_asXaX_out_asXbX_out_asXcX_simplePath_byXlabelX_fromXbX_toXcX_path_byXnameX() { return g.V().as("a").out().as("b").out().as("c").simplePath().by(T.label).from("b").to("c").path().by("name"); } }
@Override public Traversal<Vertex, Edge> get_g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_addEXcodeveloperX_fromXaX_toXbX_propertyXyear_2009X() { return g.V().as("a").out("created").in("created").where(P.neq("a")).as("b").addE("codeveloper").from("a").to("b").property("year", 2009); }
@Test @FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE) public void shouldDetachEdgeWhenAdded() { final AtomicBoolean triggered = new AtomicBoolean(false); final Vertex v = graph.addVertex(); final Object id = v.id(); final MutationListener listener = new AbstractMutationListener() { @Override public void edgeAdded(final Edge element) { assertThat(element, instanceOf(DetachedEdge.class)); assertEquals("self", element.label()); assertEquals(id, element.inVertex().id()); assertEquals(id, element.outVertex().id()); assertEquals("there", element.value("here")); triggered.set(true); } }; final EventStrategy.Builder builder = EventStrategy.build().addListener(listener); if (graph.features().graph().supportsTransactions()) builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph)); final EventStrategy eventStrategy = builder.create(); final GraphTraversalSource gts = create(eventStrategy); gts.V(v).as("a").addE("self").property("here", "there").from("a").to("a").iterate(); tryCommit(graph); assertVertexEdgeCounts(graph, 1, 1); assertThat(triggered.get(), is(true)); }
@Test @FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE) public void shouldReferenceEdgeWhenAdded() { final AtomicBoolean triggered = new AtomicBoolean(false); final Vertex v = graph.addVertex(); final Object id = v.id(); final MutationListener listener = new AbstractMutationListener() { @Override public void edgeAdded(final Edge element) { assertThat(element, instanceOf(ReferenceEdge.class)); assertEquals("self", element.label()); assertEquals(id, element.inVertex().id()); assertEquals(id, element.outVertex().id()); assertThat(element.properties().hasNext(), is(false)); triggered.set(true); } }; final EventStrategy.Builder builder = EventStrategy.build().addListener(listener).detach(EventStrategy.Detachment.REFERENCE); if (graph.features().graph().supportsTransactions()) builder.eventQueue(new EventStrategy.TransactionalEventQueue(graph)); final EventStrategy eventStrategy = builder.create(); final GraphTraversalSource gts = create(eventStrategy); gts.V(v).as("a").addE("self").property("here", "there").from("a").to("a").iterate(); tryCommit(graph); assertVertexEdgeCounts(graph, 1, 1); assertThat(triggered.get(), is(true)); }
/** * Generate the graph in {@link #createKitchenSink()} into an existing graph. */ public static void generateKitchenSink(final TinkerGraph graph) { final GraphTraversalSource g = graph.traversal(); g.addV("loops").property(T.id, 1000).property("name", "loop").as("me"). addE("self").to("me").property(T.id, 1001). iterate(); g.addV("message").property(T.id, 2000).property("name", "a").as("a"). addV("message").property(T.id, 2001).property("name", "b").as("b"). addE("link").from("a").to("b").property(T.id, 2002). addE("link").from("a").to("a").property(T.id, 2003).iterate(); }
@Override public Traversal<Vertex, Map<String, List<String>>> getPlaylistPaths() { return g.V().has("name", "Bob_Dylan").in("sungBy").as("a"). repeat(out().order().by(Order.shuffle).simplePath().from("a")). until(out("writtenBy").has("name", "Johnny_Cash")).limit(1).as("b"). repeat(out().order().by(Order.shuffle).as("c").simplePath().from("b").to("c")). until(out("sungBy").has("name", "Grateful_Dead")).limit(1). path().from("a").unfold(). <List<String>>project("song", "artists"). by("name"). by(__.coalesce(out("sungBy", "writtenBy").dedup().values("name"), constant("Unknown")).fold()); } }
@Override public Traversal<Edge, Edge> get_g_addEXV_outE_label_groupCount_orderXlocalX_byXvalues_descX_selectXkeysX_unfold_limitX1XX_fromXV_hasXname_vadasXX_toXV_hasXname_lopXX() { return g.addE(V().outE().label().groupCount().order(local).by(values, desc).select(keys).<String>unfold().limit(1)).from(V().has("name", "vadas")).to(V().has("name", "lop")); } }
@Test @FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE) public void shouldAppendPartitionToEdge() { final PartitionStrategy partitionStrategy = PartitionStrategy.build() .partitionKey(partition).writePartition("A").readPartitions("A").create(); final GraphTraversalSource source = g.withStrategies(partitionStrategy); final Vertex v1 = source.addV().property("any", "thing").next(); final Vertex v2 = source.addV().property("some", "thing").next(); final Edge e = source.withSideEffect("v2", v2).V(v1.id()).addE("connectsTo").from("v2").property("every", "thing").next(); assertNotNull(v1); assertEquals("thing", g.V(v1).values("any").next()); assertEquals("A", g.V(v2).values(partition).next()); assertNotNull(v2); assertEquals("thing", g.V(v2).values("some").next()); assertEquals("A", g.V(v2).values(partition).next()); assertNotNull(e); assertEquals("thing", g.E(e).values("every").next()); assertEquals("connectsTo", e.label()); assertEquals("A", g.E(e).values(partition).next()); }