@Test @LoadGraphWith(MODERN) public void g_V_hasXname_markoX_repeatXoutE_inV_simplePathX_untilXhasXname_rippleXX_path_byXnameX_byXlabelX() { final Traversal<Vertex, Path> traversal = get_g_V_hasXname_markoX_repeatXoutE_inV_simplePathX_untilXhasXname_rippleXX_path_byXnameX_byXlabelX(); printTraversalForm(traversal); final Path path = traversal.next(); assertFalse(traversal.hasNext()); assertEquals(5, path.size()); assertEquals("marko", path.get(0)); assertEquals("knows", path.get(1)); assertEquals("josh", path.get(2)); assertEquals("created", path.get(3)); assertEquals("ripple", path.get(4)); }
assertEquals(p.labels().size(), detached.labels().size()); assertEquals(p.labels().get(0).size(), detached.labels().get(0).size()); assertEquals(p.labels().get(1).size(), detached.labels().get(1).size()); assertEquals(p.labels().get(2).size(), detached.labels().get(2).size()); assertTrue(p.labels().stream().flatMap(Collection::stream).allMatch(detached::hasLabel)); final Vertex vOut = p.get("a"); final Vertex detachedVOut = detached.get("a"); assertEquals(vOut.label(), detachedVOut.label()); assertEquals(vOut.id(), detachedVOut.id()); final Edge e = p.get("b"); final Edge detachedE = detached.get("b"); assertEquals(e.label(), detachedE.label()); assertEquals(e.id(), detachedE.id()); final Vertex vIn = p.get("c"); final Vertex detachedVIn = detached.get("c"); assertEquals(vIn.label(), detachedVIn.label()); assertEquals(vIn.id(), detachedVIn.id());
GraphTraversal<Vertex, Vertex> vertexs = g.V(); System.out.println(">>>> query all vertices: size=" + vertexs.toList().size()); edges.size()); names = g.V().as("a") .out("knows") .and() assert vertex.size() == 1 && vertex.get(0).value("name").equals("lop"); List<Path> paths = g.V(markoId).out().out().path().by("name").toList(); System.out.println(">>>> test out path: " + paths); assert paths.size() == 2; assert paths.get(0).get(0).equals("marko"); assert paths.get(0).get(1).equals("josh"); assert paths.get(0).get(2).equals("lop"); assert paths.get(1).get(0).equals("marko"); assert paths.get(1).get(1).equals("josh"); assert paths.get(1).get(2).equals("ripple"); assert paths.get(0).get(0).equals("marko"); assert paths.get(0).get(1).equals("lop");
.V(schemaVertex) .out(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE).as("vertex") .in(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE).as("inSchema") .path() .toList(); for (Path inEdgePath : inEdges) { switch (label) { case "vertex": vertexVertex = inEdgePath.get("vertex"); break; case "outEdgeVertex": outEdgeVertex = inEdgePath.get("outEdgeVertex"); break; case "inVertex": inVertex = inEdgePath.get("inVertex"); break; case "inSchema": inSchemaVertex = inEdgePath.get("inSchema"); break; case "sqlgPathFakeLabel":
switch (label) { case "vertex": vertexVertex = vertexPath.get("vertex"); break; case "property_partition": vertexPropertyPartitionVertex = vertexPath.get("property_partition"); break; case "sqlgPathFakeLabel": case "subPartition": Preconditions.checkState(vertexPropertyPartitionVertex != null); subPartition = vertexPath.get("subPartition"); partitionParentVertex = vertexPath.get(vertexPath.size() - 2); partitionParentParentElement = vertexPath.get(vertexPath.size() - 3); break; case "edgeToProperty": edgeToIdentierOrColocate = vertexPath.get("edgeToProperty"); break; case MARKER: switch (label) { case "vertex": vertexVertex = outEdgePath.get("vertex"); break; case "outEdgeVertex": outEdgeVertex = outEdgePath.get("outEdgeVertex"); break; case "property_partition": edgePropertyPartitionVertex = outEdgePath.get("property_partition");
@Test @LoadGraphWith(MODERN) public void g_V_out_out_path_byXnameX_byXageX() { final Traversal<Vertex, Path> traversal = get_g_V_out_out_path_byXnameX_byXageX(); printTraversalForm(traversal); int counter = 0; while (traversal.hasNext()) { counter++; final Path path = traversal.next(); assertEquals(3, path.size()); assertEquals("marko", path.<String>get(0)); assertEquals(Integer.valueOf(32), path.<Integer>get(1)); assertTrue(path.get(2).equals("lop") || path.get(2).equals("ripple")); } assertEquals(2, counter); }
assertEquals(p.labels().size(), detached.labels().size()); assertEquals(p.labels().get(0).size(), detached.labels().get(0).size()); assertEquals(p.labels().get(1).size(), detached.labels().get(1).size()); assertEquals(p.labels().get(2).size(), detached.labels().get(2).size()); assertTrue(p.labels().stream().flatMap(Collection::stream).allMatch(detached::hasLabel)); final Vertex vOut = p.get("a"); final Vertex detachedVOut = detached.get("a"); assertEquals(vOut.label(), detachedVOut.label()); assertEquals(vOut.id(), detachedVOut.id()); final Edge e = p.get("b"); final Edge detachedE = detached.get("b"); assertEquals(e.label(), detachedE.label()); assertEquals(e.id(), detachedE.id()); final Vertex vIn = p.get("c"); final Vertex detachedVIn = detached.get("c"); assertEquals(vIn.label(), detachedVIn.label()); assertEquals(vIn.id(), detachedVIn.id());
private void mapRelations( Features features, GraphTraversalSource fromTraversal, GraphTraversalSource destTraversal) { fromTraversal .V() .in(MENTION_OF) .outE(RELATION) .inV() .out(MENTION_OF) .path() .sideEffect( tp -> { Path path = tp.get(); Vertex source = path.get(0); Edge relation = path.get(2); Vertex target = path.get(4); GraphTraversal<Vertex, Vertex> sourceTraversal = destTraversal.V(source.id()); GraphTraversal<Vertex, Vertex> targetTraversal = destTraversal.V(target.id()); if (sourceTraversal.hasNext() && targetTraversal.hasNext()) { Vertex destSource = sourceTraversal.next(); Vertex destTarget = targetTraversal.next(); Edge destRelation = destSource.addEdge(RELATION, destTarget, id, relation.id()); copyProperties(features, relation, destRelation); } }) .iterate(); }
switch (label) { case "vertex": vertexVertex = vertexPath.get("vertex"); break; case "property_partition": vertexPropertyPartitionVertex = vertexPath.get("property_partition"); break; case "sqlgPathFakeLabel": case "subPartition": Preconditions.checkState(vertexPropertyPartitionVertex != null); subPartition = vertexPath.get("subPartition"); partitionParentVertex = vertexPath.get(vertexPath.size() - 2); partitionParentParentElement = vertexPath.get(vertexPath.size() - 3); break; case "edgeToProperty": edgeToIdentierOrColocate = vertexPath.get("edgeToProperty"); break; case MARKER: switch (label) { case "vertex": vertexVertex = outEdgePath.get("vertex"); break; case "outEdgeVertex": outEdgeVertex = outEdgePath.get("outEdgeVertex"); break; case "property_partition": edgePropertyPartitionVertex = outEdgePath.get("property_partition");
@Test @LoadGraphWith(MODERN) public void g_V_coalesceXoutEXknowsX_outEXcreatedXX_otherV_path_byXnameX_byXlabelX() { final Traversal<Vertex, Path> traversal = get_g_V_coalesceXoutEXknowsX_outEXcreatedXX_otherV_path_byXnameX_byXlabelX(); printTraversalForm(traversal); final Map<String, Integer> first = new HashMap<>(); final Map<String, Integer> last = new HashMap<>(); int counter = 0; while (traversal.hasNext()) { counter++; final Path path = traversal.next(); first.compute(path.<String>get(0), (k, v) -> v != null ? v + 1 : 1); last.compute(path.<String>get(2), (k, v) -> v != null ? v + 1 : 1); assertEquals(3, path.size()); assertTrue((path.<String>get(0).equals("marko") && path.<String>get(1).equals("knows") && path.<String>get(2).equals("vadas")) || (path.<String>get(0).equals("marko") && path.<String>get(1).equals("knows") && path.<String>get(2).equals("josh")) || (path.<String>get(0).equals("josh") && path.<String>get(1).equals("created") && path.<String>get(2).equals("lop")) || (path.<String>get(0).equals("josh") && path.<String>get(1).equals("created") && path.<String>get(2).equals("ripple")) || (path.<String>get(0).equals("peter") && path.<String>get(1).equals("created") && path.<String>get(2).equals("lop"))); } assertEquals(5, counter); assertEquals(2, (int) first.get("marko")); assertEquals(2, (int) first.get("josh")); assertEquals(1, (int) first.get("peter")); assertEquals(1, (int) last.get("josh")); assertEquals(1, (int) last.get("vadas")); assertEquals(2, (int) last.get("lop")); assertEquals(1, (int) last.get("ripple")); assertFalse(traversal.hasNext()); }
@Test @LoadGraphWith(LoadGraphWith.GraphData.MODERN) public void shouldSerializePathAsDetached() throws Exception { final GryoReader gryoReader = gryoIo.reader().create(); final Path p = g.V(convertToVertexId("marko")).as("a").outE().as("b").inV().as("c").path() .filter(t -> ((Vertex) t.get().objects().get(2)).value("name").equals("lop")).next(); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); final Vertex vOut = p.get("a"); final Vertex detachedVOut = detached.get("a"); assertEquals(vOut.label(), detachedVOut.label()); assertEquals(vOut.id(), detachedVOut.id()); final Edge e = p.get("b"); final Edge detachedE = detached.get("b"); assertEquals(e.label(), detachedE.label()); assertEquals(e.id(), detachedE.id()); final Vertex vIn = p.get("c"); final Vertex detachedVIn = detached.get("c"); assertEquals(vIn.label(), detachedVIn.label()); assertEquals(vIn.id(), detachedVIn.id());
.V(schemaVertex) .out(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE).as("vertex") .in(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE).as("inSchema") .path() .toList(); for (Path inEdgePath : inEdges) { switch (label) { case "vertex": vertexVertex = inEdgePath.get("vertex"); break; case "outEdgeVertex": outEdgeVertex = inEdgePath.get("outEdgeVertex"); break; case "inVertex": inVertex = inEdgePath.get("inVertex"); break; case "inSchema": inSchemaVertex = inEdgePath.get("inSchema"); break; case "sqlgPathFakeLabel":
@Test @LoadGraphWith(MODERN) public void g_VX1X_out_path_byXageX_byXnameX() { final Traversal<Vertex, Path> traversal = get_g_VX1X_out_path_byXageX_byXnameX(convertToVertexId("marko")); printTraversalForm(traversal); int counter = 0; final Set<String> names = new HashSet<>(); while (traversal.hasNext()) { counter++; final Path path = traversal.next(); assertEquals(Integer.valueOf(29), path.<Integer>get(0)); assertTrue(path.get(1).equals("josh") || path.get(1).equals("vadas") || path.get(1).equals("lop")); names.add(path.get(1)); } assertEquals(3, counter); assertEquals(3, names.size()); }
@Test @LoadGraphWith(LoadGraphWith.GraphData.MODERN) public void shouldSerializePathAsDetached() throws Exception { final GryoReader gryoReader = gryoIo.reader().create(); final Path p = g.V(convertToVertexId("marko")).as("a").outE().as("b").inV().as("c").path() .filter(t -> ((Vertex) t.get().objects().get(2)).value("name").equals("lop")).next(); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); final Vertex vOut = p.get("a"); final Vertex detachedVOut = detached.get("a"); assertEquals(vOut.label(), detachedVOut.label()); assertEquals(vOut.id(), detachedVOut.id()); final Edge e = p.get("b"); final Edge detachedE = detached.get("b"); assertEquals(e.label(), detachedE.label()); assertEquals(e.id(), detachedE.id()); final Vertex vIn = p.get("c"); final Vertex detachedVIn = detached.get("c"); assertEquals(vIn.label(), detachedVIn.label()); assertEquals(vIn.id(), detachedVIn.id());
private void mapRelations( Features features, GraphTraversalSource fromTraversal, GraphTraversalSource destTraversal) { fromTraversal .V() .in(MENTION_OF) .outE(RELATION) .inV() .out(MENTION_OF) .path() .sideEffect( tp -> { Path path = tp.get(); Vertex source = path.get(0); Edge relation = path.get(2); Vertex target = path.get(4); GraphTraversal<Vertex, Vertex> sourceTraversal = destTraversal.V(source.id()); GraphTraversal<Vertex, Vertex> targetTraversal = destTraversal.V(target.id()); if (sourceTraversal.hasNext() && targetTraversal.hasNext()) { Vertex destSource = sourceTraversal.next(); Vertex destTarget = targetTraversal.next(); Edge destRelation = destSource.addEdge(RELATION, destTarget, id, relation.id()); copyProperties(features, relation, destRelation); } }) .iterate(); }
@Test @LoadGraphWith(MODERN) public void g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_and_loops_isX3XX_hasXname_peterX_path_byXnameX() { final Traversal<Vertex, Path> traversal = get_g_VX1X_repeatXboth_simplePathX_untilXhasXname_peterX_and_loops_isX3XX_hasXname_peterX_path_byXnameX(convertToVertexId("marko")); printTraversalForm(traversal); assertTrue(traversal.hasNext()); final Path path = traversal.next(); assertEquals(4, path.size()); assertEquals("marko", path.get(0)); assertEquals("josh", path.get(1)); assertEquals("lop", path.get(2)); assertEquals("peter", path.get(3)); assertFalse(traversal.hasNext()); }
assertEquals(p.labels().size(), detached.labels().size()); assertEquals(p.labels().get(0).size(), detached.labels().get(0).size()); assertEquals(p.labels().get(1).size(), detached.labels().get(1).size()); assertEquals(p.labels().get(2).size(), detached.labels().get(2).size()); assertTrue(p.labels().stream().flatMap(Collection::stream).allMatch(detached::hasLabel)); final Vertex vOut = p.get("a"); final Vertex detachedVOut = detached.get("a"); assertEquals(vOut.label(), detachedVOut.label()); assertEquals(vOut.id(), detachedVOut.id()); final Edge e = p.get("b"); final Edge detachedE = detached.get("b"); assertEquals(e.label(), detachedE.label()); assertEquals(e.id(), detachedE.id()); final Vertex vIn = p.get("c"); final Vertex detachedVIn = detached.get("c"); assertEquals(vIn.label(), detachedVIn.label()); assertEquals(vIn.id(), detachedVIn.id());
.V(schemaVertex) .out(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE).as("vertex") .out(SQLG_SCHEMA_OUT_EDGES_EDGE).as("outEdgeVertex") .order().by(SQLG_SCHEMA_INDEX_PROPERTY_EDGE_SEQUENCE) .inV().as("property") .path() .toList(); for (Path vertexIndices : indices) { switch (label) { case "vertex": vertexVertex = vertexIndices.get("vertex"); break; case "outEdgeVertex": vertexEdge = vertexIndices.get("outEdgeVertex"); break; case "index": vertexIndex = vertexIndices.get("index"); break; case "property": propertyIndex = vertexIndices.get("property"); break; case BaseStrategy.SQLG_PATH_FAKE_LABEL:
@Test @LoadGraphWith(MODERN) public void g_V_hasLabelXpersonX_optionalXoutXknowsX_optionalXoutXcreatedXXX_path() { final Traversal<Vertex, Path> traversal = get_g_V_hasLabelXpersonX_optionalXoutXknowsX_optionalXoutXcreatedXXX_path(); printTraversalForm(traversal); List<Path> paths = traversal.toList(); assertEquals(6, paths.size()); List<Predicate<Path>> pathsToAssert = Arrays.asList( p -> p.size() == 2 && p.get(0).equals(convertToVertex(this.graph, "marko")) && p.get(1).equals(convertToVertex(this.graph, "vadas")), p -> p.size() == 3 && p.get(0).equals(convertToVertex(this.graph, "marko")) && p.get(1).equals(convertToVertex(this.graph, "josh")) && p.get(2).equals(convertToVertex(this.graph, "ripple")), p -> p.size() == 3 && p.get(0).equals(convertToVertex(this.graph, "marko")) && p.get(1).equals(convertToVertex(this.graph, "josh")) && p.get(2).equals(convertToVertex(this.graph, "lop")), p -> p.size() == 1 && p.get(0).equals(convertToVertex(this.graph, "vadas")), p -> p.size() == 1 && p.get(0).equals(convertToVertex(this.graph, "josh")), p -> p.size() == 1 && p.get(0).equals(convertToVertex(this.graph, "peter")) ); for (Predicate<Path> pathPredicate : pathsToAssert) { Optional<Path> path = paths.stream().filter(pathPredicate).findAny(); assertTrue(path.isPresent()); assertTrue(paths.remove(path.get())); } assertTrue(paths.isEmpty()); }
@Test @LoadGraphWith(LoadGraphWith.GraphData.MODERN) public void shouldSerializePathAsDetached() throws Exception { final GryoReader gryoReader = gryoIo.reader().create(); final Path p = g.V(convertToVertexId("marko")).as("a").outE().as("b").inV().as("c").path() .filter(t -> ((Vertex) t.get().objects().get(2)).value("name").equals("lop")).next(); final ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); final Vertex vOut = p.get("a"); final Vertex detachedVOut = detached.get("a"); assertEquals(vOut.label(), detachedVOut.label()); assertEquals(vOut.id(), detachedVOut.id()); final Edge e = p.get("b"); final Edge detachedE = detached.get("b"); assertEquals(e.label(), detachedE.label()); assertEquals(e.id(), detachedE.id()); final Vertex vIn = p.get("c"); final Vertex detachedVIn = detached.get("c"); assertEquals(vIn.label(), detachedVIn.label()); assertEquals(vIn.id(), detachedVIn.id());