While the top-level objects fed to serialization are bound to the test
database being created nothing prevents code invoked during
serialization from performing queries against other connections entries
that haven't been swapped yet.
The reported example of that is a database router directing all reads to
a test mirror for a set of models involving auto-created many-to-many
fields. It might be tempting to address the many-to-many field case but
this a symptom of a larger problem where the test framework yields the
flow execution to user code that could interact with non-test databases
in unexpected ways.
Deferring test database fixture serialization until the point where all
connections entries have been swapped for their test equivalent ensures
that no code triggered during serialization can interact with non-test
databases.
Thanks Jake Howard for the report and Jacob Walls for the initial
investigation.
Backport of dc69a63f844b2ef3bc3371edde91644cf0bef0ee from main
Adding proper support for subquery right-hand-sides to TupleIn made it
obsolete.
Backport of d386405e04dac50656af50d100a14efdf8c58e8f from main
Co-authored-by: Simon Charette <charette.s@gmail.com>
When Expression.__init__() overrides make use of *args, **kwargs
captures their argument values are respectively bound as a tuple and
dict instances. These composite values might themselves contain values
that require special identity treatments such as Concat(output_field)
as it's a Field instance.
Refs #30628 which introduced bound Field differentiation but lacked
argument captures handling.
Thanks erchenstein for the report.
Backport of df2c4952df6d93c575fb8a3c853dc9d4c2449f36 from main
xgettext only extracts comment blocks if there is no program code between
the comment and the string that gets extracted. For details, see:
https://www.gnu.org/software/gettext/manual/html_node/xgettext-Invocation.html#Operation-mode
Black formatting has been turned off in some places to ensure the
comments are not moved, which previously resulted in them being removed
from the po files when scripts/manage_translations.py was run.
Backport of 6fcd0440aaa7601aa258d1c956eecfaedf72fbf4 from main.
This partly reverts commit 0b7edb9fcdd33d47ec5701b4f9b9553e27a88e95.
MariaDB reverted GIS functions.
Backport of 54a902c6e81214462388f79a7c42f1c88c863dfd from main.
This reverts commit c77573716a58af32ffcfc4fe87ff9e5c97909bd2.
MariaDB reverted GIS functions.
Backport of eb70aafdba18ac30e53056162c32ee6c21dea0b4 from main.
Non-tuple exact and in lookups have specialized logic for subqueries that can
be adapted to properly assign select mask if unspecified and ensure the number
of involved members are matching on both side of the operator.
Backport of 41239fe34d64e801212dccaa4585e4802d0fac68 from main.
This should allow backends more easily opt-in or out of native support and rely
on the fallback if unavailable.
Backport of a0a765ddeb5056c85e084773d3f6432e2a426638 from main.
It's necessary to specify a repository for `.pypirc` user configurations
with multiple per-project PyPI tokens.
Follow up to 26aedbbc0835df83140c7424df62bda03382f598.
Backport of 0dc61495b2217e9c5a872ac967dfcf197d342c84 from main.
This should allow third-party backends to define Tuple.as_vendor()
overrides that are taken into consideration which calling as_sql()
directly prevents.
Backport of c326cfe3b1683e6c205f53a4ad11feba6623a399 from main
Now that In.get_source_expression() includes its right-hand-side when it
contains expressions (refs #36025) it no longer requires a specialized
get_refs() method.
Backport of 0bac41fc7e4a842e8d20319cba31cc645501c245 from main.
In order for Expression.relabeled_clone to work appropriately its
get_source_expressions method must return all resolvable which wasn't the case
for Lookup when its right-hand-side is "direct" (not a compilable).
While refs #22288 added support for non-literals iterable right-hand-side
lookups it predated the subclassing of Lookup(Expression) refs #27021 which
could have been an opportunity to ensure right-hand-sides are always resolvable
(ValueList and ExpressionList).
Addressing all edge case with non-resolvable right-hand-sides would require
a significant refactor and deprecation of some parts of the Lookup interface so
this patch only focuses on FieldGetDbPrepValueIterableMixin (In and Range
lookups) by making sure that a right-hand-side containing resolvables are dealt
with appropriately during the resolving phase.
Thanks Aashay Amballi for the report.
Backport of 089deb82b9ac2d002af36fd36f288368cdac4b53 from main.
Added through_fields support to ManyToManyField.deconstruct.
Thanks to Simon Charette for pointers and the review.
Backport of b13b8684a04d0bc1081104c5973c62c27dc673b0 from main.
The original queryset._next_is_sticky() call never had the intended effect as
no further filtering was applied internally after the pk__in lookup making it
a noop.
In order to be coherent with how related filters are applied when retrieving
objects from a related manager the effects of what calling _next_is_sticky()
prior to applying annotations and filters to the queryset provided for
prefetching are emulated by allowing the reuse of all pre-existing JOINs.
Thanks David Glenck and Thiago Bellini Ribeiro for the detailed reports and
tests.
Backport of 2598b371a93e21d84b7a2a99b2329535c8c0c138 from main.
The get_(local|foreign)_related_value methods of GenericRelation must be
reversed because it defines (from|to)_fields and associated related_fields
in the reversed order as it's effectively a reverse GenericForeignKey
itself.
The related value methods must also account for the fact that referenced
primary key values might be stored as a string on the model defining the
GenericForeignKey but as integer on the model defining the GenericRelation.
This is achieved by calling the to_python method of the involved content type
in get_foreign_related_value just like GenericRelatedObjectManager does.
Lastly reverse many-to-one manager's prefetch_related_querysets should use
set_cached_value instead of direct attribute assignment as direct assignment
might are disallowed on ReverseManyToOneDescriptor descriptors. This is likely
something that was missed in f5233dc (refs #32511) when the is_cached guard
was added.
Thanks 1xinghuan for the report.
Backport of 198b30168d4e94af42e0dc7967bd3259b5c5790b from main.
Regression in e626716c28b6286f8cf0f8174077f3d2244f3eb3.
Thanks buffgecko12 for the report and Sarah Boyce for the review.
Backport of d15454a6e84a595ffc8dc1b926282f484f782a8f from main.
The `make black` target in the docs directory used Linux-specific
syntax for its `find` command. Changed to syntax that also works
on macOS and other BSD Unix variants.
Backport of 248d8457cbec631ef93d76137bc621106347adda from main.
The admindocs app doesn't pass a log level to docutils when it parses
reStructured Text, so system messages can be logged during parsing.
Backport of 9a71eca64bd3a357ef4846d81668d690089779c7 from main.