From: Mike Bayer Date: Thu, 24 May 2012 15:12:39 +0000 (-0400) Subject: get __clause_element__ for remote()/foreign() annotation, [ticket:2493] X-Git-Tag: rel_0_8_0b1~410 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=e2c612d24d714ba2a4fb805d9e7bdb9023dc0af8;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git get __clause_element__ for remote()/foreign() annotation, [ticket:2493] --- 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"""