summaryrefslogtreecommitdiff
path: root/test/ext/declarative
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2013-07-02 18:02:20 -0400
committerMike Bayer <mike_mp@zzzcomputing.com>2013-07-02 18:02:20 -0400
commit0e219f2eff8954e20d8e3cdae59431da2676b6f4 (patch)
treec558aadf71b61e30f7d8a60161594da97127539b /test/ext/declarative
parentfaa2b43c6ccaaefd90a37512fed1bb5b75c133b8 (diff)
downloadsqlalchemy-0e219f2eff8954e20d8e3cdae59431da2676b6f4.tar.gz
ORM descriptors such as hybrid properties can now be referenced
by name in a string argument used with ``order_by``, ``primaryjoin``, or similar in :func:`.relationship`, in addition to column-bound attributes. [ticket:2761]
Diffstat (limited to 'test/ext/declarative')
-rw-r--r--test/ext/declarative/test_basic.py39
1 files changed, 37 insertions, 2 deletions
diff --git a/test/ext/declarative/test_basic.py b/test/ext/declarative/test_basic.py
index ad2970b70..540f1623f 100644
--- a/test/ext/declarative/test_basic.py
+++ b/test/ext/declarative/test_basic.py
@@ -21,7 +21,10 @@ from sqlalchemy.testing.util import gc_collect
Base = None
-class DeclarativeTestBase(fixtures.TestBase, testing.AssertsExecutionResults):
+class DeclarativeTestBase(fixtures.TestBase,
+ testing.AssertsExecutionResults,
+ testing.AssertsCompiledSQL):
+ __dialect__ = 'default'
def setup(self):
global Base
Base = decl.declarative_base(testing.db)
@@ -289,7 +292,39 @@ class DeclarativeTest(DeclarativeTestBase):
foo.rel = u1
assert foo.rel == u1
- def test_string_dependency_resolution_two(self):
+ def test_string_dependency_resolution_orm_descriptor(self):
+ from sqlalchemy.ext.hybrid import hybrid_property
+
+ class User(Base):
+ __tablename__ = 'user'
+ id = Column(Integer, primary_key=True)
+ firstname = Column(String(50))
+ lastname = Column(String(50))
+ game_id = Column(Integer, ForeignKey('game.id'))
+
+ @hybrid_property
+ def fullname(self):
+ return self.firstname + " " + self.lastname
+
+ class Game(Base):
+ __tablename__ = 'game'
+ id = Column(Integer, primary_key=True)
+ name = Column(String(50))
+ users = relationship("User", order_by="User.fullname")
+
+ s = Session()
+ self.assert_compile(
+ s.query(Game).options(joinedload(Game.users)),
+ "SELECT game.id AS game_id, game.name AS game_name, "
+ "user_1.id AS user_1_id, user_1.firstname AS user_1_firstname, "
+ "user_1.lastname AS user_1_lastname, "
+ "user_1.game_id AS user_1_game_id "
+ "FROM game LEFT OUTER JOIN \"user\" AS user_1 ON game.id = "
+ "user_1.game_id ORDER BY "
+ "user_1.firstname || :firstname_1 || user_1.lastname"
+ )
+
+ def test_string_dependency_resolution_no_table(self):
class User(Base, fixtures.ComparableEntity):
__tablename__ = 'users'