summaryrefslogtreecommitdiff
path: root/tests/regressiontests
diff options
context:
space:
mode:
Diffstat (limited to 'tests/regressiontests')
-rw-r--r--tests/regressiontests/extra_regress/tests.py31
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>']
+ )