]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Merged in goodscloud/sqlalchemy (pull request #2)
authorMike Bayer <classic@zzzcomputing.com>
Mon, 17 Jun 2013 20:06:29 +0000 (16:06 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 17 Jun 2013 20:58:56 +0000 (16:58 -0400)
don't create a history entry when an object in a backref has changed

examples/versioning/history_meta.py
examples/versioning/test_versioning.py

index 53359939419d52db775d5326c4f74906b4e02807..79c77cdc260781802522f50cdd94c246c138aac2 100644 (file)
@@ -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
index 43e2b0ae1e2973f64575b6a672ab1a134a6ce831..a08f1dbf3c97ec1c53b733aadb304c265ef9671e 100644 (file)
@@ -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()