mirror of
https://github.com/django/django.git
synced 2025-08-04 10:59:45 +00:00
Fixed #19861 -- Transaction ._dirty flag improvement
There were a couple of errors in ._dirty flag handling: * It started as None, but was never reset to None. * The _dirty flag was sometimes used to indicate if the connection was inside transaction management, but this was not done consistently. This also meant the flag had three separate values. * The None value had a special meaning, causing for example inability to commit() on new connection unless enter/leave tx management was done. * The _dirty was tracking "connection in transaction" state, but only in managed transactions. * Some tests never reset the transaction state of the used connection. * And some additional less important changes. This commit has some potential for regressions, but as the above list shows, the current situation isn't perfect either.
This commit is contained in:
parent
2108941677
commit
50328f0a61
12 changed files with 161 additions and 69 deletions
|
@ -1249,11 +1249,6 @@ make the call non-blocking. If a conflicting lock is already acquired by
|
|||
another transaction, :exc:`~django.db.DatabaseError` will be raised when the
|
||||
queryset is evaluated.
|
||||
|
||||
Note that using ``select_for_update()`` will cause the current transaction to be
|
||||
considered dirty, if under transaction management. This is to ensure that
|
||||
Django issues a ``COMMIT`` or ``ROLLBACK``, releasing any locks held by the
|
||||
``SELECT FOR UPDATE``.
|
||||
|
||||
Currently, the ``postgresql_psycopg2``, ``oracle``, and ``mysql`` database
|
||||
backends support ``select_for_update()``. However, MySQL has no support for the
|
||||
``nowait`` argument. Obviously, users of external third-party backends should
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue