mirror of
https://github.com/simonw/datasette.git
synced 2026-06-04 08:07:01 +02:00
Simplify by removing _query_display_names_sql
See https://github.com/simonw/datasette/pull/2732/changes#r3293627533
This commit is contained in:
parent
09ccab97cc
commit
1590444fa3
3 changed files with 12 additions and 52 deletions
|
|
@ -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,
|
||||
),
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -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",
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue