summaryrefslogtreecommitdiff
path: root/lib/sqlalchemy/engine
diff options
context:
space:
mode:
Diffstat (limited to 'lib/sqlalchemy/engine')
-rw-r--r--lib/sqlalchemy/engine/result.py24
1 files changed, 15 insertions, 9 deletions
diff --git a/lib/sqlalchemy/engine/result.py b/lib/sqlalchemy/engine/result.py
index 773022ed2..c9eb53eb1 100644
--- a/lib/sqlalchemy/engine/result.py
+++ b/lib/sqlalchemy/engine/result.py
@@ -198,6 +198,7 @@ class ResultMetaData(object):
dialect = context.dialect
self.case_sensitive = dialect.case_sensitive
self.matched_on_name = False
+ self._orig_processors = None
if context.result_column_struct:
result_columns, cols_are_ordered, textual_ordered = \
@@ -1394,16 +1395,21 @@ class BufferedColumnResultProxy(ResultProxy):
def _init_metadata(self):
super(BufferedColumnResultProxy, self)._init_metadata()
+
metadata = self._metadata
- # orig_processors will be used to preprocess each row when they are
- # constructed.
- metadata._orig_processors = metadata._processors
- # replace the all type processors by None processors.
- metadata._processors = [None for _ in range(len(metadata.keys))]
- keymap = {}
- for k, (func, obj, index) in metadata._keymap.items():
- keymap[k] = (None, obj, index)
- self._metadata._keymap = keymap
+
+ # don't double-replace the processors, in the case
+ # of a cached ResultMetaData
+ if metadata._orig_processors is None:
+ # orig_processors will be used to preprocess each row when
+ # they are constructed.
+ metadata._orig_processors = metadata._processors
+ # replace the all type processors by None processors.
+ metadata._processors = [None for _ in range(len(metadata.keys))]
+ keymap = {}
+ for k, (func, obj, index) in metadata._keymap.items():
+ keymap[k] = (None, obj, index)
+ metadata._keymap = keymap
def fetchall(self):
# can't call cursor.fetchall(), since rows must be