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());
}
}