diff options
| author | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-11-02 18:05:06 +0000 |
|---|---|---|
| committer | Mike Bayer <mike_mp@zzzcomputing.com> | 2007-11-02 18:05:06 +0000 |
| commit | d355ea021dc51f4765524ec24f78dd03a7be8d8a (patch) | |
| tree | 7dcc351468f5912ab45ef17ac46af36a2942c29e | |
| parent | 4161271a8c44c2392d8fc09a91391d6b0619dc9c (diff) | |
| download | sqlalchemy-d355ea021dc51f4765524ec24f78dd03a7be8d8a.tar.gz | |
- extra merge test
- merge with dont_load also propagates _state.modified
| -rw-r--r-- | lib/sqlalchemy/orm/properties.py | 1 | ||||
| -rw-r--r-- | lib/sqlalchemy/orm/session.py | 2 | ||||
| -rw-r--r-- | test/orm/merge.py | 11 |
3 files changed, 13 insertions, 1 deletions
diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 1e6be1f7d..f2a60315c 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 30e97eba7..0b5744778 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 7f45c56a2..fd3e0f446 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={ |
