diff options
| author | Julien Phalip <jphalip@gmail.com> | 2012-04-09 00:43:08 +0000 |
|---|---|---|
| committer | Julien Phalip <jphalip@gmail.com> | 2012-04-09 00:43:08 +0000 |
| commit | 93d1fdb1304ed5b2e5ea2e0f1e84db7fff5eb7fa (patch) | |
| tree | 908a45af91a033e5b0508ed06ab1f73e52a3dff1 /tests | |
| parent | 5c53e30607014163872e89c221b206992a9acfef (diff) | |
Fixed #17877 -- Ensured that extra WHERE clauses get correctly ANDed when they contain OR operations. Thanks to Marek Brzóska for the report, to eleather for the test case and to Adrien Lemaire for the patch.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@17880 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/regressiontests/extra_regress/tests.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/regressiontests/extra_regress/tests.py b/tests/regressiontests/extra_regress/tests.py index 67efb428dd..3fcafef5de 100644 --- a/tests/regressiontests/extra_regress/tests.py +++ b/tests/regressiontests/extra_regress/tests.py @@ -313,3 +313,34 @@ class ExtraRegressTests(TestCase): TestObject.objects.extra(where=["id > %s"], params=[obj.pk]), ['<TestObject: TestObject: first,second,third>'] ) + + def test_regression_17877(self): + """ + Ensure that extra WHERE clauses get correctly ANDed, even when they + contain OR operations. + """ + # Test Case 1: should appear in queryset. + t = TestObject(first='a', second='a', third='a') + t.save() + # Test Case 2: should appear in queryset. + t = TestObject(first='b', second='a', third='a') + t.save() + # Test Case 3: should not appear in queryset, bug case. + t = TestObject(first='a', second='a', third='b') + t.save() + # Test Case 4: should not appear in queryset. + t = TestObject(first='b', second='a', third='b') + t.save() + # Test Case 5: should not appear in queryset. + t = TestObject(first='b', second='b', third='a') + t.save() + # Test Case 6: should not appear in queryset, bug case. + t = TestObject(first='a', second='b', third='b') + t.save() + + self.assertQuerysetEqual( + TestObject.objects.extra( + where=["first = 'a' OR second = 'a'", "third = 'a'"], + ), + ['<TestObject: TestObject: a,a,a>', '<TestObject: TestObject: b,a,a>'] + ) |
