Вызов процедуры апо c из драйвера Golang - PullRequest
0 голосов
/ 09 апреля 2020

Я хочу вызвать процедуру апо c из драйвера golang. Я могу запустить базовые c зашифрованные запросы из драйвера, но при вызове процедуры apo c он вызывает синтаксическую ошибку.

panic: An error occurred getting result of exec command: messages.FailureMessage{Metadata:map[string]interface {}{"code":"Neo.ClientError.Statement.SyntaxError", "message":"Invalid input '3': expected whitespace, '.', node labels, '[', \"=~\", IN, STARTS, ENDS, CONTAINS, IS, '^', '*', '/', '%', '+', '-', '=', '~', \"<>\", \"!=\", '<', '>', \"<=\", \">=\", AND, XOR, OR, ',' or ')' (line 1, column 74 (offset: 73))\n\"call apoc.export.json.query(\"MATCH t = (p)-[:has*0..] -> (i:node{name:\"39\"}) return p;\",\"2.json\")\"\n


call apoc.export.json.query("MATCH t = (p)-[:has*0..] -> (i:node{name:"39"}) return p;","1.json")

Я хочу запустить вышеуказанный запрос из golang. По сути, golang хочет, чтобы я передал запрос в виде строки. Здесь сам запрос содержит вложенную строку. Я думаю, что ошибка связана с этим. Ниже приведен синтаксис, который я использую для запроса от golang.

conn.PrepareNeo("call apoc.export.json.query(\"MATCH t = (p)-[:has*0..] -> (i:node{name:\"39\"}) return p;\",\"1.json\"")

1 Ответ

0 голосов
/ 13 апреля 2020

Вы правы насчет проблемы, я думаю. Я бы начал с другого конца этого и работал бы задом наперед. Запрос, который вы хотите выполнить (и что вы наберете в браузере Neo4j):

call apoc.export.json.query("MATCH t = (p)-[:has*0..]->(i:node {name: \"39\"}) return p;", "1.json")

против того, что Neo4j утверждает, что вы действительно отправили:

call apoc.export.json.query("MATCH t = (p)-[:has*0..] -> (i:node{name:"39"}) return p;","1.json")

Обратите внимание, что мы ' у нас нет обратной косой черты, за исключением кавычек вокруг "39" в сгенерированном Go запросе.

Чтобы исправить, нам нужно явно выдать обратную косую черту - я не являюсь Go разработчиком, так что быть более аккуратным способом сделать это, но в других языках это было бы что-то вроде:

conn.PrepareNeo("call apoc.export.json.query(\"MATCH t = (p)-[:has*0..]->(i:node {name: \\\"39\\\"}) return p;\", \"1.json\")")

Или использовать необработанный строковый литерал (опять же, не Go разработчик, поэтому не уверен в этом):

conn.PrepareNeo(`call apoc.export.json.query("MATCH t = (p)-[:has*0..]->(i:node {name: \"39\"}) return p;", "1.json")`)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...