From 0875860acd322dce0d947d800889e7aae1376c10 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Fri, 21 Dec 2007 21:55:20 +0000 Subject: some rudimentary fixes to get instance-level deferreds/lazy loads to transfer over on merge() --- lib/sqlalchemy/orm/properties.py | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'lib/sqlalchemy') diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index aadac5122..e0bf2e6e8 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -65,8 +65,13 @@ class ColumnProperty(StrategizedProperty): getattr(state.class_, self.key).impl.set(state, value, None) def merge(self, session, source, dest, dont_load, _recursive): - setattr(dest, self.key, getattr(source, self.key, None)) - + value = attributes.get_as_list(source._state, self.key, passive=True) + if value: + setattr(dest, self.key, value[0]) + else: + # TODO: lazy callable should merge to the new instance + dest._state.expire_attributes([self.key]) + def get_col_value(self, column, value): return value @@ -334,6 +339,8 @@ class PropertyLoader(StrategizedProperty): def merge(self, session, source, dest, dont_load, _recursive): if not "merge" in self.cascade: + # TODO: lazy callable should merge to the new instance + dest._state.expire_attributes([self.key]) return instances = attributes.get_as_list(source._state, self.key, passive=True) if not instances: -- cgit v1.2.1