diff options
| author | Simon Charette <charette.s@gmail.com> | 2020-01-02 11:33:01 -0500 |
|---|---|---|
| committer | Mariusz Felisiak <felisiak.mariusz@gmail.com> | 2020-01-03 10:35:08 +0100 |
| commit | 9bcbcd599abac91ea853b2fe10b784ba32df043e (patch) | |
| tree | aede04abf962e71b9e93c6628176aad75f895fa8 /tests | |
| parent | 372eaa395f167c038e546c6be554c96014d40109 (diff) | |
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 35431298226165986ad07e91f9d3aca721ff38ec.
Thanks Reupen Shah for the report.
Diffstat (limited to 'tests')
| -rw-r--r-- | tests/expressions/tests.py | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/tests/expressions/tests.py b/tests/expressions/tests.py index 1e6d4c967c..180153f555 100644 --- a/tests/expressions/tests.py +++ b/tests/expressions/tests.py @@ -1427,6 +1427,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)) queryset = Time.objects.annotate( @@ -1453,6 +1463,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 = [ e.name for e in Experiment.objects.filter(estimated_time__gt=F('end') - F('start')) @@ -1477,6 +1498,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) Experiment.objects.update(end=F('start') + delta) |
