Gremlin GroovyTranslator 生成错误结果并在远程服务器上失败
Gremlin GroovyTranslator generates wrong result and fails at remote server
我正在使用 Gremlin java,我发现 GroovyTranslator 在 $
符号之前添加了额外的 \
,
这会导致查询无法在远程服务器上执行。
GraphTraversal traversal = graph.addV().property("amount", "");
System.out.println(GroovyTranslator.of("g").translate(traversal.asAdmin().getBytecode()));
翻译结果:
g.addV().property("amount","$1")
如果这是 GroovyTranslator 的问题,我可以将 $
替换为 $
,但我不确定更多特殊字符是否会出现此问题。
由于反斜杠而失败,但是如果某些 属性 值想要使用反斜杠怎么办?
据我所知,使用反斜杠总是会失败。
我想以下应该有效,但没有:
curl -X POST -d '{"gremlin":"g.V().has(\"key\",\"\$\")"}' ...
在 Groovy 中,如果您使用 Groovy 字符串 (GString),美元符号具有特殊含义。它用于指示插值应该发生,如:
gremlin> a=3
==>3
gremlin> "The number is $a"
==>The number is 3
如果您要连接的服务器按原样使用 Groovy 来解析查询,则需要反斜杠。如果服务器不按原样使用 Groovy,则您需要删除反斜杠。
使用 GroovyTranslator 还需要注意一些其他事项。当它生成文字数字时,它会将 (int) 3
之类的强制转换放入查询中。您可能还需要删除这些,具体取决于您连接到的后端图形数据库。
我正在使用 Gremlin java,我发现 GroovyTranslator 在 $
符号之前添加了额外的 \
,
这会导致查询无法在远程服务器上执行。
GraphTraversal traversal = graph.addV().property("amount", "");
System.out.println(GroovyTranslator.of("g").translate(traversal.asAdmin().getBytecode()));
翻译结果:
g.addV().property("amount","$1")
如果这是 GroovyTranslator 的问题,我可以将
$
替换为$
,但我不确定更多特殊字符是否会出现此问题。由于反斜杠而失败,但是如果某些 属性 值想要使用反斜杠怎么办?
据我所知,使用反斜杠总是会失败。
我想以下应该有效,但没有:curl -X POST -d '{"gremlin":"g.V().has(\"key\",\"\$\")"}' ...
在 Groovy 中,如果您使用 Groovy 字符串 (GString),美元符号具有特殊含义。它用于指示插值应该发生,如:
gremlin> a=3
==>3
gremlin> "The number is $a"
==>The number is 3
如果您要连接的服务器按原样使用 Groovy 来解析查询,则需要反斜杠。如果服务器不按原样使用 Groovy,则您需要删除反斜杠。
使用 GroovyTranslator 还需要注意一些其他事项。当它生成文字数字时,它会将 (int) 3
之类的强制转换放入查询中。您可能还需要删除这些,具体取决于您连接到的后端图形数据库。