summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-06-17 16:06:50 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-06-17 16:06:50 -0400
commit83090f35d79665957502ffcc207dc8f29bcfe36f (patch)
tree7c24ac2b0003d69486d080ce550a3c721d2032c0
parent0e83f757a8f0403e123558d50511d1f484f4a8aa (diff)
parent6b5192395af08f913c1bfdf473b295661fe88bb7 (diff)
downloadsqlalchemy-83090f35d79665957502ffcc207dc8f29bcfe36f.tar.gz
Merge branch 'master' of bitbucket.org:zzzeek/sqlalchemy
-rw-r--r--examples/versioning/history_meta.py8
-rw-r--r--examples/versioning/test_versioning.py37
2 files changed, 42 insertions, 3 deletions
diff --git a/examples/versioning/history_meta.py b/examples/versioning/history_meta.py
index 45f1c8369..deef67a0a 100644
--- a/examples/versioning/history_meta.py
+++ b/examples/versioning/history_meta.py
@@ -158,8 +158,12 @@ def create_version(obj, session, deleted = False):
for prop in obj_mapper.iterate_properties:
if isinstance(prop, RelationshipProperty) and \
attributes.get_history(obj, prop.key).has_changes():
- obj_changed = True
- break
+ for p in prop.local_columns:
+ if p.foreign_keys:
+ obj_changed = True
+ break
+ if obj_changed is True:
+ break
if not obj_changed and not deleted:
return
diff --git a/examples/versioning/test_versioning.py b/examples/versioning/test_versioning.py
index 5b57ecaa2..2bc18df63 100644
--- a/examples/versioning/test_versioning.py
+++ b/examples/versioning/test_versioning.py
@@ -306,7 +306,7 @@ class TestVersioning(TestCase):
id = Column(Integer, primary_key=True)
name = Column(String(50))
related_id = Column(Integer, ForeignKey('somerelated.id'))
- related = relationship("SomeRelated")
+ related = relationship("SomeRelated", backref='classes')
SomeClassHistory = SomeClass.__history_mapper__.class_
@@ -341,3 +341,38 @@ class TestVersioning(TestCase):
assert sc.version == 3
+ def test_backref_relationship(self):
+
+ class SomeRelated(Base, ComparableEntity):
+ __tablename__ = 'somerelated'
+
+ id = Column(Integer, primary_key=True)
+ name = Column(String(50))
+ related_id = Column(Integer, ForeignKey('sometable.id'))
+ related = relationship("SomeClass", backref='related')
+
+ class SomeClass(Versioned, Base, ComparableEntity):
+ __tablename__ = 'sometable'
+
+ id = Column(Integer, primary_key=True)
+
+ self.create_tables()
+ sess = Session()
+ sc = SomeClass()
+ sess.add(sc)
+ sess.commit()
+
+ assert sc.version == 1
+
+ sr = SomeRelated(name='sr', related=sc)
+ sess.add(sr)
+ sess.commit()
+
+ assert sc.version == 1
+
+ sr.name = 'sr2'
+ sess.commit()
+
+ assert sc.version == 1
+ sess.delete(sr)
+ sess.commit()