From d355ea021dc51f4765524ec24f78dd03a7be8d8a Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 2 Nov 2007 18:05:06 +0000 Subject: [PATCH] - extra merge test - merge with dont_load also propagates _state.modified --- lib/sqlalchemy/orm/properties.py | 1 - lib/sqlalchemy/orm/session.py | 2 ++ test/orm/merge.py | 11 +++++++++++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 1e6be1f7df..f2a60315c1 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -292,7 +292,6 @@ class PropertyLoader(StrategizedProperty): for current in list(childlist): obj = session.merge(current, entity_name=self.mapper.entity_name, dont_load=dont_load, _recursive=_recursive) if obj is not None: - #dest_list.append_without_event(obj) dest_list.append_with_event(obj) else: current = list(childlist)[0] diff --git a/lib/sqlalchemy/orm/session.py b/lib/sqlalchemy/orm/session.py index 30e97eba7c..0b57447788 100644 --- a/lib/sqlalchemy/orm/session.py +++ b/lib/sqlalchemy/orm/session.py @@ -879,6 +879,8 @@ class Session(object): raise exceptions.AssertionError("Instance %s has an instance key but is not persisted" % mapperutil.instance_str(object)) for prop in mapper.iterate_properties: prop.merge(self, object, merged, dont_load, _recursive) + if dont_load: + merged._state.modified = object._state.modified if key is None: self.save(merged, entity_name=mapper.entity_name) return merged diff --git a/test/orm/merge.py b/test/orm/merge.py index 7f45c56a2d..fd3e0f446c 100644 --- a/test/orm/merge.py +++ b/test/orm/merge.py @@ -117,6 +117,17 @@ class MergeTest(AssertMixin): # no changes; therefore flush should do nothing self.assert_sql_count(testbase.db, go, 0) + # pre merge change + u.user_name='fred3' + sess4 = create_session() + u = sess4.merge(u, dont_load=True) + # post merge change + u.addresses[1].email_address='afafds' + def go(): + sess4.flush() + # changes still flush + self.assert_sql_count(testbase.db, go, 2) + def test_saved_cascade_2(self): """tests a more involved merge""" mapper(Order, orders, properties={ -- 2.47.2