]> git.ipfire.org Git - thirdparty/sqlalchemy/sqlalchemy.git/commitdiff
added some reference tests for the any() situation
authorMike Bayer <mike_mp@zzzcomputing.com>
Thu, 1 May 2008 15:17:07 +0000 (15:17 +0000)
committerMike Bayer <mike_mp@zzzcomputing.com>
Thu, 1 May 2008 15:17:07 +0000 (15:17 +0000)
test/orm/query.py

index 9245d43f348cdf1b0453a4aa8864f8d7036f1d50..c3032182c4778dd857faa0cd3aafe7a45e367359 100644 (file)
@@ -349,6 +349,32 @@ class FilterTest(QueryTest):
 
         assert [User(id=9)] == sess.query(User).filter(User.addresses.any(email_address='fred@fred.com')).all()
 
+    @testing.fails_on_everything_except()
+    def test_broken_any_1(self):
+        sess = create_session()
+        
+        # overcorrelates
+        assert [User(id=7), User(id=8)] == sess.query(User).join("addresses").filter(~User.addresses.any(Address.email_address=='fred@fred.com')).all()
+
+    def test_broken_any_2(self):
+        sess = create_session()
+        
+        # works, filter is before the join
+        assert [User(id=7), User(id=8)] == sess.query(User).filter(~User.addresses.any(Address.email_address=='fred@fred.com')).join("addresses", aliased=True).all()
+        
+    def test_broken_any_3(self):
+        sess = create_session()
+        
+        # works, filter is after the join, but reset_joinpoint is called, removing aliasing
+        assert [User(id=7), User(id=8)] == sess.query(User).join("addresses", aliased=True).filter(Address.email_address != None).reset_joinpoint().filter(~User.addresses.any(email_address='fred@fred.com')).all()
+
+    @testing.fails_on_everything_except()
+    def test_broken_any_4(self):
+        sess = create_session()
+        
+        # filter is after the join, gets aliased.  in 0.5 any(), has() and not contains() are shielded from aliasing
+        assert [User(id=10)] == sess.query(User).outerjoin("addresses", aliased=True).filter(~User.addresses.any()).all()
+
     @testing.unsupported('maxdb') # can core
     def test_has(self):
         sess = create_session()