]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
added test to illustrate wacky inhertitance/many-to-many thing
authorMike Bayer <mike_mp@zzzcomputing.com>
Sun, 26 Feb 2006 06:17:21 +0000 (06:17 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Sun, 26 Feb 2006 06:17:21 +0000 (06:17 +0000)
test/inheritance.py

index f972306cf0e62a94914b33ee05fecad41ffc99c4..f054bc5574fd927237f5d55e3c0cc4ba8b2365cc 100644 (file)
@@ -89,5 +89,66 @@ class InheritTest(testbase.AssertMixin):
             
             objectstore.commit()
 
+class InheritTest2(testbase.AssertMixin):
+       def setUpAll(self):
+               engine = testbase.db
+               global foo, bar, foo_bar
+               foo = Table('foo', engine,
+                   Column('id', Integer, primary_key=True),
+                       Column('data', String(20)),
+                       ).create()
+
+               bar = Table('bar', engine,
+                   Column('bid', Integer, ForeignKey('foo.id'), primary_key=True),
+                   #Column('fid', Integer, ForeignKey('foo.id'), )
+                       ).create()
+
+               foo_bar = Table('foo_bar', engine,
+                   Column('foo_id', Integer, ForeignKey('foo.id')),
+                   Column('bar_id', Integer, ForeignKey('bar.bid'))).create()
+
+       def tearDownAll(self):
+               foo_bar.drop()
+               bar.drop()
+               foo.drop()
+
+       def testbasic(self):
+               class Foo(object): 
+                       def __init__(self, data=None):
+                               self.data = data
+                       def __str__(self):
+                               return "Foo(%s)" % self.data
+                       def __repr__(self):
+                               return str(self)
+
+               Foo.mapper = mapper(Foo, foo)
+               class Bar(Foo):
+                       def __str__(self):
+                               return "Bar(%s)" % self.data
+
+               Bar.mapper = mapper(Bar, bar, inherits=Foo.mapper, properties = {
+                               # TODO: use syncrules for this
+                               'id':[bar.c.bid, foo.c.id]
+                       })
+
+               Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, primaryjoin=bar.c.bid==foo_bar.c.bar_id, secondaryjoin=foo_bar.c.foo_id==foo.c.id, lazy=False))
+               #Bar.mapper.add_property('foos', relation(Foo.mapper, foo_bar, lazy=False))
+
+
+               b = Bar('barfoo')
+               objectstore.commit()
+
+
+               b.foos.append(Foo('subfoo1'))
+               b.foos.append(Foo('subfoo2'))
+
+               objectstore.commit()
+               objectstore.clear()
+
+               l =b.mapper.select()
+               print l[0]
+               print l[0].foos
+
+
 if __name__ == "__main__":    
     testbase.main()