Skip to content

Commit

Permalink
JSON faceting now suggested even if column has blank strings, closes #…
Browse files Browse the repository at this point in the history
  • Loading branch information
simonw committed Mar 1, 2021
1 parent cc6774c commit 47eb885
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 3 deletions.
11 changes: 8 additions & 3 deletions datasette/facets.py
Original file line number Diff line number Diff line change
Expand Up @@ -279,6 +279,7 @@ async def suggest(self):
suggested_facet_sql = """
select distinct json_type({column})
from ({sql})
where {column} is not null and {column} != ''
""".format(
column=escape_sqlite(column), sql=self.sql
)
Expand All @@ -298,9 +299,13 @@ async def suggest(self):
v[0]
for v in await self.ds.execute(
self.database,
"select {column} from ({sql}) where {column} is not null and json_array_length({column}) > 0 limit 100".format(
column=escape_sqlite(column), sql=self.sql
),
(
"select {column} from ({sql}) "
"where {column} is not null "
"and {column} != '' "
"and json_array_length({column}) > 0 "
"limit 100"
).format(column=escape_sqlite(column), sql=self.sql),
self.params,
truncate=False,
custom_time_limit=self.ds.setting(
Expand Down
22 changes: 22 additions & 0 deletions tests/test_facets.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
from datasette.app import Datasette
from datasette.database import Database
from datasette.facets import ColumnFacet, ArrayFacet, DateFacet
from datasette.utils.asgi import Request
from datasette.utils import detect_json1
Expand Down Expand Up @@ -325,3 +327,23 @@ async def test_date_facet_results(app_client):
"truncated": False,
}
} == buckets


@pytest.mark.asyncio
async def test_json_array_with_blanks_and_nulls():
ds = Datasette([], memory=True)
db = ds.add_database(Database(ds, memory_name="test_json_array"))
await db.execute_write("create table foo(json_column text)", block=True)
for value in ('["a", "b", "c"]', '["a", "b"]', "", None):
await db.execute_write(
"insert into foo (json_column) values (?)", [value], block=True
)
response = await ds.client.get("/test_json_array/foo.json")
data = response.json()
assert data["suggested_facets"] == [
{
"name": "json_column",
"type": "array",
"toggle_url": "http://localhost/test_json_array/foo.json?_facet_array=json_column",
}
]

0 comments on commit 47eb885

Please sign in to comment.