age icon indicating copy to clipboard operation
age copied to clipboard

List comprehension as property constraint of MERGE clause errors out

Open MuhammadTahaNaveed opened this issue 1 year ago • 2 comments

Describe the bug List comprehension as property constraint of MERGE clause errors out.

How are you accessing AGE (Command line, driver, etc.)?

  • command line

What is the command that caused the error?

SELECT * from cypher('graph_name', $$
  MERGE ({list:[u IN [1,2,3]]})
$$) as (a agtype);
ERROR:  Aggref found in non-Agg plan node

Expected behavior Should execute without any error.

Environment (please complete the following information):

  • Version: latest

MuhammadTahaNaveed avatar Feb 14 '24 18:02 MuhammadTahaNaveed

To apply a workaround to the query and avoid using list comprehensions in the MERGE clause, you can modify the query to precompute the list before using it in the MERGE clause. Here's how you can rewrite the query:

WITH input_list AS ( SELECT [1,2,3] AS list ) SELECT * FROM cypher('graph_name', $$ MERGE ({list: u.list}) ON CREATE SET ... ON MATCH SET ... $$) AS (a agtype); In this modified query:

We first create a Common Table Expression (CTE) named input_list to compute the list [1,2,3]. Then, we reference this computed list u.list within the MERGE clause. You need to replace ON CREATE SET ... and ON MATCH SET ... with the appropriate actions you want to perform when the MERGE clause creates or matches a node. By precomputing the list outside the MERGE clause, we avoid using list comprehensions directly within it, potentially bypassing the error you encountered.

To apply a workaround to the query and avoid using list comprehensions in the MERGE clause, you can modify the query to precompute the list before using it in the MERGE clause. Here's how you can rewrite the query:

sql Copy code WITH input_list AS ( SELECT [1,2,3] AS list ) SELECT * FROM cypher('graph_name', $$ MERGE ({list: u.list}) ON CREATE SET ... ON MATCH SET ... $$) AS (a agtype); In this modified query:

We first create a Common Table Expression (CTE) named input_list to compute the list [1,2,3]. Then, we reference this computed list u.list within the MERGE clause. You need to replace ON CREATE SET ... and ON MATCH SET ... with the appropriate actions you want to perform when the MERGE clause creates or matches a node. By precomputing the list outside the MERGE clause, we avoid using list comprehensions directly within it, potentially bypassing the error you encountered.

diangamichael avatar Apr 05 '24 23:04 diangamichael

SELECT * FROM cypher('graph_name', $$ UNWIND [1,2,3] AS value MERGE (n {property: value}) $$) AS (a agtype);

sir-sa avatar Apr 09 '24 08:04 sir-sa