@@ -89,10 +89,7 @@ class ResultMetaData(object):
89
89
def __init__ (self , result_proxy , metadata ):
90
90
self ._processors = processors = []
91
91
92
- result_map = {}
93
- if result_proxy ._result_map :
94
- result_map = {elem [0 ]: elem [3 ] for elem in
95
- result_proxy ._result_map }
92
+ map_type , map_column_name = self .result_map (result_proxy ._result_map )
96
93
97
94
# We do not strictly need to store the processor in the key mapping,
98
95
# though it is faster in the Python version (probably because of the
@@ -124,11 +121,9 @@ def __init__(self, result_proxy, metadata):
124
121
# colname = dialect.normalize_name(colname)
125
122
126
123
name , obj , type_ = (
127
- colname ,
124
+ map_column_name . get ( colname , colname ) ,
128
125
None ,
129
- result_map .get (
130
- colname ,
131
- typemap .get (coltype , sqltypes .NULLTYPE ))
126
+ map_type .get (colname , typemap .get (coltype , sqltypes .NULLTYPE ))
132
127
)
133
128
134
129
processor = type_ ._cached_result_processor (dialect , coltype )
@@ -150,7 +145,7 @@ def __init__(self, result_proxy, metadata):
150
145
# unambiguous.
151
146
primary_keymap [name ] = rec = (None , obj , None )
152
147
153
- self .keys .append (colname )
148
+ self .keys .append (name )
154
149
if obj :
155
150
for o in obj :
156
151
keymap [o ] = rec
@@ -163,6 +158,18 @@ def __init__(self, result_proxy, metadata):
163
158
# high precedence keymap.
164
159
keymap .update (primary_keymap )
165
160
161
+ def result_map (self , data_map ):
162
+ data_map = data_map or {}
163
+ map_type = {}
164
+ map_column_name = {}
165
+ for elem in data_map :
166
+ name = elem [0 ]
167
+ priority_name = getattr (elem [2 ][0 ], 'key' , name )
168
+ map_type [name ] = elem [3 ] # type column
169
+ map_column_name [name ] = priority_name
170
+
171
+ return map_type , map_column_name
172
+
166
173
def _key_fallback (self , key , raiseerr = True ):
167
174
map = self ._keymap
168
175
result = None
@@ -175,9 +182,9 @@ def _key_fallback(self, key, raiseerr=True):
175
182
elif isinstance (key , expression .ColumnElement ):
176
183
if (key ._label and key ._label in map ):
177
184
result = map [key ._label ]
178
- elif (hasattr (key , 'name ' ) and key .name in map ):
185
+ elif (hasattr (key , 'key ' ) and key .key in map ):
179
186
# match is only on name.
180
- result = map [key .name ]
187
+ result = map [key .key ]
181
188
# search extra hard to make sure this
182
189
# isn't a column/label name overlap.
183
190
# this check isn't currently available if the row
0 commit comments