diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index 732f3ebba4..baa8486c50 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -36,6 +36,7 @@ class DatabaseFeatures(BaseDatabaseFeatures): needs_datetime_string_cast = False uses_custom_query_class = True interprets_empty_strings_as_nulls = True + uses_savepoints = True class DatabaseOperations(BaseDatabaseOperations): @@ -151,6 +152,12 @@ WHEN (new.%(col_name)s IS NULL) connection.cursor() return connection.ops.regex_lookup(lookup_type) + def savepoint_create_sql(self, sid): + return "SAVEPOINT " + self.quote_name(sid) + + def savepoint_rollback_sql(self, sid): + return "ROLLBACK TO SAVEPOINT " + self.quote_name(sid) + def sql_flush(self, style, tables, sequences): # Return a list of 'TRUNCATE x;', 'TRUNCATE y;', # 'TRUNCATE z;'... style SQL statements @@ -309,6 +316,10 @@ class DatabaseWrapper(BaseDatabaseWrapper): cursor = FormatStylePlaceholderCursor(self.connection) return cursor + # Oracle doesn't support savepoint commits. Ignore them. + def _savepoint_commit(self, sid): + pass + class OracleParam(object): """