Store query options as JSON

Refs #2735
This commit is contained in:
Simon Willison 2026-05-25 09:41:32 -07:00
commit e0d39ba69f
5 changed files with 143 additions and 54 deletions

View file

@ -1,3 +1,5 @@
import json
import pytest
from datasette.app import Datasette
@ -25,18 +27,12 @@ async def test_queries_internal_table_schema():
"title",
"description",
"description_html",
"hide_sql",
"fragment",
"options",
"parameters",
"is_write",
"published",
"source",
"owner_id",
"on_success_message",
"on_success_message_sql",
"on_success_redirect",
"on_error_message",
"on_error_redirect",
"created_at",
"updated_at",
]
@ -62,6 +58,20 @@ async def test_add_get_and_remove_query():
owner_id="alice",
)
options_row = (
await ds.get_internal_database().execute(
"""
SELECT options FROM queries
WHERE database_name = ? AND name = ?
""",
["data", "top_customers"],
)
).first()
assert json.loads(options_row["options"]) == {
"fragment": "chart",
"hide_sql": True,
}
query = await ds.get_query("data", "top_customers")
assert query == {
"database": "data",
@ -108,6 +118,17 @@ async def test_update_query_only_updates_provided_fields():
parameters=["one"],
)
options_row = (
await ds.get_internal_database().execute(
"""
SELECT options FROM queries
WHERE database_name = ? AND name = ?
""",
["data", "redirect"],
)
).first()
assert json.loads(options_row["options"]) == {"on_success_redirect": "/original"}
await ds.update_query(
"data",
"redirect",
@ -123,6 +144,16 @@ async def test_update_query_only_updates_provided_fields():
assert query["on_success_redirect"] is None
assert query["sql"] == "select 1"
assert query["published"] is False
options_row = (
await ds.get_internal_database().execute(
"""
SELECT options FROM queries
WHERE database_name = ? AND name = ?
""",
["data", "redirect"],
)
).first()
assert json.loads(options_row["options"]) == {}
@pytest.mark.asyncio