summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/sqlalchemy/orm/properties.py1
-rw-r--r--lib/sqlalchemy/orm/session.py2
-rw-r--r--test/orm/merge.py11
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={