Commit 0f065d34 authored by Ramiro Morales's avatar Ramiro Morales
Browse files

[1.2.X] Implemented changes made in r14320 in the Oracle backend. Thanks...

[1.2.X] Implemented changes made in r14320 in the Oracle backend. Thanks Russell for reviewing the proposed fix.

Backport of [14510] from trunk

git-svn-id: http://code.djangoproject.com/svn/django/branches/releases/1.2.X@14511 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 7335388b
Loading
Loading
Loading
Loading
+22 −0
Original line number Diff line number Diff line
@@ -396,6 +396,28 @@ class DatabaseWrapper(BaseDatabaseWrapper):
    def _savepoint_commit(self, sid):
        pass

    def _commit(self):
        if self.connection is not None:
            try:
                return self.connection.commit()
            except Database.IntegrityError, e:
                # In case cx_Oracle implements (now or in a future version)
                # raising this specific exception
                raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
            except Database.DatabaseError, e:
                # cx_Oracle 5.0.4 raises a cx_Oracle.DatabaseError exception
                # with the following attributes and values:
                #  code = 2091
                #  message = 'ORA-02091: transaction rolled back
                #            'ORA-02291: integrity constraint (TEST_DJANGOTEST.SYS
                #               _C00102056) violated - parent key not found'
                # We convert that particular case to our IntegrityError exception
                x = e.args[0]
                if hasattr(x, 'code') and hasattr(x, 'message') \
                   and x.code == 2091 and 'ORA-02291' in x.message:
                    raise utils.IntegrityError, utils.IntegrityError(*tuple(e)), sys.exc_info()[2]
                raise utils.DatabaseError, utils.DatabaseError(*tuple(e)), sys.exc_info()[2]


class OracleParam(object):
    """