mirror of
				https://github.com/django/django.git
				synced 2025-10-31 09:41:08 +00:00 
			
		
		
		
	[1.9.x] Fixed #25772 -- Corrected __len lookup on ArrayField for empty arrays.
Backport of 88fc9e2826 from master
			
			
This commit is contained in:
		| @@ -202,7 +202,11 @@ class ArrayLenTransform(Transform): | ||||
|  | ||||
|     def as_sql(self, compiler, connection): | ||||
|         lhs, params = compiler.compile(self.lhs) | ||||
|         return 'array_length(%s, 1)' % lhs, params | ||||
|         # Distinguish NULL and empty arrays | ||||
|         return ( | ||||
|             'CASE WHEN %(lhs)s IS NULL THEN NULL ELSE ' | ||||
|             'coalesce(array_length(%(lhs)s, 1), 0) END' | ||||
|         ) % {'lhs': lhs}, params | ||||
|  | ||||
|  | ||||
| class IndexTransform(Transform): | ||||
|   | ||||
| @@ -11,3 +11,6 @@ Bugfixes | ||||
|  | ||||
| * Fixed incorrect ``unique_together`` field name generation by ``inspectdb`` | ||||
|   (:ticket:`25274`). | ||||
|  | ||||
| * Corrected ``__len`` query lookup on ``ArrayField`` for empty arrays | ||||
|   (:ticket:`25772`). | ||||
|   | ||||
| @@ -231,6 +231,13 @@ class TestQuerying(PostgreSQLTestCase): | ||||
|             self.objs[0:3] | ||||
|         ) | ||||
|  | ||||
|     def test_len_empty_array(self): | ||||
|         obj = NullableIntegerArrayModel.objects.create(field=[]) | ||||
|         self.assertSequenceEqual( | ||||
|             NullableIntegerArrayModel.objects.filter(field__len=0), | ||||
|             [obj] | ||||
|         ) | ||||
|  | ||||
|     def test_slice(self): | ||||
|         self.assertSequenceEqual( | ||||
|             NullableIntegerArrayModel.objects.filter(field__0_1=[2]), | ||||
|   | ||||
		Reference in New Issue
	
	Block a user