List<Vertex> partitions; if (abstractLabel instanceof VertexLabel) { partitions = traversalSource.V() .hasLabel(SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_SCHEMA) .has("name", abstractLabel.getSchema().getName()) .out(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE) .has(SQLG_SCHEMA_VERTEX_LABEL_NAME, abstractLabel.getName()) .repeat(__.out(SQLG_SCHEMA_VERTEX_PARTITION_EDGE, SQLG_SCHEMA_PARTITION_PARTITION_EDGE)) .until(__.has(SQLG_SCHEMA_PARTITION_NAME, partition.getName())) .toList(); partitions = traversalSource.V() .hasLabel(SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_SCHEMA) .has("name", abstractLabel.getSchema().getName()) .out(SQLG_SCHEMA_OUT_EDGES_EDGE) .has(SQLG_SCHEMA_EDGE_LABEL_NAME, abstractLabel.getName()) .repeat(__.out(SQLG_SCHEMA_EDGE_PARTITION_EDGE, SQLG_SCHEMA_PARTITION_PARTITION_EDGE)) .until(__.has(SQLG_SCHEMA_PARTITION_NAME, partition.getName())) .toList(); Preconditions.checkState(partitions.size() == 1); Vertex partitionVertex = partitions.get(0); partitionVertex.remove();
@Test @LoadGraphWith(MODERN) public void shouldNotHaveAnonymousTraversalMixups() throws Exception { if (!g.getStrategies().getStrategy(TranslationStrategy.class).isPresent()) { logger.debug("No " + TranslationStrategy.class.getSimpleName() + " is registered and thus, skipping test."); return; } final GraphTraversalSource a = g; final GraphTraversalSource b = g.withoutStrategies(TranslationStrategy.class); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(6l, a.V().out().count().next().longValue()); assertEquals(6l, b.V().out().count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assertEquals(2l, a.V().repeat(__.out()).times(2).count().next().longValue()); assertEquals(2l, b.V().repeat(__.out()).times(2).count().next().longValue()); assert a.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); assert !b.getStrategies().getStrategy(TranslationStrategy.class).isPresent(); }
List<Vertex> partitions; if (abstractLabel instanceof VertexLabel) { partitions = traversalSource.V() .hasLabel(SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_SCHEMA) .has("name", abstractLabel.getSchema().getName()) .out(SQLG_SCHEMA_SCHEMA_VERTEX_EDGE) .has(SQLG_SCHEMA_VERTEX_LABEL_NAME, abstractLabel.getName()) .repeat(__.out(SQLG_SCHEMA_VERTEX_PARTITION_EDGE, SQLG_SCHEMA_PARTITION_PARTITION_EDGE)) .until(__.has(SQLG_SCHEMA_PARTITION_NAME, partition.getName())) .toList(); partitions = traversalSource.V() .hasLabel(SQLG_SCHEMA + "." + Topology.SQLG_SCHEMA_SCHEMA) .has("name", abstractLabel.getSchema().getName()) .out(SQLG_SCHEMA_OUT_EDGES_EDGE) .has(SQLG_SCHEMA_EDGE_LABEL_NAME, abstractLabel.getName()) .repeat(__.out(SQLG_SCHEMA_EDGE_PARTITION_EDGE, SQLG_SCHEMA_PARTITION_PARTITION_EDGE)) .until(__.has(SQLG_SCHEMA_PARTITION_NAME, partition.getName())) .toList(); Preconditions.checkState(partitions.size() == 1); Vertex partitionVertex = partitions.get(0); partitionVertex.remove();
@Test @LoadGraphWith(MODERN) public void shouldSucceedWithProperTraverserRequirements() throws Exception { final VertexProgramQ vp = VertexProgramQ.build().property("pl").create(); final Map<String, List<Integer>> expected = new HashMap<>(); expected.put("vadas", Collections.singletonList(2)); expected.put("lop", Arrays.asList(2, 2, 2, 3)); expected.put("josh", Collections.singletonList(2)); expected.put("ripple", Arrays.asList(2, 3)); try { g.V().repeat(__.out()).emit().program(vp).dedup() .valueMap("name", "pl").forEachRemaining((Map<Object, Object> map) -> { final String name = (String) ((List) map.get("name")).get(0); final List<Integer> pathLengths = (List<Integer>) map.get("pl"); assertTrue(expected.containsKey(name)); final List<Integer> expectedPathLengths = expected.remove(name); assertTrue(expectedPathLengths.containsAll(pathLengths)); assertTrue(pathLengths.containsAll(expectedPathLengths)); }); assertTrue(expected.isEmpty()); } catch (VerificationException ex) { assumeNoException(ex); } }
@Override public Traversal<Vertex, Map<Object, List<Object>>> get_g_V_hasXname_rippleX_inXcreatedX_peerPressure_withXedges_outEX_withXpropertyName_clusterX_repeatXunionXidentity__bothX_timesX2X_dedup_valueMapXname_clusterX() { return g.V().has("name", "ripple").in("created").peerPressure().with(PeerPressure.edges,__.outE()).with(PeerPressure.propertyName, "cluster").repeat(__.union(__.identity(), __.both())).times(2).dedup().valueMap("name", "cluster"); } }
try { GraphTraversalSource traversalSource = sqlgGraph.topology(); List<Vertex> vertices = traversalSource.V() .hasLabel(SQLG_SCHEMA + "." + SQLG_SCHEMA_SCHEMA) .has("name", schema) .has("name", abstractLabel) .toList(); if (vertices.size() == 0) { throw new IllegalStateException("Found no vertex for " + schema + "." + abstractLabel); .has("name", abstractLabel) .out(SQLG_SCHEMA_VERTEX_PARTITION_EDGE) .repeat(__.out(SQLG_SCHEMA_PARTITION_PARTITION_EDGE)) .until(__.has("name", partitionParent)) .toList(); .has("name", abstractLabel) .out(SQLG_SCHEMA_EDGE_PARTITION_EDGE) .repeat(__.out(SQLG_SCHEMA_PARTITION_PARTITION_EDGE)) .until(__.has("name", partitionParent)) .toList();