summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Bayer <mike_mp@zzzcomputing.com>2008-05-09 19:20:49 +0000
committerMike Bayer <mike_mp@zzzcomputing.com>2008-05-09 19:20:49 +0000
commit6840fc6bb635f78df85077beeaaca52d31836aff (patch)
treed165f49f262dca0dc349b5130fa5f91f8177e459
parent84ec085d474f5f8029a52d7f6a24deda56bdfa87 (diff)
downloadsqlalchemy-6840fc6bb635f78df85077beeaaca52d31836aff.tar.gz
- more portable tests for eager/inheritance joins
- bumped 2.4 call count for profile test_select - don't need initialize_properties() during reentrant compile() call (for now)
-rw-r--r--lib/sqlalchemy/orm/mapper.py4
-rw-r--r--test/orm/inheritance/query.py34
-rw-r--r--test/profiling/compiler.py2
3 files changed, 10 insertions, 30 deletions
diff --git a/lib/sqlalchemy/orm/mapper.py b/lib/sqlalchemy/orm/mapper.py
index 6d79f6cd5..f8cf4e6ed 100644
--- a/lib/sqlalchemy/orm/mapper.py
+++ b/lib/sqlalchemy/orm/mapper.py
@@ -347,7 +347,9 @@ class Mapper(object):
_COMPILE_MUTEX.acquire()
global _already_compiling
if _already_compiling:
- self.__initialize_properties()
+ # re-entrance to compile() occurs rarely, when a class-mapped construct is
+ # used within a ForeignKey, something that is possible
+ # when using the declarative layer
return
_already_compiling = True
try:
diff --git a/test/orm/inheritance/query.py b/test/orm/inheritance/query.py
index 6a40efc4a..30694d8c3 100644
--- a/test/orm/inheritance/query.py
+++ b/test/orm/inheritance/query.py
@@ -187,40 +187,14 @@ def make_test(select_type):
def test_primary_eager_aliasing(self):
sess = create_session()
- # assert the SQL itself here to ensure no over-joining is taking place
- if select_type == '':
- self.assert_compile(
- sess.query(Person).options(eagerload(Engineer.machines)).limit(2).offset(1).with_labels().statement,
- "SELECT people.person_id AS people_person_id, people.company_id AS people_company_id, "\
- "people.name AS people_name, people.type AS people_type FROM people ORDER BY people.person_id LIMIT 2 OFFSET 1",
- dialect=default.DefaultDialect())
-
def go():
self.assertEquals(sess.query(Person).options(eagerload(Engineer.machines))[1:3].all(), all_employees[1:3])
self.assert_sql_count(testing.db, go, {'':6, 'Polymorphic':3}.get(select_type, 4))
sess = create_session()
- if select_type == '':
- self.assert_compile(
- sess.query(Person).with_polymorphic('*').options(eagerload(Engineer.machines)).limit(2).offset(1).with_labels().statement,
- "SELECT anon_1.people_person_id AS anon_1_people_person_id, anon_1.people_company_id AS anon_1_people_company_id, "\
- "anon_1.people_name AS anon_1_people_name, anon_1.people_type AS anon_1_people_type, anon_1.engineers_person_id AS "\
- "anon_1_engineers_person_id, anon_1.engineers_status AS anon_1_engineers_status, anon_1.engineers_engineer_name AS "\
- "anon_1_engineers_engineer_name, anon_1.engineers_primary_language AS anon_1_engineers_primary_language, "\
- "anon_1.managers_person_id AS anon_1_managers_person_id, anon_1.managers_status AS anon_1_managers_status, "\
- "anon_1.managers_manager_name AS anon_1_managers_manager_name, anon_1.boss_boss_id AS anon_1_boss_boss_id, "\
- "anon_1.boss_golf_swing AS anon_1_boss_golf_swing, machines_1.machine_id AS machines_1_machine_id, machines_1.name AS "\
- "machines_1_name, machines_1.engineer_id AS machines_1_engineer_id FROM (SELECT people.person_id AS people_person_id, "\
- "people.company_id AS people_company_id, people.name AS people_name, people.type AS people_type, engineers.person_id AS "\
- "engineers_person_id, engineers.status AS engineers_status, engineers.engineer_name AS engineers_engineer_name, "\
- "engineers.primary_language AS engineers_primary_language, managers.person_id AS managers_person_id, managers.status "\
- "AS managers_status, managers.manager_name AS managers_manager_name, boss.boss_id AS boss_boss_id, boss.golf_swing "\
- "AS boss_golf_swing FROM people LEFT OUTER JOIN engineers ON people.person_id = engineers.person_id LEFT OUTER JOIN "\
- "managers ON people.person_id = managers.person_id LEFT OUTER JOIN boss ON managers.person_id = boss.boss_id ORDER BY "\
- "people.person_id LIMIT 2 OFFSET 1) AS anon_1 LEFT OUTER JOIN machines AS machines_1 ON anon_1.engineers_person_id = "\
- "machines_1.engineer_id ORDER BY anon_1.people_person_id, machines_1.machine_id",
- dialect=default.DefaultDialect())
+ # assert the JOINs dont over JOIN
+ assert sess.query(Person).with_polymorphic('*').options(eagerload(Engineer.machines)).limit(2).offset(1).with_labels().statement.count().scalar() == 2
def go():
self.assertEquals(sess.query(Person).with_polymorphic('*').options(eagerload(Engineer.machines))[1:3].all(), all_employees[1:3])
@@ -802,6 +776,10 @@ class SelfReferentialM2MTest(ORMTest, AssertsCompiledSQL):
"(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 = secondary_1.left_id ORDER BY anon_1.child1_id"
, dialect=default.DefaultDialect())
+
+ # another way to check
+ assert q.limit(1).with_labels().statement.count().scalar() == 1
+
assert q.first() is c1
if __name__ == "__main__":
diff --git a/test/profiling/compiler.py b/test/profiling/compiler.py
index cd0a29ee3..a62c63c6b 100644
--- a/test/profiling/compiler.py
+++ b/test/profiling/compiler.py
@@ -23,7 +23,7 @@ class CompileTest(TestBase, AssertsExecutionResults):
def test_update(self):
t1.update().compile()
- @profiling.function_call_count(228, versions={'2.3': 153, '2.4':116})
+ @profiling.function_call_count(228, versions={'2.3': 153, '2.4':122})
def test_select(self):
s = select([t1], t1.c.c2==t2.c.c1)
s.compile()