summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorAnssi Kääriäinen <anssi.kaariainen@thl.fi>2015-04-16 08:39:31 +0300
committerTim Graham <timograham@gmail.com>2015-04-16 09:22:00 -0400
commit355c5edd9390caad5725375abca03460805f663b (patch)
tree9f0675086c93bd49a7dfd99f8389bd5947623239 /tests
parent8ca9bc5ec326c0b01634dac264a9ba6f0857483e (diff)
Fixed #24605 -- Fixed incorrect reference to alias in subquery.
Thanks to charettes and priidukull for investigating the issue, and to kurevin for the report.
Diffstat (limited to 'tests')
-rw-r--r--tests/queries/models.py15
-rw-r--r--tests/queries/tests.py36
2 files changed, 45 insertions, 6 deletions
diff --git a/tests/queries/models.py b/tests/queries/models.py
index bc540756fb..5d63ae9ea8 100644
--- a/tests/queries/models.py
+++ b/tests/queries/models.py
@@ -713,3 +713,18 @@ class Ticket23605B(models.Model):
class Ticket23605C(models.Model):
field_c0 = models.FloatField()
+
+
+# db_table names have capital letters to ensure they are quoted in queries.
+class Individual(models.Model):
+ alive = models.BooleanField()
+
+ class Meta:
+ db_table = 'Individual'
+
+
+class RelatedIndividual(models.Model):
+ related = models.ForeignKey(Individual, related_name='related_individual')
+
+ class Meta:
+ db_table = 'RelatedIndividual'
diff --git a/tests/queries/tests.py b/tests/queries/tests.py
index f688d0ed90..b4ea646fde 100644
--- a/tests/queries/tests.py
+++ b/tests/queries/tests.py
@@ -21,16 +21,16 @@ from .models import (
FK1, X, Annotation, Article, Author, BaseA, Book, CategoryItem,
CategoryRelationship, Celebrity, Channel, Chapter, Child, ChildObjectA,
Classroom, Company, Cover, CustomPk, CustomPkTag, Detail, DumbCategory,
- Eaten, Employment, ExtraInfo, Fan, Food, Identifier, Item, Job,
+ Eaten, Employment, ExtraInfo, Fan, Food, Identifier, Individual, Item, Job,
JobResponsibilities, Join, LeafA, LeafB, LoopX, LoopZ, ManagedModel,
Member, ModelA, ModelB, ModelC, ModelD, MyObject, NamedCategory, Node,
Note, NullableName, Number, ObjectA, ObjectB, ObjectC, OneToOneCategory,
Order, OrderItem, Page, Paragraph, Person, Plaything, PointerA, Program,
- ProxyCategory, ProxyObjectA, ProxyObjectB, Ranking, Related, RelatedObject,
- Report, ReservedName, Responsibility, School, SharedConnection,
- SimpleCategory, SingleObject, SpecialCategory, Staff, StaffUser, Student,
- Tag, Task, Ticket21203Child, Ticket21203Parent, Ticket23605A, Ticket23605B,
- Ticket23605C, TvChef, Valid,
+ ProxyCategory, ProxyObjectA, ProxyObjectB, Ranking, Related,
+ RelatedIndividual, RelatedObject, Report, ReservedName, Responsibility,
+ School, SharedConnection, SimpleCategory, SingleObject, SpecialCategory,
+ Staff, StaffUser, Student, Tag, Task, Ticket21203Child, Ticket21203Parent,
+ Ticket23605A, Ticket23605B, Ticket23605C, TvChef, Valid,
)
@@ -3690,3 +3690,27 @@ class TestInvalidValuesRelation(TestCase):
Annotation.objects.filter(tag='abc')
with self.assertRaises(ValueError):
Annotation.objects.filter(tag__in=[123, 'abc'])
+
+
+class TestTicket24605(TestCase):
+ def test_ticket_24605(self):
+ """
+ Subquery table names should be quoted.
+ """
+ i1 = Individual.objects.create(alive=True)
+ RelatedIndividual.objects.create(related=i1)
+ i2 = Individual.objects.create(alive=False)
+ RelatedIndividual.objects.create(related=i2)
+ i3 = Individual.objects.create(alive=True)
+ i4 = Individual.objects.create(alive=False)
+
+ self.assertQuerysetEqual(
+ Individual.objects.filter(Q(alive=False), Q(related_individual__isnull=True)),
+ [i4], lambda x: x
+ )
+ self.assertQuerysetEqual(
+ Individual.objects.exclude(
+ Q(alive=False), Q(related_individual__isnull=True)
+ ).order_by('pk'),
+ [i1, i2, i3], lambda x: x
+ )