[1.11.x] Fixed #27828 -- Fixed a crash when subtracting Integer/DurationField from DateField on Oracle/PostgreSQL.
Backport of d5088f838d
from master
This commit is contained in:
parent
4f0185aac3
commit
eedf276ed1
|
@ -390,7 +390,7 @@ class CombinedExpression(Expression):
|
|||
return DurationExpression(self.lhs, self.connector, self.rhs).as_sql(compiler, connection)
|
||||
if (lhs_output and rhs_output and self.connector == self.SUB and
|
||||
lhs_output.get_internal_type() in {'DateField', 'DateTimeField', 'TimeField'} and
|
||||
lhs_output.get_internal_type() == lhs_output.get_internal_type()):
|
||||
lhs_output.get_internal_type() == rhs_output.get_internal_type()):
|
||||
return TemporalSubtraction(self.lhs, self.rhs).as_sql(compiler, connection)
|
||||
expressions = []
|
||||
expression_params = []
|
||||
|
|
|
@ -14,3 +14,6 @@ Bugfixes
|
|||
|
||||
* Fixed ``RequestDataTooBig`` and ``TooManyFieldsSent`` exceptions crashing
|
||||
rather than generating a bad request response (:ticket:`27820`).
|
||||
|
||||
* Fixed a crash on Oracle and PostgreSQL when subtracting ``DurationField``
|
||||
or ``IntegerField`` from ``DateField`` (:ticket:`27828`).
|
||||
|
|
|
@ -1187,6 +1187,12 @@ class FTimeDeltaTests(TestCase):
|
|||
).order_by('name')
|
||||
self.assertQuerysetEqual(over_estimate, ['e3', 'e4'], lambda e: e.name)
|
||||
|
||||
def test_date_minus_duration(self):
|
||||
more_than_4_days = Experiment.objects.filter(
|
||||
assigned__lt=F('completed') - Value(datetime.timedelta(days=4), output_field=models.DurationField())
|
||||
)
|
||||
self.assertQuerysetEqual(more_than_4_days, ['e3', 'e4'], lambda e: e.name)
|
||||
|
||||
def test_negative_timedelta_update(self):
|
||||
# subtract 30 seconds, 30 minutes, 2 hours and 2 days
|
||||
experiments = Experiment.objects.filter(name='e0').annotate(
|
||||
|
|
Loading…
Reference in New Issue