in hugegraph-test/src/main/java/org/apache/hugegraph/core/VertexCoreTest.java [6873:7133]
public void testQueryVertexByAggregateProperty() {
Assume.assumeTrue("Not support aggregate property",
storeFeatures().supportsAggregateProperty());
HugeGraph graph = graph();
SchemaManager schema = graph.schema();
schema.propertyKey("worstScore")
.asInt().valueSingle().calcMin()
.ifNotExist().create();
schema.propertyKey("bestScore")
.asInt().valueSingle().calcMax()
.ifNotExist().create();
schema.propertyKey("testNum")
.asInt().valueSingle().calcSum()
.ifNotExist().create();
schema.propertyKey("no")
.asText().valueSingle().calcOld()
.ifNotExist().create();
schema.propertyKey("rank")
.asInt().valueSet().calcSet()
.ifNotExist().create();
schema.propertyKey("reword")
.asInt().valueList().calcList()
.ifNotExist().create();
schema.vertexLabel("student")
.properties("name", "worstScore", "bestScore",
"testNum", "no", "rank", "reword")
.primaryKeys("name")
.nullableKeys("worstScore", "bestScore",
"testNum", "no", "rank", "reword")
.ifNotExist()
.create();
schema.indexLabel("studentByWorstScore")
.onV("student").by("worstScore").range().ifNotExist().create();
schema.indexLabel("studentByBestScore")
.onV("student").by("bestScore").range().ifNotExist().create();
Assert.assertThrows(IllegalArgumentException.class, () -> {
schema.indexLabel("studentByTestNum")
.onV("student").by("testNum").range().ifNotExist().create();
}, e -> {
Assert.assertContains("The aggregate type SUM is not indexable",
e.getMessage());
});
schema.indexLabel("studentByNo")
.onV("student").by("no").secondary().ifNotExist().create();
Assert.assertThrows(IllegalArgumentException.class, () -> {
schema.indexLabel("studentByRank")
.onV("student").by("rank").secondary().ifNotExist().create();
}, e -> {
Assert.assertTrue(e.getMessage(), e.getMessage().contains(
"The aggregate type SET is not indexable"));
});
Assert.assertThrows(IllegalArgumentException.class, () -> {
schema.indexLabel("studentByReword")
.onV("student").by("reword").secondary().ifNotExist()
.create();
}, e -> {
Assert.assertTrue(e.getMessage(), e.getMessage().contains(
"The aggregate type LIST is not indexable"));
});
graph.addVertex(T.label, "student", "name", "Tom", "worstScore", 55,
"bestScore", 96, "testNum", 1, "no", "001");
this.commitTx();
List<Vertex> vertices = graph.traversal().V().hasLabel("student")
.has("name", "Tom").toList();
Assert.assertEquals(1, vertices.size());
Vertex tom = vertices.get(0);
Assert.assertEquals(55, tom.value("worstScore"));
Assert.assertEquals(96, tom.value("bestScore"));
Assert.assertEquals(1, tom.value("testNum"));
Assert.assertEquals("001", tom.value("no"));
List<Vertex> results = graph.traversal().V()
.has("worstScore", P.gt(50)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", P.lt(60)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", 55).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.gt(50)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.lt(100)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", 96).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("no", "001").toList();
Assert.assertEquals(vertices, results);
tom.property("worstScore", 45);
tom.property("bestScore", 98);
tom.property("testNum", 1);
tom.property("no", "002");
this.commitTx();
vertices = graph.traversal().V().hasLabel("student")
.has("name", "Tom").toList();
Assert.assertEquals(1, vertices.size());
tom = vertices.get(0);
Assert.assertEquals(45, tom.value("worstScore"));
Assert.assertEquals(98, tom.value("bestScore"));
Assert.assertEquals(2, tom.value("testNum"));
Assert.assertEquals("001", tom.value("no"));
results = graph.traversal().V().has("worstScore", P.gt(30)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", P.lt(60)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", 45).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.gt(50)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.lt(100)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", 98).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("no", "001").toList();
Assert.assertEquals(vertices, results);
tom = graph.traversal().V().hasLabel("student")
.has("name", "Tom").next();
tom.property("worstScore", 65);
tom.property("bestScore", 99);
tom.property("testNum", 1);
tom.property("no", "003");
this.commitTx();
vertices = graph.traversal().V().hasLabel("student")
.has("name", "Tom").toList();
Assert.assertEquals(1, vertices.size());
tom = vertices.get(0);
Assert.assertEquals(45, tom.value("worstScore"));
Assert.assertEquals(99, tom.value("bestScore"));
Assert.assertEquals(3, tom.value("testNum"));
Assert.assertEquals("001", tom.value("no"));
results = graph.traversal().V().has("worstScore", P.gt(30)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", P.lt(60)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", 45).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.gt(50)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.lt(100)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", 99).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("no", "001").toList();
Assert.assertEquals(vertices, results);
tom = graph.traversal().V().hasLabel("student")
.has("name", "Tom").next();
tom.property("worstScore", 75);
tom.property("bestScore", 100);
tom.property("testNum", 1);
tom.property("no", "004");
this.commitTx();
vertices = graph.traversal().V().hasLabel("student")
.has("name", "Tom").toList();
Assert.assertEquals(1, vertices.size());
tom = vertices.get(0);
Assert.assertEquals(45, tom.value("worstScore"));
Assert.assertEquals(100, tom.value("bestScore"));
Assert.assertEquals(4, tom.value("testNum"));
Assert.assertEquals("001", tom.value("no"));
results = graph.traversal().V().has("worstScore", P.gt(30)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", P.lt(60)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", 45).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.gt(50)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.lt(101)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", 100).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("no", "001").toList();
Assert.assertEquals(vertices, results);
tom = graph.traversal().V().hasLabel("student")
.has("name", "Tom").next();
tom.property("worstScore", 35);
tom.property("bestScore", 99);
tom.property("testNum", 1);
tom.property("no", "005");
this.commitTx();
tom.property("worstScore", 65);
tom.property("bestScore", 93);
tom.property("testNum", 1);
tom.property("no", "006");
this.commitTx();
tom.property("worstScore", 58);
tom.property("bestScore", 63);
tom.property("testNum", 1);
tom.property("no", "007");
this.commitTx();
vertices = graph.traversal().V().hasLabel("student")
.has("name", "Tom").toList();
Assert.assertEquals(1, vertices.size());
tom = vertices.get(0);
Assert.assertEquals(35, tom.value("worstScore"));
Assert.assertEquals(100, tom.value("bestScore"));
Assert.assertEquals(7, tom.value("testNum"));
Assert.assertEquals("001", tom.value("no"));
results = graph.traversal().V().has("worstScore", P.gt(30)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", P.lt(60)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("worstScore", 35).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.gt(50)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", P.lt(101)).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("bestScore", 100).toList();
Assert.assertEquals(vertices, results);
results = graph.traversal().V().has("no", "001").toList();
Assert.assertEquals(vertices, results);
}