From: Mike Bayer Date: Fri, 16 May 2008 21:38:56 +0000 (+0000) Subject: added an assertion to prevent against the use in [ticket:1048] X-Git-Tag: rel_0_5beta1~65 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=2beb99a60ee8565079f5efdb11c92b3026b9b90e;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git added an assertion to prevent against the use in [ticket:1048] --- diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 72edc4e4bf..c0a73e2b26 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -253,6 +253,9 @@ class Mapper(object): mappers = list(self.polymorphic_iterator()) elif spec: mappers = [_class_to_mapper(m) for m in util.to_list(spec)] + for m in mappers: + if not m.isa(self): + raise sa_exc.InvalidRequestError("%r does not inherit from %r" % (m, self)) else: mappers = [] diff --git a/lib/sqlalchemy/orm/query.py b/lib/sqlalchemy/orm/query.py index 47d00964d4..5df13d8d94 100644 --- a/lib/sqlalchemy/orm/query.py +++ b/lib/sqlalchemy/orm/query.py @@ -1381,7 +1381,7 @@ class _MapperEntity(_QueryEntity): if cls_or_mappers is None: query._reset_polymorphic_adapter(self.mapper) return - + mappers, from_obj = self.mapper._with_polymorphic_args(cls_or_mappers, selectable) self._with_polymorphic = mappers diff --git a/test/orm/inheritance/query.py b/test/orm/inheritance/query.py index 62d315e71a..1cf09582e0 100644 --- a/test/orm/inheritance/query.py +++ b/test/orm/inheritance/query.py @@ -303,6 +303,11 @@ def make_test(select_type): sess = create_session() + + self.assertRaises(sa_exc.InvalidRequestError, sess.query(Person).with_polymorphic, Paperwork) + self.assertRaises(sa_exc.InvalidRequestError, sess.query(Engineer).with_polymorphic, Boss) + self.assertRaises(sa_exc.InvalidRequestError, sess.query(Engineer).with_polymorphic, Person) + # compare to entities without related collections to prevent additional lazy SQL from firing on # loaded entities emps_without_relations = [