]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
added an assertion to prevent against the use in [ticket:1048]
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 16 May 2008 21:38:56 +0000 (21:38 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 16 May 2008 21:38:56 +0000 (21:38 +0000)
lib/sqlalchemy/orm/mapper.py
lib/sqlalchemy/orm/query.py
test/orm/inheritance/query.py

index 72edc4e4bf674ab8ab319450cc8b293f0cf2b637..c0a73e2b263fce2187b9d3c53c6f5e8a52784d83 100644 (file)
@@ -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 = []
 
index 47d00964d405cee9b64e4bf353d0425270cfa93b..5df13d8d9470deb821b2d41b9e8a2acb03957f6e 100644 (file)
@@ -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
 
index 62d315e71ab33e32a09b927b4562dcc6fafc2a5a..1cf09582e08822912ed33cb37be2657445dc7e0f 100644 (file)
@@ -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 = [