]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
Fixed adding of deferred or othe column properties to a declarative class.
authorMichael Trier <mtrier@gmail.com>
Sat, 18 Apr 2009 15:35:07 +0000 (15:35 +0000)
committerMichael Trier <mtrier@gmail.com>
Sat, 18 Apr 2009 15:35:07 +0000 (15:35 +0000)
CHANGES
lib/sqlalchemy/ext/declarative.py
test/ext/declarative.py

diff --git a/CHANGES b/CHANGES
index af211a99013a0cfd41337c4be67e9cc823d3b60e..a2dfd7af74a3989ad933b80da8261dc636ddf115 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -68,6 +68,11 @@ CHANGES
     - Corrected the float type so that it correctly maps to a
       SLFloat type when being reflected. [ticket:1273]
 
+- extensions
+
+    - Fixed adding of deferred or other column properties to a
+      declarative class. [ticket:1379]
+
 0.5.3
 =====
 - orm
index 084ec2699abc3eec48af61d963ac3ffa829c646c..e22928b487e797c422cbc98e366237a3e240176b 100644 (file)
@@ -552,6 +552,12 @@ class DeclarativeMeta(type):
                 _undefer_column_name(key, value)
                 cls.__table__.append_column(value)
                 cls.__mapper__.add_property(key, value)
+            elif isinstance(value, ColumnProperty):
+                for col in value.columns:
+                    if isinstance(col, Column) and col.table is None:
+                        _undefer_column_name(key, col)
+                        cls.__table__.append_column(col)
+                cls.__mapper__.add_property(key, value)
             elif isinstance(value, MapperProperty):
                 cls.__mapper__.add_property(key, _deferred_relation(cls, value))
             else:
index c6d4fe681471c642f0064ad074335acd2c2e13b5..0c835641fb9189086d61f71a12633749a00e5ec0 100644 (file)
@@ -4,7 +4,7 @@ from sqlalchemy.ext import declarative as decl
 from sqlalchemy import exc
 from testlib import sa, testing
 from testlib.sa import MetaData, Table, Column, Integer, String, ForeignKey, ForeignKeyConstraint, asc, Index
-from testlib.sa.orm import relation, create_session, class_mapper, eagerload, compile_mappers, backref, clear_mappers, polymorphic_union
+from testlib.sa.orm import relation, create_session, class_mapper, eagerload, compile_mappers, backref, clear_mappers, polymorphic_union, deferred
 from testlib.testing import eq_
 from orm._base import ComparableEntity, MappedTest
 
@@ -1082,6 +1082,29 @@ class DeclarativeInheritanceTest(DeclarativeTestBase):
             Engineer(name="vlad", primary_language="cobol") 
         )
 
+    def test_add_deferred(self):
+        class Person(Base, ComparableEntity):
+            __tablename__ = 'people'
+            id = Column('id', Integer, primary_key=True)
+
+        Person.name = deferred(Column(String(10)))
+
+        Base.metadata.create_all()
+        sess = create_session()
+        p = Person(name='ratbert')
+
+        sess.add(p)
+        sess.flush()
+        sess.expunge_all()
+        eq_(
+            sess.query(Person).all(),
+            [
+                Person(name='ratbert')
+            ]
+        )
+        person = sess.query(Person).filter(Person.name == 'ratbert').one()
+        assert 'name' not in person.__dict__
+
     def test_single_fksonsub(self):
         """test single inheritance with a foreign key-holding column on a subclass.