From: Mike Bayer Date: Sun, 9 Dec 2007 05:24:07 +0000 (+0000) Subject: mapper uses attributes to get non-cached history X-Git-Tag: rel_0_4_2~82 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=d972b5e51b630cf4a08d1d32599ce504d883df24;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git mapper uses attributes to get non-cached history --- diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py index f5e38c1c45..8386abb9ff 100644 --- a/lib/sqlalchemy/orm/mapper.py +++ b/lib/sqlalchemy/orm/mapper.py @@ -998,9 +998,6 @@ class Mapper(object): if self.__should_log_debug: self.__log_debug("detected row switch for identity %s. will update %s, remove %s from transaction" % (instance_key, mapperutil.state_str(state), mapperutil.instance_str(existing))) uowtransaction.set_row_switch(existing) -# if _state_has_identity(state): -# if state.dict['_instance_key'] != instance_key: -# raise exceptions.FlushError("Can't change the identity of instance %s in session (existing identity: %s; new identity: %s)" % (mapperutil.state_str(state), state.dict['_instance_key'], instance_key)) inserted_objects = util.Set() updated_objects = util.Set() @@ -1070,8 +1067,7 @@ class Mapper(object): continue prop = mapper._columntoproperty[col] - (added, unchanged, deleted) = uowtransaction.get_attribute_history(state, prop.key, passive=True, cache=False) - #(added, unchanged, deleted) = attributes.get_history(state, prop.key, passive=True) + (added, unchanged, deleted) = attributes.get_history(state, prop.key, passive=True) if added: if isinstance(added[0], sql.ClauseElement): value_params[col] = added[0] diff --git a/lib/sqlalchemy/orm/unitofwork.py b/lib/sqlalchemy/orm/unitofwork.py index 19642cc9d1..a6bf8df901 100644 --- a/lib/sqlalchemy/orm/unitofwork.py +++ b/lib/sqlalchemy/orm/unitofwork.py @@ -280,13 +280,13 @@ class UOWTransaction(object): self.logger = logging.instance_logger(self, echoflag=session.echo_uow) - def get_attribute_history(self, state, key, passive=True, cache=True): + def get_attribute_history(self, state, key, passive=True): hashkey = ("history", state, key) # cache the objects, not the states; the strong reference here # prevents newly loaded objects from being dereferenced during the # flush process - if cache and hashkey in self.attributes: + if hashkey in self.attributes: (added, unchanged, deleted, cached_passive) = self.attributes[hashkey] # if the cached lookup was "passive" and now we want non-passive, do a non-passive # lookup and re-cache