<feed xmlns='http://www.w3.org/2005/Atom'>
<title>django.git/tests/aggregation, branch main</title>
<subtitle>django
</subtitle>
<id>http://cgit.adnoto.dev/django.git/atom?h=main</id>
<link rel='self' href='http://cgit.adnoto.dev/django.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/'/>
<updated>2026-04-18T06:53:21Z</updated>
<entry>
<title>Fixed #37028 -- Added BitAnd(), BitOr(), and BitXor() aggregates.</title>
<updated>2026-04-18T06:53:21Z</updated>
<author>
<name>Mariusz Felisiak</name>
<email>felisiak.mariusz@gmail.com</email>
</author>
<published>2026-04-18T06:53:21Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=ed79c5959add54b6e8ea589ec601e0d2e801517e'/>
<id>urn:sha1:ed79c5959add54b6e8ea589ec601e0d2e801517e</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fixed #36890 -- Supported StringAgg(distinct=True) on SQLite with the default delimiter.</title>
<updated>2026-02-10T21:47:44Z</updated>
<author>
<name>varunkasyap</name>
<email>varunkasyap@hotmail.com</email>
</author>
<published>2026-02-02T08:20:16Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=3282d9f4edbe5d341a0fa2a8c62b435b3885ab64'/>
<id>urn:sha1:3282d9f4edbe5d341a0fa2a8c62b435b3885ab64</id>
<content type='text'>
</content>
</entry>
<entry>
<title>Fixed CVE-2026-1287 -- Protected against SQL injection in column aliases via control characters.</title>
<updated>2026-02-03T12:55:04Z</updated>
<author>
<name>Jake Howard</name>
<email>git@theorangeone.net</email>
</author>
<published>2026-01-21T11:14:48Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=e891a84c7ef9962bfcc3b4685690219542f86a22'/>
<id>urn:sha1:e891a84c7ef9962bfcc3b4685690219542f86a22</id>
<content type='text'>
Control characters in FilteredRelation column aliases could be used for
SQL injection attacks. This affected QuerySet.annotate(), aggregate(),
extra(), values(), values_list(), and alias() when using dictionary
expansion with **kwargs.

Thanks Solomon Kebede for the report, and Simon Charette, Jacob Walls,
and Natalia Bidart for reviews.
</content>
</entry>
<entry>
<title>Fixed #36751 -- Fixed empty filtered aggregation crash over annotated queryset.</title>
<updated>2025-11-24T11:14:38Z</updated>
<author>
<name>Simon Charette</name>
<email>charette.s@gmail.com</email>
</author>
<published>2025-11-24T11:14:38Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=2a6e0bd72d4a69725b957d6748a4b834f21b12b5'/>
<id>urn:sha1:2a6e0bd72d4a69725b957d6748a4b834f21b12b5</id>
<content type='text'>
Regression in b8e5a8a9a2a767f584cbe89a878a42363706f939.

Refs #36404.

The replace_expressions method was innapropriately dealing with falsey
but not None source expressions causing them to also be potentially
evaluated when __bool__ was invoked (e.g. QuerySet.__bool__ evaluates
the queryset).

The changes introduced in b8e5a8a9a2, which were to deal with a similar
issue, surfaced the problem as aggregation over an annotated queryset
requires an inlining (or pushdown) of aggregate references which is
achieved through replace_expressions.

In cases where an empty Q object was provided as an aggregate filter,
such as when the admin facetting feature was used as reported, it would
wrongly be turned into None, instead of an empty WhereNode, causing a
crash at aggregate filter compilation.

Note that the crash signature differed depending on whether or not the
backend natively supports aggregate filtering
(supports_aggregate_filter_clause) as the fallback, which makes use
Case / When expressions, would result in a TypeError instead of a
NoneType AttributeError.

