Fix for arraycontains bug, closes #1239

This commit is contained in:
Simon Willison 2021-02-22 16:22:47 -08:00
commit 726f781c50
2 changed files with 10 additions and 2 deletions

View file

@ -150,7 +150,7 @@ class Filters:
"arraycontains", "arraycontains",
"array contains", "array contains",
"""rowid in ( """rowid in (
select {t}.rowid from {t}, json_each({t}.{c}) j select {t}.rowid from {t}, json_each([{t}].[{c}]) j
where j.value = :{p} where j.value = :{p}
)""", )""",
'{c} contains "{v}"', '{c} contains "{v}"',
@ -159,7 +159,7 @@ class Filters:
"arraynotcontains", "arraynotcontains",
"array does not contain", "array does not contain",
"""rowid not in ( """rowid not in (
select {t}.rowid from {t}, json_each({t}.{c}) j select {t}.rowid from {t}, json_each([{t}].[{c}]) j
where j.value = :{p} where j.value = :{p}
)""", )""",
'{c} does not contain "{v}"', '{c} does not contain "{v}"',

View file

@ -56,6 +56,14 @@ import pytest
# Not in, and JSON array not in # Not in, and JSON array not in
((("foo__notin", "1,2,3"),), ["foo not in (:p0, :p1, :p2)"], ["1", "2", "3"]), ((("foo__notin", "1,2,3"),), ["foo not in (:p0, :p1, :p2)"], ["1", "2", "3"]),
((("foo__notin", "[1,2,3]"),), ["foo not in (:p0, :p1, :p2)"], [1, 2, 3]), ((("foo__notin", "[1,2,3]"),), ["foo not in (:p0, :p1, :p2)"], [1, 2, 3]),
# JSON arraycontains
(
(("Availability+Info__arraycontains", "yes"),),
[
"rowid in (\n select table.rowid from table, json_each([table].[Availability+Info]) j\n where j.value = :p0\n )"
],
["yes"],
),
], ],
) )
def test_build_where(args, expected_where, expected_params): def test_build_where(args, expected_where, expected_params):