]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commit
Create new event for collection add w/o mutation
authorMike Bayer <mike_mp@zzzcomputing.com>
Wed, 12 May 2021 13:26:03 +0000 (09:26 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Wed, 12 May 2021 13:26:03 +0000 (09:26 -0400)
commit71a858817cb8c11451ae577c61329f4239fab46b
tree14fcd7fa0facf6f772280e0aea42d7124aeca509
parentf6329060f1b2f5631deac3ca877c2ae19e3e6f36
Create new event for collection add w/o mutation

Fixed issue when using :paramref:`_orm.relationship.cascade_backrefs`
parameter set to ``False``, which per :ref:`change_5150` is set to become
the standard behavior in SQLAlchemy 2.0, where adding the item to a
collection that uniquifies, such as ``set`` or ``dict`` would fail to fire
a cascade event if the object were already associated in that collection
via the backref. This fix represents a fundamental change in the collection
mechanics by introducing a new event state which can fire off for a
collection mutation even if there is no net change on the collection; the
action is now suited using a new event hook
:meth:`_orm.AttributeEvents.append_wo_mutation`.

Fixes: #6471
Change-Id: Ic50413f7e62440dad33ab84838098ea62ff4e815
doc/build/changelog/unreleased_14/6471.rst [new file with mode: 0644]
lib/sqlalchemy/orm/attributes.py
lib/sqlalchemy/orm/collections.py
lib/sqlalchemy/orm/events.py
lib/sqlalchemy/orm/unitofwork.py
test/orm/test_cascade.py
test/orm/test_collection.py