From f8313525517b774879482c597172da076b4ba59b Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Mon, 22 Jun 2026 14:24:34 -0700 Subject: [PATCH] Avoid SQLite RETURNING for compat with older SQLite Refs #2789 --- tests/test_api_write.py | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/tests/test_api_write.py b/tests/test_api_write.py index b3a2f6a3..76797742 100644 --- a/tests/test_api_write.py +++ b/tests/test_api_write.py @@ -1,6 +1,6 @@ from datasette.app import Datasette from datasette.events import RenameTableEvent -from datasette.utils import sqlite3 +from datasette.utils import escape_sqlite, sqlite3 from .utils import last_event import pytest import time @@ -40,6 +40,16 @@ def _headers(token): } +def _insert_and_fetch_created(conn, table, insert_sql): + cursor = conn.execute(insert_sql) + return conn.execute( + "select created, typeof(created) from {} where rowid = ?".format( + escape_sqlite(table) + ), + (cursor.lastrowid,), + ).fetchone() + + @pytest.mark.asyncio async def test_api_explorer_upsert_example_json(ds_write): response = await ds_write.client.get("/-/api", actor={"id": "root"}) @@ -948,10 +958,9 @@ async def test_alter_table_integer_default_expr( assert expected_schema in created_column["dflt_value"] row = await db.execute_write_fn( - lambda conn: conn.execute( - "insert into docs (title) values ('with default') " - "returning created, typeof(created)" - ).fetchone() + lambda conn: _insert_and_fetch_created( + conn, "docs", "insert into docs (title) values ('with default')" + ) ) assert row[0] > minimum_value assert row[1] == "integer" @@ -2158,11 +2167,9 @@ async def test_create_table_integer_default_expr( assert expected_schema in columns[1]["dflt_value"] row = await db.execute_write_fn( - lambda conn: conn.execute( - "insert into [{}] default values returning created, typeof(created)".format( - table - ) - ).fetchone() + lambda conn: _insert_and_fetch_created( + conn, table, "insert into {} default values".format(escape_sqlite(table)) + ) ) assert row[0] > minimum_value assert row[1] == "integer"