gpt4 book ai didi

java - 在自定义 CommandProvider 中获取完整/未转义/未拆分的命令字符串

转载 作者:行者123 更新时间:2023-11-30 11:26:29 25 4
gpt4 key购买 nike

我写了一个自定义 CommandProvider执行命令 (cphr):

public void _cphr(CommandInterpreter ci){
/* ... *
}

应该只是将给定的查询转发给 cypher执行引擎。因此,一个示例调用:

osgi>cphr <query>

像这样传递给引擎:

ExecutionEngine eng = new ExecutionEngine(...);
ExecutionResult er = eng.execute(query);

CommandProvider 接口(interface)针对基于 token 的访问进行了优化,因此它的实现将查询 拆分为 token ,我可以在这些 token 上迭代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 实现中提供的命令行?

最佳答案

不幸的是,无法(一次)从 CommandInterpreter 获取所有参数。但我还是会走另一条路。

您正在向您的命令提供查询。此查询是您的命令的一个 (!) 参数。所以我会做两件事:

  1. 在命令实现中(此处为 _cphr),我会强制要求只有一个参数。
  2. 如果参数(查询)包含空格——它通常有,那么这个参数本身必须被引用:> cphr "start n=node(*) where n.pathTime='2013-11-05 -10-36-7' 返回 n"

关于java - 在自定义 CommandProvider 中获取完整/未转义/未拆分的命令字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19788001/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com