summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine/base.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-11-24 01:59:29 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-11-24 01:59:29 +0000
commit6f604f911640d92f705fc6611bfaa3e2600c4ee1 (patch)
treecc2cfb4bc7a3ddf8451ec6d8d2480218b8e0bc4c /lib/sqlalchemy/engine/base.py
parent3f93103a5ef9128b7b300c51d41dea43dd843834 (diff)
downloadsqlalchemy-6f604f911640d92f705fc6611bfaa3e2600c4ee1.tar.gz
- decruftify old visitors used by orm, convert to functions that
use a common traversal function. - TranslatingDict is finally gone, thanks to column.proxy_set simpleness...hooray ! - shoved "slice" use case on RowProxy into an exception case. knocks noticeable time off of large result set operations.
Diffstat (limited to 'lib/sqlalchemy/engine/base.py')
-rw-r--r--lib/sqlalchemy/engine/base.py19
1 files changed, 12 insertions, 7 deletions
diff --git a/lib/sqlalchemy/engine/base.py b/lib/sqlalchemy/engine/base.py
index 9c7e70ba9..21977b689 100644
--- a/lib/sqlalchemy/engine/base.py
+++ b/lib/sqlalchemy/engine/base.py
@@ -1243,12 +1243,7 @@ class RowProxy(object):
return self.__parent._has_key(self.__row, key)
def __getitem__(self, key):
- if isinstance(key, slice):
- indices = key.indices(len(self))
- return tuple([self.__parent._get_col(self.__row, i)
- for i in xrange(*indices)])
- else:
- return self.__parent._get_col(self.__row, key)
+ return self.__parent._get_col(self.__row, key)
def __getattr__(self, name):
try:
@@ -1474,7 +1469,15 @@ class ResultProxy(object):
return self.dialect.supports_sane_multi_rowcount
def _get_col(self, row, key):
- rec = self._key_cache[key]
+ try:
+ rec = self._key_cache[key]
+ except TypeError:
+ # the 'slice' use case is very infrequent,
+ # so we use an exception catch to reduce conditionals in _get_col
+ if isinstance(key, slice):
+ indices = key.indices(len(row))
+ return tuple([self._get_col(row, i) for i in xrange(*indices)])
+
if rec[1]:
return rec[1](row[rec[2]])
else:
@@ -1482,8 +1485,10 @@ class ResultProxy(object):
def _fetchone_impl(self):
return self.cursor.fetchone()
+
def _fetchmany_impl(self, size=None):
return self.cursor.fetchmany(size)
+
def _fetchall_impl(self):
return self.cursor.fetchall()