diff options
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>'] + ) |
