mirror of
				https://github.com/django/django.git
				synced 2025-10-31 01:25:32 +00:00 
			
		
		
		
	[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:
		
				
					committed by
					
						 Tim Graham
						Tim Graham
					
				
			
			
				
	
			
			
			
						parent
						
							4f0185aac3
						
					
				
				
					commit
					eedf276ed1
				
			| @@ -390,7 +390,7 @@ class CombinedExpression(Expression): | |||||||
|             return DurationExpression(self.lhs, self.connector, self.rhs).as_sql(compiler, connection) |             return DurationExpression(self.lhs, self.connector, self.rhs).as_sql(compiler, connection) | ||||||
|         if (lhs_output and rhs_output and self.connector == self.SUB and |         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() 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) |             return TemporalSubtraction(self.lhs, self.rhs).as_sql(compiler, connection) | ||||||
|         expressions = [] |         expressions = [] | ||||||
|         expression_params = [] |         expression_params = [] | ||||||
|   | |||||||
| @@ -14,3 +14,6 @@ Bugfixes | |||||||
|  |  | ||||||
| * Fixed ``RequestDataTooBig`` and ``TooManyFieldsSent`` exceptions crashing | * Fixed ``RequestDataTooBig`` and ``TooManyFieldsSent`` exceptions crashing | ||||||
|   rather than generating a bad request response (:ticket:`27820`). |   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') |         ).order_by('name') | ||||||
|         self.assertQuerysetEqual(over_estimate, ['e3', 'e4'], lambda e: e.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): |     def test_negative_timedelta_update(self): | ||||||
|         # subtract 30 seconds, 30 minutes, 2 hours and 2 days |         # subtract 30 seconds, 30 minutes, 2 hours and 2 days | ||||||
|         experiments = Experiment.objects.filter(name='e0').annotate( |         experiments = Experiment.objects.filter(name='e0').annotate( | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user