Exemple #1
0
 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]
Exemple #2
0
    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]
Exemple #3
0
    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
Exemple #6
0
 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
Exemple #8
0
 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])