]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
expire with synonyms [ticket:964]
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 5 Feb 2008 19:41:51 +0000 (19:41 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 5 Feb 2008 19:41:51 +0000 (19:41 +0000)
CHANGES
lib/sqlalchemy/orm/attributes.py
test/orm/expire.py

diff --git a/CHANGES b/CHANGES
index 0b0d3c3ca1524b2c36b071e797f8e684e44f6c43..af9d1d7fb83da18c0517009391a82b3b6baa7b3a 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -188,7 +188,7 @@ CHANGES
         - autoflush for commit() wasn't flushing for simple
           subtransactions.
 
-    - Miscellaneous tickets: [ticket:940]
+    - Miscellaneous tickets: [ticket:940] [ticket:964]
 
 - general
     - Fixed a variety of hidden and some not-so-hidden
index 84c9dfbb635bd7bff07cf68c67a9907a3d9b28f1..8156c441c434244d02e118abde84933223bee491 100644 (file)
@@ -72,6 +72,8 @@ class ProxiedAttribute(InstrumentedAttribute):
     """
     
     class ProxyImpl(object):
+        accepts_scalar_loader = True
+        
         def __init__(self, key):
             self.key = key
         
index 8a01017e41b876ea3c33b4e500be0bf08ced5862..3394c751bd53b90484ce4d1c1ca6bb26d35a3cd7 100644 (file)
@@ -208,7 +208,31 @@ class ExpireTest(FixtureTest):
         sess.expire(u, ['name', 'addresses'])
         assert 'name' not in u.__dict__
         assert 'addresses' not in u.__dict__
-
+    
+    def test_expire_synonym(self):
+        mapper(User, users, properties={
+            'uname':synonym('name')
+        })
+        
+        sess = create_session()
+        u = sess.query(User).get(7)
+        assert 'name' in u.__dict__
+        assert u.uname == u.name
+        
+        sess.expire(u)
+        assert 'name' not in u.__dict__
+        
+        users.update(users.c.id==7).execute(name='jack2')
+        assert u.name == 'jack2'
+        assert u.uname == 'jack2'
+        assert 'name' in u.__dict__
+        
+        # this wont work unless we add API hooks through the attr. system
+        # to provide "expire" behavior on a synonym
+        #sess.expire(u, ['uname'])
+        #users.update(users.c.id==7).execute(name='jack3')
+        #assert u.uname == 'jack3'
+        
     def test_partial_expire(self):
         mapper(Order, orders)