Coverage Summary for Class: TestWhereWithSelect (org.umlg.sqlg.test.where)

Class Class, % Method, % Branch, % Line, %
TestWhereWithSelect 0% (0/1) 0% (0/8) 0% (0/37) 0% (0/129)


 package org.umlg.sqlg.test.where;
 
 import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 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.__;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Assert;
 import org.junit.Test;
 import org.umlg.sqlg.test.BaseTest;
 
 import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 
 /**
  * @author <a href="https://github.com/pietermartin">Pieter Martin</a>
  * Date: 2017/10/22
  */
 public class TestWhereWithSelect extends BaseTest {
 
     @Test
     public void g_V_matchXa__a_out_b__notXa_created_bXX() {
         loadModern();
         final Traversal<Vertex, Map<String, Object>> traversal = this.sqlgGraph.traversal().V().match(
                 __.as("a").out().as("b"),
                 __.not(__.as("a").out("created").as("b")));
         printTraversalForm(traversal);
         checkResults(makeMapList(2,
                 "a", convertToVertex(this.sqlgGraph, "marko"), "b", convertToVertex(this.sqlgGraph, "josh"),
                 "a", convertToVertex(this.sqlgGraph, "marko"), "b", convertToVertex(this.sqlgGraph, "vadas")), traversal);
     }
 
     @Test
     public void coworkerSummaryOLTP() {
         loadModern();
         final Traversal<Vertex, Map<String, Map<String, Map<String, Object>>>> traversal =  this.sqlgGraph.traversal()
                 .V().hasLabel("person").filter(__.outE("created")).as("p1")
                 .V().hasLabel("person").where(P.neq("p1")).filter(__.outE("created")).as("p2")
                 .map(__.out("created").where(__.in("created").as("p1")).values("name").fold())
                 .<String, Map<String, Map<String, Object>>>group().by(__.select("p1").by("name")).
                         by(__.group().by(__.select("p2").by("name")).
                                 by(__.project("numCoCreated", "coCreated").by(__.count(Scope.local)).by()));
         printTraversalForm(traversal);
         Assert.assertTrue(traversal.hasNext());
         checkCoworkerSummary(traversal.next());
         Assert.assertFalse(traversal.hasNext());
     }
 
     private static void checkCoworkerSummary(final Map<String, Map<String, Map<String, Object>>> summary) {
         Assert.assertNotNull(summary);
         Assert.assertEquals(3, summary.size());
         Assert.assertTrue(summary.containsKey("marko"));
         Assert.assertTrue(summary.containsKey("josh"));
         Assert.assertTrue(summary.containsKey("peter"));
         for (final Map.Entry<String, Map<String, Map<String, Object>>> entry : summary.entrySet()) {
             Assert.assertEquals(2, entry.getValue().size());
             switch (entry.getKey()) {
                 case "marko":
                     Assert.assertTrue(entry.getValue().containsKey("josh") && entry.getValue().containsKey("peter"));
                     break;
                 case "josh":
                     Assert.assertTrue(entry.getValue().containsKey("peter") && entry.getValue().containsKey("marko"));
                     break;
                 case "peter":
                     Assert.assertTrue(entry.getValue().containsKey("marko") && entry.getValue().containsKey("josh"));
                     break;
             }
             for (final Map<String, Object> m : entry.getValue().values()) {
                 Assert.assertTrue(m.containsKey("numCoCreated"));
                 Assert.assertTrue(m.containsKey("coCreated"));
                 Assert.assertTrue(m.get("numCoCreated") instanceof Number);
                 Assert.assertTrue(m.get("coCreated") instanceof Collection);
                 Assert.assertEquals(1, ((Number) m.get("numCoCreated")).intValue());
                 Assert.assertEquals(1, ((Collection) m.get("coCreated")).size());
                 Assert.assertEquals("lop", ((Collection) m.get("coCreated")).iterator().next());
             }
         }
     }
 
     @Test
     public void g_V_asXaX_out_asXbX_whereXin_count_isXeqX3XX_or_whereXoutXcreatedX_and_hasXlabel_personXXX_selectXa_bX() {
         loadModern();
         final Traversal<Vertex, Map<String, Object>> traversal = this.sqlgGraph.traversal()
                 .V().as("a").out().as("b")
                 .where(
                         __.as("b").in().count().is(P.eq(3))
                                 .or()
                                 .where(
                                         __.as("b").out("created").and().as("b").has(T.label, "person"))
                 )
                 .select("a", "b");
         printTraversalForm(traversal);
 //        while (traversal.hasNext()) {
 //            System.out.println(traversal.next());
 //        }
         checkResults(makeMapList(2,
                 "a", convertToVertex(this.sqlgGraph, "marko"), "b", convertToVertex(this.sqlgGraph, "josh"),
                 "a", convertToVertex(this.sqlgGraph, "marko"), "b", convertToVertex(this.sqlgGraph, "lop"),
                 "a", convertToVertex(this.sqlgGraph, "peter"), "b", convertToVertex(this.sqlgGraph, "lop"),
                 "a", convertToVertex(this.sqlgGraph, "josh"), "b", convertToVertex(this.sqlgGraph, "lop")), traversal);
     }
 
     @Test
     public void g_V_hasXageX_asXaX_out_in_hasXageX_asXbX_selectXa_bX_whereXb_hasXname_markoXX() {
         loadModern();
 
         final Traversal<Vertex, Map<String, Object>> traversal = this.sqlgGraph.traversal()
                 .V().has("age").as("a")
                 .out().in().has("age").as("b")
                 .select("a", "b")
                 .where(__.as("a").out("knows").as("b"));
 
         printTraversalForm(traversal);
         int counter = 0;
         while (traversal.hasNext()) {
             counter++;
             final Map<String, Object> map = traversal.next();
             Assert.assertEquals(2, map.size());
             Assert.assertTrue(map.containsKey("a"));
             Assert.assertTrue(map.containsKey("b"));
             Assert.assertEquals(convertToVertexId("marko"), ((Vertex) map.get("a")).id());
             Assert.assertEquals(convertToVertexId("josh"), ((Vertex) map.get("b")).id());
         }
         Assert.assertEquals(1, counter);
         Assert.assertFalse(traversal.hasNext());
     }
 
     @Test
     public void testWhere() {
         Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
         Vertex a2 = this.sqlgGraph.addVertex(T.label, "A", "name", "a2");
         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);
         a2.addEdge("ab", b1);
         a2.addEdge("ab", b2);
         this.sqlgGraph.tx().commit();
 
         GraphTraversal<Vertex, Vertex> traversal = sqlgGraph.traversal()
                 .V().hasLabel("A").as("a")
                 .where(
                         __.as("a")
                                 .out()
                 )
                 .select("a");
         List<Vertex> result = traversal.toList();
         Assert.assertEquals(2, result.size());
         Assert.assertTrue(result.contains(a1) && result.contains(a2));
     }
 
     @Test
     public void testWhere2Labels() {
         Vertex a1 = this.sqlgGraph.addVertex(T.label, "A", "name", "a1");
         Vertex a2 = this.sqlgGraph.addVertex(T.label, "A", "name", "a2");
         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);
         a2.addEdge("ab", b1);
         a2.addEdge("ab", b2);
         this.sqlgGraph.tx().commit();
 
         GraphTraversal<Vertex, Map<String, Vertex>> traversal = this.sqlgGraph.traversal()
                 .V().hasLabel("A").as("a").out().as("b")
                 .where(
                         __.as("a").out().as("b")
                 )
                 .select("a", "b");
         List<Map<String, Vertex>> result = traversal.toList();
         Assert.assertEquals(4, result.size());
         for (Map<String, Vertex> stringVertexMap : result) {
             Assert.assertEquals(2, stringVertexMap.size());
             Assert.assertTrue(stringVertexMap.containsKey("a"));
             Assert.assertTrue(stringVertexMap.containsKey("b"));
         }
         boolean found1 = false;
         boolean found2 = false;
         boolean found3 = false;
         boolean found4 = false;
         for (Map<String, Vertex> stringVertexMap : result) {
             if (!found1) {
                 found1 = stringVertexMap.get("a").equals(a1) && stringVertexMap.get("b").equals(b1);
             }
             if (!found2) {
                 found2 = stringVertexMap.get("a").equals(a1) && stringVertexMap.get("b").equals(b2);
             }
             if (!found3) {
                 found3 = stringVertexMap.get("a").equals(a2) && stringVertexMap.get("b").equals(b1);
             }
             if (!found4) {
                 found4 = stringVertexMap.get("a").equals(a2) && stringVertexMap.get("b").equals(b2);
             }
         }
         Assert.assertTrue(found1);
         Assert.assertTrue(found2);
         Assert.assertTrue(found3);
         Assert.assertTrue(found4);
         System.out.println(result);
     }
 
 }