Fixed #19096 -- Made can_return_id_from_insert more extendable

RETURNING is an extension of the SQL standard, which is not implemented
the same by all databases. Allow DatabaseOperations.return_insert_id to
return a None to allow for other 3rd party backends with a different
implementation.
This commit is contained in:
Michael Manfre 2012-10-09 17:06:37 -04:00 committed by Anssi Kääriäinen
parent 252cd271e8
commit c2150d4d2c
1 changed files with 5 additions and 2 deletions

View File

@ -897,8 +897,11 @@ class SQLInsertCompiler(SQLCompiler):
col = "%s.%s" % (qn(opts.db_table), qn(opts.pk.column)) col = "%s.%s" % (qn(opts.db_table), qn(opts.pk.column))
result.append("VALUES (%s)" % ", ".join(placeholders[0])) result.append("VALUES (%s)" % ", ".join(placeholders[0]))
r_fmt, r_params = self.connection.ops.return_insert_id() r_fmt, r_params = self.connection.ops.return_insert_id()
result.append(r_fmt % col) # Skip empty r_fmt to allow subclasses to customize behaviour for
params += r_params # 3rd party backends. Refs #19096.
if r_fmt:
result.append(r_fmt % col)
params += r_params
return [(" ".join(result), tuple(params))] return [(" ".join(result), tuple(params))]
if can_bulk: if can_bulk:
result.append(self.connection.ops.bulk_insert_sql(fields, len(values))) result.append(self.connection.ops.bulk_insert_sql(fields, len(values)))