]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
deferred property, checks for NULL primary key components and returns None
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Dec 2005 03:25:43 +0000 (03:25 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 22 Dec 2005 03:25:43 +0000 (03:25 +0000)
lib/sqlalchemy/mapping/properties.py
test/mapper.py

index f3862ddd9db3335be8bdb7b327285cbb8d141d44..922aab453dc92ca6331ab3c99f608e9e31eb6f23 100644 (file)
@@ -80,7 +80,10 @@ class DeferredColumnProperty(ColumnProperty):
         def lazyload():
             clause = sql.and_()
             for primary_key in self.parent.pks_by_table[self.parent.primarytable]:
-                clause.clauses.append(primary_key == self.parent._getattrbycolumn(instance, primary_key))
+                attr = self.parent._getattrbycolumn(instance, primary_key)
+                if not attr:
+                    return None
+                clause.clauses.append(primary_key == attr)
             return sql.select([self.parent.table.c[self.key]], clause).scalar()
         return lazyload
 
index 51751de6f4545d2f1b260b4ef0b942c1f4cff567..bcc6de098c83ee5d6d5a2ed8f9f8593910b97968 100644 (file)
@@ -184,6 +184,9 @@ class DeferredTest(MapperSuperTest):
             'description':deferred(orders.c.description)
         })
         
+        o = Order()
+        self.assert_(o.description is None)
+        
         def go():
             l = m.select()
             o2 = l[2]