summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2014-08-28 20:06:12 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2014-08-28 20:06:49 -0400
commitc192e447f3a5e8bfaaa46097eb4d6179f056361c (patch)
tree4c834538728c9fa22f1c9c1cd065d2e2bb44f930 /lib/sqlalchemy/engine
parentfa5522547150687c9b3cd41d28df08ab0512b5b2 (diff)
downloadsqlalchemy-c192e447f3a5e8bfaaa46097eb4d6179f056361c.tar.gz
- major refactoring/inlining to loader.instances(), though not really
any speed improvements :(. code is in a much better place to be run into C, however - The ``proc()`` callable passed to the ``create_row_processor()`` method of custom :class:`.Bundle` classes now accepts only a single "row" argument. - Deprecated event hooks removed: ``populate_instance``, ``create_instance``, ``translate_row``, ``append_result`` - the getter() idea is somewhat restored; see ref #3175
Diffstat (limited to 'lib/sqlalchemy/engine')
-rw-r--r--lib/sqlalchemy/engine/result.py28
1 files changed, 25 insertions, 3 deletions
diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py
index 06a81aa6c..3995942ef 100644
--- a/lib/sqlalchemy/engine/result.py
+++ b/lib/sqlalchemy/engine/result.py
@@ -110,7 +110,7 @@ class RowProxy(BaseRowProxy):
__slots__ = ()
def __contains__(self, key):
- return self._parent._has_key(self._row, key)
+ return self._parent._has_key(key)
def __getstate__(self):
return {
@@ -155,7 +155,7 @@ class RowProxy(BaseRowProxy):
def has_key(self, key):
"""Return True if this RowProxy contains the given key."""
- return self._parent._has_key(self._row, key)
+ return self._parent._has_key(key)
def items(self):
"""Return a list of tuples, each tuple containing a key/value pair."""
@@ -331,12 +331,28 @@ class ResultMetaData(object):
map[key] = result
return result
- def _has_key(self, row, key):
+ def _has_key(self, key):
if key in self._keymap:
return True
else:
return self._key_fallback(key, False) is not None
+ def _getter(self, key):
+ if key in self._keymap:
+ processor, obj, index = self._keymap[key]
+ else:
+ ret = self._key_fallback(key, False)
+ if ret is None:
+ return None
+ processor, obj, index = ret
+
+ if index is None:
+ raise exc.InvalidRequestError(
+ "Ambiguous column name '%s' in result set! "
+ "try 'use_labels' option on select statement." % key)
+
+ return operator.itemgetter(index)
+
def __getstate__(self):
return {
'_pickled_keymap': dict(
@@ -398,6 +414,12 @@ class ResultProxy(object):
context.engine._should_log_debug()
self._init_metadata()
+ def _getter(self, key):
+ return self._metadata._getter(key)
+
+ def _has_key(self, key):
+ return self._metadata._has_key(key)
+
def _init_metadata(self):
metadata = self._cursor_description()
if metadata is not None: