From 8aa9cf629c888a8c117216fd243166981d7b4e06 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Sat, 31 Dec 2022 10:52:27 -0800 Subject: [PATCH] Store null instead of 'None' in _internal database table, closes #1970 --- datasette/app.py | 14 +++++++++++--- tests/test_internal_db.py | 8 ++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) 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