Add GROUP BY and ORDER BY optimization#2287
Open
jrgemignani wants to merge 1 commit intoapache:Dev_Multiple_Labelsfrom
Open
Add GROUP BY and ORDER BY optimization#2287jrgemignani wants to merge 1 commit intoapache:Dev_Multiple_Labelsfrom
jrgemignani wants to merge 1 commit intoapache:Dev_Multiple_Labelsfrom
Conversation
NOTE: This PR was created with AI tools and a human. Add GROUP BY and ORDER BY optimization for vertex/edge field access. Transform expressions like age_id(_agtype_build_vertex(id, label, props)) into graphid_to_agtype(id) in GROUP BY and ORDER BY clauses, avoiding unnecessary vertex/edge reconstruction when only the ID is needed. Implementation: - Add optimize_sortgroupby_vertex_access() in cypher_clause.c - Walk target entries with non-zero ressortgroupref (GROUP BY/ORDER BY refs) - Detect outer accessor functions: age_id, age_start_id, age_end_id, age_properties - Match inner build functions: _agtype_build_vertex, _agtype_build_edge - Extract the relevant field directly and wrap with graphid_to_agtype() - Add resjunk target entries to subquery for direct field access Supported patterns: - GROUP BY id(v) -> Group Key: graphid_to_agtype(v.id) - GROUP BY start_id(e) -> Group Key: graphid_to_agtype(e.start_id) - GROUP BY end_id(e) -> Group Key: graphid_to_agtype(e.end_id) - ORDER BY id(v) -> Sort Key: graphid_to_agtype(v.id) - ORDER BY start_id(e) -> Sort Key: graphid_to_agtype(e.start_id) - ORDER BY end_id(e) -> Sort Key: graphid_to_agtype(e.end_id) - Combined ORDER BY + GROUP BY This complements existing optimizations: - cypher_expr.c: optimize_vertex_field_access() for direct FuncExpr patterns - cypher_clause.c: optimize_qual_expr_mutator() for WHERE/join conditions Existing regression tests were not affected. Added additional regression tests. modified: regress/expected/unified_vertex_table.out modified: regress/sql/unified_vertex_table.sql modified: src/backend/parser/cypher_clause.c
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
NOTE: This PR was created with AI tools and a human.
Add GROUP BY and ORDER BY optimization for vertex/edge field access.
Transform expressions like age_id(_agtype_build_vertex(id, label, props)) into graphid_to_agtype(id) in GROUP BY and ORDER BY clauses, avoiding unnecessary vertex/edge reconstruction when only the ID is needed.
Implementation:
Supported patterns:
This complements existing optimizations:
Existing regression tests were not affected.
Added additional regression tests.
modified: regress/expected/unified_vertex_table.out
modified: regress/sql/unified_vertex_table.sql
modified: src/backend/parser/cypher_clause.c