diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-01-27 01:40:26 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-01-27 01:40:26 +0000 |
commit | 931decd84576e4ec61af317424ed683c4576f02a (patch) | |
tree | 31920a2f26bef1e17bc5340ce9645cfefd08197b /test/orm/inheritance5.py | |
parent | 38aa219a69a341f033dd1c3981ee1cae4ddd7119 (diff) | |
download | sqlalchemy-931decd84576e4ec61af317424ed683c4576f02a.tar.gz |
- eager relation to an inheriting mapper wont fail if no rows returned for
the relationship.
Diffstat (limited to 'test/orm/inheritance5.py')
-rw-r--r-- | test/orm/inheritance5.py | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/test/orm/inheritance5.py b/test/orm/inheritance5.py index af1a4918c..4a90772b4 100644 --- a/test/orm/inheritance5.py +++ b/test/orm/inheritance5.py @@ -301,6 +301,74 @@ class RelationTest4(testbase.AssertMixin): car1 = session.query(Car).options(eagerload('employee')).get(car1.car_id) assert str(car1.employee) == "Engineer E4, status X" +class RelationTest5(testbase.AssertMixin): + def setUpAll(self): + global metadata, people, engineers, managers, cars + metadata = BoundMetaData(testbase.db) + people = Table('people', metadata, + Column('person_id', Integer, primary_key=True), + Column('name', String(50)), + Column('type', String(50))) + + engineers = Table('engineers', metadata, + Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True), + Column('status', String(30))) + + managers = Table('managers', metadata, + Column('person_id', Integer, ForeignKey('people.person_id'), primary_key=True), + Column('longer_status', String(70))) + + cars = Table('cars', metadata, + Column('car_id', Integer, primary_key=True), + Column('owner', Integer, ForeignKey('people.person_id'))) + metadata.create_all() + def tearDownAll(self): + metadata.drop_all() + def tearDown(self): + clear_mappers() + for t in metadata.table_iterator(reverse=True): + t.delete().execute() + + def testeagerempty(self): + """an easy one...test parent object with child relation to an inheriting mapper, using eager loads, + works when there are no child objects present""" + class Person(object): + def __init__(self, **kwargs): + for key, value in kwargs.iteritems(): + setattr(self, key, value) + def __repr__(self): + return "Ordinary person %s" % self.name + class Engineer(Person): + def __repr__(self): + return "Engineer %s, status %s" % (self.name, self.status) + class Manager(Person): + def __repr__(self): + return "Manager %s, status %s" % (self.name, self.longer_status) + class Car(object): + def __init__(self, **kwargs): + for key, value in kwargs.iteritems(): + setattr(self, key, value) + def __repr__(self): + return "Car number %d" % self.car_id + + person_mapper = mapper(Person, people, polymorphic_on=people.c.type, polymorphic_identity='person') + engineer_mapper = mapper(Engineer, engineers, inherits=person_mapper, polymorphic_identity='engineer') + manager_mapper = mapper(Manager, managers, inherits=person_mapper, polymorphic_identity='manager') + car_mapper = mapper(Car, cars, properties= {'manager':relation(manager_mapper, lazy=False)}) + + sess = create_session() + car1 = Car() + car2 = Car() + car2.manager = Manager() + sess.save(car1) + sess.save(car2) + sess.flush() + sess.clear() + + carlist = sess.query(Car).select() + assert carlist[0].manager is None + assert carlist[1].manager.person_id == car2.manager.person_id + if __name__ == "__main__": testbase.main()
\ No newline at end of file |