I am starting a new thread to discuss all properties reference feature which was not committed with the main patch. [1]
A <variable>.* is called all properties reference and it is allowed only in COLUMNs clause. Interpreting subclause 9.2 and 9.3 together, it expands to a list of graph property references <variable>.p1, ... <variable>.pn where p1, ..., pn are the properties of the labels which satisfy the label expression in the element pattern identified by <variable>. The graph property references are added to the COLUMNs clause in place of the all property reference, just like how <table>.* expands in SELECT's targetlist.
In the current implementation, we delay resolving graph property references (<variable>.<property>) till the time query is generated (generate_query_for_graph_path()). If we delay the all properties reference till that time, we can not determine the data types and names of the columns in the COLUMNs list. So we need to do that when the COLUMNs clause is resolved. This means that the properties associated with the labels needs to be resolved earlier. Since the properties are not associated with labels directly but through the elements, we need to find at least one element for every label in the label expression. In brief, all the namespace resolution need to happen before we transform COLUMNs clause. The patch rearranges the code that way.
I tried applying v20260318 on top of master to review it, but ran into merge conflicts in two files:
- parse_graphtable.c - rewriteGraphTable.c
The conflicts come from this commit that was added after the main PGQ commit (2f094e7ac69):