server/sources/native.py
branchstable
changeset 5975 5120d97e2f7e
parent 5847 51636c991fb4
child 5982 30985571dbc9
child 6018 f4d1d5d9ccbb
equal deleted inserted replaced
5958:9bfa823735e0 5975:5120d97e2f7e
   449         args = self.merge_args(args, qargs)
   449         args = self.merge_args(args, qargs)
   450         assert isinstance(sql, basestring), repr(sql)
   450         assert isinstance(sql, basestring), repr(sql)
   451         try:
   451         try:
   452             cursor = self.doexec(session, sql, args)
   452             cursor = self.doexec(session, sql, args)
   453         except (self.OperationalError, self.InterfaceError):
   453         except (self.OperationalError, self.InterfaceError):
       
   454             if session.mode == 'write':
       
   455                 # do not attempt to reconnect if there has been some write
       
   456                 # during the transaction
       
   457                 raise
   454             # FIXME: better detection of deconnection pb
   458             # FIXME: better detection of deconnection pb
   455             self.warning("trying to reconnect")
   459             self.warning("trying to reconnect")
   456             session.pool.reconnect(self)
   460             session.pool.reconnect(self)
   457             cursor = self.doexec(session, sql, args)
   461             cursor = self.doexec(session, sql, args)
   458         except (self.DbapiError,), exc:
   462         except (self.DbapiError,), exc:
   459             # We get this one with pyodbc and SQL Server when connection was reset
   463             # We get this one with pyodbc and SQL Server when connection was reset
   460             if exc.args[0] == '08S01':
   464             if exc.args[0] == '08S01' and session.mode != 'write':
   461                 self.warning("trying to reconnect")
   465                 self.warning("trying to reconnect")
   462                 session.pool.reconnect(self)
   466                 session.pool.reconnect(self)
   463                 cursor = self.doexec(session, sql, args)
   467                 cursor = self.doexec(session, sql, args)
   464             else:
   468             else:
   465                 raise
   469                 raise