Thanks Rafael Urben for the report, Antoliny and Youngkwang Yang for
the triage.</content>
</entry>
<entry>
<title>Fixed CVE-2025-59681 -- Protected QuerySet.annotate(), alias(), aggregate(), and extra() against SQL injection in column aliases on MySQL/MariaDB.</title>
<updated>2025-10-01T12:11:45Z</updated>
<author>
<name>Mariusz Felisiak</name>
<email>felisiak.mariusz@gmail.com</email>
</author>
<published>2025-09-10T07:53:52Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=41b43c74bda19753c757036673ea9db74acf494a'/>
<id>urn:sha1:41b43c74bda19753c757036673ea9db74acf494a</id>
<content type='text'>
Thanks sw0rd1ight for the report.

Follow up to 93cae5cb2f9a4ef1514cf1a41f714fef08005200.
</content>
</entry>
<entry>
<title>Refs #36500 -- Rewrapped long docstrings and block comments via a script.</title>
<updated>2025-07-23T23:17:55Z</updated>
<author>
<name>django-bot</name>
<email>ops@djangoproject.com</email>
</author>
<published>2025-07-23T03:41:41Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=69a93a88edb56ba47f624dac7a21aacc47ea474f'/>
<id>urn:sha1:69a93a88edb56ba47f624dac7a21aacc47ea474f</id>
<content type='text'>
Rewrapped long docstrings and block comments to 79 characters + newline
using script from https://github.com/medmunds/autofix-w505.
</content>
</entry>
<entry>
<title>Fixed #36405 -- Fixed Aggregate.order_by using OuterRef.</title>
<updated>2025-05-23T14:15:59Z</updated>
<author>
<name>Adam Johnson</name>
<email>me@adamj.eu</email>
</author>
<published>2025-05-21T12:48:59Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=c2615a050036eda0bca090c707191076220cee9f'/>
<id>urn:sha1:c2615a050036eda0bca090c707191076220cee9f</id>
<content type='text'>
co-authored-by: Simon Charette &lt;charette.s@gmail.com&gt;
</content>
</entry>
<entry>
<title>Fixed #36404 -- Fixed Aggregate.filter using OuterRef.</title>
<updated>2025-05-23T13:17:20Z</updated>
<author>
<name>Adam Johnson</name>
<email>me@adamj.eu</email>
</author>
<published>2025-05-21T14:16:12Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=b8e5a8a9a2a767f584cbe89a878a42363706f939'/>
<id>urn:sha1:b8e5a8a9a2a767f584cbe89a878a42363706f939</id>
<content type='text'>
Regression in a76035e925ff4e6d8676c65cb135c74b993b1039.
Thank you to Simon Charette for the review.

co-authored-by: Simon Charette &lt;charette.s@gmail.com&gt;
</content>
</entry>
<entry>
<title>Refs #35444 -- Adjusted multi-args distinct aggregate test ordering expectations.</title>
<updated>2025-05-23T09:19:31Z</updated>
<author>
<name>Simon Charette</name>
<email>charette.s@gmail.com</email>
</author>
<published>2025-05-23T05:00:29Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=ec7f0bcf79dec7412d00d48e43c995a45b3b7b70'/>
<id>urn:sha1:ec7f0bcf79dec7412d00d48e43c995a45b3b7b70</id>
<content type='text'>
Unless an explicit order_by is specified for the test the ordering of the
aggregation results is undefined.
</content>
</entry>
<entry>
<title>Fixed #34262 -- Added support for AnyValue for SQLite, MySQL, Oracle, and Postgresql 16+.</title>
<updated>2025-05-20T08:01:42Z</updated>
<author>
<name>ontowhee</name>
<email>82607723+ontowhee@users.noreply.github.com</email>
</author>
<published>2025-03-16T02:23:28Z</published>
<link rel='alternate' type='text/html' href='http://cgit.adnoto.dev/django.git/commit/?id=ddb85294159185c5bd5cae34c9ef735ff8409bfe'/>
<id>urn:sha1:ddb85294159185c5bd5cae34c9ef735ff8409bfe</id>
<content type='text'>
Thanks Simon Charette for the guidance and review. Thanks Tim Schilling for the
documentation review. Thanks David Wobrock for investigation and solution proposals.
</content>
</entry>
</feed>
