Kaydet (Commit) 88fc9e28 authored tarafından Attila Tovt's avatar Attila Tovt Kaydeden (comit) Tim Graham

Fixed #25772 -- Corrected __len lookup on ArrayField for empty arrays.

üst a3708fda
......@@ -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]),
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment