为内部开发的用户定义函数获取 "unknown function"
Getting "unknown function" for inhouse developed user defined function
我正在尝试在 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
子句调用完全相同的方法。
有人可以告诉我我做错了什么吗?
您在测试中对 Neo4jRule
使用 withProdcedure
方法而不是 withFunction
方法。将该行更改为:
@Rule
public Neo4jRule neo4j = new Neo4jRule()
.withFunction(Udf.class);
我正在尝试在 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
子句调用完全相同的方法。
有人可以告诉我我做错了什么吗?
您在测试中对 Neo4jRule
使用 withProdcedure
方法而不是 withFunction
方法。将该行更改为:
@Rule
public Neo4jRule neo4j = new Neo4jRule()
.withFunction(Udf.class);