mirror of
https://github.com/django/django.git
synced 2025-10-23 21:59:11 +00:00
Fixed #31133 -- Fixed crash when subtracting against a subquery annotation.
The subtract_temporals() database operation was not handling expressions
returning SQL params in mixed database types.
Regression in 3543129822.
Thanks Reupen Shah for the report.
This commit is contained in:
committed by
Mariusz Felisiak
parent
372eaa395f
commit
9bcbcd599a
@@ -1426,6 +1426,16 @@ class FTimeDeltaTests(TestCase):
|
||||
))
|
||||
self.assertIsNone(queryset.first().shifted)
|
||||
|
||||
@skipUnlessDBFeature('supports_temporal_subtraction')
|
||||
def test_date_subquery_subtraction(self):
|
||||
subquery = Experiment.objects.filter(pk=OuterRef('pk')).values('completed')
|
||||
queryset = Experiment.objects.annotate(
|
||||
difference=ExpressionWrapper(
|
||||
subquery - F('completed'), output_field=models.DurationField(),
|
||||
),
|
||||
).filter(difference=datetime.timedelta())
|
||||
self.assertTrue(queryset.exists())
|
||||
|
||||
@skipUnlessDBFeature('supports_temporal_subtraction')
|
||||
def test_time_subtraction(self):
|
||||
Time.objects.create(time=datetime.time(12, 30, 15, 2345))
|
||||
@@ -1452,6 +1462,17 @@ class FTimeDeltaTests(TestCase):
|
||||
))
|
||||
self.assertIsNone(queryset.first().shifted)
|
||||
|
||||
@skipUnlessDBFeature('supports_temporal_subtraction')
|
||||
def test_time_subquery_subtraction(self):
|
||||
Time.objects.create(time=datetime.time(12, 30, 15, 2345))
|
||||
subquery = Time.objects.filter(pk=OuterRef('pk')).values('time')
|
||||
queryset = Time.objects.annotate(
|
||||
difference=ExpressionWrapper(
|
||||
subquery - F('time'), output_field=models.DurationField(),
|
||||
),
|
||||
).filter(difference=datetime.timedelta())
|
||||
self.assertTrue(queryset.exists())
|
||||
|
||||
@skipUnlessDBFeature('supports_temporal_subtraction')
|
||||
def test_datetime_subtraction(self):
|
||||
under_estimate = [
|
||||
@@ -1476,6 +1497,16 @@ class FTimeDeltaTests(TestCase):
|
||||
))
|
||||
self.assertIsNone(queryset.first().shifted)
|
||||
|
||||
@skipUnlessDBFeature('supports_temporal_subtraction')
|
||||
def test_datetime_subquery_subtraction(self):
|
||||
subquery = Experiment.objects.filter(pk=OuterRef('pk')).values('start')
|
||||
queryset = Experiment.objects.annotate(
|
||||
difference=ExpressionWrapper(
|
||||
subquery - F('start'), output_field=models.DurationField(),
|
||||
),
|
||||
).filter(difference=datetime.timedelta())
|
||||
self.assertTrue(queryset.exists())
|
||||
|
||||
@skipUnlessDBFeature('supports_temporal_subtraction')
|
||||
def test_datetime_subtraction_microseconds(self):
|
||||
delta = datetime.timedelta(microseconds=8999999999999999)
|
||||
|
||||
Reference in New Issue
Block a user