]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
refresh_instance becomes an InstanceState so boolean tests are OK
authorMike Bayer <mike_mp@zzzcomputing.com>
Mon, 10 Dec 2007 18:08:16 +0000 (18:08 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Mon, 10 Dec 2007 18:08:16 +0000 (18:08 +0000)
lib/sqlalchemy/orm/mapper.py
lib/sqlalchemy/orm/query.py
lib/sqlalchemy/orm/session.py
lib/sqlalchemy/orm/strategies.py

index 8386abb9ff69cd531c1c50eae20e853cc0a71315..0f5dbaaf5468293f7ca7dd8901873fe24ad1e2c2 100644 (file)
@@ -1325,7 +1325,7 @@ class Mapper(object):
 
         # determine identity key 
         if refresh_instance:
-            identitykey = refresh_instance._instance_key
+            identitykey = refresh_instance.dict['_instance_key']
         else:
             identitykey = self.identity_key_from_row(row)
         (session_identity_map, local_identity_map) = (context.session.identity_map, context.identity_map)
index 0dbfdc611e135c874ca80f633a3d888fa27a9d08..9515ba77fb29ed4cfa26e288f65b166dcf5883b3 100644 (file)
@@ -790,11 +790,11 @@ class Query(object):
         for instance in context.identity_map.values():
             context.attributes.get(('populating_mapper', id(instance)), object_mapper(instance))._post_instance(context, instance)
 
-        if context.refresh_instance and context.only_load_props and context.refresh_instance._instance_key in context.identity_map:
+        if context.refresh_instance and context.only_load_props and context.refresh_instance.dict['_instance_key'] in context.identity_map:
             # if refreshing partial instance, do special state commit
             # affecting only the refreshed attributes
-            context.refresh_instance._state.commit(context.only_load_props)
-            del context.identity_map[context.refresh_instance._instance_key]
+            context.refresh_instance.commit(context.only_load_props)
+            del context.identity_map[context.refresh_instance.dict['_instance_key']]
             
         # store new stuff in the identity map
         for instance in context.identity_map.values():
@@ -836,7 +836,7 @@ class Query(object):
         try:
             if lockmode is not None:
                 q = q.with_lockmode(lockmode)
-            q = q._select_context_options(populate_existing=refresh_instance is not None, version_check=(lockmode is not None), only_load_props=only_load_props, refresh_instance=refresh_instance)
+            q = q._select_context_options(populate_existing=bool(refresh_instance), version_check=(lockmode is not None), only_load_props=only_load_props, refresh_instance=refresh_instance)
             q._order_by = None
             # call using all() to avoid LIMIT compilation complexity
             return q.all()[0]
@@ -1198,7 +1198,7 @@ class Query(object):
             self._populate_existing = populate_existing
         if version_check:
             self._version_check = version_check
-        if refresh_instance is not None:
+        if refresh_instance:
             self._refresh_instance = refresh_instance
         if only_load_props:
             self._only_load_props = util.Set(only_load_props)
index 435ed4c5d7098073b07eeb9e31fc5b2f1fdf4b6f..3111b699d5888dc6e1698dabdab7ed808cff78f1 100644 (file)
@@ -740,7 +740,7 @@ class Session(object):
 
         self._validate_persistent(instance)
             
-        if self.query(instance.__class__)._get(instance._instance_key, refresh_instance=instance, only_load_props=attribute_names) is None:
+        if self.query(instance.__class__)._get(instance._instance_key, refresh_instance=instance._state, only_load_props=attribute_names) is None:
             raise exceptions.InvalidRequestError("Could not refresh instance '%s'" % mapperutil.instance_str(instance))
 
     def expire(self, instance, attribute_names=None):
@@ -1115,7 +1115,7 @@ def _expire_state(state, attribute_names):
     
     if state.trigger is None:
         def load_attributes(instance, attribute_names):
-            if object_session(instance).query(instance.__class__)._get(instance._instance_key, refresh_instance=instance, only_load_props=attribute_names) is None:
+            if object_session(instance).query(instance.__class__)._get(instance._instance_key, refresh_instance=instance._state, only_load_props=attribute_names) is None:
                 raise exceptions.InvalidRequestError("Could not refresh instance '%s'" % mapperutil.instance_str(instance))
         state.trigger = load_attributes
         
index d46271f9e24bb1f28c8e04fe1c38a3246e1895c0..027a323939766da4e4f2cabf003908d3850bd577 100644 (file)
@@ -205,10 +205,10 @@ class DeferredColumnLoader(LoaderStrategy):
 
             if create_statement is None:
                 ident = instance._instance_key[1]
-                session.query(localparent)._get(None, ident=ident, only_load_props=group, refresh_instance=instance)
+                session.query(localparent)._get(None, ident=ident, only_load_props=group, refresh_instance=instance._state)
             else:
                 statement, params = create_statement(instance)
-                session.query(localparent).from_statement(statement).params(params)._get(None, only_load_props=group, refresh_instance=instance)
+                session.query(localparent).from_statement(statement).params(params)._get(None, only_load_props=group, refresh_instance=instance._state)
             return attributes.ATTR_WAS_SET
         return lazyload