0.5.0rc3
========
- orm
+
+ - Added two new hooks to SessionExtension: after_bulk_delete and
+ after_bulk_update. after_bulk_delete is called after a bulk delete()
+ operation on a query. after_bulk_update is called after a bulk update()
+ operation on a query.
+
- "not equals" comparisons of simple many-to-one relation to an
instance will not drop into an EXISTS clause and will compare
foreign key columns instead.
This is called after an add, delete or merge.
"""
+ def after_bulk_update(self, session, query, query_context, result):
+ """Execute after a bulk update operation to the session.
+
+ This is called after a session.query(...).update()
+
+ `query` is the query object that this update operation was called on.
+ `query_context` was the query context object.
+ `result` is the result object returned from the bulk operation.
+ """
+
+ def after_bulk_delete(self, session, query, query_context, result):
+ """Execute after a bulk delete operation to the session.
+
+ This is called after a session.query(...).delete()
+
+ `query` is the query object that this delete operation was called on.
+ `query_context` was the query context object.
+ `result` is the result object returned from the bulk operation.
+ """
+
class MapperProperty(object):
"""Manage the relationship of a ``Mapper`` to a single class
attribute, as well as that attribute as it appears on individual
if identity_key in session.identity_map:
session._remove_newly_deleted(attributes.instance_state(session.identity_map[identity_key]))
+ for ext in session.extensions:
+ ext.after_bulk_delete(session, self, context, result)
+
return result.rowcount
def update(self, values, synchronize_session='expire'):
if identity_key in session.identity_map:
session.expire(session.identity_map[identity_key], values.keys())
+ for ext in session.extensions:
+ ext.after_bulk_update(session, self, context, result)
+
return result.rowcount
def _compile_context(self, labels=True):
log.append('after_begin')
def after_attach(self, session, instance):
log.append('after_attach')
+ def after_bulk_update(self, session, query, query_context, result):
+ log.append('after_bulk_update')
+ def after_bulk_delete(self, session, query, query_context, result):
+ log.append('after_bulk_delete')
sess = create_session(extension = MyExt())
u = User(name='u1')
log = []
sess.commit()
assert log == ['before_commit', 'after_commit']
+
+ log = []
+ sess.query(User).delete()
+ assert log == ['after_begin', 'after_bulk_delete']
+
+ log = []
+ sess.query(User).update({'name': 'foo'})
+ assert log == ['after_bulk_update']
log = []
sess = create_session(autocommit=False, extension=MyExt(), bind=testing.db)