Browse Source

Fixed #31770 -- Allowed select_for_update(of) on MySQL 8.0.1+.

Simon Charette 4 years ago
parent
commit
ca6c5e5fc2

+ 4 - 0
django/db/backends/mysql/features.py

@@ -117,6 +117,10 @@ class DatabaseFeatures(BaseDatabaseFeatures):
             return self.connection.mysql_version >= (10, 3, 0)
         return self.connection.mysql_version >= (8, 0, 1)
 
+    @cached_property
+    def has_select_for_update_of(self):
+        return not self.connection.mysql_is_mariadb and self.connection.mysql_version >= (8, 0, 1)
+
     @cached_property
     def supports_explain_analyze(self):
         return self.connection.mysql_is_mariadb or self.connection.mysql_version >= (8, 0, 18)

+ 1 - 1
docs/ref/databases.txt

@@ -639,7 +639,7 @@ Option          MariaDB   MySQL
 =============== ========= ==========
 ``SKIP LOCKED``           X (≥8.0.1)
 ``NOWAIT``      X (≥10.3) X (≥8.0.1)
-``OF``
+``OF``                    X (≥8.0.1)
 ``NO KEY``
 =============== ========= ==========
 

+ 5 - 3
docs/ref/models/querysets.txt

@@ -1729,9 +1729,9 @@ them::
 
 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`` and
-``skip_locked`` arguments. MySQL and MariaDB don't support the ``of`` argument.
-The ``no_key`` argument is supported only on PostgreSQL.
+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.
 
 Passing ``nowait=True``, ``skip_locked=True``, ``no_key=True``, or ``of`` to
 ``select_for_update()`` using database backends that do not support these
@@ -1769,6 +1769,8 @@ raised if ``select_for_update()`` is used in autocommit mode.
 
     The ``no_key`` argument was added.
 
+    The ``of`` argument was allowed on MySQL 8.0.1+.
+
 ``raw()``
 ~~~~~~~~~
 

+ 3 - 0
docs/releases/3.2.txt

@@ -230,6 +230,9 @@ Models
 * :class:`FilteredRelation() <django.db.models.FilteredRelation>` now supports
   nested relations.
 
+* The ``of`` argument of :meth:`.QuerySet.select_for_update()` is now allowed
+  on MySQL 8.0.1+.
+
 Requests and Responses
 ~~~~~~~~~~~~~~~~~~~~~~