Store null instead of 'None' in _internal database table, closes #1970

This commit is contained in:
Simon Willison 2022-12-31 10:52:27 -08:00
commit 8aa9cf629c
2 changed files with 17 additions and 5 deletions

View file

@ -1,4 +1,5 @@
import asyncio
from pydoc import plain
from typing import Sequence, Union, Tuple, Optional, Dict, Iterable
import asgi_csrf
import collections
@ -415,12 +416,19 @@ class Datasette:
# Compare schema versions to see if we should skip it
if schema_version == current_schema_versions.get(database_name):
continue
placeholders = "(?, ?, ?, ?)"
values = [database_name, str(db.path), db.is_memory, schema_version]
if db.path is None:
placeholders = "(?, null, ?, ?)"
values = [database_name, db.is_memory, schema_version]
await internal_db.execute_write(
"""
INSERT OR REPLACE INTO databases (database_name, path, is_memory, schema_version)
VALUES (?, ?, ?, ?)
""",
[database_name, str(db.path), db.is_memory, schema_version],
VALUES {}
""".format(
placeholders
),
values,
)
await populate_schema_tables(internal_db, db)

View file

@ -19,8 +19,12 @@ async def test_internal_databases(ds_client):
)
).json()
assert len(databases) == 2
assert databases[0]["database_name"] == "_internal"
assert databases[1]["database_name"] == "fixtures"
internal, fixtures = databases
assert internal["database_name"] == "_internal"
assert internal["is_memory"] == 1
assert internal["path"] is None
assert isinstance(internal["schema_version"], int)
assert fixtures["database_name"] == "fixtures"
@pytest.mark.asyncio