Commit 1f68dc4a authored by Ian Kelly's avatar Ian Kelly
Browse files

Fixed #11706: Added an Oracle connection option to disable the use of...

Fixed #11706: Added an Oracle connection option to disable the use of RETURNING INTO in INSERT statements.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@14765 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent dceaa82d
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -351,6 +351,8 @@ class DatabaseWrapper(BaseDatabaseWrapper):

        self.oracle_version = None
        self.features = DatabaseFeatures(self)
        use_returning_into = self.settings_dict["OPTIONS"].get('use_returning_into', True)
        self.features.can_return_id_from_insert = use_returning_into
        self.ops = DatabaseOperations()
        self.client = DatabaseClient(self)
        self.creation = DatabaseCreation(self)
@@ -377,7 +379,10 @@ class DatabaseWrapper(BaseDatabaseWrapper):
        cursor = None
        if not self._valid_connection():
            conn_string = convert_unicode(self._connect_string())
            self.connection = Database.connect(conn_string, **self.settings_dict['OPTIONS'])
            conn_params = self.settings_dict['OPTIONS'].copy()
            if 'use_returning_into' in conn_params:
                del conn_params['use_returning_into']
            self.connection = Database.connect(conn_string, **conn_params)
            cursor = FormatStylePlaceholderCursor(self.connection)
            # Set oracle date to ansi date format.  This only needs to execute
            # once when we create a new connection. We also set the Territory
+17 −0
Original line number Diff line number Diff line
@@ -585,6 +585,23 @@ your Oracle database configuration to True::

Failure to do this may result in crashes and other odd behavior.

INSERT ... RETURNING INTO
-------------------------

By default, the Oracle backend uses a ``RETURNING INTO`` clause to efficiently
retrieve the value of an ``AutoField`` when inserting new rows.  This behavior
may result in a ``DatabaseError`` in certain unusual setups, such as when
inserting into a remote table, or into a view with an ``INSTEAD OF`` trigger.
The ``RETURNING INTO`` clause can be disabled by setting the
``use_returning_into`` option of the database configuration to False::

            'OPTIONS': {
                'use_returning_into': False,
            },

In this case, the Oracle backend will use a separate ``SELECT`` query to
retrieve AutoField values.

Tablespace options
------------------