~ubuntu-branches/debian/jessie/sqlalchemy/jessie

« back to all changes in this revision

Viewing changes to test/orm/inheritance/test_with_poly.py

  • Committer: Package Import Robot
  • Author(s): Piotr Ożarowski, Jakub Wilk, Piotr Ożarowski
  • Date: 2013-07-06 20:53:52 UTC
  • mfrom: (1.4.23) (16.1.17 experimental)
  • Revision ID: package-import@ubuntu.com-20130706205352-ryppl1eto3illd79
Tags: 0.8.2-1
[ Jakub Wilk ]
* Use canonical URIs for Vcs-* fields.

[ Piotr Ożarowski ]
* New upstream release
* Upload to unstable
* Build depend on python3-all instead of -dev, extensions are not built for
  Python 3.X 

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
from sqlalchemy import Integer, String, ForeignKey, func, desc, and_, or_
 
2
from sqlalchemy.orm import interfaces, relationship, mapper, \
 
3
    clear_mappers, create_session, joinedload, joinedload_all, \
 
4
    subqueryload, subqueryload_all, polymorphic_union, aliased,\
 
5
    class_mapper, with_polymorphic
 
6
from sqlalchemy import exc as sa_exc
 
7
from sqlalchemy.engine import default
 
8
 
 
9
from sqlalchemy.testing import AssertsCompiledSQL, fixtures
 
10
from sqlalchemy import testing
 
11
from sqlalchemy.testing.schema import Table, Column
 
12
from sqlalchemy.testing import assert_raises, eq_
 
13
 
 
14
from _poly_fixtures import Company, Person, Engineer, Manager, Boss, \
 
15
    Machine, Paperwork, _PolymorphicFixtureBase, _Polymorphic,\
 
16
    _PolymorphicPolymorphic, _PolymorphicUnions, _PolymorphicJoins,\
 
17
    _PolymorphicAliasedJoins
 
18
 
 
19
class _WithPolymorphicBase(_PolymorphicFixtureBase):
 
20
    def test_join_base_to_sub(self):
 
21
        sess = create_session()
 
22
        pa = with_polymorphic(Person, [Engineer])
 
23
 
 
24
        def go():
 
25
            eq_(sess.query(pa)
 
26
                    .filter(pa.Engineer.primary_language == 'java').all(),
 
27
                self._emps_wo_relationships_fixture()[0:1])
 
28
        self.assert_sql_count(testing.db, go, 1)
 
29
 
 
30
    def test_col_expression_base_plus_two_subs(self):
 
31
        sess = create_session()
 
32
        pa = with_polymorphic(Person, [Engineer, Manager])
 
33
 
 
34
        eq_(
 
35
            sess.query(pa.name, pa.Engineer.primary_language, pa.Manager.manager_name).\
 
36
                filter(or_(pa.Engineer.primary_language=='java',
 
37
                                pa.Manager.manager_name=='dogbert')).\
 
38
                order_by(pa.Engineer.type).all(),
 
39
            [
 
40
                (u'dilbert', u'java', None),
 
41
                (u'dogbert', None, u'dogbert'),
 
42
            ]
 
43
        )
 
44
 
 
45
 
 
46
    def test_join_to_join_entities(self):
 
47
        sess = create_session()
 
48
        pa = with_polymorphic(Person, [Engineer])
 
49
        pa_alias = with_polymorphic(Person, [Engineer], aliased=True)
 
50
 
 
51
        eq_(
 
52
            [(p1.name, type(p1), p2.name, type(p2)) for (p1, p2) in sess.query(
 
53
                pa, pa_alias
 
54
            ).join(pa_alias,
 
55
                    or_(
 
56
                        pa.Engineer.primary_language==\
 
57
                        pa_alias.Engineer.primary_language,
 
58
                        and_(
 
59
                            pa.Engineer.primary_language == None,
 
60
                            pa_alias.Engineer.primary_language == None,
 
61
                            pa.person_id > pa_alias.person_id
 
62
                        )
 
63
                    )
 
64
                ).order_by(pa.name, pa_alias.name)],
 
65
            [
 
66
                (u'dilbert', Engineer, u'dilbert', Engineer),
 
67
                (u'dogbert', Manager, u'pointy haired boss', Boss),
 
68
                (u'vlad', Engineer, u'vlad', Engineer),
 
69
                (u'wally', Engineer, u'wally', Engineer)
 
70
            ]
 
71
        )
 
72
 
 
73
    def test_join_to_join_columns(self):
 
74
        sess = create_session()
 
75
        pa = with_polymorphic(Person, [Engineer])
 
76
        pa_alias = with_polymorphic(Person, [Engineer], aliased=True)
 
77
 
 
78
        eq_(
 
79
            [row for row in sess.query(
 
80
                pa.name, pa.Engineer.primary_language,
 
81
                pa_alias.name, pa_alias.Engineer.primary_language
 
82
            ).join(pa_alias,
 
83
                    or_(
 
84
                        pa.Engineer.primary_language==\
 
85
                        pa_alias.Engineer.primary_language,
 
86
                        and_(
 
87
                            pa.Engineer.primary_language == None,
 
88
                            pa_alias.Engineer.primary_language == None,
 
89
                            pa.person_id > pa_alias.person_id
 
90
                        )
 
91
                    )
 
92
                ).order_by(pa.name, pa_alias.name)],
 
93
            [
 
94
                (u'dilbert', u'java', u'dilbert', u'java'),
 
95
                (u'dogbert', None, u'pointy haired boss', None),
 
96
                (u'vlad', u'cobol', u'vlad', u'cobol'),
 
97
                (u'wally', u'c++', u'wally', u'c++')
 
98
            ]
 
99
        )
 
100
 
 
101
class PolymorphicTest(_WithPolymorphicBase, _Polymorphic):
 
102
    pass
 
103
 
 
104
class PolymorphicPolymorphicTest(_WithPolymorphicBase, _PolymorphicPolymorphic):
 
105
    pass
 
106
 
 
107
class PolymorphicUnionsTest(_WithPolymorphicBase, _PolymorphicUnions):
 
108
    pass
 
109
 
 
110
class PolymorphicAliasedJoinsTest(_WithPolymorphicBase, _PolymorphicAliasedJoins):
 
111
    pass
 
112
 
 
113
class PolymorphicJoinsTest(_WithPolymorphicBase, _PolymorphicJoins):
 
114
    pass