From: Mike Bayer Date: Tue, 20 Sep 2011 02:13:24 +0000 (-0400) Subject: plus synonyms accessed as string X-Git-Tag: rel_0_7_3~44 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=eadcb0e56453c993590ae2b63f861c00e636b463;p=thirdparty%2Fsqlalchemy%2Fsqlalchemy.git plus synonyms accessed as string --- diff --git a/lib/sqlalchemy/orm/interfaces.py b/lib/sqlalchemy/orm/interfaces.py index eec885aca8..893d6ea2a7 100644 --- a/lib/sqlalchemy/orm/interfaces.py +++ b/lib/sqlalchemy/orm/interfaces.py @@ -517,8 +517,8 @@ class PropertyOption(MapperOption): path_element = entity.path_entity mapper = entity.mapper mappers.append(mapper) - if mapper.has_property(token): - prop = mapper.get_property(token) + if hasattr(mapper.class_, token): + prop = getattr(mapper.class_, token).property else: if raiseerr: raise sa_exc.ArgumentError( diff --git a/lib/sqlalchemy/orm/properties.py b/lib/sqlalchemy/orm/properties.py index 813c655fa2..b9ec20c868 100644 --- a/lib/sqlalchemy/orm/properties.py +++ b/lib/sqlalchemy/orm/properties.py @@ -266,9 +266,7 @@ class RelationshipProperty(StrategizedProperty): self.backref = None else: self.backref = backref - @property - def _synonym_resolved_property(self): - return self + def instrument_class(self, mapper): attributes.register_descriptor( diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index f901d0a0be..ef06157626 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -408,7 +408,7 @@ class _ORMJoin(expression.Join): if prop: pj, sj, source, dest, \ - secondary, target_adapter = prop._synonym_resolved_property._create_joins( + secondary, target_adapter = prop._create_joins( source_selectable=adapt_from, dest_selectable=adapt_to, source_polymorphic=True, diff --git a/test/orm/test_mapper.py b/test/orm/test_mapper.py index 306ca56a77..78cc142fff 100644 --- a/test/orm/test_mapper.py +++ b/test/orm/test_mapper.py @@ -1540,8 +1540,6 @@ class ORMLoggingTest(_fixtures.FixtureTest): class OptionsTest(_fixtures.FixtureTest): - @testing.fails_if(lambda: True, "0.7 regression, may not support " - "synonyms for relationship") @testing.fails_on('maxdb', 'FIXME: unknown') def test_synonym_options(self): Address, addresses, users, User = (self.classes.Address, diff --git a/test/orm/test_query.py b/test/orm/test_query.py index 4ce8104e45..39a9b5137d 100644 --- a/test/orm/test_query.py +++ b/test/orm/test_query.py @@ -1836,13 +1836,31 @@ class SynonymTest(QueryTest): ]) self.assert_sql_count(testing.db, go, 1) + def test_options_syn_of_syn_string(self): + User, Order = self.classes.User, self.classes.Order + + s = create_session() + def go(): + result = s.query(User).filter_by(name='jack').\ + options(joinedload('orders_syn_2')).all() + eq_(result, [ + User(id=7, name='jack', orders=[ + Order(description=u'order 1'), + Order(description=u'order 3'), + Order(description=u'order 5') + ]) + ]) + self.assert_sql_count(testing.db, go, 1) + def test_joins(self): - User = self.classes.User + User, Order = self.classes.User, self.classes.Order for j in ( ['orders', 'items'], ['orders_syn', 'items'], + [User.orders_syn, Order.items], ['orders_syn_2', 'items'], + [User.orders_syn_2, 'items'], ['orders', 'items_syn'], ['orders_syn', 'items_syn'], ['orders_syn_2', 'items_syn'],