def execute( self, operation, parameters = () ): try: if operation.count("db2regexExtraField(%s)") > 0: operation = operation.replace("db2regexExtraField(%s)", "") operation = operation % parameters parameters = () if operation.count( "%s" ) > 0: operation = operation % ( tuple( "?" * operation.count( "%s" ) ) ) if ( djangoVersion[0:2] >= ( 1, 4 ) ): parameters = self._format_parameters( parameters ) if ( djangoVersion[0:2] <= ( 1, 1 ) ): return super( DB2CursorWrapper, self ).execute( operation, parameters ) else: try: return super( DB2CursorWrapper, self ).execute( operation, parameters ) except IntegrityError, e: if (djangoVersion[0:2] >= (1, 5)): six.reraise(utils.IntegrityError, utils.IntegrityError( *tuple( six.PY3 and e.args or ( e._message, ) ) ), sys.exc_info()[2]) raise else: raise utils.IntegrityError, utils.IntegrityError( *tuple( e ) ), sys.exc_info()[2] except ProgrammingError, e: if (djangoVersion[0:2] >= (1, 5)): six.reraise(utils.ProgrammingError, utils.ProgrammingError( *tuple( six.PY3 and e.args or ( e._message, ) ) ), sys.exc_info()[2]) raise else: raise utils.ProgrammingError, utils.ProgrammingError( *tuple( e ) ), sys.exc_info()[2]
def execute(self, operation, parameters=()): try: if operation.find('ALTER TABLE') == 0 and getattr( self.connection, dbms_name) != 'DB2': doReorg = 1 else: doReorg = 0 if operation.count("db2regexExtraField(%s)") > 0: operation = operation.replace("db2regexExtraField(%s)", "") operation = operation % parameters parameters = () if operation.count("%s") > 0: operation = operation % (tuple("?" * operation.count("%s"))) if (djangoVersion[0:2] >= (1, 4)): parameters = self._format_parameters(parameters) if (djangoVersion[0:2] <= (1, 1)): if (doReorg == 1): super(DB2CursorWrapper, self).execute(operation, parameters) return self._reorg_tables() else: return super(DB2CursorWrapper, self).execute(operation, parameters) else: try: if (doReorg == 1): super(DB2CursorWrapper, self).execute(operation, parameters) return self._reorg_tables() else: return super(DB2CursorWrapper, self).execute(operation, parameters) except IntegrityError, e: if (djangoVersion[0:2] >= (1, 5)): six.reraise( utils.IntegrityError, utils.IntegrityError( *tuple(six.PY3 and e.args or (e._message, ))), sys.exc_info()[2]) raise else: raise utils.IntegrityError, utils.IntegrityError( *tuple(e)), sys.exc_info()[2] except ProgrammingError, e: if (djangoVersion[0:2] >= (1, 5)): six.reraise( utils.ProgrammingError, utils.ProgrammingError( *tuple(six.PY3 and e.args or (e._message, ))), sys.exc_info()[2]) raise else: raise utils.ProgrammingError, utils.ProgrammingError( *tuple(e)), sys.exc_info()[2]
def execute(self, operation, parameters=()): operation = str(operation) try: doReorg = 1 if operation.find('ALTER TABLE') == 0 and getattr(self.connection, dbms_name) != 'DB2' else 0 if operation.count("db2regexExtraField(%s)") > 0: operation = operation.replace("db2regexExtraField(%s)", "") operation = operation % parameters parameters = () if operation.count("%s") > 0: operation = operation % (tuple("?" * operation.count("%s"))) parameters = self._format_parameters(parameters) try: result = self.cursor.execute(operation, parameters) if doReorg == 1: return self._reorg_tables() except IntegrityError as e: raise utils.IntegrityError(*e.args) from e except ProgrammingError as e: raise utils.ProgrammingError(*e.args) from e except DatabaseError as e: raise utils.DatabaseError(*e.args) from e except TypeError: return None
def wrapper(*args, **kwargs): durability_checking_enabled = not getattr( settings, "DISABLE_DURABILITY_CHECKING", False) if durability_checking_enabled and _is_in_atomic_block(): raise utils.ProgrammingError( "A durable function must not be called within a database transaction." ) return_value = func(*args, **kwargs) if durability_checking_enabled and _db_may_have_uncommitted_work(): # Clean up first, otherwise we may see errors later that will mask this one. transaction.rollback() raise utils.ProgrammingError( "A durable function must not leave work uncommitted.") return return_value
def execute( self, operation, parameters = () ): if( djangoVersion[0:2] >= (2 , 0)): operation = str(operation) try: if operation == "''": operation = "SELECT NULL FROM SYSIBM.DUAL FETCH FIRST 0 ROW ONLY" if operation.find('ALTER TABLE') == 0 and getattr(self.connection, dbms_name) != 'DB2': doReorg = 1 else: doReorg = 0 if operation.count("db2regexExtraField(%s)") > 0: operation = operation.replace("db2regexExtraField(%s)", "") operation = operation % parameters parameters = () if operation.count( "%s" ) > 0 and parameters: parameters, operation = self._resolve_parameters_in_aggregator_func(parameters, operation) parameters, operation = self._format_parameters( parameters, operation ) parameters, operation = self._resolve_parameters_in_expression_func( parameters, operation ) if operation.count( "%s" ) > 0: operation = operation.replace("%s", "?") if ( djangoVersion[0:2] <= ( 1, 1 ) ): if ( doReorg == 1 ): super( DB2CursorWrapper, self ).execute( operation, parameters ) return self._reorg_tables() else: return super( DB2CursorWrapper, self ).execute( operation, parameters ) else: try: if ( doReorg == 1 ): super( DB2CursorWrapper, self ).execute( operation, parameters ) return self._reorg_tables() else: return super( DB2CursorWrapper, self ).execute( operation, parameters ) except IntegrityError as e: six.reraise(utils.IntegrityError, utils.IntegrityError( *tuple( six.PY3 and e.args or ( e._message, ) ) ), sys.exc_info()[2]) raise except ProgrammingError as e: six.reraise(utils.ProgrammingError, utils.ProgrammingError( *tuple( six.PY3 and e.args or ( e._message, ) ) ), sys.exc_info()[2]) raise except DatabaseError as e: six.reraise(utils.DatabaseError, utils.DatabaseError( *tuple( six.PY3 and e.args or ( e._message, ) ) ), sys.exc_info()[2]) raise except ( TypeError ): return None
def _execute_wrapper(self, method, query, args): """Wrapper around execute() and executemany()""" try: return method(query, args) except (mysql.connector.ProgrammingError) as err: six.reraise(utils.ProgrammingError, utils.ProgrammingError(err.msg), sys.exc_info()[2]) except (mysql.connector.IntegrityError) as err: six.reraise(utils.IntegrityError, utils.IntegrityError(err.msg), sys.exc_info()[2]) except mysql.connector.OperationalError as err: six.reraise(utils.DatabaseError, utils.DatabaseError(err.msg), sys.exc_info()[2]) except mysql.connector.DatabaseError as err: six.reraise(utils.DatabaseError, utils.DatabaseError(err.msg), sys.exc_info()[2])
def _wrap_execute(self, execute): try: result = execute() except Database.Error as e: # iaccess seems to be sending incorrect sqlstate for some errors # reraise "referential constraint violation" errors as IntegrityError if e.args[0] == 'HY000' and SQLCODE_0530_REGEX.match(e.args[1]): raise utils.IntegrityError(*e.args, execute.func, *execute.args) elif e.args[0] == 'HY000' and SQLCODE_0910_REGEX.match(e.args[1]): # file in use error (likely in the same transaction) query, _params, *_ = execute.args if query.startswith('ALTER TABLE') and 'RESTART WITH' in query: raise utils.ProgrammingError( *e.args, execute.func, execute.args, "Db2 for iSeries cannot reset a table's primary key sequence during same " "transaction as insert/update on that table") raise type(e)(*e.args, execute.func, execute.args) if result == self.cursor: return self return result
def _execute_wrapper(self, method, query, args): """Wrapper around execute() and executemany()""" try: return method(query, args) except (my_mysql.connector.ProgrammingError) as err: six.reraise(utils.ProgrammingError, utils.ProgrammingError(err.msg), sys.exc_info()[2]) except (my_mysql.connector.IntegrityError) as err: six.reraise(utils.IntegrityError, utils.IntegrityError(err.msg), sys.exc_info()[2]) except my_mysql.connector.OperationalError as err: # Map some error codes to IntegrityError, since they seem to be # misclassified and Django would prefer the more logical place. if err.args[0] in self.codes_for_integrityerror: six.reraise(utils.IntegrityError, utils.IntegrityError(err.msg), sys.exc_info()[2]) else: six.reraise(utils.DatabaseError, utils.DatabaseError(err.msg), sys.exc_info()[2]) except my_mysql.connector.DatabaseError as err: six.reraise(utils.DatabaseError, utils.DatabaseError(err.msg), sys.exc_info()[2])