summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-05-16 21:38:56 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-05-16 21:38:56 +0000
commit2beb99a60ee8565079f5efdb11c92b3026b9b90e (patch)
treeef8c626f2e883c06a7188764e2640e62558a32f7
parente314a548bd506385cfc51bffc16741e01b046f77 (diff)
downloadsqlalchemy-2beb99a60ee8565079f5efdb11c92b3026b9b90e.tar.gz
added an assertion to prevent against the use in [ticket:1048]
-rw-r--r--lib/sqlalchemy/orm/mapper.py3
-rw-r--r--lib/sqlalchemy/orm/query.py2
-rw-r--r--test/orm/inheritance/query.py5
3 files changed, 9 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py
index 72edc4e4b..c0a73e2b2 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 47d00964d..5df13d8d9 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 62d315e71..1cf09582e 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 = [