]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
plus synonyms accessed as string
authorMike Bayer <mike_mp@zzzcomputing.com>
Tue, 20 Sep 2011 02:13:24 +0000 (22:13 -0400)
committerMike Bayer <mike_mp@zzzcomputing.com>
Tue, 20 Sep 2011 02:13:24 +0000 (22:13 -0400)
lib/sqlalchemy/orm/interfaces.py
lib/sqlalchemy/orm/properties.py
lib/sqlalchemy/orm/util.py
test/orm/test_mapper.py
test/orm/test_query.py

index eec885aca867dc4c5229e4f656a684b34fe38d83..893d6ea2a717428457cf828c93f2a9cbe381c6ff 100644 (file)
@@ -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(
index 813c655fa238c1a50146b9dc1b8407f7fc7e6940..b9ec20c86826ac3f6b7419dd8dd24bdcdb075064 100644 (file)
@@ -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(
index f901d0a0be9f2e73f7a0be32da19604dfaa62cb9..ef0615762677e56eca3a23a05cf7607ca4232709 100644 (file)
@@ -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,
index 306ca56a7789066867e55e670404903afc61ecfb..78cc142fff8b86c79536f55b171ccfd81d21e1da 100644 (file)
@@ -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,
index 4ce8104e454291c5aa6a77ef5ac101289a808830..39a9b5137dd98ea3e70c8b1d9eca7ce7ef7f44b4 100644 (file)
@@ -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'],