]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- fix to deferred so that load operation doesnt mistakenly occur when only
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 30 Jan 2007 22:04:53 +0000 (22:04 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 30 Jan 2007 22:04:53 +0000 (22:04 +0000)
PK col attributes are set

CHANGES
lib/sqlalchemy/orm/strategies.py
test/orm/mapper.py

diff --git a/CHANGES b/CHANGES
index 0bba9d1884a836aaaa6f411054294e89db80da60..38474189e36a66331696f0b0992091fbe86a5a55 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -17,6 +17,8 @@
   relationships, specifically between polymorphic mappers.
   - fixed bug where cascade operations incorrectly included deleted collection
   items in the cascade [ticket:445]
+  - fix to deferred so that load operation doesnt mistakenly occur when only
+  PK col attributes are set
 - oracle:
   - when returning "rowid" as the ORDER BY column or in use with ROW_NUMBER OVER,
   oracle dialect checks the selectable its being applied to and will switch to 
index d8d9a9c4706ee33021fd6e012831bda40d9182c6..50a2ea27d2eecf7c4833d5f3b5f6e40ecbb86ce8 100644 (file)
@@ -73,6 +73,10 @@ class DeferredColumnLoader(LoaderStrategy):
         def lazyload():
             if self._should_log_debug:
                 self.logger.debug("deferred load %s group %s" % (mapperutil.attribute_str(instance, self.key), str(self.group)))
+
+            if not mapper.has_identity(instance):
+                return None
+
             try:
                 pk = self.parent.pks_by_table[self.columns[0].table]
             except KeyError:
index 0ad00f8ad45eb69f4403b8bc603384b0dc633abb..479d484539c97207984015e96e2744376863f9f0 100644 (file)
@@ -659,7 +659,36 @@ class DeferredTest(MapperSuperTest):
             ("SELECT orders.order_id AS orders_order_id, orders.user_id AS orders_user_id, orders.isopen AS orders_isopen FROM orders ORDER BY %s" % orderby, {}),
             ("SELECT orders.description AS orders_description FROM orders WHERE orders.order_id = :orders_order_id", {'orders_order_id':3})
         ])
-    
+
+    def testunsaved(self):
+        """test that deferred loading doesnt kick in when just PK cols are set"""
+        m = mapper(Order, orders, properties={
+            'description':deferred(orders.c.description)
+        })
+        
+        sess = create_session()
+        o = Order()
+        sess.save(o)
+        o.order_id = 7
+        def go():
+            o.description = "some description"
+        self.assert_sql_count(testbase.db, go, 0)
+
+    def testunsavedgroup(self):
+        """test that deferred loading doesnt kick in when just PK cols are set"""
+        m = mapper(Order, orders, properties={
+            'description':deferred(orders.c.description, group='primary'),
+            'opened':deferred(orders.c.isopen, group='primary')
+        })
+
+        sess = create_session()
+        o = Order()
+        sess.save(o)
+        o.order_id = 7
+        def go():
+            o.description = "some description"
+        self.assert_sql_count(testbase.db, go, 0)
+        
     def testsave(self):
         m = mapper(Order, orders, properties={
             'description':deferred(orders.c.description)