From 1aa48898085ea16915877cc139e238a74e3f554b Mon Sep 17 00:00:00 2001 From: Matt Boersma Date: Mon, 25 Aug 2008 17:20:28 +0000 Subject: [PATCH] Fixed get_or_create test case for Oracle by re-raising the more specific IntegrityError for "ORA-01400: Cannot insert NULL into [table.col]" git-svn-id: http://code.djangoproject.com/svn/django/trunk@8545 bcc190cf-cafb-0310-a4f2-bffc1f526a37 --- django/db/backends/oracle/base.py | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/django/db/backends/oracle/base.py b/django/db/backends/oracle/base.py index b8bc6d00d5..ab86076214 100644 --- a/django/db/backends/oracle/base.py +++ b/django/db/backends/oracle/base.py @@ -354,7 +354,13 @@ class FormatStylePlaceholderCursor(Database.Cursor): query = query[:-1] query = smart_str(query, self.charset) % tuple(args) self._guess_input_sizes([params]) - return Database.Cursor.execute(self, query, self._param_generator(params)) + try: + return Database.Cursor.execute(self, query, self._param_generator(params)) + except DatabaseError, e: + # cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400. + if e.message.code == 1400 and type(e) != IntegrityError: + e = IntegrityError(e.message) + raise e def executemany(self, query, params=None): try: @@ -371,7 +377,13 @@ class FormatStylePlaceholderCursor(Database.Cursor): query = smart_str(query, self.charset) % tuple(args) formatted = [self._format_params(i) for i in params] self._guess_input_sizes(formatted) - return Database.Cursor.executemany(self, query, [self._param_generator(p) for p in formatted]) + try: + return Database.Cursor.executemany(self, query, [self._param_generator(p) for p in formatted]) + except DatabaseError, e: + # cx_Oracle <= 4.4.0 wrongly raises a DatabaseError for ORA-01400. + if e.message.code == 1400 and type(e) != IntegrityError: + e = IntegrityError(e.message) + raise e def fetchone(self): row = Database.Cursor.fetchone(self)