eXist-db / xst

Command line tool to interact with exist-db instances
https://npmjs.com/@existdb/xst
MIT License
17 stars 4 forks source link

Single and double quotes not interchangeable after xst execute #116

Open daliboris opened 1 year ago

daliboris commented 1 year ago

What happened?

When calling execute command with parameter that expect string, only combination of single quotes inside double quoted text ("... '..' ... " ) works.

The opposit case ('... ".." ... ') doesn't work: double quotes are ommited.

Combination of single quotes inside double quotes is used in the readme help.

System Information

Build: eXist-6.0.1 (51506fc97a9e5bb55fdea71fc76def2c9d402886)
Java: 1.8.0_292 (Azul Systems, Inc.)
OS: Windows 10 10.0 (amd64)

Relevant shell output

xst execute 'xmldb:reindex("/db/apps/%project%-data")' --config admin.xstrc
xmldb:reindex(/db/apps/mordigital-data)

xst execute "xmldb:reindex('/db/apps/%project%-data')" --config admin.xstrc
true
line-o commented 1 year ago

@daliboris looks like a windows issue to me. On linux double quoted strings will be subject to variable replacement.

xst run "$a + $a" -b '{"a": 1}' will not work on unix/linux/macOS shells as "$a" is replaced before xst gets to see it.

line-o commented 1 year ago

@daliboris Which shell are you using?

line-o commented 1 year ago

What happens on windows with the following?

xst execute 'xmldb:reindex("/db/apps/" || $project || "-data")' --bind '{ "project": "mordigital" }' --config admin.xstrc
line-o commented 1 year ago

There seems to be a lot to take into account when it comes to double quotes on windows (see https://stackoverflow.com/questions/562038/escaping-double-quotes-in-batch-script)

daliboris commented 1 year ago

Which shell are you using?

I'm using cmd.exe shell.

In PowerShell 5.1, the error (for xst execute 'xmldb:reindex("/db/apps/mordigital-data/data/dictionaries")' --config admin.xstrc) looks more sophisticated:

XPathException:
err:XPTY0004 checking function parameter 1 in call xmldb:reindex(untyped-value-check[xs:string, [root-node]/child::{}db/child::{}apps/child::{}mordigital-data/child::{}data/child::{}dictionaries]): XPTY0004: The actual cardinality for parameter 1 does not match the cardinality declared in the function's signature: xmldb:reindex($collection-uri as xs:string) xs:boolean. Expected cardinality: exactly one, got 0. [at line 1, column 1, source: String/7292787417532134543]

Running xst run "$a + $a" -b '{"a": 1}' also fails in CMD and PowerShell:

xst run "$a + $a" -b '{"a": 1}'
Problem with a provided Argument:
Error parsing argument bind! Reason: Unexpected token ' in JSON at position 0

What happens on windows with the following?

xst execute 'xmldb:reindex("/db/apps/" || $project || "-data")' --bind '{ "project": "mordigital" }' --config admin.xstrc
Error executing your query
Failed to invoke method executeQuery in class org.exist.xmlrpc.RpcConnection: org.exist.xquery.StaticXQueryException: exerr:ERROR expecting ''', found '/' [at line 1, column 24]
'$project' is not recognized as an internal or external command,
operable program or batch file.
'"-data")'' is not recognized as an internal or external command,
operable program or batch file.
line-o commented 11 months ago

OK, so the readme should point out which combination of quotes works on Linux and windows.

line-o commented 9 months ago

@daliboris does this command work on windows?

xst execute "xmldb:reindex('/db/apps/' || $project || '-data')" --bind "{ \"project\": \"mordigital\" }" --config admin.xstrc
daliboris commented 9 months ago

Hi @line-o , here are some results (I changed the project name):

CMD

xst execute "xmldb:reindex('/db/apps/' || $project || '-data')" --bind "{ \"project\": \"lediir\" }" --config admin.xstrc
true

PowerShell

xst execute "xmldb:reindex('/db/apps/' || $project || '-data')" --bind "{ \"project\": \"lediir\" }" --config admin.xstrc
Problem with a provided Argument:
Error parsing argument bind! Reason: Unexpected token : in JSON at position 12

--bind '{ \"project\": \"lediir\" }'

xst execute "xmldb:reindex('/db/apps/' || $project || '-data')" --bind '{ \"project\": \"lediir\" }' --config admin.xstrc
XPathException:
err:XPST0003 unexpected token: || [at line 1, column 31]

--bind "{ \'project\': \'lediir\' }"

xst execute "xmldb:reindex('/db/apps/' || $project || '-data')" --bind "{ \'project\': \'lediir\' }" --config admin.xstrc
Problem with a provided Argument:
Error parsing argument bind! Reason: Unexpected token \ in JSON at position 2