]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fix invalid behavior of Query.update and Query.delete with evaluate strategy and...
authorAnts Aasma <ants.aasma@gmail.com>
Thu, 31 Dec 2009 12:21:30 +0000 (12:21 +0000)
committerAnts Aasma <ants.aasma@gmail.com>
Thu, 31 Dec 2009 12:21:30 +0000 (12:21 +0000)
lib/sqlalchemy/orm/query.py
test/orm/test_query.py

index b57cdf65fe237e2632a72f718f5e993f76a9bdc0..27433627be03abc0d9cf6aebfa38591726d3719e 100644 (file)
@@ -1628,7 +1628,8 @@ class Query(object):
                 if self.whereclause is not None:
                     eval_condition = evaluator_compiler.process(self.whereclause)
                 else:
-                    eval_condition = evaluator_compiler.process(expression._Null)
+                    def eval_condition(obj):
+                        return True
                     
             except evaluator.UnevaluatableError:
                 raise sa_exc.InvalidRequestError("Could not evaluate current criteria in Python.  "
@@ -1732,8 +1733,8 @@ class Query(object):
                 if self.whereclause is not None:
                     eval_condition = evaluator_compiler.process(self.whereclause)
                 else:
-                    eval_condition = evaluator_compiler.process(expression._Null)
-                    
+                    def eval_condition(obj):
+                        return True
 
                 value_evaluators = {}
                 for key,value in values.iteritems():
index 765fd9222b4ec0ce7964be82ca8d4aa1c3f491f7..0d98417f6d9e6cfdde5b0466ac3448e8e28d5033 100644 (file)
@@ -3705,3 +3705,23 @@ class UpdateDeleteTest(_base.MappedTest):
 
         eq_(sess.query(Document.title).all(), zip(['baz']))
 
+    @testing.resolve_artifact_names
+    def test_update_all(self):
+        sess = create_session(bind=testing.db, autocommit=False)
+    
+        john,jack,jill,jane = sess.query(User).order_by(User.id).all()
+        sess.query(User).update({'age': 42}, synchronize_session='evaluate')
+    
+        eq_([john.age, jack.age, jill.age, jane.age], [42,42,42,42])
+        eq_(sess.query(User.age).order_by(User.id).all(), zip([42,42,42,42]))
+
+    @testing.resolve_artifact_names
+    def test_delete_all(self):
+        sess = create_session(bind=testing.db, autocommit=False)
+    
+        john,jack,jill,jane = sess.query(User).order_by(User.id).all()
+        sess.query(User).delete(synchronize_session='evaluate')
+        
+        assert not (john in sess or jack in sess or jill in sess or jane in sess)
+        eq_(sess.query(User).count(), 0)
+