sqlite-utils/tests
Claude 44dd92a12c
Transform now refuses to run inside a transaction if destructive foreign keys exist
PRAGMA foreign_keys cannot be changed inside a transaction, and the
defer_foreign_keys fallback only defers violation checks, not ON DELETE
actions - so calling table.transform() inside db.atomic() with
PRAGMA foreign_keys enabled would silently fire ON DELETE CASCADE /
SET NULL / SET DEFAULT actions on referencing tables when the old table
is dropped.

transform() now raises TransactionError in that situation, naming the
offending foreign keys and suggesting either running it outside the
transaction or turning the pragma off before opening it. Tables with
only non-destructive inbound foreign keys (NO ACTION, RESTRICT) can
still be transformed inside a transaction via defer_foreign_keys.

Closes #794

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014StVTWQJpFhfZJK2CYVBwv
2026-07-12 15:17:54 +00:00
..
sniff sqlite-utils insert --sniff option, closes #230 2021-02-14 11:23:12 -08:00
__init__.py Initial project layout + database table creation tools 2018-07-28 06:46:17 -07:00
conftest.py Add --sqlite-autocommit pytest option 2026-07-04 23:19:51 +00:00
ext.c Support entrypoints for --load-extension (#473) 2022-08-26 22:55:47 -07:00
test_analyze.py Use sqlean if available in environment (#560) 2023-06-25 16:25:51 -07:00
test_analyze_tables.py Test against Python 3.15-dev, bump ty and Black (#738) 2026-05-17 16:52:48 -07:00
test_atomic.py Fix two tests that assumed modern SQLite behavior 2026-07-06 22:02:41 -07:00
test_attach.py db.attach(alias, filepath) method, closes #113 2021-02-18 20:56:32 -08:00
test_cli.py .transform(strict=) and sqlite-utils transform --strict/--no-strict (#788) 2026-07-11 16:43:37 -07:00
test_cli_bulk.py --functions can take filenames, can be used multiple times (#681) 2025-11-23 21:46:51 -08:00
test_cli_convert.py JSON output no longer escapes non-ASCII characters, new --ascii option (#777) 2026-07-06 11:10:07 -07:00
test_cli_insert.py sqlite-utils insert/upsert --type colunm-name type option, closes #131 2026-07-07 19:17:29 -07:00
test_cli_memory.py Test for CSV headers with memory command, refs #702, #707 2026-06-21 16:05:10 -07:00
test_cli_migrate.py migrate --list is read-only with legacy sqlite-migrate classes too 2026-07-06 21:58:52 -07:00
test_column_affinity.py Tracer mechanism for showing underlying SQL queries 2020-09-07 14:56:59 -07:00
test_column_casing.py Match column names case-insensitively, closes #760 2026-07-05 22:11:22 -07:00
test_constructor.py Delete obsolete test_memory_attribute_for_existing_connection test 2026-07-11 16:28:36 -07:00
test_conversions.py Now complies with flake8, refs #291 2021-06-22 18:22:08 -07:00
test_convert.py Raise ValueError instead of AssertionError for invalid arguments 2026-07-04 19:19:24 +00:00
test_create.py drop-index command and table.drop_index(index_name) 2026-07-07 21:00:43 -07:00
test_create_view.py Raise ValueError instead of AssertionError for invalid arguments 2026-07-04 19:19:24 +00:00
test_default_value.py Fix transform() corrupting TRUE/FALSE/NULL column defaults into strings 2026-07-05 22:33:55 -07:00
test_delete.py Fix delete_where() leaving the connection in an open transaction 2026-07-04 17:57:35 +00:00
test_docs.py More type annotations (#697) 2025-12-16 22:11:47 -08:00
test_duplicate.py Test against Python 3.15-dev, bump ty and Black (#738) 2026-05-17 16:52:48 -07:00
test_enable_counts.py Use double quotes not braces for tables and columns (#678) 2025-11-23 20:43:26 -08:00
test_extract.py extract() no longer duplicates NULL-containing rows in shared lookups 2026-07-06 21:55:21 -07:00
test_extracts.py .extract() and .lookup() no longer extract null values, closes #186 2026-07-06 20:41:10 -07:00
test_foreign_keys.py add_foreign_keys() errors instead of silently dropping action changes 2026-07-06 21:53:48 -07:00
test_fts.py Preserve duplicate column names in query results 2026-07-05 21:20:39 -07:00
test_get.py Refactored tests into new test_rows.py, refs #76 2020-04-15 18:04:55 -07:00
test_gis.py Apply Black to tests/test_gis.py 2026-07-05 21:17:41 -07:00
test_hypothesis.py Now complies with flake8, refs #291 2021-06-22 18:22:08 -07:00
test_insert_files.py insert-files multiple --pk support, closes #621 2024-03-16 17:33:31 -07:00
test_introspect.py Compound primary keys now resolve in PRIMARY KEY declaration order 2026-07-06 21:34:02 -07:00
test_list_mode.py table.insert_all() and table.upsert_all() now take generators of lists/tuples 2025-11-23 12:17:23 -08:00
test_lookup.py .extract() and .lookup() no longer extract null values, closes #186 2026-07-06 20:41:10 -07:00
test_m2m.py Raise ValueError instead of AssertionError for invalid arguments 2026-07-04 19:19:24 +00:00
test_migrations.py migrate --stop-before an already-applied migration is now an error 2026-07-06 21:50:05 -07:00
test_plugins.py fix: Plugins are still loaded when running tests (#719) 2026-06-21 16:14:45 -07:00
test_query.py Skip RETURNING-based trigger test on SQLite older than 3.35 2026-07-06 22:06:51 -07:00
test_recipes.py table.insert_all() and table.upsert_all() now take generators of lists/tuples 2025-11-23 12:17:23 -08:00
test_recreate.py Raise ValueError instead of AssertionError for invalid arguments 2026-07-04 19:19:24 +00:00
test_register_function.py Database as a context manager, fixed many pytest warnings 2025-12-11 16:56:12 -08:00
test_rows.py Fix two tests that assumed modern SQLite behavior 2026-07-06 22:02:41 -07:00
test_rows_from_file.py Type fixes now enforced by ty 2025-12-16 19:34:45 -08:00
test_sniff.py Fix PytestRemovedIn10Warning in test_sniff 2026-07-04 23:20:31 +00:00
test_suggest_column_types.py Fixed bug with null columns, closes #95 2020-03-23 13:31:06 -07:00
test_tracer.py Fix broken tracer test 2026-06-21 16:29:32 -07:00
test_transform.py Transform now refuses to run inside a transaction if destructive foreign keys exist 2026-07-12 15:17:54 +00:00
test_update.py Use double quotes not braces for tables and columns (#678) 2025-11-23 20:43:26 -08:00
test_upsert.py upsert() now requires a value for every primary key column 2026-07-04 18:43:37 +00:00
test_utils.py Preserve duplicate column names in query results 2026-07-05 21:20:39 -07:00
test_wal.py ensure_autocommit_on() raises TransactionError inside a transaction 2026-07-06 21:51:31 -07:00