1136
class SubRelationFromJoinedSubclassMultiLevelTest(_Polymorphic):
1138
def define_tables(cls, metadata):
1139
Table('companies', metadata,
1140
Column('company_id', Integer,
1142
test_needs_autoincrement=True),
1143
Column('name', String(50)))
1145
Table('people', metadata,
1146
Column('person_id', Integer,
1148
test_needs_autoincrement=True),
1149
Column('company_id', ForeignKey('companies.company_id')),
1150
Column('name', String(50)),
1151
Column('type', String(30)))
1153
Table('engineers', metadata,
1154
Column('engineer_id', ForeignKey('people.person_id'),
1156
Column('primary_language', String(50)))
1158
Table('machines', metadata,
1159
Column('machine_id',
1160
Integer, primary_key=True,
1161
test_needs_autoincrement=True),
1162
Column('name', String(50)),
1163
Column('engineer_id', ForeignKey('engineers.engineer_id')),
1164
Column('machine_type_id',
1165
ForeignKey('machine_type.machine_type_id')))
1167
Table('machine_type', metadata,
1168
Column('machine_type_id',
1169
Integer, primary_key=True,
1170
test_needs_autoincrement=True),
1171
Column('name', String(50)))
1174
def setup_mappers(cls):
1175
companies = cls.tables.companies
1176
people = cls.tables.people
1177
engineers = cls.tables.engineers
1178
machines = cls.tables.machines
1179
machine_type = cls.tables.machine_type
1181
mapper(Company, companies, properties={
1182
'employees': relationship(Person, order_by=people.c.person_id)
1184
mapper(Person, people,
1185
polymorphic_on=people.c.type,
1186
polymorphic_identity='person',
1187
with_polymorphic='*')
1189
mapper(Engineer, engineers,
1191
polymorphic_identity='engineer', properties={
1192
'machines': relationship(Machine,
1193
order_by=machines.c.machine_id)
1196
mapper(Machine, machines, properties={
1197
'type': relationship(MachineType)
1199
mapper(MachineType, machine_type)
1203
def insert_data(cls):
1205
sess = create_session()
1211
mt1 = MachineType(name='mt1')
1212
mt2 = MachineType(name='mt2')
1218
Machine(name='m1', type=mt1),
1219
Machine(name='m2', type=mt2)
1225
Machine(name='m3', type=mt1),
1226
Machine(name='m4', type=mt1)
1231
def test_chained_subq_subclass(self):
1233
q = s.query(Company).options(
1234
subqueryload(Company.employees.of_type(Engineer)).
1235
subqueryload(Engineer.machines).
1236
subqueryload(Machine.type)
1244
self.assert_sql_count(testing.db, go, 4)
1138
1247
class SelfReferentialTest(fixtures.MappedTest):