]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
more compilation fixes
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Jun 2006 04:29:55 +0000 (04:29 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Jun 2006 04:29:55 +0000 (04:29 +0000)
lib/sqlalchemy/orm/mapper.py
test/orm/alltests.py
test/orm/compile.py

index 101f46580bf7a8d9758a81d9bfb644c00f9ba1b8..c90f83e5979674df19eac263f693b6d2d629fd54 100644 (file)
@@ -45,7 +45,9 @@ class CompileTrigger(object):
         return len(self.dependencies) == 0 or (len(self.dependencies)==1 and list(self.dependencies)[0] == self.mapper.class_key)
     def compiled(self, classkey):
         self.dependencies.remove(classkey)
-        
+    def __str__(self):
+        return "CompileTrigger on mapper " + str(self.mapper)
+            
 class Mapper(object):
     """Persists object instances to and from schema.Table objects via the sql package.
     Instances of this class should be constructed through this package's mapper() or
@@ -218,6 +220,7 @@ class Mapper(object):
         triggerset = _compile_triggers.pop(self.class_key, None)
         if triggerset is not None:
             for rec in triggerset:
+                print "looking at:", rec
                 rec.compiled(self.class_key)
                 if rec.can_compile():
                     rec.mapper._do_compile()
@@ -1395,7 +1398,7 @@ def class_mapper(class_, entity_name=None, compile=True):
     except (KeyError, AttributeError):
         raise exceptions.InvalidRequestError("Class '%s' entity name '%s' has no mapper associated with it" % (class_.__name__, entity_name))
     if compile:
-        return mapper._do_compile()
+        return mapper.compile()
     else:
         return mapper
     
index cfbfdb70b510f16ab6b197cb966dbe1a0a7ddd11..6bcad2c15164cbc3e1196ac4e83c3da66aa3698b 100644 (file)
@@ -18,14 +18,14 @@ def suite():
         'orm.cycles',
         'orm.poly_linked_list',
 
-       'orm.entity',
-       'orm.compile',
-       'orm.manytomany',
-       'orm.onetoone',
-       'orm.inheritance',
-       'orm.inheritance2',
-       'orm.inheritance3',
-       'orm.polymorph'        
+        'orm.entity',
+        'orm.compile',
+        'orm.manytomany',
+        'orm.onetoone',
+        'orm.inheritance',
+        'orm.inheritance2',
+        'orm.inheritance3',
+        'orm.polymorph'        
         )
     alltests = unittest.TestSuite()
     for name in modules_to_test:
index c927ae53b38b46390a608156447eefe76490412b..007edd5964c98b28a836f97fa4d3313df70213b3 100644 (file)
@@ -117,5 +117,42 @@ class CompileTest(testbase.AssertMixin):
         except exceptions.ArgumentError, e:
             assert str(e).index("Backrefs do not match") > -1
 
+    def testthree(self):
+        metadata = BoundMetaData(testbase.db)
+        node_table = Table("node", metadata, 
+            Column('node_id', Integer, primary_key=True),
+            Column('name_index', Integer, nullable=True),
+            )
+        node_name_table = Table("node_name", metadata, 
+            Column('node_name_id', Integer, primary_key=True),
+            Column('node_id', Integer, ForeignKey('node.node_id')),
+            Column('host_id', Integer, ForeignKey('host.host_id')),
+            Column('name', String(64), nullable=False),
+            )
+        host_table = Table("host", metadata,
+            Column('host_id', Integer, primary_key=True),
+            Column('hostname', String(64), nullable=False,
+        unique=True),
+            )
+        metadata.create_all()
+        try:
+            node_table.insert().execute(node_id=1, node_index=5)
+            class Node(object):pass
+            class NodeName(object):pass
+            class Host(object):pass
+                
+            node_mapper = mapper(Node, node_table)
+            host_mapper = mapper(Host, host_table)
+            node_name_mapper = mapper(NodeName, node_name_table,
+            properties = {
+                'node' : relation(Node, backref=backref('names')),
+                'host' : relation(Host),
+                }
+            )
+            sess = create_session()
+            assert sess.query(Node).get(1).names == []
+        finally:
+            metadata.drop_all()
+
 if __name__ == '__main__':
     testbase.main()