From c407a608c38a8d483e77fb950b21995b16fa05f7 Mon Sep 17 00:00:00 2001 From: Mike Bayer Date: Thu, 1 May 2008 15:17:07 +0000 Subject: [PATCH] added some reference tests for the any() situation --- test/orm/query.py | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/test/orm/query.py b/test/orm/query.py index 9245d43f34..c3032182c4 100644 --- a/test/orm/query.py +++ b/test/orm/query.py @@ -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() -- 2.47.3