| Age | Commit message (Collapse) | Author |
|
|
|
The AssertNumQueriesContext didn't reset connection's use_debug_cursor
in case there was an exception. This resulted in leaking query strings
into connection.queries. Maximum memory use pre-patch was around 700MB,
post-patch it is around 200MB for Django's test suite.
|
|
Fix #20058: Make compilemessages use stdout instead of stderr.
|
|
Fix #20054: Removed links to modwsgi.org.
|
|
Fix 20061: remove out of date comment.
|
|
|
|
|
|
|
|
Thanks slinkp for the report and the initial patch.
|
|
|
|
Fixed #20053 -- Fix `index_together` documentation
|
|
|
|
Fixed an erroneous import in example code of docs (class-based-views/intro).
|
|
|
|
|
|
The original problem was that when filtering two levels up in
inheritance chain, Django optimized the join generation so that the
middle model was skipped. But then Django generated joins from top
to middle to bottom for SELECT clause, and thus there was one extra
join (top->middle->bottom + top -> bottom).
This case is fixed in master as the filtering optimization is gone.
This has the side effect that in some cases there is still extra join
if the SELECT clause doesn't contain anything from middle or bottom.
|
|
|
|
When the 'invalid' error message is set at field level, it masks
the error message raised by the validator, if any.
|
|
|
|
|
|
Thanks Florian Apolloner for the report and the review.
Also fixes #19643.
|
|
Model.save() will use UPDATE - if not updated - INSERT instead of
SELECT - if found UPDATE else INSERT. This should save a query when
updating, but will cost a little when inserting model with PK set.
Also fixed #17341 -- made sure .save() commits transactions only after
the whole model has been saved. This wasn't the case in model
inheritance situations.
The save_base implementation was refactored into multiple methods.
A typical chain for inherited save is:
save_base()
_save_parents(self)
for each parent:
_save_parents(parent)
_save_table(parent)
_save_table(self)
|
|
|
|
|
|
Thanks Ram Rachum for the report.
|
|
Fix #20022: Correctly handle prefixes with url-unsafe characters in reverse()
|
|
|
|
Fix #20022: Correctly handle prefixes with url-unsafe characters in reverse()
|
|
|
|
|
|
|
|
|
|
Thanks Anssi for haggling until I implemented this.
This change alleviates the need for atomic_if_autocommit. When
autocommit is disabled for a database, atomic will simply create and
release savepoints, and not commit anything. This honors the contract of
not doing any transaction management.
This change also makes the hack to allow using atomic within the legacy
transaction management redundant.
None of the above will work with SQLite, because of a flaw in the design
of the sqlite3 library. This is a known limitation that cannot be lifted
without unacceptable side effects eg. triggering arbitrary commits.
|
|
|
|
Thanks chikiro.spam at gmail.com for the report.
|
|
The sql/query.py add_q method did a lot of where/having tree hacking to
get complex queries to work correctly. The logic was refactored so that
it should be simpler to understand. The new logic should also produce
leaner WHERE conditions.
The changes cascade somewhat, as some other parts of Django (like
add_filter() and WhereNode) expect boolean trees in certain format or
they fail to work. So to fix the add_q() one must fix utils/tree.py,
some things in add_filter(), WhereNode and so on.
This commit also fixed add_filter to see negate clauses up the path.
A query like .exclude(Q(reversefk__in=a_list)) didn't work similarly to
.filter(~Q(reversefk__in=a_list)). The reason for this is that only
the immediate parent negate clauses were seen by add_filter, and thus a
tree like AND: (NOT AND: (AND: condition)) will not be handled
correctly, as there is one intermediary AND node in the tree. The
example tree is generated by .exclude(~Q(reversefk__in=a_list)).
Still, aggregation lost connectors in OR cases, and F() objects and
aggregates in same filter clause caused GROUP BY problems on some
databases.
Fixed #17600, fixed #13198, fixed #17025, fixed #17000, fixed #11293.
|
|
Before there was need to have both .relabel_aliases() and .clone() for
many structs. Now there is only relabeled_clone() for those structs
where alias is the only mutable attribute.
|
|
|
|
Thanks itsallvoodoo for the patch.
|
|
Thanks Anssi for the report.
|
|
One of these functions didn't exist anymore.
|
|
|
|
Regression in d0561242.
|
|
|
|
Thanks Florian for tracing the error.
|
|
parameters on Oracle.
Also removed some unused imports.
|
|
The atomic block provides a clean rollback to a savepoint on failed writes.
The ticket reported a race condition which I don't know how to test.
|
|
|
|
|
|
|