lssayers
(Louis Sayers)
February 20, 2020, 3:27am
1
Hey guys,
Just playing around with Parameters - Cypher Manual and there's an example where you use parameters with SKIP and LIMIT.
In Neo4j Browser 4.0.3, Neo4j 4.0 I do the following:
:params {s: 1, l: 1}
Which then stores 's' and 'l' as follows:
{
"s": 1.0,
"l": 1.0
}
Following along I try to follow along the docs with:
MATCH (n)
RETURN n
SKIP $s
LIMIT $l
And I get the error:
LIMIT: Invalid input. '2.0' is not a valid value. Must be a non-negative integer.
If I do:
:param s => 1
:param l => 1
Then the values get set to 1 vs 1.0 when passed in using :params ... seems a bit inconsistent?
{
"s": 1.0,
"l": 1.0
}
is javascript
To use paramaters in cypher use:
:param s => 1
:param l => 1
lssayers
(Louis Sayers)
February 22, 2020, 2:40am
3
I don't understand your comment (in relation to the original post).
I was using :params
to set the params. Are you saying that the argument to :params
is JS? Even if that is so, the value 1
still got converted to 1.0
.
intouch_vivek:
:param s => 1
If you see the link you shared it says {"s":1} is javascript command.
However if you use :param s=>1 in cypher then return $s will be 1 not 1.0
lssayers
(Louis Sayers)
February 22, 2020, 2:52am
5
Yes, thanks for the explanation. I understand that, I guess the part I don't understand is what the :params
command is doing. Maybe the answer is I shouldn't be using :params
(I didn't actually see it in the docs, I just tried it and it worked lol), but if it's not supposed to be used, I'd question why it's there...
And it still doesn't answer the question about why :params
converts 1
into 1.0
whereas :param
does not do that conversion.
So I guess I still have questions around this, but can accept that the short answer might be to not use :params
.
I guess you are mixing java/javascript code with cypher syntax
have a look @ Query parameters - Java Reference
cypher uses :param not :params
Could you share the code you wrote that turned 1 to 1.0?
lssayers
(Louis Sayers)
February 22, 2020, 3:45am
7
I just wrote the following into Neo4j browser
lssayers:
:params {s: 1, l: 1}
That results in the two params being set:
$s
which is 1.0
$l
which is 1.0
If you type the following into Neo4j Browser you'll see what I mean:
:params {s: 1, l: 1}
RETURN $s, $l
Yes you are right.. there is inconsistency:
:param s: 1 Return $s 1.0
:param s=>1 Return $s 1