jrgemignani opened a new pull request, #2284:
URL: https://github.com/apache/age/pull/2284

   NOTE: This PR was created with AI tools and a human.
   
   Optimized id() and properties() field access on vertices and edges.
   
   When accessing id(v) or properties(v) on a vertex, the system was generating 
inefficient SQL that rebuilt the entire vertex agtype before extracting the 
field:
   
     age_id(_agtype_build_vertex(id, _label_name_from_table_oid(labels),
                                 properties))
   
   This forced full vertex reconstruction for every row, even though the data 
was already available in table columns.
   
   Added optimize_vertex_field_access() in cypher_expr.c to detect these 
patterns and optimize them to direct column access:
   
     - age_id(_agtype_build_vertex(id, ...)) → graphid_to_agtype(id)
     - age_properties(_agtype_build_vertex(..., props)) → props
     - age_id(_agtype_build_edge(id, ...)) → graphid_to_agtype(id)
     - age_start_id(_agtype_build_edge(...)) → graphid_to_agtype(start_id)
     - age_end_id(_agtype_build_edge(...)) → graphid_to_agtype(end_id)
     - age_properties(_agtype_build_edge(...)) → props
   
   Note: age_label() is intentionally not optimized due to complexity of 
cstring-to-agtype string conversion.
   
   Added regression tests in unified_vertex_table.sql to verify the 
optimization works correctly for both vertices and edges.
   
   modified:   regress/expected/unified_vertex_table.out
   modified:   regress/sql/unified_vertex_table.sql
   modified:   src/backend/parser/cypher_expr.c


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]

Reply via email to