summaryrefslogtreecommitdiff
path: root/test/orm/inheritance5.py
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2007-04-11 19:37:56 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2007-04-11 19:37:56 +0000
commit95520005d5469f311f53ea9c51bbaef61be89178 (patch)
tree33850e7fe5bdaa6e77ddd892d87995e169fc7a7b /test/orm/inheritance5.py
parenta4b8112d6d919eded664b042aea4f8015e143110 (diff)
downloadsqlalchemy-95520005d5469f311f53ea9c51bbaef61be89178.tar.gz
- fix to many-to-many relationships targeting polymorphic mappers
[ticket:533]
Diffstat (limited to 'test/orm/inheritance5.py')
-rw-r--r--test/orm/inheritance5.py50
1 files changed, 50 insertions, 0 deletions
diff --git a/test/orm/inheritance5.py b/test/orm/inheritance5.py
index bdc9e02e1..657530405 100644
--- a/test/orm/inheritance5.py
+++ b/test/orm/inheritance5.py
@@ -777,6 +777,56 @@ class MultiLevelTest(testbase.ORMTest):
assert set(session.query(Employee).select()) == set([a,b,c])
assert set(session.query( Engineer).select()) == set([b,c])
assert session.query( Manager).select() == [c]
+
+class ManyToManyPolyTest(testbase.ORMTest):
+ def define_tables(self, metadata):
+ global base_item_table, item_table, base_item_collection_table, collection_table
+ base_item_table = Table(
+ 'base_item', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('child_name', String(255), default=None))
+
+ item_table = Table(
+ 'item', metadata,
+ Column('id', Integer, ForeignKey('base_item.id'), primary_key=True),
+ Column('dummy', Integer, default=0)) # Dummy column to avoid weird insert problems
+
+ base_item_collection_table = Table(
+ 'base_item_collection', metadata,
+ Column('item_id', Integer, ForeignKey('base_item.id')),
+ Column('collection_id', Integer, ForeignKey('collection.id')))
+
+ collection_table = Table(
+ 'collection', metadata,
+ Column('id', Integer, primary_key=True),
+ Column('name', Unicode(255)))
+
+ def test_pjoin_compile(self):
+ """test that remote_side columns in the secondary join table arent attempted to be
+ matched to the target polymorphic selectable"""
+ class BaseItem(object): pass
+ class Item(BaseItem): pass
+ class Collection(object): pass
+ item_join = polymorphic_union( {
+ 'BaseItem':base_item_table.select(base_item_table.c.child_name=='BaseItem'),
+ 'Item':base_item_table.join(item_table),
+ }, None, 'item_join')
+
+ mapper(
+ BaseItem, base_item_table,
+ select_table=item_join,
+ polymorphic_on=base_item_table.c.child_name,
+ polymorphic_identity='BaseItem',
+ properties=dict(collections=relation(Collection, secondary=base_item_collection_table, backref="items")))
+
+ mapper(
+ Item, item_table,
+ inherits=BaseItem,
+ polymorphic_identity='Item')
+
+ mapper(Collection, collection_table)
+
+ class_mapper(BaseItem)
if __name__ == "__main__":
testbase.main()