From: Mike Bayer Date: Mon, 10 Nov 2008 16:42:35 +0000 (+0000) Subject: - Restored "active rowcount" fetch before ResultProxy X-Git-Tag: rel_0_5rc4~14 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eaa359f177ac79e66142b929efb928074d9f3da0;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git - Restored "active rowcount" fetch before ResultProxy autocloses the cursor. This was removed in 0.5rc3. --- diff --git a/CHANGES b/CHANGES index 373a56559f..a05bfa4557 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 832903a735..d22e21cfe8 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 d50267a1f2..936ea97e49 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")