Issue with negative numeric query parameters (using the python client)

Since this is a different issue I created a different thread. I am trying to set a numeric property value of a node using the python module for RedisGraph.

Using this example code:

params = {'purpose':"pleasure"} query = """MATCH (p:person)-[v:visited {purpose:$purpose}]->(c:country) RETURN p.name, p.age, v.purpose, c.name""" result = redis_graph.query(query, params) 

I am able to make my own query with parameters and run it successfully:

params = {'balance': 1000.4} query = """MERGE (p:person) SET p.balance = $balance""" result = redis_graph.query(query, params) 

Result:

Properties set 1.0 internal execution time 0.3287 

However, when the value is negative I get an error:

params = {'balance': -1000.4} query = """MERGE (p:person) SET p.balance = $balance""" result = redis_graph.query(query, params) 

Result:

--------------------------------------------------------------------------- ResponseError Traceback (most recent call last) <ipython-input-117-974393b67c61> in <module> 3 query = """MERGE (p:person) SET p.balance = $balance""" 4 ----> 5 result = redis_graph.query(query, params) 6 7 # Print resultset ~\AppData\Local\Programs\Python\Python37-32\lib\site-packages\redisgraph\graph.py in query(self, q, params) 128 result_set = None 129 --> 130 response = self.redis_con.execute_command("GRAPH.QUERY", self.name, q, "--compact") 131 return QueryResult(self, response) 132 ~\AppData\Local\Programs\Python\Python37-32\lib\site-packages\redis\client.py in execute_command(self, *args, **options) 899 try: 900 conn.send_command(*args) --> 901 return self.parse_response(conn, command_name, **options) 902 except (ConnectionError, TimeoutError) as e: 903 conn.disconnect() ~\AppData\Local\Programs\Python\Python37-32\lib\site-packages\redis\client.py in parse_response(self, connection, command_name, **options) 913 "Parses a response from the Redis server" 914 try: --> 915 response = connection.read_response() 916 except ResponseError: 917 if EMPTY_RESPONSE in options: ~\AppData\Local\Programs\Python\Python37-32\lib\site-packages\redis\connection.py in read_response(self) 754 755 if isinstance(response, ResponseError): --> 756 raise response 757 return response 758 ResponseError: errMsg: Invalid input 'b': expected ';', a statement option, a query hint, a clause or a schema command line: 1, column: 1, offset: 0 errCtx: balance=-1000.4 MERGE (p:person) SET p.balance = $balance errCtxOffset: 0 

It makes no difference if I use integers or floats. Using strings doesn’t produce an error as expected.

Hi @Damian_Danev, this is indeed a bug, I’ve opened an issue and we’ll be looking into it.

2 Likes

This fails:

params = { "props" : { "name" : "Andy", "position" : "Developer" } } query = """CREATE ($props)""" result = redis_graph.query(query, params) 
--------------------------------------------------------------------------- ResponseError Traceback (most recent call last) <ipython-input-119-c0a177f9325f> in <module> 8 query = """CREATE ($props)""" 9 ---> 10 result = redis_graph.query(query, params) 11 12 # Print resultset ~\AppData\Local\Programs\Python\Python37-32\lib\site-packages\redisgraph\graph.py in query(self, q, params) 128 result_set = None 129 --> 130 response = self.redis_con.execute_command("GRAPH.QUERY", self.name, q, "--compact") 131 return QueryResult(self, response) 132 ~\AppData\Local\Programs\Python\Python37-32\lib\site-packages\redis\client.py in execute_command(self, *args, **options) 899 try: 900 conn.send_command(*args) --> 901 return self.parse_response(conn, command_name, **options) 902 except (ConnectionError, TimeoutError) as e: 903 conn.disconnect() ~\AppData\Local\Programs\Python\Python37-32\lib\site-packages\redis\client.py in parse_response(self, connection, command_name, **options) 913 "Parses a response from the Redis server" 914 try: --> 915 response = connection.read_response() 916 except ResponseError: 917 if EMPTY_RESPONSE in options: ~\AppData\Local\Programs\Python\Python37-32\lib\site-packages\redis\connection.py in read_response(self) 754 755 if isinstance(response, ResponseError): --> 756 raise response 757 return response 758 ResponseError: errMsg: Invalid input 'p': expected PROFILE line: 1, column: 4, offset: 3 errCtx: props={'name': 'Andy', 'position': 'Developer'} CREATE ($props) errCtxOffset: 3 

Is it also a case of a parsing bug or it’s an unsupported functionality?

The map data type, isn’t supported.
{“name”: “Andy”, “position”: “Developer”} is a map.