for row in iterator:
newrow = list(row)
for i in mapped_entities:
- newrow[i] = session._merge(
- attributes.instance_state(newrow[i]),
- attributes.instance_dict(newrow[i]),
- load=load, _recursive={})
+ if newrow[i] is not None:
+ newrow[i] = session._merge(
+ attributes.instance_state(newrow[i]),
+ attributes.instance_dict(newrow[i]),
+ load=load, _recursive={})
result.append(util.KeyedTuple(newrow, keys))
return iter(result)
from . import _fixtures
-from sqlalchemy.orm import loading, Session
+from sqlalchemy.orm import loading, Session, aliased
from sqlalchemy.testing.assertions import eq_
from sqlalchemy.util import KeyedTuple
[(1, 1), (2, 2), (7, 7), (8, 8)]
)
eq_(it[0].keys(), ['User', 'id'])
+
+ def test_none_entity(self):
+ s, (u1, u2, u3, u4) = self._fixture()
+ User = self.classes.User
+
+ ua = aliased(User)
+ q = s.query(User, ua)
+ kt = lambda *x: KeyedTuple(x, ['User', 'useralias'])
+ collection = [kt(u1, u2), kt(u1, None), kt(u2, u3)]
+ it = loading.merge_result(
+ q,
+ collection
+ )
+ eq_(
+ [
+ (x and x.id or None, y and y.id or None)
+ for x, y in it
+ ],
+ [(u1.id, u2.id), (u1.id, None), (u2.id, u3.id)]
+ )
+
+