1
from . import _fixtures
2
from sqlalchemy.orm import loading, Session, aliased
3
from sqlalchemy.testing.assertions import eq_
4
from sqlalchemy.util import KeyedTuple
6
# class InstancesTest(_fixtures.FixtureTest):
7
# class GetFromIdentityTest(_fixtures.FixtureTest):
8
# class LoadOnIdentTest(_fixtures.FixtureTest):
9
# class InstanceProcessorTest(_fixture.FixtureTest):
11
class MergeResultTest(_fixtures.FixtureTest):
12
run_setup_mappers = 'once'
17
def setup_mappers(cls):
18
cls._setup_stock_mapping()
21
User = self.classes.User
24
u1, u2, u3, u4 = User(id=1, name='u1'), User(id=2, name='u2'), \
25
User(id=7, name='u3'), User(id=8, name='u4')
26
s.query(User).filter(User.id.in_([7, 8])).all()
28
return s, [u1, u2, u3, u4]
30
def test_single_entity(self):
31
s, (u1, u2, u3, u4) = self._fixture()
32
User = self.classes.User
35
collection = [u1, u2, u3, u4]
36
it = loading.merge_result(
45
def test_single_column(self):
46
User = self.classes.User
51
collection = [(1, ), (2, ), (7, ), (8, )]
52
it = loading.merge_result(
58
[(1, ), (2, ), (7, ), (8, )]
61
def test_entity_col_mix_plain_tuple(self):
62
s, (u1, u2, u3, u4) = self._fixture()
63
User = self.classes.User
65
q = s.query(User, User.id)
66
collection = [(u1, 1), (u2, 2), (u3, 7), (u4, 8)]
67
it = loading.merge_result(
73
[(x.id, y) for x, y in it],
74
[(1, 1), (2, 2), (7, 7), (8, 8)]
76
eq_(it[0].keys(), ['User', 'id'])
78
def test_entity_col_mix_keyed_tuple(self):
79
s, (u1, u2, u3, u4) = self._fixture()
80
User = self.classes.User
82
q = s.query(User, User.id)
83
kt = lambda *x: KeyedTuple(x, ['User', 'id'])
84
collection = [kt(u1, 1), kt(u2, 2), kt(u3, 7), kt(u4, 8)]
85
it = loading.merge_result(
91
[(x.id, y) for x, y in it],
92
[(1, 1), (2, 2), (7, 7), (8, 8)]
94
eq_(it[0].keys(), ['User', 'id'])
96
def test_none_entity(self):
97
s, (u1, u2, u3, u4) = self._fixture()
98
User = self.classes.User
101
q = s.query(User, ua)
102
kt = lambda *x: KeyedTuple(x, ['User', 'useralias'])
103
collection = [kt(u1, u2), kt(u1, None), kt(u2, u3)]
104
it = loading.merge_result(
110
(x and x.id or None, y and y.id or None)
113
[(u1.id, u2.id), (u1.id, None), (u2.id, u3.id)]