From e2c612d24d714ba2a4fb805d9e7bdb9023dc0af8 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 24 May 2012 11:12:39 -0400 Subject: [PATCH] get __clause_element__ for remote()/foreign() annotation, [ticket:2493] --- lib/sqlalchemy/orm/relationships.py | 4 ++-- test/ext/test_declarative.py | 23 +++++++++++++++++++++++ 2 files changed, 25 insertions(+), 2 deletions(-) diff --git a/lib/sqlalchemy/orm/relationships.py b/lib/sqlalchemy/orm/relationships.py index 55c5071df1..0fcf04e6e6 100644 --- a/lib/sqlalchemy/orm/relationships.py +++ b/lib/sqlalchemy/orm/relationships.py @@ -66,7 +66,7 @@ def remote(expr): * :func:`.remote_foreign` """ - return _annotate_columns(expr, {"remote":True}) + return _annotate_columns(expression._clause_element_as_expr(expr), {"remote":True}) def foreign(expr): """Annotate a portion of a primaryjoin expression @@ -78,7 +78,7 @@ def foreign(expr): """ - return _annotate_columns(expr, {"foreign":True}) + return _annotate_columns(expression._clause_element_as_expr(expr), {"foreign":True}) def remote_foreign(expr): """Annotate a portion of a primaryjoin expression diff --git a/test/ext/test_declarative.py b/test/ext/test_declarative.py index 1d9f7f39bd..36cd598abb 100644 --- a/test/ext/test_declarative.py +++ b/test/ext/test_declarative.py @@ -266,6 +266,29 @@ class DeclarativeTest(DeclarativeTestBase): "does not have a mapped column named " "'__table__'", configure_mappers) + def test_string_w_pj_annotations(self): + + class User(Base, fixtures.ComparableEntity): + __tablename__ = 'users' + id = Column(Integer, primary_key=True, + test_needs_autoincrement=True) + name = Column(String(50)) + class Address(Base, fixtures.ComparableEntity): + + __tablename__ = 'addresses' + id = Column(Integer, primary_key=True, + test_needs_autoincrement=True) + email = Column(String(50)) + user_id = Column(Integer) + user = relationship("User", + primaryjoin="remote(User.id)==foreign(Address.user_id)" + ) + + eq_( + Address.user.property._join_condition.local_remote_pairs, + [(Address.__table__.c.user_id, User.__table__.c.id)] + ) + def test_string_dependency_resolution_no_magic(self): """test that full tinkery expressions work as written""" -- 2.47.3