File: test_lazytest1.py

package info (click to toggle)
sqlalchemy 0.6.3-3%2Bsqueeze1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 10,744 kB
  • ctags: 15,132
  • sloc: python: 93,431; ansic: 787; makefile: 137; xml: 17
file content (92 lines) | stat: -rw-r--r-- 3,309 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
import sqlalchemy as sa
from sqlalchemy.test import testing
from sqlalchemy import Integer, String, ForeignKey
from sqlalchemy.test.schema import Table
from sqlalchemy.test.schema import Column
from sqlalchemy.orm import mapper, relationship, create_session
from test.orm import _base


class LazyTest(_base.MappedTest):
    @classmethod
    def define_tables(cls, metadata):
        Table('infos', metadata,
              Column('pk', Integer, primary_key=True),
              Column('info', String(128)))

        Table('data', metadata,
              Column('data_pk', Integer, primary_key=True),
              Column('info_pk', Integer,
                     ForeignKey('infos.pk')),
              Column('timeval', Integer),
              Column('data_val', String(128)))

        Table('rels', metadata,
              Column('rel_pk', Integer, primary_key=True),
              Column('info_pk', Integer,
                     ForeignKey('infos.pk')),
              Column('start', Integer),
              Column('finish', Integer))

    @classmethod
    @testing.resolve_artifact_names
    def insert_data(cls):
        infos.insert().execute(
            {'pk':1, 'info':'pk_1_info'},
            {'pk':2, 'info':'pk_2_info'},
            {'pk':3, 'info':'pk_3_info'},
            {'pk':4, 'info':'pk_4_info'},
            {'pk':5, 'info':'pk_5_info'})

        rels.insert().execute(
            {'rel_pk':1, 'info_pk':1, 'start':10, 'finish':19},
            {'rel_pk':2, 'info_pk':1, 'start':100, 'finish':199},
            {'rel_pk':3, 'info_pk':2, 'start':20, 'finish':29},
            {'rel_pk':4, 'info_pk':3, 'start':13, 'finish':23},
            {'rel_pk':5, 'info_pk':5, 'start':15, 'finish':25})

        data.insert().execute(
            {'data_pk':1, 'info_pk':1, 'timeval':11, 'data_val':'11_data'},
            {'data_pk':2, 'info_pk':1, 'timeval':9, 'data_val':'9_data'},
            {'data_pk':3, 'info_pk':1, 'timeval':13, 'data_val':'13_data'},
            {'data_pk':4, 'info_pk':2, 'timeval':23, 'data_val':'23_data'},
            {'data_pk':5, 'info_pk':2, 'timeval':13, 'data_val':'13_data'},
            {'data_pk':6, 'info_pk':1, 'timeval':15, 'data_val':'15_data'})

    @testing.resolve_artifact_names
    def testone(self):
        """A lazy load which has multiple join conditions.

        Including two that are against the same column in the child table.

        """
        class Information(object):
            pass

        class Relationship(object):
            pass

        class Data(object):
            pass

        session = create_session()

        mapper(Data, data)
        mapper(Relationship, rels, properties={
            'datas': relationship(Data,
                              primaryjoin=sa.and_(
                                rels.c.info_pk ==
                                data.c.info_pk,
                                data.c.timeval >= rels.c.start,
                                data.c.timeval <= rels.c.finish),
                              foreign_keys=[data.c.info_pk])})
        mapper(Information, infos, properties={
            'rels': relationship(Relationship)
        })

        info = session.query(Information).get(1)
        assert info
        assert len(info.rels) == 2
        assert len(info.rels[0].datas) == 3