Show query count on database page

This commit is contained in:
Simon Willison 2026-05-26 13:54:47 -07:00
commit 5dca2dc9be
3 changed files with 24 additions and 7 deletions

View file

@ -59,7 +59,7 @@
{% endfor %}
</ul>
{% if queries_more %}
<p><a href="{{ urls.database(database) }}/-/queries">View all queries</a></p>
<p><a href="{{ urls.database(database) }}/-/queries">View {{ "{:,}".format(queries_count) }} quer{% if queries_count == 1 %}y{% else %}ies{% endif %}</a></p>
{% endif %}
{% endif %}

View file

@ -102,6 +102,11 @@ class DatabaseView(View):
)
canned_queries = queries_page["queries"]
queries_more = queries_page["has_more"]
queries_count = (
await datasette.count_queries(database, actor=request.actor)
if queries_more
else len(canned_queries)
)
async def database_actions():
links = []
@ -134,6 +139,7 @@ class DatabaseView(View):
"views": sql_views,
"queries": canned_queries,
"queries_more": queries_more,
"queries_count": queries_count,
"allow_execute_sql": allow_execute_sql,
"table_columns": (
await _table_columns(datasette, database) if allow_execute_sql else {}
@ -168,6 +174,7 @@ class DatabaseView(View):
views=sql_views,
queries=canned_queries,
queries_more=queries_more,
queries_count=queries_count,
allow_execute_sql=allow_execute_sql,
table_columns=(
await _table_columns(datasette, database)
@ -219,6 +226,7 @@ class DatabaseContext(Context):
queries_more: bool = field(
metadata={"help": "Boolean indicating if more saved queries are available"}
)
queries_count: int = field(metadata={"help": "Count of visible saved queries"})
allow_execute_sql: bool = field(
metadata={"help": "Boolean indicating if custom SQL can be executed"}
)
@ -775,7 +783,15 @@ async def _query_create_analysis_data(datasette, db, sql, actor):
async def _query_create_form_context(
datasette, request, db, *, sql="", name="", title="", description="", is_private=True
datasette,
request,
db,
*,
sql="",
name="",
title="",
description="",
is_private=True,
):
analysis_data = await _query_create_analysis_data(datasette, db, sql, request.actor)
return {

View file

@ -458,9 +458,10 @@ async def test_database_page_query_preview_is_limited():
assert html_response.status_code == 200
assert "Demo query 05" in html_response.text
assert "Demo query 06" not in html_response.text
assert 'href="/data/-/queries"' in html_response.text
assert '<a href="/data/-/queries">View 25 queries</a>' in html_response.text
assert len(json_response.json()["queries"]) == 5
assert json_response.json()["queries_more"] is True
assert json_response.json()["queries_count"] == 25
@pytest.mark.asyncio
@ -1017,7 +1018,7 @@ async def test_create_query_ui_and_arbitrary_sql_save_link():
'<input id="query-url-slug" name="name" type="text" value="">'
in create_response.text
)
assert 'function slugify(value)' in create_response.text
assert "function slugify(value)" in create_response.text
assert 'data-analyze-url="/data/-/queries/analyze"' in create_response.text
assert "setupSqlParameterRefresh" in create_response.text
assert "renderParameters: false" in create_response.text
@ -1039,9 +1040,9 @@ async def test_create_query_ui_and_arbitrary_sql_save_link():
)
== 2
)
assert create_response.text.index('value="Save query"') < create_response.text.index(
"<h2>Query operations</h2>"
)
assert create_response.text.index(
'value="Save query"'
) < create_response.text.index("<h2>Query operations</h2>")
assert blank_create_response.status_code == 200
assert (
'<div class="query-create-analysis" id="query-create-analysis-section" hidden>'