Fixed #32908 -- Allowed select_for_update(skip_locked) on MariaDB 10.6+.

This commit is contained in:
Mariusz Felisiak 2021-07-08 06:51:10 +02:00 committed by GitHub
parent 5013798fe9
commit 77b88fe621
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 16 additions and 7 deletions

View File

@ -185,7 +185,9 @@ class DatabaseFeatures(BaseDatabaseFeatures):
@cached_property
def has_select_for_update_skip_locked(self):
return not self.connection.mysql_is_mariadb and self.connection.mysql_version >= (8, 0, 1)
if self.connection.mysql_is_mariadb:
return self.connection.mysql_version >= (10, 6)
return self.connection.mysql_version >= (8, 0, 1)
@cached_property
def has_select_for_update_nowait(self):

View File

@ -686,7 +686,7 @@ a :exc:`~django.db.NotSupportedError` is raised.
=============== ========= ==========
Option MariaDB MySQL
=============== ========= ==========
``SKIP LOCKED`` X (≥8.0.1)
``SKIP LOCKED`` X (≥10.6) X (≥8.0.1)
``NOWAIT`` X (≥10.3) X (≥8.0.1)
``OF`` X (≥8.0.1)
``NO KEY``

View File

@ -1792,11 +1792,11 @@ them::
>>> Person.objects.select_related('hometown').select_for_update().exclude(hometown=None)
<QuerySet [<Person: ...)>, ...]>
Currently, the ``postgresql``, ``oracle``, and ``mysql`` database
backends support ``select_for_update()``. However, MariaDB 10.3+ supports only
the ``nowait`` argument and MySQL 8.0.1+ supports the ``nowait``,
``skip_locked``, and ``of`` arguments. The ``no_key`` argument is supported
only on PostgreSQL.
The ``postgresql``, ``oracle``, and ``mysql`` database backends support
``select_for_update()``. However, MariaDB 10.3+ only supports the ``nowait``
argument, MariaDB 10.6+ also supports the ``skip_locked`` argument, and MySQL
8.0.1+ supports the ``nowait``, ``skip_locked``, and ``of`` arguments. The
``no_key`` argument is only supported on PostgreSQL.
Passing ``nowait=True``, ``skip_locked=True``, ``no_key=True``, or ``of`` to
``select_for_update()`` using database backends that do not support these
@ -1836,6 +1836,10 @@ raised if ``select_for_update()`` is used in autocommit mode.
The ``of`` argument was allowed on MySQL 8.0.1+.
.. versionchanged:: 4.0
The ``skip_locked`` argument was allowed on MariaDB 10.6+.
``raw()``
~~~~~~~~~

View File

@ -274,6 +274,9 @@ Models
* The new :attr:`.Aggregate.empty_aggregate_value` attribute allows specifying
a value to return when the aggregation is used over an empty result set.
* The ``skip_locked`` argument of :meth:`.QuerySet.select_for_update()` is now
allowed on MariaDB 10.6+.
Requests and Responses
~~~~~~~~~~~~~~~~~~~~~~