]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
- more portable tests for eager/inheritance joins
authorMike Bayer <mike_mp@zzzcomputing.com>
Fri, 9 May 2008 19:20:49 +0000 (19:20 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Fri, 9 May 2008 19:20:49 +0000 (19:20 +0000)
- bumped 2.4 call count for profile test_select
- don't need initialize_properties() during reentrant compile() call (for now)

lib/sqlalchemy/orm/mapper.py
test/orm/inheritance/query.py
test/profiling/compiler.py

index 6d79f6cd502372bb85750056aacdb7e07f851275..f8cf4e6edc52c50fda2f0046b8f6db2841f38daf 100644 (file)
@@ -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:
index 6a40efc4ac6dd75abf7692c5547b8f9cc0a13447..30694d8c30a4b04c6c3d558bc614741f16d5ba03 100644 (file)
@@ -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__":
index cd0a29ee3d6afa1d8216773824046f21979e5476..a62c63c6b80f0bde2730ec9d2017d1446221270b 100644 (file)
@@ -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()