我写了一个自定义CommandProvider
实现命令(cphr
):
public void _cphr(CommandInterpreter ci){
/* ... *
}
这应该只是将给定的查询转发到密码执行引擎。因此,一个示例调用:
osgi>cphr <query>
像这样传递给引擎:
ExecutionEngine eng = new ExecutionEngine(...);
ExecutionResult er = eng.execute(query);
CommandProvider
-Interface 针对基于令牌的访问进行了优化,因此它的实现将其拆分为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
?