summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES4
-rw-r--r--lib/sqlalchemy/pool.py2
-rw-r--r--test/engine/test_reconnect.py28
3 files changed, 33 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index e66480da5..0bc7275b9 100644
--- a/CHANGES
+++ b/CHANGES
@@ -20,6 +20,10 @@ CHANGES
- Fixed "table" argument on constructor of ForeginKeyConstraint
[ticket:1571]
+ - Fixed bug in connection pool cursor wrapper whereby if a
+ cursor threw an exception on close(), the logging of the
+ message would fail. [ticket:1786]
+
- engines
- Fixed building the C extensions on Python 2.4. [ticket:1781]
diff --git a/lib/sqlalchemy/pool.py b/lib/sqlalchemy/pool.py
index 31ab7facc..ef1323892 100644
--- a/lib/sqlalchemy/pool.py
+++ b/lib/sqlalchemy/pool.py
@@ -454,7 +454,7 @@ class _CursorFairy(object):
ex_text = str(e)
except TypeError:
ex_text = repr(e)
- self.__parent._logger.warn("Error closing cursor: %s", ex_text)
+ self._parent._logger.warn("Error closing cursor: %s", ex_text)
if isinstance(e, (SystemExit, KeyboardInterrupt)):
raise
diff --git a/test/engine/test_reconnect.py b/test/engine/test_reconnect.py
index 6afd71515..117ef05ee 100644
--- a/test/engine/test_reconnect.py
+++ b/test/engine/test_reconnect.py
@@ -177,6 +177,34 @@ class MockReconnectTest(TestBase):
assert not conn.invalidated
assert len(dbapi.connections) == 1
+class CursorErrTest(TestBase):
+
+ def setup(self):
+ global db, dbapi
+
+ class MDBAPI(MockDBAPI):
+ def connect(self, *args, **kwargs):
+ return MConn(self)
+
+ class MConn(MockConnection):
+ def cursor(self):
+ return MCursor(self)
+
+ class MCursor(MockCursor):
+ def close(self):
+ raise Exception("explode")
+
+ dbapi = MDBAPI()
+
+ # create engine using our current dburi
+ db = tsa.create_engine('postgresql://foo:bar@localhost/test', module=dbapi, _initialize=False)
+
+ def test_cursor_explode(self):
+ conn = db.connect()
+ result = conn.execute("select foo")
+ result.close()
+ conn.close()
+
engine = None
class RealReconnectTest(TestBase):
def setup(self):