in hugegraph-test/src/main/java/org/apache/hugegraph/core/VertexCoreTest.java [8994:9104]
public void testQueryBySearchIndexWithSpecialSymbol() {
HugeGraph graph = graph();
graph.schema().indexLabel("personByCity")
.onV("person")
.by("city")
.search()
.ifNotExist().create();
Vertex vertex1 = graph.addVertex(T.label, "person", "name", "1",
"city", "xyz\u0002abc",
"age", 15);
Vertex vertex2 = graph.addVertex(T.label, "person", "name", "2",
"city", "\u0002",
"age", 15);
Vertex vertex3 = graph.addVertex(T.label, "person", "name", "3",
"city", "xyz\u0003abc",
"age", 15);
Vertex vertex4 = graph.addVertex(T.label, "person", "name", "4",
"city", "\u0003",
"age", 15);
Vertex vertex5 = graph.addVertex(T.label, "person", "name", "5",
"city", "xyz\u0001abc",
"age", 15);
Vertex vertex6 = graph.addVertex(T.label, "person", "name", "6",
"city", "\u0001",
"age", 15);
this.commitTx();
GraphTraversalSource g = graph.traversal();
String city;
city = g.V().hasLabel("person").has("name", "1")
.next().value("city");
Assert.assertEquals(vertex1.value("city"), city);
city = g.V().hasLabel("person").has("name", "2")
.next().value("city");
Assert.assertEquals(vertex2.value("city"), city);
city = g.V().hasLabel("person").has("name", "3")
.next().value("city");
Assert.assertEquals(vertex3.value("city"), city);
city = g.V().hasLabel("person").has("name", "4")
.next().value("city");
Assert.assertEquals(vertex4.value("city"), city);
city = g.V().hasLabel("person").has("name", "5")
.next().value("city");
Assert.assertEquals(vertex5.value("city"), city);
city = g.V().hasLabel("person").has("name", "6")
.next().value("city");
Assert.assertEquals(vertex6.value("city"), city);
List<Vertex> vertices;
vertices = g.V().has("city", Text.contains("abc")).toList();
Assert.assertEquals(3, vertices.size());
Assert.assertTrue(vertices.contains(vertex1));
Assert.assertTrue(vertices.contains(vertex3));
Assert.assertTrue(vertices.contains(vertex5));
vertices = g.V().has("city", Text.contains("\u0002")).toList();
Assert.assertEquals(0, vertices.size());
vertices = g.V().has("city", Text.contains("\u0003")).toList();
Assert.assertEquals(0, vertices.size());
vertices = g.V().has("city", Text.contains("\u0001")).toList();
Assert.assertEquals(0, vertices.size());
String backend = graph.backend();
if (ImmutableSet.of("rocksdb", "hbase").contains(backend)) {
Assert.assertThrows(Exception.class, () -> {
graph.addVertex(T.label, "person", "name", "0",
"city", "xyz\u0000efg", "age", 0);
graph.tx().commit();
}, e -> {
Assert.assertContains("can't contains byte '0x00'",
e.getMessage());
});
} else if (backend.equals("postgresql")) {
Assert.assertThrows(BackendException.class, () -> {
graph.addVertex(T.label, "person", "name", "7",
"city", "xyz\u0000efg",
"age", 15);
graph.tx().commit();
}, e -> {
graph.tx().rollback();
Assert.assertContains("invalid byte sequence for encoding " +
"\"UTF8\": 0x00",
e.getCause().getMessage());
});
} else {
graph.addVertex(T.label, "person", "name", "8",
"city", "xyz\u0000efg",
"age", 15);
graph.addVertex(T.label, "person", "name", "9",
"city", "\u0000",
"age", 15);
graph.tx().commit();
Assert.assertTrue(g.V().hasLabel("person")
.has("city", Text.contains("efg"))
.hasNext());
Assert.assertFalse(g.V().hasLabel("person")
.has("city", Text.contains("u0000"))
.hasNext());
}
}