@@ -92,11 +92,10 @@ def _prepare_annotations_for_group_pipeline(self):
92
92
group .update (having_group )
93
93
return group , replacements
94
94
95
- def _get_group_id_expressions (self ):
95
+ def _get_group_id_expressions (self , order_by ):
96
96
"""Generate group ID expressions for the aggregation pipeline."""
97
97
group_expressions = set ()
98
98
replacements = {}
99
- order_by = self .get_order_by ()
100
99
for expr , (_ , _ , is_ref ) in order_by :
101
100
if not is_ref :
102
101
group_expressions |= set (expr .get_group_by_cols ())
@@ -170,14 +169,14 @@ def _build_group_pipeline(self, ids, group):
170
169
return pipeline
171
170
172
171
def pre_sql_setup (self , with_col_aliases = False ):
173
- pre_setup = super ().pre_sql_setup (with_col_aliases = with_col_aliases )
172
+ extra_select , order_by , group_by = super ().pre_sql_setup (with_col_aliases = with_col_aliases )
174
173
group , all_replacements = self ._prepare_annotations_for_group_pipeline ()
175
174
176
175
# The query.group_by is either None (no GROUP BY at all), True
177
176
# (group by select fields), or a list of expressions to be added
178
177
# to the group by.
179
178
if group or self .query .group_by :
180
- ids , replacements = self ._get_group_id_expressions ()
179
+ ids , replacements = self ._get_group_id_expressions (order_by )
181
180
all_replacements .update (replacements )
182
181
pipeline = self ._build_group_pipeline (ids , group )
183
182
if self .having :
@@ -197,7 +196,7 @@ def pre_sql_setup(self, with_col_aliases=False):
197
196
for target , expr in self .query .annotation_select .items ()
198
197
}
199
198
200
- return pre_setup
199
+ return extra_select , order_by , group_by
201
200
202
201
def execute_sql (
203
202
self , result_type = MULTI , chunked_fetch = False , chunk_size = GET_ITERATOR_CHUNK_SIZE
0 commit comments