Coverage Summary for Class: TestUUID (org.umlg.sqlg.test.uuid)

Class Method, % Branch, % Line, %
TestUUID 100% (7/7) 100% (6/6) 100% (105/105)
TestUUID$1 100% (1/1) 100% (2/2)
TestUUID$2 100% (1/1) 100% (2/2)
TestUUID$3 100% (1/1) 100% (2/2)
TestUUID$4 100% (1/1) 100% (2/2)
Total 100% (11/11) 100% (6/6) 100% (113/113)


 package org.umlg.sqlg.test.uuid;
 
 import org.apache.commons.collections4.set.ListOrderedSet;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Assert;
 import org.junit.Assume;
 import org.junit.Before;
 import org.junit.Test;
 import org.umlg.sqlg.structure.PropertyDefinition;
 import org.umlg.sqlg.structure.PropertyType;
 import org.umlg.sqlg.structure.topology.EdgeLabel;
 import org.umlg.sqlg.structure.topology.PropertyColumn;
 import org.umlg.sqlg.structure.topology.VertexLabel;
 import org.umlg.sqlg.test.BaseTest;
 
 import java.util.HashMap;
 import java.util.List;
 import java.util.Optional;
 import java.util.UUID;
 
 public class TestUUID extends BaseTest {
 
  @Before
  public void before() throws Exception {
  super.before();
  Assume.assumeTrue(this.sqlgGraph.getSqlDialect().supportsUUID());
  }
 
  @Test
  public void testUUID() {
  UUID uuidPerson1 = UUID.randomUUID();
  Vertex vertexA = this.sqlgGraph.addVertex(T.label, "Person", "uuid", uuidPerson1);
  UUID uuidPerson2 = UUID.randomUUID();
  Vertex vertexB = this.sqlgGraph.addVertex(T.label, "Person", "uuid", uuidPerson2);
  UUID uuidEdge = UUID.randomUUID();
  Edge edge = vertexA.addEdge("knows", vertexB, "uuid", uuidEdge);
  vertexA.addEdge("knows", vertexB, "uuid", UUID.randomUUID());
  vertexA.addEdge("knows", vertexB, "uuid", UUID.randomUUID());
  this.sqlgGraph.tx().commit();
  vertexA = this.sqlgGraph.traversal().V(vertexA.id()).next();
  UUID uuidFromDB = vertexA.value("uuid");
  Assert.assertEquals(uuidPerson1, uuidFromDB);
  vertexB = this.sqlgGraph.traversal().V(vertexB.id()).next();
  uuidFromDB = vertexB.value("uuid");
  Assert.assertEquals(uuidPerson2, uuidFromDB);
  edge = this.sqlgGraph.traversal().E(edge.id()).next();
  uuidFromDB = edge.value("uuid");
  Assert.assertEquals(uuidEdge, uuidFromDB);
 
  List<Vertex> persons = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson1).toList();
  Assert.assertEquals(1, persons.size());
  Assert.assertEquals(uuidPerson1, persons.get(0).value("uuid"));
  persons = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson2).toList();
  Assert.assertEquals(1, persons.size());
  Assert.assertEquals(uuidPerson2, persons.get(0).value("uuid"));
  List<Edge> edges = this.sqlgGraph.traversal().E().hasLabel("knows").has("uuid", uuidEdge).toList();
  Assert.assertEquals(1, edges.size());
  Assert.assertEquals(uuidEdge, edges.get(0).value("uuid"));
 
  List<Vertex> vertices = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson1)
  .outE().has("uuid", uuidEdge)
  .otherV()
  .toList();
  Assert.assertEquals(1, vertices.size());
  }
 
  @Test
  public void testUUIDViaTopologyApi() {
  VertexLabel personVertexLabel = this.sqlgGraph.getTopology().getPublicSchema().ensureVertexLabelExist("Person", new HashMap<>() {{
  put("uuid", PropertyDefinition.of(PropertyType.UUID));
  }});
  personVertexLabel.ensureEdgeLabelExist("knows", personVertexLabel, new HashMap<>() {{
  put("uuid", PropertyDefinition.of(PropertyType.UUID));
  }});
  this.sqlgGraph.tx().commit();
 
  VertexLabel vertexLabel = this.sqlgGraph.getTopology().getPublicSchema().getVertexLabel("Person").orElseThrow();
  Optional<PropertyColumn> uuidPropertyColumnOptional = vertexLabel.getProperty("uuid");
  Assert.assertTrue(uuidPropertyColumnOptional.isPresent());
  Assert.assertEquals(PropertyType.UUID, uuidPropertyColumnOptional.get().getPropertyType());
 
  EdgeLabel edgeLabel = this.sqlgGraph.getTopology().getPublicSchema().getEdgeLabel("knows").orElseThrow();
  uuidPropertyColumnOptional = edgeLabel.getProperty("uuid");
  Assert.assertTrue(uuidPropertyColumnOptional.isPresent());
  Assert.assertEquals(PropertyType.UUID, uuidPropertyColumnOptional.get().getPropertyType());
 
  UUID uuidPerson1 = UUID.randomUUID();
  Vertex vertexA = this.sqlgGraph.addVertex(T.label, "Person", "uuid", uuidPerson1);
  UUID uuidPerson2 = UUID.randomUUID();
  Vertex vertexB = this.sqlgGraph.addVertex(T.label, "Person", "uuid", uuidPerson2);
  UUID uuidEdge = UUID.randomUUID();
  Edge edge = vertexA.addEdge("knows", vertexB, "uuid", uuidEdge);
  vertexA.addEdge("knows", vertexB, "uuid", UUID.randomUUID());
  vertexA.addEdge("knows", vertexB, "uuid", UUID.randomUUID());
  this.sqlgGraph.tx().commit();
  vertexA = this.sqlgGraph.traversal().V(vertexA.id()).next();
  UUID uuidFromDB = vertexA.value("uuid");
  Assert.assertEquals(uuidPerson1, uuidFromDB);
  vertexB = this.sqlgGraph.traversal().V(vertexB.id()).next();
  uuidFromDB = vertexB.value("uuid");
  Assert.assertEquals(uuidPerson2, uuidFromDB);
  edge = this.sqlgGraph.traversal().E(edge.id()).next();
  uuidFromDB = edge.value("uuid");
  Assert.assertEquals(uuidEdge, uuidFromDB);
 
  List<Vertex> persons = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson1).toList();
  Assert.assertEquals(1, persons.size());
  Assert.assertEquals(uuidPerson1, persons.get(0).value("uuid"));
  persons = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson2).toList();
  Assert.assertEquals(1, persons.size());
  Assert.assertEquals(uuidPerson2, persons.get(0).value("uuid"));
  List<Edge> edges = this.sqlgGraph.traversal().E().hasLabel("knows").has("uuid", uuidEdge).toList();
  Assert.assertEquals(1, edges.size());
  Assert.assertEquals(uuidEdge, edges.get(0).value("uuid"));
 
  List<Vertex> vertices = this.sqlgGraph.traversal().V().hasLabel("Person").has("uuid", uuidPerson1)
  .outE().has("uuid", uuidEdge)
  .otherV()
  .toList();
  Assert.assertEquals(1, vertices.size());
  }
 
  @Test
  public void testUUIDAsIdentifier() {
  VertexLabel personVertexLabel = this.sqlgGraph.getTopology().getPublicSchema().ensureVertexLabelExist(
  "Person",
  new HashMap<>() {{
  put("uuid", PropertyDefinition.of(PropertyType.UUID));
  }},
  ListOrderedSet.listOrderedSet(List.of("uuid"))
  );
  personVertexLabel.ensureEdgeLabelExist(
  "knows",
  personVertexLabel,
  new HashMap<>() {{
  put("uuid", PropertyDefinition.of(PropertyType.UUID));
  }},
  ListOrderedSet.listOrderedSet(List.of("uuid")));
  this.sqlgGraph.tx().commit();
 
  Vertex person1 = this.sqlgGraph.addVertex(T.label, "Person", "uuid", UUID.randomUUID());
  for (int i = 0; i < 100; i++) {
  Vertex other = this.sqlgGraph.addVertex(T.label, "Person", "uuid", UUID.randomUUID());
  person1.addEdge("knows", other, "uuid", UUID.randomUUID());
  }
  this.sqlgGraph.tx().commit();
  List<Vertex> others = this.sqlgGraph.traversal().V().hasId(person1.id()).out("knows").toList();
  Assert.assertEquals(100, others.size());
  List<Edge> otherEdges = this.sqlgGraph.traversal().V().hasId(person1.id()).outE("knows").toList();
  Assert.assertEquals(100, otherEdges.size());
  }
 
  @Test
  public void testUUIDViaNormalBatchMode() {
  this.sqlgGraph.tx().normalBatchModeOn();
  for (int i = 0; i < 100; i++) {
  this.sqlgGraph.addVertex(T.label, "A", "uuid", UUID.randomUUID());
  }
  this.sqlgGraph.tx().commit();
  List<UUID> uuids = this.sqlgGraph.traversal().V().hasLabel("A").<UUID>values("uuid").toList();
  Assert.assertEquals(100, uuids.size());
  }
 
  @Test
  public void testUUIDViaStreamingBatchMode() {
  Assume.assumeTrue(isPostgres());
  this.sqlgGraph.tx().streamingBatchModeOn();
  for (int i = 0; i < 100; i++) {
  this.sqlgGraph.streamVertex(T.label, "A", "uuid", UUID.randomUUID());
  }
  this.sqlgGraph.tx().commit();
  List<UUID> uuids = this.sqlgGraph.traversal().V().hasLabel("A").<UUID>values("uuid").toList();
  Assert.assertEquals(100, uuids.size());
  }
 }