@@ -962,6 +962,34 @@ def build_query(self) -> str:
962962 query += self ._ast .with_clause
963963
964964 returned_items : list [str ] = []
965+ if hasattr (self .node_set , "_subqueries" ):
966+ for subquery in self .node_set ._subqueries :
967+ query += " CALL {"
968+ if subquery ["initial_context" ]:
969+ query += " WITH "
970+ context : list [str ] = []
971+ for var in subquery ["initial_context" ]:
972+ if isinstance (var , (NodeNameResolver , RelationNameResolver )):
973+ context .append (var .resolve (self ))
974+ else :
975+ context .append (var )
976+ query += "," .join (context )
977+
978+ query += f"{ subquery ['query' ]} }} "
979+ self ._query_params .update (subquery ["query_params" ])
980+ for varname in subquery ["return_set" ]:
981+ # We declare the returned variables as "virtual" relations of the
982+ # root node class to make sure they will be translated by a call to
983+ # resolve_subgraph() (otherwise, they will be lost).
984+ # This is probably a temporary solution until we find something better...
985+ self ._ast .subgraph [varname ] = {
986+ "target" : None , # We don't need target class in this use case
987+ "children" : {},
988+ "variable_name" : varname ,
989+ "rel_variable_name" : varname ,
990+ }
991+ returned_items += subquery ["return_set" ]
992+
965993 if hasattr (self .node_set , "_intermediate_transforms" ):
966994 for transform in self .node_set ._intermediate_transforms :
967995 query += " WITH "
@@ -970,6 +998,7 @@ def build_query(self) -> str:
970998 # Reset return list since we'll probably invalidate most variables
971999 self ._ast .return_clause = ""
9721000 self ._ast .additional_return = []
1001+ returned_items = []
9731002 for name , varprops in transform ["vars" ].items ():
9741003 source = varprops ["source" ]
9751004 if isinstance (source , (NodeNameResolver , RelationNameResolver )):
@@ -997,34 +1026,6 @@ def build_query(self) -> str:
9971026 ordering .append (item )
9981027 query += "," .join (ordering )
9991028
1000- if hasattr (self .node_set , "_subqueries" ):
1001- for subquery in self .node_set ._subqueries :
1002- query += " CALL {"
1003- if subquery ["initial_context" ]:
1004- query += " WITH "
1005- context : list [str ] = []
1006- for var in subquery ["initial_context" ]:
1007- if isinstance (var , (NodeNameResolver , RelationNameResolver )):
1008- context .append (var .resolve (self ))
1009- else :
1010- context .append (var )
1011- query += "," .join (context )
1012-
1013- query += f"{ subquery ['query' ]} }} "
1014- self ._query_params .update (subquery ["query_params" ])
1015- for varname in subquery ["return_set" ]:
1016- # We declare the returned variables as "virtual" relations of the
1017- # root node class to make sure they will be translated by a call to
1018- # resolve_subgraph() (otherwise, they will be lost).
1019- # This is probably a temporary solution until we find something better...
1020- self ._ast .subgraph [varname ] = {
1021- "target" : None , # We don't need target class in this use case
1022- "children" : {},
1023- "variable_name" : varname ,
1024- "rel_variable_name" : varname ,
1025- }
1026- returned_items += subquery ["return_set" ]
1027-
10281029 query += " RETURN "
10291030 if self ._ast .return_clause and not self ._subquery_namespace :
10301031 returned_items .append (self ._ast .return_clause )
0 commit comments