@@ -56,8 +56,8 @@ class QuerysetAggregateWrapper:
5656 """
5757 Wrapper around queryset to indicate that we want to fetch the result of .aggregate()
5858 This is useful for executing aggregate queries in a single database query along with other querysets.
59-
60- Since aggregates don't support lazy evaluation, we need to store the queryset and
59+
60+ Since aggregates don't support lazy evaluation, we need to store the queryset and
6161 the aggregate expressions separately.
6262 """
6363
@@ -218,15 +218,17 @@ def _get_sanitized_sql_param(self, param) -> str:
218218 return str (param )
219219 if isinstance (param , bool ):
220220 return "TRUE" if param else "FALSE"
221-
221+
222222 param_str = str (param )
223-
223+
224224 try :
225225 from psycopg import sql
226+
226227 return sql .quote (param_str )
227228 except ImportError :
228229 try :
229230 from psycopg2 .extensions import QuotedString
231+
230232 return QuotedString (param_str ).getquoted ().decode ("utf-8" )
231233 except ImportError :
232234 raise ImportError ("psycopg or psycopg2 not installed" )
@@ -268,10 +270,9 @@ def _get_django_sql_for_queryset(self, queryset: QuerysetWrapperType) -> str:
268270 django_sql = sql % quoted_params
269271
270272 if isinstance (queryset , QuerysetAggregateWrapper ):
271-
272273 compiler = self ._get_compiler_from_queryset (queryset .queryset )
273274 sql , params = compiler .as_sql ()
274-
275+
275276 if isinstance (params , dict ):
276277 quoted_params = {}
277278 for key , value in params .items ():
@@ -282,15 +283,15 @@ def _get_django_sql_for_queryset(self, queryset: QuerysetWrapperType) -> str:
282283 for value in params :
283284 quoted_params .append (self ._get_sanitized_sql_param (value ))
284285 base_sql = sql % tuple (quoted_params )
285-
286+
286287 aggregate_sql_parts = []
287288 for key , value in queryset .aggregate_expressions .items ():
288289 if isinstance (value , Sum ):
289290 field = value .source_expressions [0 ].name
290291 aggregate_sql_parts .append (f"'{ key } ', SUM(subquery.{ field } )" )
291292 elif isinstance (value , Count ):
292293 field = value .source_expressions [0 ].name
293- if field == '*' :
294+ if field == "*" :
294295 aggregate_sql_parts .append (f"'{ key } ', COUNT(*)" )
295296 else :
296297 aggregate_sql_parts .append (f"'{ key } ', COUNT(subquery.{ field } )" )
@@ -303,7 +304,7 @@ def _get_django_sql_for_queryset(self, queryset: QuerysetWrapperType) -> str:
303304 elif isinstance (value , Min ):
304305 field = value .source_expressions [0 ].name
305306 aggregate_sql_parts .append (f"'{ key } ', MIN(subquery.{ field } )" )
306-
307+
307308 if aggregate_sql_parts :
308309 return f"(SELECT array_to_json(array[row(json_build_object({ ', ' .join (aggregate_sql_parts )} ))]) FROM ({ base_sql } ) AS subquery)"
309310 else :
@@ -436,10 +437,12 @@ def _convert_raw_results_to_final_queryset_results(
436437 queryset_results = queryset_raw_results [0 ]["__count" ]
437438 elif isinstance (queryset , QuerysetAggregateWrapper ):
438439 if queryset_raw_results and len (queryset_raw_results ) > 0 :
439- nested_result = queryset_raw_results [0 ].get ('f1' , {})
440+ nested_result = queryset_raw_results [0 ].get ("f1" , {})
440441 queryset_results = nested_result
441442 else :
442- queryset_results = {key : None for key in queryset .aggregate_expressions .keys ()}
443+ queryset_results = {
444+ key : None for key in queryset .aggregate_expressions .keys ()
445+ }
443446 for key , value in queryset .aggregate_expressions .items ():
444447 if isinstance (value , Count ):
445448 queryset_results [key ] = 0
@@ -519,11 +522,9 @@ def execute(self) -> list[list[Any]]:
519522 with connections ["default" ].cursor () as cursor :
520523 cursor .execute (raw_sql , params = {})
521524 raw_sql_result_dict : dict = cursor .fetchone ()[0 ]
522- print (f"Raw SQL result: { raw_sql_result_dict } " )
523525 else :
524526 # all querysets are always empty (EmptyResultSet)
525527 raw_sql_result_dict = {}
526- print ("All querysets are empty" )
527528
528529 final_result = []
529530 index = 0
@@ -532,14 +533,14 @@ def execute(self) -> list[list[Any]]:
532533 # empty sql case
533534 final_result .append (result )
534535 continue
535-
536+
536537 raw_results = raw_sql_result_dict .get (str (index ), [])
537-
538+
538539 converted_results = self ._convert_raw_results_to_final_queryset_results (
539540 queryset = queryset ,
540541 queryset_raw_results = raw_results ,
541542 )
542-
543+
543544 final_result .append (converted_results )
544545 index += 1
545546
0 commit comments