From 3ec4e739dd4ac3f1dea92cdec858bf491f63d5e8 Mon Sep 17 00:00:00 2001 From: Attila Tovt Date: Sun, 22 Nov 2015 02:59:37 +0200 Subject: [1.8.x] Fixed #25772 -- Corrected __len lookup on ArrayField for empty arrays. Backport of 88fc9e2826044110b7b22577a227f122fe9c1fb5 from master --- django/contrib/postgres/fields/array.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'django/contrib/postgres/fields/array.py') diff --git a/django/contrib/postgres/fields/array.py b/django/contrib/postgres/fields/array.py index 87760613fb..ceac798604 100644 --- a/django/contrib/postgres/fields/array.py +++ b/django/contrib/postgres/fields/array.py @@ -198,7 +198,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): -- cgit v1.3