diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-11-24 01:59:29 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-11-24 01:59:29 +0000 |
commit | 6f604f911640d92f705fc6611bfaa3e2600c4ee1 (patch) | |
tree | cc2cfb4bc7a3ddf8451ec6d8d2480218b8e0bc4c /lib/sqlalchemy/engine/base.py | |
parent | 3f93103a5ef9128b7b300c51d41dea43dd843834 (diff) | |
download | sqlalchemy-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.py | 19 |
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() |