summaryrefslogtreecommitdiff
path: root/tests/ordering
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ordering')
-rw-r--r--tests/ordering/tests.py25
1 files changed, 25 insertions, 0 deletions
diff --git a/tests/ordering/tests.py b/tests/ordering/tests.py
index 421689b9fa..afe2e3c22c 100644
--- a/tests/ordering/tests.py
+++ b/tests/ordering/tests.py
@@ -8,6 +8,7 @@ from django.db.models import (
Count,
DateTimeField,
F,
+ FilteredRelation,
IntegerField,
Max,
OrderBy,
@@ -17,6 +18,7 @@ from django.db.models import (
When,
)
from django.db.models.functions import Length, Upper
+from django.db.utils import DatabaseError
from django.test import TestCase
from .models import (
@@ -395,6 +397,29 @@ class OrderingTests(TestCase):
attrgetter("headline"),
)
+ def test_alias_with_period_shadows_table_name(self):
+ """
+ Aliases with periods are not confused for table names from extra().
+ """
+ Article.objects.update(author=self.author_2)
+ Article.objects.create(
+ headline="Backdated", pub_date=datetime(1900, 1, 1), author=self.author_1
+ )
+ crafted = "ordering_article.pub_date"
+
+ qs = Article.objects.annotate(**{crafted: F("author")}).order_by("-" + crafted)
+ self.assertNotEqual(qs[0].headline, "Backdated")
+
+ relation = FilteredRelation("author")
+ qs2 = Article.objects.annotate(**{crafted: relation}).order_by(crafted)
+ with self.assertRaises(DatabaseError):
+ # Before, unlike F(), which causes ordering expressions to be
+ # replaced by ordinals like n in ORDER BY n, these were ordered by
+ # pub_date instead of author.
+ # The Article model orders by -pk, so sorting on author will place
+ # first any article by author2 instead of the backdated one.
+ self.assertNotEqual(qs2[0].headline, "Backdated")
+
def test_order_by_pk(self):
"""
'pk' works as an ordering option in Meta.