]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- merge r6549 of 0.5 branch
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 8 Dec 2009 23:47:09 +0000 (23:47 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 8 Dec 2009 23:47:09 +0000 (23:47 +0000)
- Fixed bug in query.update() when passing Cls.attribute
as keys in the value dict and using synchronize_session='expire'
('fetch' in 0.6). [ticket:1436]

CHANGES
lib/sqlalchemy/orm/query.py
test/orm/test_query.py

diff --git a/CHANGES b/CHANGES
index a70a017f679c801edd778dff2f998d7bdf1ed710..6326030fc3b5f652fc62c532b3593455bb433bae 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -807,6 +807,10 @@ CHANGES
       combinations of reflected and non-reflected types to work
       with 0.5 style type reflection, such as PGText/Text (note 0.6 
       reflects types as their generic versions).   [ticket:1556]
+    
+    - Fixed bug in query.update() when passing Cls.attribute
+      as keys in the value dict and using synchronize_session='expire'
+      ('fetch' in 0.6). [ticket:1436]
       
 - sql
     - Fixed bug in two-phase transaction whereby commit() method
index 978596f01838a262bee0256634f1c7a5b3d1ca8f..b57cdf65fe237e2632a72f718f5e993f76a9bdc0 100644 (file)
@@ -1778,7 +1778,7 @@ class Query(object):
             for primary_key in matched_rows:
                 identity_key = target_mapper.identity_key_from_primary_key(list(primary_key))
                 if identity_key in session.identity_map:
-                    session.expire(session.identity_map[identity_key], values.keys())
+                    session.expire(session.identity_map[identity_key], [expression._column_as_key(k) for k in values])
 
         for ext in session.extensions:
             ext.after_bulk_update(session, self, context, result)
index be763f009608dd5e28960e4dbec3693ddaae0534..765fd9222b4ec0ce7964be82ca8d4aa1c3f491f7 100644 (file)
@@ -3578,6 +3578,10 @@ class UpdateDeleteTest(_base.MappedTest):
         eq_([john.age, jack.age, jill.age, jane.age], [25,27,19,27])
         eq_(sess.query(User.age).order_by(User.id).all(), zip([25,27,19,27]))
 
+        sess.query(User).filter(User.age == 25).update({User.age: User.age - 10}, synchronize_session='fetch')
+        eq_([john.age, jack.age, jill.age, jane.age], [15,27,19,27])
+        eq_(sess.query(User.age).order_by(User.id).all(), zip([15,27,19,27]))
+
 
     @testing.resolve_artifact_names
     def test_update_with_bindparams(self):