diff options
author | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-06-22 04:29:55 +0000 |
---|---|---|
committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2006-06-22 04:29:55 +0000 |
commit | 0ab010867f39e6ae20af23b36b3b78f9948ec181 (patch) | |
tree | 9d745ab8b1281e97eb2ead5947eca16336d5c763 | |
parent | bb1fde2042f389e7a21f070b11fdbe7c5c5cd535 (diff) | |
download | sqlalchemy-0ab010867f39e6ae20af23b36b3b78f9948ec181.tar.gz |
more compilation fixes
-rw-r--r-- | lib/sqlalchemy/orm/mapper.py | 7 | ||||
-rw-r--r-- | test/orm/alltests.py | 16 | ||||
-rw-r--r-- | test/orm/compile.py | 37 |
3 files changed, 50 insertions, 10 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index 101f46580..c90f83e59 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -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 diff --git a/test/orm/alltests.py b/test/orm/alltests.py index cfbfdb70b..6bcad2c15 100644 --- a/test/orm/alltests.py +++ b/test/orm/alltests.py @@ -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: diff --git a/test/orm/compile.py b/test/orm/compile.py index c927ae53b..007edd596 100644 --- a/test/orm/compile.py +++ b/test/orm/compile.py @@ -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() |