use of org.umlg.sqlg.step.SqlgVertexStep in project sqlg by pietermartin.
the class TestLocalVertexStepOptionalWithOrder method testVertexStepAfterOptional.
@Test
public void testVertexStepAfterOptional() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "order", 1);
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "order", 1);
Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "order", 1);
Vertex b3 = this.sqlgGraph.addVertex(T.label, "B", "order", 1);
a1.addEdge("ab", b1);
a1.addEdge("ab", b2);
a1.addEdge("ab", b3);
Vertex c1 = this.sqlgGraph.addVertex(T.label, "C", "order", 1);
Vertex c2 = this.sqlgGraph.addVertex(T.label, "C", "order", 1);
Vertex c3 = this.sqlgGraph.addVertex(T.label, "C", "order", 1);
b1.addEdge("bc", c1);
b1.addEdge("bc", c2);
b1.addEdge("bc", c3);
Vertex d1 = this.sqlgGraph.addVertex(T.label, "D", "order", 1);
Vertex d2 = this.sqlgGraph.addVertex(T.label, "D", "order", 2);
Vertex d3 = this.sqlgGraph.addVertex(T.label, "D", "order", 3);
c1.addEdge("cd", d1);
c1.addEdge("cd", d2);
c1.addEdge("cd", d3);
Vertex a2 = this.sqlgGraph.addVertex(T.label, "A", "order", 1);
Vertex bb1 = this.sqlgGraph.addVertex(T.label, "BB", "order", -1);
Vertex bb2 = this.sqlgGraph.addVertex(T.label, "BB", "order", -2);
Vertex bb3 = this.sqlgGraph.addVertex(T.label, "BB", "order", -3);
a2.addEdge("abb", bb1);
a2.addEdge("abb", bb2);
a2.addEdge("abb", bb3);
this.sqlgGraph.tx().commit();
DefaultGraphTraversal<Vertex, Vertex> traversal = (DefaultGraphTraversal<Vertex, Vertex>) this.sqlgGraph.traversal().V().hasLabel("A").local(__.optional(__.out("ab").optional(__.out()))).out().order().by("order", Order.decr);
Assert.assertEquals(5, traversal.getSteps().size());
List<Vertex> vertices = traversal.toList();
Assert.assertEquals(3, traversal.getSteps().size());
Assert.assertTrue(traversal.getSteps().get(0) instanceof SqlgGraphStep);
Assert.assertTrue(traversal.getSteps().get(1) instanceof SqlgLocalStepBarrier);
Assert.assertTrue(traversal.getSteps().get(2) instanceof SqlgVertexStep);
SqlgLocalStepBarrier<?, ?> localStep = (SqlgLocalStepBarrier<?, ?>) traversal.getSteps().get(1);
List<SqlgVertexStep> sqlgVertexSteps = TraversalHelper.getStepsOfAssignableClassRecursively(SqlgVertexStep.class, localStep.getLocalChildren().get(0));
Assert.assertEquals(1, sqlgVertexSteps.size());
Assert.assertEquals(6, vertices.size());
Assert.assertEquals(d3, vertices.get(0));
Assert.assertEquals(d2, vertices.get(1));
Assert.assertEquals(d1, vertices.get(2));
Assert.assertEquals(bb1, vertices.get(3));
Assert.assertEquals(bb2, vertices.get(4));
Assert.assertEquals(bb3, vertices.get(5));
}
use of org.umlg.sqlg.step.SqlgVertexStep in project sqlg by pietermartin.
the class TestLocalVertexStepOptionalWithOrder method testOptionalWithOrderBy2.
@Test
public void testOptionalWithOrderBy2() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "name", "b1");
Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "name", "b2");
Vertex b3 = this.sqlgGraph.addVertex(T.label, "B", "name", "b3");
Vertex c1 = this.sqlgGraph.addVertex(T.label, "C", "name", "c1");
Vertex c2 = this.sqlgGraph.addVertex(T.label, "C", "name", "c2");
Vertex c3 = this.sqlgGraph.addVertex(T.label, "C", "name", "c3");
Vertex d1 = this.sqlgGraph.addVertex(T.label, "D", "name", "d1");
Vertex d2 = this.sqlgGraph.addVertex(T.label, "D", "name", "d2");
Vertex d3 = this.sqlgGraph.addVertex(T.label, "D", "name", "d3");
Edge ab1 = a1.addEdge("ab", b1, "order", 3);
Edge ab2 = a1.addEdge("ab", b2, "order", 2);
Edge ab3 = a1.addEdge("ab", b3, "order", 1);
Edge bc1 = b1.addEdge("bc", c1, "order", 3);
Edge bc2 = b1.addEdge("bc", c2, "order", 2);
Edge bc3 = b1.addEdge("bc", c3, "order", 1);
Edge cd1 = c1.addEdge("cd", d1, "order", 3);
Edge cd2 = c1.addEdge("cd", d2, "order", 2);
Edge cd3 = c1.addEdge("cd", d3, "order", 1);
this.sqlgGraph.tx().commit();
DefaultGraphTraversal<Vertex, Path> traversal = (DefaultGraphTraversal<Vertex, Path>) this.sqlgGraph.traversal().V(a1.id()).local(__.optional(__.outE("ab").as("ab").otherV().as("vb").order().by(__.select("ab").by("order"), Order.incr).optional(__.outE("bc").as("bc").otherV().as("vc").order().by(__.select("bc").by("order"), Order.incr).optional(__.outE("cd").as("cd").inV().as("vd").order().by(__.select("cd").by("order"), Order.incr))))).path();
Assert.assertEquals(3, traversal.getSteps().size());
List<Path> paths = traversal.toList();
Assert.assertEquals(3, traversal.getSteps().size());
Assert.assertTrue(traversal.getSteps().get(0) instanceof SqlgGraphStep);
Assert.assertTrue(traversal.getSteps().get(1) instanceof SqlgLocalStepBarrier);
Assert.assertTrue(traversal.getSteps().get(2) instanceof PathStep);
SqlgLocalStepBarrier<?, ?> localStep = (SqlgLocalStepBarrier<?, ?>) traversal.getSteps().get(1);
List<SqlgVertexStep> sqlgVertexSteps = TraversalHelper.getStepsOfAssignableClassRecursively(SqlgVertexStep.class, localStep.getLocalChildren().get(0));
Assert.assertEquals(1, sqlgVertexSteps.size());
Assert.assertEquals(7, paths.size());
Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 5 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc3) && p.get(4).equals(c3)));
paths.remove(paths.stream().filter(p -> p.size() == 5 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc3) && p.get(4).equals(c3)).findAny().get());
Assert.assertEquals(6, paths.size());
Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 5 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc2) && p.get(4).equals(c2)));
paths.remove(paths.stream().filter(p -> p.size() == 5 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc2) && p.get(4).equals(c2)).findAny().get());
Assert.assertEquals(5, paths.size());
Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 7 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc1) && p.get(4).equals(c1) && p.get(5).equals(cd1) && p.get(6).equals(d1)));
paths.remove(paths.stream().filter(p -> p.size() == 7 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc1) && p.get(4).equals(c1) && p.get(5).equals(cd1) && p.get(6).equals(d1)).findAny().get());
Assert.assertEquals(4, paths.size());
Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 7 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc1) && p.get(4).equals(c1) && p.get(5).equals(cd2) && p.get(6).equals(d2)));
paths.remove(paths.stream().filter(p -> p.size() == 7 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc1) && p.get(4).equals(c1) && p.get(5).equals(cd2) && p.get(6).equals(d2)).findAny().get());
Assert.assertEquals(3, paths.size());
Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 7 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc1) && p.get(4).equals(c1) && p.get(5).equals(cd3) && p.get(6).equals(d3)));
paths.remove(paths.stream().filter(p -> p.size() == 7 && p.get(0).equals(a1) && p.get(1).equals(ab1) && p.get(2).equals(b1) && p.get(3).equals(bc1) && p.get(4).equals(c1) && p.get(5).equals(cd3) && p.get(6).equals(d3)).findAny().get());
Assert.assertEquals(2, paths.size());
Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(ab2) && p.get(2).equals(b2)));
paths.remove(paths.stream().filter(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(ab2) && p.get(2).equals(b2)).findAny().get());
Assert.assertEquals(1, paths.size());
Assert.assertTrue(paths.stream().anyMatch(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(ab3) && p.get(2).equals(b3)));
paths.remove(paths.stream().filter(p -> p.size() == 3 && p.get(0).equals(a1) && p.get(1).equals(ab3) && p.get(2).equals(b3)).findAny().get());
Assert.assertEquals(0, paths.size());
}
use of org.umlg.sqlg.step.SqlgVertexStep in project sqlg by pietermartin.
the class TestLocalVertexStepOptionalWithOrder method testOptionalWithOrder2.
@Test
public void testOptionalWithOrder2() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "order", 13);
Vertex a2 = this.sqlgGraph.addVertex(T.label, "A", "order", 12);
Vertex a3 = this.sqlgGraph.addVertex(T.label, "A", "order", 11);
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "order", 3);
Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "order", 2);
Vertex b3 = this.sqlgGraph.addVertex(T.label, "B", "order", 1);
a1.addEdge("ab", b1);
a1.addEdge("ab", b2);
a1.addEdge("ab", b3);
this.sqlgGraph.tx().commit();
DefaultGraphTraversal<Vertex, Vertex> traversal = (DefaultGraphTraversal<Vertex, Vertex>) this.sqlgGraph.traversal().V().hasLabel("A").as("a").local(__.optional(__.outE().as("e").otherV().as("v"))).order().by("order");
Assert.assertEquals(4, traversal.getSteps().size());
List<Vertex> vertices = traversal.toList();
Assert.assertEquals(4, traversal.getSteps().size());
Assert.assertTrue(traversal.getSteps().get(0) instanceof SqlgGraphStep);
Assert.assertTrue(traversal.getSteps().get(1) instanceof IdentityStep);
Assert.assertTrue(traversal.getSteps().get(2) instanceof SqlgLocalStepBarrier);
Assert.assertTrue(traversal.getSteps().get(3) instanceof OrderGlobalStep);
SqlgLocalStepBarrier<?, ?> localStep = (SqlgLocalStepBarrier<?, ?>) traversal.getSteps().get(2);
List<SqlgVertexStep> sqlgVertexSteps = TraversalHelper.getStepsOfAssignableClassRecursively(SqlgVertexStep.class, localStep.getLocalChildren().get(0));
Assert.assertEquals(1, sqlgVertexSteps.size());
Assert.assertEquals(5, vertices.size());
Assert.assertEquals(b3, vertices.get(0));
Assert.assertEquals(b2, vertices.get(1));
Assert.assertEquals(b1, vertices.get(2));
Assert.assertEquals(a3, vertices.get(3));
Assert.assertEquals(a2, vertices.get(4));
}
use of org.umlg.sqlg.step.SqlgVertexStep in project sqlg by pietermartin.
the class TestLocalVertexStepOptionalWithOrder method testSimpleButLessSo.
@Test
public void testSimpleButLessSo() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "order", 1);
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "order", 1);
Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "order", 2);
Vertex b3 = this.sqlgGraph.addVertex(T.label, "B", "order", 3);
Vertex a12 = this.sqlgGraph.addVertex(T.label, "A", "order", 10);
Vertex b12 = this.sqlgGraph.addVertex(T.label, "B", "order", 1);
Vertex b22 = this.sqlgGraph.addVertex(T.label, "B", "order", 2);
Vertex b32 = this.sqlgGraph.addVertex(T.label, "B", "order", 3);
a1.addEdge("ab", b1);
a1.addEdge("ab", b2);
a1.addEdge("ab", b3);
a12.addEdge("ab", b12);
a12.addEdge("ab", b22);
a12.addEdge("ab", b32);
this.sqlgGraph.tx().commit();
DefaultGraphTraversal<Vertex, Vertex> traversal = (DefaultGraphTraversal<Vertex, Vertex>) this.sqlgGraph.traversal().V().hasLabel("A").as("a").local(__.out().as("b")).order().by(__.select("a").by("order"), Order.decr).by(__.select("b").by("order"), Order.decr);
Assert.assertEquals(4, traversal.getSteps().size());
List<Vertex> vertices = traversal.toList();
Assert.assertEquals(4, traversal.getSteps().size());
Assert.assertTrue(traversal.getSteps().get(2) instanceof SqlgLocalStepBarrier);
SqlgLocalStepBarrier<?, ?> localStep = (SqlgLocalStepBarrier<?, ?>) traversal.getSteps().get(2);
List<SqlgVertexStep> sqlgVertexSteps = TraversalHelper.getStepsOfAssignableClassRecursively(SqlgVertexStep.class, localStep.getLocalChildren().get(0));
Assert.assertEquals(1, sqlgVertexSteps.size());
SqlgVertexStep sqlgVertexStep = sqlgVertexSteps.get(0);
assertStep(sqlgVertexStep, false, false, false, true);
Assert.assertEquals(6, vertices.size());
Assert.assertEquals(b32, vertices.get(0));
Assert.assertEquals(b22, vertices.get(1));
Assert.assertEquals(b12, vertices.get(2));
Assert.assertEquals(b3, vertices.get(3));
Assert.assertEquals(b2, vertices.get(4));
Assert.assertEquals(b1, vertices.get(5));
}
use of org.umlg.sqlg.step.SqlgVertexStep in project sqlg by pietermartin.
the class TestLocalVertexStepOptional method testOptional.
@Test
public void testOptional() {
Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
Vertex b1 = this.sqlgGraph.addVertex(T.label, "B", "name", "b1");
Vertex b2 = this.sqlgGraph.addVertex(T.label, "B", "name", "b2");
a1.addEdge("ab", b1);
a1.addEdge("ab", b2);
this.sqlgGraph.tx().commit();
DefaultGraphTraversal<Vertex, Path> traversal = (DefaultGraphTraversal<Vertex, Path>) this.sqlgGraph.traversal().V(a1).local(__.optional(__.out()).path());
List<Path> paths = traversal.toList();
Assert.assertEquals(2, traversal.getSteps().size());
Assert.assertTrue(traversal.getSteps().get(1) instanceof SqlgLocalStepBarrier);
SqlgLocalStepBarrier<?, ?> localStep = (SqlgLocalStepBarrier) traversal.getSteps().get(1);
List<SqlgVertexStep> sqlgVertexStepCompileds = TraversalHelper.getStepsOfAssignableClassRecursively(SqlgVertexStep.class, localStep.getLocalChildren().get(0));
Assert.assertEquals(1, sqlgVertexStepCompileds.size());
SqlgVertexStep sqlgVertexStepCompiled = sqlgVertexStepCompileds.get(0);
// isForMultipleQueries is arbitary
assertStep(sqlgVertexStepCompiled, false, false, true, true);
Assert.assertEquals(2, paths.size());
List<Predicate<Path>> pathsToAssert = Arrays.asList(p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(b1), p -> p.size() == 2 && p.get(0).equals(a1) && p.get(1).equals(b2));
for (Predicate<Path> pathPredicate : pathsToAssert) {
Optional<Path> path = paths.stream().filter(pathPredicate).findAny();
Assert.assertTrue(path.isPresent());
Assert.assertTrue(paths.remove(path.get()));
}
Assert.assertTrue(paths.isEmpty());
}
Aggregations