]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Corrected problem with bindparams not working properly with Query.delete and Query...
authorMichael Trier <mtrier@gmail.com>
Thu, 11 Dec 2008 21:52:11 +0000 (21:52 +0000)
committerMichael Trier <mtrier@gmail.com>
Thu, 11 Dec 2008 21:52:11 +0000 (21:52 +0000)
lib/sqlalchemy/orm/query.py
test/orm/query.py

index 1922c5ac6cfd0de0ad85ce9e742cd9c87a5a5882..9b491896d689892dec5b14849eab5d081dbb91b1 100644 (file)
@@ -1371,11 +1371,11 @@ class Query(object):
         if synchronize_session == 'fetch':
             #TODO: use RETURNING when available
             select_stmt = context.statement.with_only_columns(primary_table.primary_key)
-            matched_rows = session.execute(select_stmt).fetchall()
+            matched_rows = session.execute(select_stmt, params=self._params).fetchall()
 
         if self._autoflush:
             session._autoflush()
-        result = session.execute(delete_stmt)
+        result = session.execute(delete_stmt, params=self._params)
 
         if synchronize_session == 'evaluate':
             target_cls = self._mapper_zero().class_
@@ -1456,11 +1456,11 @@ class Query(object):
 
         if synchronize_session == 'expire':
             select_stmt = context.statement.with_only_columns(primary_table.primary_key)
-            matched_rows = session.execute(select_stmt).fetchall()
+            matched_rows = session.execute(select_stmt, params=self._params).fetchall()
 
         if self._autoflush:
             session._autoflush()
-        result = session.execute(update_stmt)
+        result = session.execute(update_stmt, params=self._params)
 
         if synchronize_session == 'evaluate':
             target_cls = self._mapper_zero().class_
index 5d60335dd50cf7c86334ff5144a6e6e303b173c5..d0acc5e45e4f923e5f17c461227790f86591ac52 100644 (file)
@@ -2601,7 +2601,17 @@ class UpdateDeleteTest(_base.MappedTest):
         assert john not in sess and jill not in sess
         
         eq_(sess.query(User).order_by(User.id).all(), [jack,jane])
-        
+
+    @testing.resolve_artifact_names
+    def test_delete_with_bindparams(self):
+        sess = create_session(bind=testing.db, autocommit=False)
+
+        john,jack,jill,jane = sess.query(User).order_by(User.id).all()
+        sess.query(User).filter('name = :name').params(name='john').delete()
+        assert john not in sess
+
+        eq_(sess.query(User).order_by(User.id).all(), [jack,jill,jane])
+
     @testing.resolve_artifact_names
     def test_delete_rollback(self):
         sess = sessionmaker()()
@@ -2664,6 +2674,17 @@ class UpdateDeleteTest(_base.MappedTest):
         eq_([john.age, jack.age, jill.age, jane.age], [25,37,29,27])
         eq_(sess.query(User.age).order_by(User.id).all(), zip([25,37,29,27]))
 
+    @testing.resolve_artifact_names
+    def test_update_with_bindparams(self):
+        sess = create_session(bind=testing.db, autocommit=False)
+
+        john,jack,jill,jane = sess.query(User).order_by(User.id).all()
+
+        sess.query(User).filter('age > :x').params(x=29).update({'age': User.age - 10}, synchronize_session='evaluate')
+
+        eq_([john.age, jack.age, jill.age, jane.age], [25,37,29,27])
+        eq_(sess.query(User.age).order_by(User.id).all(), zip([25,37,29,27]))
+
     @testing.resolve_artifact_names
     def test_update_changes_resets_dirty(self):
         sess = create_session(bind=testing.db, autocommit=False, autoflush=False)