Simplify by removing _query_display_names_sql

See https://github.com/simonw/datasette/pull/2732/changes#r3293627533
This commit is contained in:
Simon Willison 2026-05-23 16:42:29 -07:00
commit 1590444fa3
3 changed files with 12 additions and 52 deletions

View file

@ -2,33 +2,6 @@ from datasette import hookimpl
from datasette.jump import JumpSQL
async def _query_display_names_sql(datasette, actor):
selects = []
params = {}
for database_name in datasette.databases.keys():
queries = await datasette.get_canned_queries(database_name, actor)
for query_name, query in queries.items():
display_name = query.get("title") if isinstance(query, dict) else None
if not display_name:
continue
index = len(selects)
params[f"display_database_{index}"] = database_name
params[f"display_query_{index}"] = query_name
params[f"display_name_{index}"] = str(display_name)
selects.append(f"""
SELECT
:display_database_{index} AS database_name,
:display_query_{index} AS query_name,
:display_name_{index} AS display_name
""")
if not selects:
return (
"SELECT NULL AS database_name, NULL AS query_name, NULL AS display_name WHERE 0",
{},
)
return " UNION ALL ".join(selects), params
@hookimpl
def jump_items_sql(datasette, actor, request):
async def inner():
@ -41,9 +14,6 @@ def jump_items_sql(datasette, actor, request):
query_sql, query_params = await datasette.allowed_resources_sql(
action="view-query", actor=actor
)
query_display_names_sql, query_display_names_params = (
await _query_display_names_sql(datasette, actor)
)
return [
JumpSQL(
sql=f"""
@ -92,9 +62,6 @@ def jump_items_sql(datasette, actor, request):
sql=f"""
WITH allowed_queries AS (
{query_sql}
),
query_display_names AS (
{query_display_names_sql}
)
SELECT
'query' AS type,
@ -103,16 +70,13 @@ def jump_items_sql(datasette, actor, request):
NULL AS url,
allowed_queries.parent AS database_name,
allowed_queries.child AS resource_name,
allowed_queries.parent || ' ' || allowed_queries.child || ' ' || COALESCE(query_display_names.display_name, '') AS search_text,
allowed_queries.parent || ' ' || allowed_queries.child AS search_text,
30 AS sort_key,
'datasette' AS source,
query_display_names.display_name AS display_name
NULL AS display_name
FROM allowed_queries
LEFT JOIN query_display_names
ON query_display_names.database_name = allowed_queries.parent
AND query_display_names.query_name = allowed_queries.child
""",
params={**query_params, **query_display_names_params},
params=query_params,
),
]

View file

@ -152,10 +152,8 @@ Shows currently attached databases. `Databases example <https://latest.datasette
Returns a JSON list of items that the current actor has permission to view for Datasette's jump menu. By default this includes visible databases, tables, views and canned queries, and plugins can contribute additional items.
The endpoint supports a ``?q=`` query parameter for filtering items by name.
Canned queries with a configured ``title`` also include a ``display_name`` in
their results, and can be found by searching for that title. Plugins can provide
the same extra field from ``jump_items_sql`` by returning a ``display_name``
column.
Plugins can provide an optional ``display_name`` field from
``jump_items_sql`` by returning a ``display_name`` column.
`Jump example <https://latest.datasette.io/-/jump>`_:
@ -177,7 +175,6 @@ column.
},
{
"name": "fixtures: recent_releases",
"display_name": "Recent Datasette releases",
"url": "/fixtures/recent_releases",
"type": "query",
"description": "Canned query"

View file

@ -89,10 +89,6 @@ async def test_jump_searches_tables_databases_views_and_canned_queries(ds_for_ju
assert ("view", "content: comment_summary") in matches_by_type_and_name
assert ("query", "content: recent_comments") in matches_by_type_and_name
assert matches_by_type_and_name[("database", "content")]["url"] == "/content"
assert (
matches_by_type_and_name[("query", "content: recent_comments")]["display_name"]
== "Recent comments"
)
assert (
matches_by_type_and_name[("query", "content: recent_comments")]["url"]
== "/content/recent_comments"
@ -100,17 +96,20 @@ async def test_jump_searches_tables_databases_views_and_canned_queries(ds_for_ju
@pytest.mark.asyncio
async def test_jump_searches_and_displays_canned_query_titles(ds_for_jump):
async def test_jump_uses_canned_query_names_not_titles(ds_for_jump):
response = await ds_for_jump.client.get(
"/-/jump.json?q=datasette", actor={"id": "user"}
)
assert response.status_code == 200
data = response.json()
assert response.json()["matches"] == []
assert data["matches"] == [
response = await ds_for_jump.client.get(
"/-/jump.json?q=release", actor={"id": "user"}
)
assert response.status_code == 200
assert response.json()["matches"] == [
{
"name": "content: release_notes",
"display_name": "Recent Datasette releases",
"url": "/content/release_notes",
"type": "query",
"description": "Canned query",