summaryrefslogtreecommitdiff
path: root/django/db/models
AgeCommit message (Collapse)Author
2022-09-02Fixed #29799 -- Allowed registering lookups per field instances.Allen Jonathan David
Thanks Simon Charette and Mariusz Felisiak for reviews and mentoring this Google Summer of Code 2022 project.
2022-08-30Fixed #21204 -- Tracked field deferrals by field instead of models.Simon Charette
This ensures field deferral works properly when a model is involved more than once in the same query with a distinct deferral mask.
2022-08-30Merged nested if statements in select_related_descend().Simon Charette
2022-08-27Fixed #33954 -- Prevented models.DecimalField from accepting NaN, Inf, and ↵Mohamed Karam
-Inf values.
2022-08-27Fixed #33952 -- Reallowed creating reverse foreign key managers on unsaved ↵David Wobrock
instances. Thanks Claude Paroz for the report. Regression in 7ba6ebe9149ae38257d70100e8bfbfd0da189862.
2022-08-27Fixed #33928 -- Avoided unnecessary queries when cascade updating.Simon Charette
Models that use SET, SET_NULL, and SET_DEFAULT as on_delete handler don't have to fetch objects for the sole purpose of passing them back to a follow up UPDATE query filtered by the retrieved objects primary key. This was achieved by flagging SET handlers as _lazy_ and having the collector logic defer object collections until the last minute. This should ensure that the rare cases where custom on_delete handlers are defined remain uncalled when when dealing with an empty collection of instances. This reduces the number queries required to apply SET handlers from 2 to 1 where the remaining UPDATE use the same predicate as the non removed SELECT query. In a lot of ways this is similar to the fast-delete optimization that was added in #18676 but for updates this time. The conditions only happen to be simpler in this case because SET handlers are always terminal. They never cascade to more deletes that can be combined. Thanks Renan GEHAN for the report.
2022-08-27Refs #33928 -- Removed unnecessary attribute assignment on on-delete updates.Simon Charette
Model instances retrieved for bulk field update purposes are not exposed to the outside world and thus are not required to be kept update to date.
2022-08-25Fixed typo in django/db/models/fields/files.py comment.Jan Pieter Waagmeester
2022-08-18Refs #26511 -- Fixed json.KeyTextTransform() on MySQL/MariaDB.Mariusz Felisiak
2022-08-15Fixed #26780 -- Added prefetch_related() support for sliced queries.Simon Charette
This was made possible by window function filtering support added in f387d024fc75569d2a4a338bfda76cc2f328f627.
2022-08-15Refs #28333 -- Added partial support for filtering against window functions.Simon Charette
Adds support for joint predicates against window annotations through subquery wrapping while maintaining errors for disjointed filter attempts. The "qualify" wording was used to refer to predicates against window annotations as it's the name of a specialized Snowflake extension to SQL that is to window functions what HAVING is to aggregates. While not complete the implementation should cover most of the common use cases for filtering against window functions without requiring the complex subquery pushdown and predicate re-aliasing machinery to deal with disjointed predicates against columns, aggregates, and window functions. A complete disjointed filtering implementation should likely be deferred until proper QUALIFY support lands or the ORM gains a proper subquery pushdown interface.
2022-08-11Refs #28333 -- Moved SQLCompiler's forced column aliasing logic to get_select().Simon Charette
This extends query composability possibilities when dealing with subqueries which is necessary to implement window function filtering.
2022-08-11Replaced Expression.replace_references() with .replace_expressions().Simon Charette
The latter allows for more generic use cases beyond the currently limited ones constraints validation has. Refs #28333, #30581.
2022-08-10Refs #33895 -- Fixed Case() crash with filters that match everything in ↵Mariusz Felisiak
When() on Oracle. Follow up to 036bb2b74afb50a71e7a945e8dd83499b603ac3a.
2022-08-09Fixed #33895 -- Fixed Case() crash with filters that match everything in When().David Wobrock
Thanks shukryzablah for the report.
2022-08-09Fixed #33902 -- Fixed Meta.constraints validation crash with F() expressions.Mariusz Felisiak
Thanks Adam Zahradník for the report. Bug in 667105877e6723c6985399803a364848891513cc.
2022-08-06Fixed #33898 -- Fixed Window() expression crash with ArrayAgg().Mariusz Felisiak
Thanks Kia for the report. Regression in e06dc4571ea9fd5723c8029959b95808be9f8812.
2022-07-27Refs #32948, Refs #32946 -- Used Q.create() internally for dynamic Q() objects.Nick Pope
Node.create() which has a compatible signature with Node.__init__() takes in a single `children` argument rather than relying in unpacking *args in Q.__init__() which calls Node.__init__(). In addition, we were often needing to unpack iterables into *args and can instead pass a list direct to Node.create().
2022-07-27Refs #32948 -- Simplified and optimized Q._combine() and __invert__().Nick Pope
- Removed use of Q.deconstruct() in Q._combine(). - Simplified and optimized Q.__invert__() by taking a shallow copy and swapping the negated attribute only. - Simplified construction in Q._combine(). - Simplified conditions in Q._combine() as Q.conditional = True the first isinstance() check is unnecessary. - Removed copy.copy() branch in Q._combine(). Co-authored-by: Keryn Knight <keryn@kerynknight.com>
2022-07-27Refs #32948 -- Added Node.__copy__().Nick Pope
This allows the copy.copy() usage in the Q._combine() method to finish sooner, instead of having to fallback to using the __reduce_ex__(4) method. Thia also avoids having to fall into copy.copy() at in Q._combine(), when combining a Q() with another Q(). Co-authored-by: Keryn Knight <keryn@kerynknight.com>
2022-07-27Refs #32948 -- Simplified WhereNode and Node.__deepcopy__()/add().Nick Pope
We can use copy() in Node.add() instead of create() as we don't need the children to be cloned via [:] subscript in __init__().
2022-07-27Refs #32948 -- Renamed Node._new_instance() to Node.create().Nick Pope
Node._new_instance() was added in 6dd2b5468fa275d53aa60fdcaff8c28bdc5e9c25 to work around Q.__init__() having an incompatible signature with Node.__init__(). It was intended as a hook that could be overridden if subclasses needed to change the behaviour of instantiation of their specialised form of Node. In practice this doesn't ever seem to have been used for this purpose and there are very few calls to Node._new_instance() with other code, e.g. Node.__deepcopy__() calling Node and overriding __class__ as required. Rename this to Node.create() to make it a more "official" piece of private API that we can use to simplify a lot of other areas internally. The docstring and nearby comment have been reworded to read more clearly.
2022-07-27Removed obsolete docstring from WhereNode.clone().Nick Pope
Node.subtree_parents was removed in d3f00bd5706b35961390d3814dd7e322ead3a9a3. That commit also added Q.clone() which was identical to WhereNode.clone(), but lacked the docstring. Q.clone() was later removed in b454e2cbc95eb26fa0c32b54c53ae24fc40e8c02.
2022-07-27Used AND, OR, XOR constants instead of hard-coded values.Nick Pope
2022-07-26Refs #27236 -- Reverted "Refs #27236 -- Refactored out ↵Mariusz Felisiak
DeprecationForHistoricalMigrationMixin." This reverts commit 57793b47657ace966ce8ce96d801ac0d85e5efc6.
2022-07-21Refs #27236 -- Made cosmetic edits to Meta.index_together deprecation.Mariusz Felisiak
This should make it more straightforward to move forward when deprecation ends.
2022-07-12Fixed #27236 -- Deprecated Meta.index_together in favor of Meta.indexes.David Wobrock
This also deprecates AlterIndexTogether migration operation.
2022-07-08Fixed #33829 -- Made BaseConstraint.deconstruct() and equality handle ↵Stéphane "Twidi" Angel
violation_error_message. Regression in 667105877e6723c6985399803a364848891513cc.
2022-07-07Refs #27236 -- Refactored out DeprecationForHistoricalMigrationMixin.David Wobrock
2022-07-06Refs CVE-2022-34265 -- Properly escaped Extract() and Trunc() parameters.Simon Charette
Co-authored-by: Mariusz Felisiak <felisiak.mariusz@gmail.com>
2022-07-04Fixed CVE-2022-34265 -- Protected Trunc(kind)/Extract(lookup_name) against ↵Mariusz Felisiak
SQL injection. Thanks Takuto Yoshikai (Aeye Security Lab) for the report.
2022-07-04Fixed #33816 -- Fixed QuerySet.only() after select_related() crash on proxy ↵Ipakeev
models.
2022-06-27Refs #32786 -- Made query clear ordering when ordered combined queryset is ↵Mariusz Felisiak
used in subquery on Oracle.
2022-06-27Fixed #33796 -- Fixed ordered combined queryset crash when used in subquery ↵Mariusz Felisiak
on PostgreSQL and MySQL. Thanks Shai Berger for the report. Regression in 30a01441347d5a2146af2944b29778fa0834d4be.
2022-06-23Fixed #33799, Refs #31685 -- Added parameters for updating conflicts to ↵DhruvaPatil98
QuerySeta.abulk_create().
2022-06-17Fixed #28897 -- Fixed QuerySet.update() on querysets ordered by annotations.David Wobrock
2022-06-14Fixed #33772 -- Added QuerySet.first()/last() error message on unordered ↵Pablo Pissi
queryset with aggregation.
2022-06-13Made QuerySet.bulk_update() raise an error when batch_size is zero.Ebram Shehata
2022-06-01Fixed #33733 -- Preserved wrapper assignment for manager methods.kshivakumar
2022-05-31Fixed #33191 -- Avoided clearing cached reference when saving child after ↵Allen Jonathan David
parent. Thanks Barry Johnson for the report.
2022-05-19Fixed #33705 -- Fixed crash when using IsNull() lookup in filters.David Wobrock
Thanks Florian Apolloner for the report. Thanks Simon Charette for the review.
2022-05-17Updated source translation catalogs.Mariusz Felisiak
Forward port of d1f1a0168ab8a2556980ec1410512b5f02502da4 from stable/4.1.x.
2022-05-13Fixed typo in Query.clone()'s docstring.非法操作
2022-05-12Fixed #33543 -- Deprecated passing nulls_first/nulls_last=False to OrderBy ↵Mariusz Felisiak
and Expression.asc()/desc(). Thanks Allen Jonathan David for the initial patch.
2022-05-12Fixed #29538 -- Fixed crash of ordering by related fields when Meta.ordering ↵Ed Rivas
contains expressions. Thanks Simon Charette for the review.
2022-05-10Fixed #30581 -- Added support for Meta.constraints validation.Gagaro
Thanks Simon Charette, Keryn Knight, and Mariusz Felisiak for reviews.
2022-05-04Refs #30581 -- Added Q.check() hook.Gagaro
2022-05-04Refs #33646 -- Reduced sync_to_async hops on async QuerySet iteration.Simon Charette
Until we add support for truly asynchronous database backends it's actually detrimental to have complete set retrieval require multiple hops between sync and async emulated contexts via asgiref. By defaulting to sending the whole sync _fetch_all() to the current context thread pool we reduce unncessary work when dealing with large result sets since the queryset cannot be iterated anyway before all results are retrieved and cached.
2022-05-03Refs #30581 -- Added Q.flatten().Gagaro
2022-05-02Refs #33646 -- Made QuerySet.raw() async-compatible.Mariusz Felisiak