summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Trier <mtrier@gmail.com>2009-04-18 15:35:07 +0000
committerMichael Trier <mtrier@gmail.com>2009-04-18 15:35:07 +0000
commit7bb91d034f2460b180381f835a487854a1d96451 (patch)
tree28912c71fe7e72f3f278514165eace203bf5f2a9
parent33b3360e68a1f5395d09858001fdd4295461663b (diff)
downloadsqlalchemy-7bb91d034f2460b180381f835a487854a1d96451.tar.gz
Fixed adding of deferred or othe column properties to a declarative class.
-rw-r--r--CHANGES5
-rw-r--r--lib/sqlalchemy/ext/declarative.py6
-rw-r--r--test/ext/declarative.py25
3 files changed, 35 insertions, 1 deletions
diff --git a/CHANGES b/CHANGES
index af211a990..a2dfd7af7 100644
--- 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
diff --git a/lib/sqlalchemy/ext/declarative.py b/lib/sqlalchemy/ext/declarative.py
index 084ec2699..e22928b48 100644
--- a/lib/sqlalchemy/ext/declarative.py
+++ b/lib/sqlalchemy/ext/declarative.py
@@ -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:
diff --git a/test/ext/declarative.py b/test/ext/declarative.py
index c6d4fe681..0c835641f 100644
--- a/test/ext/declarative.py
+++ b/test/ext/declarative.py
@@ -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.