Skip to content

Commit

Permalink
[1.2.X] Implemented changes made in r14320 in the Oracle backend. Tha…
Browse files Browse the repository at this point in the history
…nks 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
  • Loading branch information
ramiro committed Nov 11, 2010
1 parent 7335388 commit 0f065d3
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions django/db/backends/oracle/base.py
Expand Up @@ -396,6 +396,28 @@ def _cursor(self):
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):
"""
Expand Down

0 comments on commit 0f065d3

Please sign in to comment.