diff --git a/datasette/app.py b/datasette/app.py index 09f281e3..2e90571a 100644 --- a/datasette/app.py +++ b/datasette/app.py @@ -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) diff --git a/tests/test_internal_db.py b/tests/test_internal_db.py index 351105ef..a666dd72 100644 --- a/tests/test_internal_db.py +++ b/tests/test_internal_db.py @@ -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