获得"未知功能"用于内部开发的用户定义函数

时间:2017-02-09 21:04:37

标签: neo4j user-defined-functions

我试图在neo4j 3.1中测试用户定义的函数。所以我写了这个:

public class Udf
{
    @Context
    public GraphDatabaseService db;

    @Context
    public Log log;

    @UserFunction("test.id")
    public Long id(@Name("node") Node node)
    {
        return node.getId();
    }
}

和这样的测试函数:

public class UdfTest
{
    @Rule
    public Neo4jRule neo4j = new Neo4jRule()
        .withProcedure(Udf.class);

    @Test
    public void shouldBeAbleToExtractIdProperty() throws Throwable
    {
        try (Driver driver = GraphDatabase.driver(neo4j.boltURI() , Config.build().withEncryptionLevel(Config.EncryptionLevel.NONE).toConfig()))
        {
            Session session = driver.session();

            long nodeId = session.run("CREATE (p) RETURN test.id(p)")
                    .single()
                    .get(0).asLong();

            assertEquals(nodeId, 0);
        }
    }
}

当我运行测试时,它会提示:

org.neo4j.driver.v1.exceptions.ClientException: Unknown function 'test.id' (line 1, column 19 (offset: 18))
"CREATE (p) RETURN test.id(p)"
                   ^

当我将@UserFunction更改为@Procedure以及其他一些更改时,我可以使用CALL .. YIELD子句调用完全相同的方法。

有人可以告诉我我做错了吗?

1 个答案:

答案 0 :(得分:1)

您在测试中withProdcedure使用withFunction方法而不是Neo4jRule方法。将该行更改为:

@Rule
public Neo4jRule neo4j = new Neo4jRule()
    .withFunction(Udf.class);