From 0f065d346dc4814d42374c9069ef0e232f6d9b7b Mon Sep 17 00:00:00 2001 From: Ramiro Morales Date: Thu, 11 Nov 2010 04:37:37 +0000 Subject: [PATCH] [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 --- django/db/backends/oracle/base.py | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index a175c3933a5e0..919c86262175d 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -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): """