summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-11-10 16:42:35 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-11-10 16:42:35 +0000
commiteaa359f177ac79e66142b929efb928074d9f3da0 (patch)
tree48b3c7b806dee7d893186283bc9dc799b0cb3f4b
parent2c5f3e8397b52b9a52b2fdd0bef7aed77762e410 (diff)
downloadsqlalchemy-eaa359f177ac79e66142b929efb928074d9f3da0.tar.gz
- Restored "active rowcount" fetch before ResultProxy
autocloses the cursor. This was removed in 0.5rc3.
-rw-r--r--CHANGES3
-rw-r--r--lib/sqlalchemy/engine/base.py10
-rw-r--r--test/engine/reconnect.py2
3 files changed, 12 insertions, 3 deletions
diff --git a/CHANGES b/CHANGES
index 373a56559..a05bfa455 100644
--- a/CHANGES
+++ b/CHANGES
@@ -36,6 +36,9 @@ CHANGES
- sql
- Removed the 'properties' attribute of the
Connection object, Connection.info should be used.
+
+ - Restored "active rowcount" fetch before ResultProxy
+ autocloses the cursor. This was removed in 0.5rc3.
- access
- Added support for Currency type.
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py
index 832903a73..d22e21cfe 100644
--- a/lib/sqlalchemy/engine/base.py
+++ b/lib/sqlalchemy/engine/base.py
@@ -1382,7 +1382,10 @@ class ResultProxy(object):
@property
def rowcount(self):
- return self.context.get_rowcount()
+ if self._rowcount is None:
+ return self.context.get_rowcount()
+ else:
+ return self._rowcount
@property
def lastrowid(self):
@@ -1395,10 +1398,13 @@ class ResultProxy(object):
def _init_metadata(self):
metadata = self.cursor.description
if metadata is None:
- # no results, close
+ # no results, get rowcount (which requires open cursor on some DB's such as firebird),
+ # then close
+ self._rowcount = self.context.get_rowcount()
self.close()
return
+ self._rowcount = None
self._props = util.PopulateDict(None)
self._props.creator = self.__key_fallback()
self.keys = []
diff --git a/test/engine/reconnect.py b/test/engine/reconnect.py
index d50267a1f..936ea97e4 100644
--- a/test/engine/reconnect.py
+++ b/test/engine/reconnect.py
@@ -36,7 +36,7 @@ class MockConnection(object):
class MockCursor(object):
def __init__(self, parent):
self.explode = parent.explode
- self.description = None
+ self.description = ()
def execute(self, *args, **kwargs):
if self.explode[0]:
raise MockDisconnect("Lost the DB connection")