diff options
Diffstat (limited to 'lib/sqlalchemy/engine')
| -rw-r--r-- | lib/sqlalchemy/engine/base.py | 11 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/default.py | 3 | ||||
| -rw-r--r-- | lib/sqlalchemy/engine/strategies.py | 2 |
3 files changed, 11 insertions, 5 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py index 80d93e61c..f5b4b377e 100644 --- a/lib/sqlalchemy/engine/base.py +++ b/lib/sqlalchemy/engine/base.py @@ -246,10 +246,9 @@ class Dialect(sql.AbstractDialect): return clauseelement.compile(dialect=self, parameters=parameters) - def get_disconnect_checker(self): - """Return a callable that determines if an SQLError is caused by a database disconnection.""" - - return lambda x: False + def is_disconnect(self, e): + """Return True if the given DBAPI error indicates an invalid connection""" + raise NotImplementedError() class ExecutionContext(object): @@ -576,6 +575,8 @@ class Connection(Connectable): try: context.dialect.do_execute(context.cursor, context.statement, context.parameters, context=context) except Exception, e: + if self.dialect.is_disconnect(e): + self.__connection.invalidate(e=e) self._autorollback() if self.__close_with_result: self.close() @@ -585,6 +586,8 @@ class Connection(Connectable): try: context.dialect.do_executemany(context.cursor, context.statement, context.parameters, context=context) except Exception, e: + if self.dialect.is_disconnect(e): + self.__connection.invalidate(e=e) self._autorollback() if self.__close_with_result: self.close() diff --git a/lib/sqlalchemy/engine/default.py b/lib/sqlalchemy/engine/default.py index ceecee364..9431e13a0 100644 --- a/lib/sqlalchemy/engine/default.py +++ b/lib/sqlalchemy/engine/default.py @@ -99,6 +99,9 @@ class DefaultDialect(base.Dialect): def defaultrunner(self, connection): return base.DefaultRunner(connection) + def is_disconnect(self, e): + return False + def _set_paramstyle(self, style): self._paramstyle = style self._figure_paramstyle(style) diff --git a/lib/sqlalchemy/engine/strategies.py b/lib/sqlalchemy/engine/strategies.py index 2f3b45199..1b760fca8 100644 --- a/lib/sqlalchemy/engine/strategies.py +++ b/lib/sqlalchemy/engine/strategies.py @@ -86,7 +86,7 @@ class DefaultEngineStrategy(EngineStrategy): if tk in kwargs: pool_args[k] = kwargs.pop(tk) pool_args['use_threadlocal'] = self.pool_threadlocal() - pool = poolclass(creator, disconnect_checker=dialect.get_disconnect_checker(), **pool_args) + pool = poolclass(creator, **pool_args) else: if isinstance(pool, poollib._DBProxy): pool = pool.get_pool(*cargs, **cparams) |
