From 58e917fe2de2f4b643f3bf2468f51aef27e67747 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Tue, 4 Jun 2013 16:48:14 -0400 Subject: [PATCH] - eager loads - two suite of SQL assertions converted --- lib/sqlalchemy/orm/strategies.py | 3 +- lib/sqlalchemy/orm/util.py | 2 +- test/orm/inheritance/test_relationship.py | 98 +++++++++-------------- test/orm/test_eager_relations.py | 32 ++++---- 4 files changed, 54 insertions(+), 81 deletions(-) diff --git a/lib/sqlalchemy/orm/strategies.py b/lib/sqlalchemy/orm/strategies.py index baaf4cb929..cabfb35b96 100644 --- a/lib/sqlalchemy/orm/strategies.py +++ b/lib/sqlalchemy/orm/strategies.py @@ -1089,8 +1089,7 @@ class JoinedLoader(AbstractRelationshipLoader): to_adapt = with_poly_info.entity else: to_adapt = orm_util.AliasedClass(self.mapper, - use_mapper_path=True, - flat=True) + use_mapper_path=True) clauses = orm_util.ORMAdapter( to_adapt, equivalents=self.mapper._equivalent_columns, diff --git a/lib/sqlalchemy/orm/util.py b/lib/sqlalchemy/orm/util.py index 3da6e89e3f..c21e7eace9 100644 --- a/lib/sqlalchemy/orm/util.py +++ b/lib/sqlalchemy/orm/util.py @@ -493,7 +493,7 @@ class AliasedClass(object): """ def __init__(self, cls, alias=None, name=None, - flat=False, + flat=True, adapt_on_names=False, # TODO: None for default here? with_polymorphic_mappers=(), diff --git a/test/orm/inheritance/test_relationship.py b/test/orm/inheritance/test_relationship.py index 809884f525..d8cf5ebd8a 100644 --- a/test/orm/inheritance/test_relationship.py +++ b/test/orm/inheritance/test_relationship.py @@ -569,15 +569,14 @@ class SelfReferentialM2MTest(fixtures.MappedTest, AssertsCompiledSQL): self.assert_compile(q.limit(1).with_labels().statement, "SELECT anon_1.child1_id AS anon_1_child1_id, anon_1.parent_id " "AS anon_1_parent_id, anon_1.parent_cls AS anon_1_parent_cls, " - "anon_2.child2_id AS anon_2_child2_id, anon_2.parent_id AS " - "anon_2_parent_id, anon_2.parent_cls AS anon_2_parent_cls FROM " + "child2_1.id AS child2_1_id, parent_1.id AS " + "parent_1_id, parent_1.cls AS parent_1_cls FROM " "(SELECT child1.id AS child1_id, parent.id AS parent_id, " "parent.cls AS parent_cls FROM parent JOIN child1 ON parent.id = " "child1.id LIMIT :param_1) AS anon_1 LEFT OUTER JOIN secondary " "AS secondary_1 ON anon_1.parent_id = secondary_1.right_id LEFT " - "OUTER JOIN (SELECT parent.id AS parent_id, parent.cls AS " - "parent_cls, child2.id AS child2_id FROM parent JOIN child2 ON " - "parent.id = child2.id) AS anon_2 ON anon_2.parent_id = " + "OUTER JOIN (parent AS parent_1 JOIN child2 AS child2_1 ON " + "parent_1.id = child2_1.id) ON parent_1.id = " "secondary_1.left_id", {'param_1':1}, dialect=default.DefaultDialect()) @@ -1224,18 +1223,13 @@ class SubClassToSubClassMultiTest(AssertsCompiledSQL, fixtures.MappedTest): join(Sub2.ep1). join(Sub2.ep2), "SELECT parent.id AS parent_id, parent.data AS parent_data " - "FROM parent JOIN (SELECT base1.id AS base1_id, " - "base1.data AS base1_data, sub1.id AS sub1_id, " - "sub1.parent_id AS sub1_parent_id, sub1.subdata AS sub1_subdata " - "FROM base1 JOIN sub1 ON base1.id = sub1.id) AS anon_1 " - "ON parent.id = anon_1.sub1_parent_id JOIN " - "(SELECT base2.id AS base2_id, base2.base1_id AS base2_base1_id, " - "base2.data AS base2_data, sub2.id AS sub2_id, " - "sub2.subdata AS sub2_subdata FROM base2 JOIN sub2 " - "ON base2.id = sub2.id) AS anon_2 " - "ON anon_1.base1_id = anon_2.base2_base1_id " - "JOIN ep1 ON anon_2.base2_id = ep1.base2_id " - "JOIN ep2 ON anon_2.base2_id = ep2.base2_id" + "FROM parent JOIN (base1 JOIN sub1 ON base1.id = sub1.id) " + "ON parent.id = sub1.parent_id JOIN " + "(base2 JOIN sub2 " + "ON base2.id = sub2.id) " + "ON base1.id = base2.base1_id " + "JOIN ep1 ON base2.id = ep1.base2_id " + "JOIN ep2 ON base2.id = ep2.base2_id" ) def test_two(self): @@ -1248,16 +1242,11 @@ class SubClassToSubClassMultiTest(AssertsCompiledSQL, fixtures.MappedTest): s.query(Parent).join(Parent.sub1). join(s2a, Sub1.sub2), "SELECT parent.id AS parent_id, parent.data AS parent_data " - "FROM parent JOIN (SELECT base1.id AS base1_id, " - "base1.data AS base1_data, sub1.id AS sub1_id, " - "sub1.parent_id AS sub1_parent_id, sub1.subdata AS sub1_subdata " - "FROM base1 JOIN sub1 ON base1.id = sub1.id) AS anon_1 " - "ON parent.id = anon_1.sub1_parent_id JOIN " - "(SELECT base2.id AS base2_id, base2.base1_id AS base2_base1_id, " - "base2.data AS base2_data, sub2.id AS sub2_id, " - "sub2.subdata AS sub2_subdata FROM base2 JOIN sub2 " - "ON base2.id = sub2.id) AS anon_2 " - "ON anon_1.base1_id = anon_2.base2_base1_id" + "FROM parent JOIN (base1 JOIN sub1 ON base1.id = sub1.id) " + "ON parent.id = sub1.parent_id JOIN " + "(base2 AS base2_1 JOIN sub2 AS sub2_1 " + "ON base2_1.id = sub2_1.id) " + "ON base1.id = base2_1.base1_id" ) def test_three(self): @@ -1269,13 +1258,11 @@ class SubClassToSubClassMultiTest(AssertsCompiledSQL, fixtures.MappedTest): join(Sub2.ep1).\ join(Sub2.ep2), "SELECT base1.id AS base1_id, base1.data AS base1_data " - "FROM base1 JOIN (SELECT base2.id AS base2_id, base2.base1_id " - "AS base2_base1_id, base2.data AS base2_data, sub2.id AS sub2_id, " - "sub2.subdata AS sub2_subdata FROM base2 JOIN sub2 " - "ON base2.id = sub2.id) AS anon_1 ON base1.id = " - "anon_1.base2_base1_id " - "JOIN ep1 ON anon_1.base2_id = ep1.base2_id " - "JOIN ep2 ON anon_1.base2_id = ep2.base2_id" + "FROM base1 JOIN (base2 JOIN sub2 " + "ON base2.id = sub2.id) ON base1.id = " + "base2.base1_id " + "JOIN ep1 ON base2.id = ep1.base2_id " + "JOIN ep2 ON base2.id = ep2.base2_id" ) def test_four(self): @@ -1308,11 +1295,8 @@ class SubClassToSubClassMultiTest(AssertsCompiledSQL, fixtures.MappedTest): "sub2.subdata AS sub2_subdata " "FROM base2 JOIN sub2 ON base2.id = sub2.id " "JOIN " - "(SELECT base1.id AS base1_id, base1.data AS base1_data, " - "sub1.id AS sub1_id, sub1.parent_id AS sub1_parent_id, " - "sub1.subdata AS sub1_subdata " - "FROM base1 JOIN sub1 ON base1.id = sub1.id) AS anon_1 " - "ON anon_1.sub1_id = base2.base1_id " + "(base1 JOIN sub1 ON base1.id = sub1.id) " + "ON sub1.id = base2.base1_id " "JOIN ep1 ON base2.id = ep1.base2_id " "JOIN ep2 ON base2.id = ep2.base2_id" ) @@ -1352,28 +1336,22 @@ class SubClassToSubClassMultiTest(AssertsCompiledSQL, fixtures.MappedTest): join(Sub2.ep2), "SELECT anon_1.parent_id AS anon_1_parent_id, " "anon_1.parent_data AS anon_1_parent_data, " - "anon_1.anon_2_sub2_id AS anon_1_anon_2_sub2_id, " - "anon_1.anon_2_base2_id AS anon_1_anon_2_base2_id, " - "anon_1.anon_2_base2_base1_id AS anon_1_anon_2_base2_base1_id, " - "anon_1.anon_2_base2_data AS anon_1_anon_2_base2_data, " - "anon_1.anon_2_sub2_subdata AS anon_1_anon_2_sub2_subdata " + "anon_1.sub2_id AS anon_1_sub2_id, " + "anon_1.base2_id AS anon_1_base2_id, " + "anon_1.base2_base1_id AS anon_1_base2_base1_id, " + "anon_1.base2_data AS anon_1_base2_data, " + "anon_1.sub2_subdata AS anon_1_sub2_subdata " "FROM (SELECT parent.id AS parent_id, parent.data AS parent_data, " - "anon_2.sub2_id AS anon_2_sub2_id, " - "anon_2.base2_id AS anon_2_base2_id, " - "anon_2.base2_base1_id AS anon_2_base2_base1_id, " - "anon_2.base2_data AS anon_2_base2_data, " - "anon_2.sub2_subdata AS anon_2_sub2_subdata " - "FROM parent JOIN (SELECT base1.id AS base1_id, " - "base1.data AS base1_data, sub1.id AS sub1_id, " - "sub1.parent_id AS sub1_parent_id, sub1.subdata AS sub1_subdata " - "FROM base1 JOIN sub1 ON base1.id = sub1.id) AS anon_3 " - "ON parent.id = anon_3.sub1_parent_id JOIN " - "(SELECT base2.id AS base2_id, base2.base1_id AS base2_base1_id, " - "base2.data AS base2_data, sub2.id AS sub2_id, " + "sub2.id AS sub2_id, " + "base2.id AS base2_id, " + "base2.base1_id AS base2_base1_id, " + "base2.data AS base2_data, " "sub2.subdata AS sub2_subdata " - "FROM base2 JOIN sub2 ON base2.id = sub2.id) AS anon_2 " - "ON anon_3.base1_id = anon_2.base2_base1_id) AS anon_1 " - "JOIN ep1 ON anon_1.anon_2_base2_id = ep1.base2_id " - "JOIN ep2 ON anon_1.anon_2_base2_id = ep2.base2_id" + "FROM parent JOIN (base1 JOIN sub1 ON base1.id = sub1.id) " + "ON parent.id = sub1.parent_id JOIN " + "(base2 JOIN sub2 ON base2.id = sub2.id) " + "ON base1.id = base2.base1_id) AS anon_1 " + "JOIN ep1 ON anon_1.base2_id = ep1.base2_id " + "JOIN ep2 ON anon_1.base2_id = ep2.base2_id" ) diff --git a/test/orm/test_eager_relations.py b/test/orm/test_eager_relations.py index eb2ecce631..d59d515f49 100644 --- a/test/orm/test_eager_relations.py +++ b/test/orm/test_eager_relations.py @@ -2634,16 +2634,15 @@ class CyclicalInheritingEagerTestTwo(fixtures.DeclarativeMappedTest, self.assert_compile( s.query(Director).options(joinedload('*')), "SELECT director.id AS director_id, persistent.id AS persistent_id, " - "director.name AS director_name, anon_1.movie_id AS anon_1_movie_id, " - "anon_1.persistent_id AS anon_1_persistent_id, " - "anon_1.movie_director_id AS anon_1_movie_director_id, " - "anon_1.movie_title AS anon_1_movie_title " + "director.name AS director_name, movie_1.id AS movie_1_id, " + "persistent_1.id AS persistent_1_id, " + "movie_1.director_id AS movie_1_director_id, " + "movie_1.title AS movie_1_title " "FROM persistent JOIN director ON persistent.id = director.id " "LEFT OUTER JOIN " - "(SELECT persistent.id AS persistent_id, movie.id AS movie_id, " - "movie.director_id AS movie_director_id, movie.title AS movie_title " - "FROM persistent JOIN movie ON persistent.id = movie.id) AS anon_1 " - "ON director.id = anon_1.movie_director_id" + "(persistent AS persistent_1 JOIN movie AS movie_1 " + "ON persistent_1.id = movie_1.id) " + "ON director.id = movie_1.director_id" ) def test_integrate(self): @@ -2706,15 +2705,12 @@ class CyclicalInheritingEagerTestThree(fixtures.DeclarativeMappedTest, sess.query(PersistentObject).options(joinedload(Director.other, join_depth=1)), "SELECT persistent.id AS persistent_id, director.id AS director_id, " "director.other_id AS director_other_id, " - "director.name AS director_name, anon_1.persistent_id AS " - "anon_1_persistent_id, anon_1.director_id AS anon_1_director_id, " - "anon_1.director_other_id AS anon_1_director_other_id, " - "anon_1.director_name AS anon_1_director_name " + "director.name AS director_name, persistent_1.id AS " + "persistent_1_id, director_1.id AS director_1_id, " + "director_1.other_id AS director_1_other_id, " + "director_1.name AS director_1_name " "FROM persistent LEFT OUTER JOIN director ON director.id = persistent.id " - "LEFT OUTER JOIN (SELECT persistent.id AS persistent_id, " - "director.id AS director_id, director.other_id AS director_other_id, " - "director.name AS director_name " - "FROM persistent LEFT OUTER JOIN director ON " - "director.id = persistent.id) " - "AS anon_1 ON director.other_id = anon_1.persistent_id" + "LEFT OUTER JOIN (persistent AS persistent_1 LEFT OUTER JOIN director AS director_1 ON " + "director_1.id = persistent_1.id) " + "ON director.other_id = persistent_1.id" ) -- 2.47.3