summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2006-06-22 04:29:55 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2006-06-22 04:29:55 +0000
commit0ab010867f39e6ae20af23b36b3b78f9948ec181 (patch)
tree9d745ab8b1281e97eb2ead5947eca16336d5c763
parentbb1fde2042f389e7a21f070b11fdbe7c5c5cd535 (diff)
downloadsqlalchemy-0ab010867f39e6ae20af23b36b3b78f9948ec181.tar.gz
more compilation fixes
-rw-r--r--lib/sqlalchemy/orm/mapper.py7
-rw-r--r--test/orm/alltests.py16
-rw-r--r--test/orm/compile.py37
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()