public void testQueryBySearchIndexWithSpecialSymbol()

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