summaryrefslogtreecommitdiff
path: root/test/ext/test_declarative.py
diff options
context:
space:
mode:
Diffstat (limited to 'test/ext/test_declarative.py')
-rw-r--r--test/ext/test_declarative.py63
1 files changed, 62 insertions, 1 deletions
diff --git a/test/ext/test_declarative.py b/test/ext/test_declarative.py
index 9d75333c8..32eae69a9 100644
--- a/test/ext/test_declarative.py
+++ b/test/ext/test_declarative.py
@@ -10,7 +10,8 @@ from sqlalchemy import MetaData, Integer, String, ForeignKey, \
from test.lib.schema import Table, Column
from sqlalchemy.orm import relationship, create_session, class_mapper, \
joinedload, configure_mappers, backref, clear_mappers, \
- polymorphic_union, deferred, column_property
+ polymorphic_union, deferred, column_property, composite,\
+ Session
from test.lib.testing import eq_
from sqlalchemy.util import classproperty
from test.orm._base import ComparableEntity, MappedTest
@@ -895,6 +896,66 @@ class DeclarativeTest(DeclarativeTestBase):
self.assert_sql_count(testing.db, go, 1)
+ def test_composite_inline(self):
+ class AddressComposite(ComparableEntity):
+ def __init__(self, street, state):
+ self.street = street
+ self.state = state
+ def __composite_values__(self):
+ return [self.street, self.state]
+
+ class User(Base, ComparableEntity):
+ __tablename__ = 'user'
+ id = Column(Integer, primary_key=True,
+ test_needs_autoincrement=True)
+ address = composite(AddressComposite,
+ Column('street', String(50)),
+ Column('state', String(2)),
+ )
+
+ Base.metadata.create_all()
+ sess = Session()
+ sess.add(User(
+ address=AddressComposite('123 anywhere street',
+ 'MD')
+ ))
+ sess.commit()
+ eq_(
+ sess.query(User).all(),
+ [User(address=AddressComposite('123 anywhere street',
+ 'MD'))]
+ )
+
+ def test_composite_separate(self):
+ class AddressComposite(ComparableEntity):
+ def __init__(self, street, state):
+ self.street = street
+ self.state = state
+ def __composite_values__(self):
+ return [self.street, self.state]
+
+ class User(Base, ComparableEntity):
+ __tablename__ = 'user'
+ id = Column(Integer, primary_key=True,
+ test_needs_autoincrement=True)
+ street = Column(String(50))
+ state = Column(String(2))
+ address = composite(AddressComposite,
+ street, state)
+
+ Base.metadata.create_all()
+ sess = Session()
+ sess.add(User(
+ address=AddressComposite('123 anywhere street',
+ 'MD')
+ ))
+ sess.commit()
+ eq_(
+ sess.query(User).all(),
+ [User(address=AddressComposite('123 anywhere street',
+ 'MD'))]
+ )
+
def test_mapping_to_join(self):
users = Table('users', Base.metadata,
Column('id', Integer, primary_key=True)