我编写了一个自定义CommandProvider
来实现命令(cphr
):
public void _cphr(CommandInterpreter ci){
/* ... *
}
应该只是将给定的查询转发给cypher执行引擎。所以,一个示例调用:
osgi>cphr <query>
传递给像这样的引擎:
ExecutionEngine eng = new ExecutionEngine(...);
ExecutionResult er = eng.execute(query);
CommandProvider
- 接口针对基于令牌的访问进行了优化,因此它的实现将query
拆分为令牌,我可以通过它来迭代ci.nextArgument()
。
这是有问题的,因为单引号例如被剥离并且必须被显式转义才能被保留。所以,一个有效的查询:
cphr start n=node(*) where n.pathTime='2013-11-05-10-36-7' return n
导致语法错误:
Invalid input '5': expected '.', whitespace, '[', node labels, "=~", IN, IS, '*', '/', '%', '^', '+', '-', '<', '>', "<=", ">=", '=', "<>", "!=", AND, XOR, OR, START, MATCH, MERGE, CREATE, SET, DELETE, REMOVE, FOREACH, WITH, RETURN, UNION, ';' or end of input (line 1, column 44) " start n=node(*) where n.pathTime=2013-11-05-10-36-7 return n"
然而,转义查询有效:
cphr start n=node(*) where n.pathTime=\'2013-11-05-10-36-7\' return n
有没有办法按用户在CommandProvider
实现中提供的方式访问命令行?
答案 0 :(得分:1)
不幸的是,没有办法从CommandInterpreter
获得所有参数(一次性)。但我会采取另一种方式。
您正在为命令提供查询。此查询是命令的一个(!)参数。所以我会做两件事:
_cphr
)中,我会强制执行,只有一个参数。> cphr "start n=node(*) where n.pathTime='2013-11-05-10-36-7' return n"