mirror of
https://github.com/django/django.git
synced 2025-10-10 07:19:11 +00:00
Refs #27222 -- Implemented BaseDatabaseOperations.return_insert_columns()/fetch_returned_insert_rows().
This commit is contained in:
parent
41ff30f6f9
commit
dc4ee99152
@ -364,7 +364,24 @@ class BaseDatabaseOperations:
|
|||||||
return the SQL and params to append to the INSERT query. The returned
|
return the SQL and params to append to the INSERT query. The returned
|
||||||
fragment should contain a format string to hold the appropriate column.
|
fragment should contain a format string to hold the appropriate column.
|
||||||
"""
|
"""
|
||||||
pass
|
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 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 compiler(self, compiler_name):
|
def compiler(self, compiler_name):
|
||||||
"""
|
"""
|
||||||
|
@ -148,13 +148,6 @@ class DatabaseOperations(BaseDatabaseOperations):
|
|||||||
else:
|
else:
|
||||||
return f"TIME({sql})", params
|
return f"TIME({sql})", params
|
||||||
|
|
||||||
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):
|
def format_for_duration_arithmetic(self, sql):
|
||||||
return "INTERVAL %s MICROSECOND" % sql
|
return "INTERVAL %s MICROSECOND" % sql
|
||||||
|
|
||||||
@ -182,20 +175,6 @@ class DatabaseOperations(BaseDatabaseOperations):
|
|||||||
return name # Quoting once is enough.
|
return name # Quoting once is enough.
|
||||||
return "`%s`" % name
|
return "`%s`" % name
|
||||||
|
|
||||||
def return_insert_columns(self, fields):
|
|
||||||
# MySQL doesn'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, *, reset_sequences=False, allow_cascade=False):
|
def sql_flush(self, style, tables, *, reset_sequences=False, allow_cascade=False):
|
||||||
if not tables:
|
if not tables:
|
||||||
return []
|
return []
|
||||||
|
@ -155,13 +155,6 @@ class DatabaseOperations(BaseDatabaseOperations):
|
|||||||
return f"SELECT * FROM {placeholder_rows}"
|
return f"SELECT * FROM {placeholder_rows}"
|
||||||
return super().bulk_insert_sql(fields, placeholder_rows)
|
return super().bulk_insert_sql(fields, placeholder_rows)
|
||||||
|
|
||||||
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 lookup_cast(self, lookup_type, internal_type=None):
|
def lookup_cast(self, lookup_type, internal_type=None):
|
||||||
lookup = "%s"
|
lookup = "%s"
|
||||||
# Cast text lookups to text to allow things like filter(x__contains=4)
|
# Cast text lookups to text to allow things like filter(x__contains=4)
|
||||||
@ -324,19 +317,6 @@ class DatabaseOperations(BaseDatabaseOperations):
|
|||||||
return cursor.query.decode()
|
return cursor.query.decode()
|
||||||
return None
|
return None
|
||||||
|
|
||||||
def return_insert_columns(self, fields):
|
|
||||||
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), ()
|
|
||||||
|
|
||||||
if is_psycopg3:
|
if is_psycopg3:
|
||||||
|
|
||||||
def adapt_integerfield_value(self, value, internal_type):
|
def adapt_integerfield_value(self, value, internal_type):
|
||||||
|
@ -84,13 +84,6 @@ class DatabaseOperations(BaseDatabaseOperations):
|
|||||||
"""
|
"""
|
||||||
return f"django_date_extract(%s, {sql})", (lookup_type.lower(), *params)
|
return f"django_date_extract(%s, {sql})", (lookup_type.lower(), *params)
|
||||||
|
|
||||||
def fetch_returned_insert_rows(self, cursor):
|
|
||||||
"""
|
|
||||||
Given a cursor object that has just performed an INSERT...RETURNING
|
|
||||||
statement into a table, return the list of returned data.
|
|
||||||
"""
|
|
||||||
return cursor.fetchall()
|
|
||||||
|
|
||||||
def format_for_duration_arithmetic(self, sql):
|
def format_for_duration_arithmetic(self, sql):
|
||||||
"""Do nothing since formatting is handled in the custom function."""
|
"""Do nothing since formatting is handled in the custom function."""
|
||||||
return sql
|
return sql
|
||||||
@ -399,20 +392,6 @@ class DatabaseOperations(BaseDatabaseOperations):
|
|||||||
return "INSERT OR IGNORE INTO"
|
return "INSERT OR IGNORE INTO"
|
||||||
return super().insert_statement(on_conflict=on_conflict)
|
return super().insert_statement(on_conflict=on_conflict)
|
||||||
|
|
||||||
def return_insert_columns(self, fields):
|
|
||||||
# SQLite < 3.35 doesn'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 on_conflict_suffix_sql(self, fields, on_conflict, update_fields, unique_fields):
|
def on_conflict_suffix_sql(self, fields, on_conflict, update_fields, unique_fields):
|
||||||
if (
|
if (
|
||||||
on_conflict == OnConflict.UPDATE
|
on_conflict == OnConflict.UPDATE
|
||||||
|
Loading…
x
Reference in New Issue
Block a user