summaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
authorSimon Charette <charette.s@gmail.com>2020-01-02 11:33:01 -0500
committerMariusz Felisiak <felisiak.mariusz@gmail.com>2020-01-03 10:35:08 +0100
commit9bcbcd599abac91ea853b2fe10b784ba32df043e (patch)
treeaede04abf962e71b9e93c6628176aad75f895fa8 /tests
parent372eaa395f167c038e546c6be554c96014d40109 (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.py31
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)