summaryrefslogtreecommitdiff
path: root/django/db/backends/mysql/operations.py
diff options
context:
space:
mode:
authorAdam Johnson <me@adamj.eu>2020-03-25 08:58:21 +0000
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-03-31 07:25:50 +0200
commit93ed71e05802a47774b52503cdc3442686d686c1 (patch)
treef5eec1a66125ca1b141137c5f8f8bf3549c73619 /django/db/backends/mysql/operations.py
parentc06d7c92392c799d5a17f2620f8e280e119409bf (diff)
downloaddjango-93ed71e05802a47774b52503cdc3442686d686c1.tar.gz
Fixed #31403 -- Added support for returning fields from INSERT statements on MariaDB 10.5+.
Diffstat (limited to 'django/db/backends/mysql/operations.py')
-rw-r--r--django/db/backends/mysql/operations.py20
1 files changed, 20 insertions, 0 deletions
diff --git a/django/db/backends/mysql/operations.py b/django/db/backends/mysql/operations.py
index e9306f03fc..a8e9af2263 100644
--- a/django/db/backends/mysql/operations.py
+++ b/django/db/backends/mysql/operations.py
@@ -143,6 +143,13 @@ class DatabaseOperations(BaseDatabaseOperations):
def date_interval_sql(self, timedelta):
return 'INTERVAL %s MICROSECOND' % duration_microseconds(timedelta)
+ def fetch_returned_insert_rows(self, cursor):
+ """
+ Given a cursor object that has just performed an INSERT...RETURNING
+ statement into a table, return the tuple of returned data.
+ """
+ return cursor.fetchall()
+
def format_for_duration_arithmetic(self, sql):
return 'INTERVAL %s MICROSECOND' % sql
@@ -173,6 +180,19 @@ class DatabaseOperations(BaseDatabaseOperations):
def random_function_sql(self):
return 'RAND()'
+ def return_insert_columns(self, fields):
+ # MySQL and MariaDB < 10.5.0 don't support an INSERT...RETURNING
+ # statement.
+ if not fields:
+ return '', ()
+ columns = [
+ '%s.%s' % (
+ self.quote_name(field.model._meta.db_table),
+ self.quote_name(field.column),
+ ) for field in fields
+ ]
+ return 'RETURNING %s' % ', '.join(columns), ()
+
def sql_flush(self, style, tables, sequences, allow_cascade=False):
# NB: The generated SQL below is specific to MySQL
# 'TRUNCATE x;', 'TRUNCATE y;', 'TRUNCATE z;'... style SQL statements