limbo/testing
Pere Diaz Bou 7c96b6d9f9
Some checks are pending
Build and push limbo-sim image / deploy (push) Waiting to run
C compat Tests / test (push) Waiting to run
Dart/Flutter / test (blacksmith-4vcpu-ubuntu-2404) (push) Waiting to run
Dart/Flutter / test (windows-latest) (push) Waiting to run
Dart/Flutter / precompile (blacksmith-4vcpu-ubuntu-2404) (push) Waiting to run
Dart/Flutter / precompile (macOS-latest) (push) Waiting to run
Dart/Flutter / precompile (windows-latest) (push) Waiting to run
Dart/Flutter / publish (push) Waiting to run
Run long fuzz tests and stress test / run-long-fuzz-tests (push) Waiting to run
Run long fuzz tests and stress test / run-fuzz-tests (push) Waiting to run
Run long fuzz tests and stress test / simple-stress-test (push) Waiting to run
Java Tests / test (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-aarch64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-aarch64-apple-darwin - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-wasm32-wasip1-threads - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-x86_64-pc-windows-msvc - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-x86_64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-aarch64-apple-darwin - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-aarch64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-wasm32-wasip1-threads - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-x86_64-pc-windows-msvc - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-x86_64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / Test DB bindings on Linux-x64-gnu - node@20 (push) Blocked by required conditions
Build & publish @tursodatabase/database / Test DB bindings on browser@20 (push) Blocked by required conditions
Build & publish @tursodatabase/database / Publish (push) Blocked by required conditions
Python / sdist (push) Waiting to run
Python / Release (push) Blocked by required conditions
Python / configure-strategy (push) Waiting to run
Python / test (push) Blocked by required conditions
Python / macos-arm64 (aarch64) (push) Waiting to run
Python / lint (push) Waiting to run
Python / linux (x86_64) (push) Waiting to run
Rust / cargo-fmt-check (push) Waiting to run
Rust / test-sqlite (push) Waiting to run
Rust / build-native (blacksmith-4vcpu-ubuntu-2404) (push) Waiting to run
Rust / build-native (macos-latest) (push) Waiting to run
Rust / build-native (windows-latest) (push) Waiting to run
Rust / clippy (push) Waiting to run
Rust / simulator (push) Waiting to run
Rust / test-limbo (push) Waiting to run
Rust Benchmarks+Nyrkiö / tpc-h (push) Waiting to run
Rust Benchmarks+Nyrkiö / vfs-bench-compile (push) Waiting to run
Rust Benchmarks+Nyrkiö / bench (push) Waiting to run
Rust Benchmarks+Nyrkiö / clickbench (push) Waiting to run
Rust Benchmarks+Nyrkiö / tpc-h-criterion (push) Waiting to run
Merge 'Fix: Drop internal DBSP table when dropping materialized view' from Martin Mauch
# Fix: Clean up DBSP state table when dropping materialized views
## Problem
When dropping a materialized view, the internal DBSP state table (e.g.,
`__turso_internal_dbsp_state_v1_view_name`) and its automatic primary
key index were not being properly cleaned up. This caused two issues:
1. **Persistent schema entries**: The DBSP table and index entries
remained in `sqlite_schema` after dropping the view
2. **In-memory schema inconsistency**: The DBSP table remained in the
in-memory schema's `tables` HashMap, causing "table already exists"
errors when trying to recreate a materialized view with the same name
## Root Cause
The issue had two parts:
1. **Missing sqlite_schema cleanup**: The `translate_drop_view` function
deleted the view entry from `sqlite_schema` but didn't delete the
associated DBSP state table and index entries
2. **Missing in-memory schema cleanup**: The `remove_view` function
removed the materialized view from the in-memory schema but didn't
remove the DBSP state table and its indexes
## Solution
### Changes in `core/translate/view.rs`
- Added a second pass loop in `translate_drop_view` to scan
`sqlite_schema` and delete DBSP table and index entries
- The loop checks for entries matching the DBSP table name pattern
(`__turso_internal_dbsp_state_v{version}_{view_name}`) and the automatic
index name pattern (`sqlite_autoindex___turso_internal_dbsp_state_v{vers
ion}_{view_name}_1`)
- Registers for comparison values are allocated outside the loop for
efficiency
- Column registers are reused across loop iterations
### Changes in `core/schema.rs`
- Updated `remove_view` to also remove the DBSP state table and its
indexes from the in-memory schema's `tables` HashMap and `indexes`
collection
- This ensures consistency between the persistent schema
(`sqlite_schema`) and the in-memory schema
### Tests Added
Added two new test cases in `testing/materialized_views.test`:
1. **`matview-drop-cleans-up-dbsp-table`**: Explicitly verifies that
after dropping a materialized view:
   - The view entry is removed from `sqlite_schema`
   - The DBSP state table entry is removed from `sqlite_schema`
   - The DBSP state index entry is removed from `sqlite_schema`
2. **`matview-recreate-after-drop`**: Verifies that a materialized view
can be successfully recreated after being dropped, which implicitly
tests that all underlying resources (including DBSP tables) are properly
cleaned up
## Testing
- All existing materialized view tests pass
- New tests specifically verify the cleanup behavior
- Manual testing confirms that materialized views can be dropped and
recreated without errors
## Related
This fix ensures that materialized views can be safely dropped and
recreated, resolving issues where the DBSP state table would persist and
cause conflicts.

Reviewed-by: Preston Thorpe <preston@turso.tech>

Closes #3928
2025-11-12 17:16:04 +01:00
..
cli_tests Fix extensions py test 2025-11-09 11:35:57 -05:00
javascript fix tests in testing/javascript 2025-09-25 12:07:57 +04:00
sqlite3 testing/sqlite3: Update all.test 2025-08-02 13:00:18 +03:00
sqlite_test_ext Implement xBestIndex for kvstore.c 2025-08-04 19:25:11 +02:00
test_files CSV import fixes 2025-07-15 16:44:11 +03:00
unreliable-libc Add short writes to pwritev in faulty_libc. 2025-10-03 18:35:03 +02:00
wal
affinity.test Add regression test for rowid affinity 2025-10-02 14:31:22 -04:00
agg-functions.test printf truncates floats 2025-09-28 21:16:33 +05:30
all.test Remove unnecessary FK resolution on schema parsing 2025-10-07 16:45:16 -04:00
alter_column.test feat: alter table disallow generated columns, support foreign keys for alter table 2025-11-08 13:45:17 +05:30
alter_table.test Add regression tcl test for #3886 2025-11-03 09:47:28 -05:00
analyze.test ANALYZE creates sqlite_stat1 if it doesn't exist 2025-08-24 13:35:39 -07:00
attach.test Add regression test for #3540 attach issue 2025-10-06 21:33:42 -04:00
autoincr.test add test 2025-10-12 15:58:10 +05:30
boolean.test Fix incompatibility AND Expression 2025-04-13 22:38:43 -03:00
changes.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
cmdlineshell.test
coalesce.test
collate.test Collate: add more TCL tests 2025-10-02 21:49:33 +03:00
compare.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
concat.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
create_index.test Fix: actually enforce uniqueness in CREATE UNIQUE INDEX 2025-10-03 22:58:42 +03:00
create_table.test Add regression tcl test for #3796 default bool col constraints 2025-10-21 21:22:09 -04:00
default_value.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
delete.test chore: enable indexes by default 2025-08-01 15:44:56 +03:00
drop_index.test Including tests 2025-08-05 21:18:52 -07:00
drop_table.test fix: prevent DROP TABLE when table is referenced by foreign keys 2025-11-04 12:32:19 -03:00
foreign_keys.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
gen-bigass-database.py add gen-bigass-database.py 2025-09-08 13:05:33 -04:00
gen-database.py ruff lint fix 2025-06-20 15:59:03 -03:00
glob.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
groupby.test fix: result columns have varying binding precedence 2025-09-25 08:07:37 +03:00
insert.test Fix: return error on provided insert column count mismatch 2025-11-03 11:41:50 +02:00
integrity_check.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
join.test Fix LEFT JOIN subqueries reusing stale right-side values 2025-11-01 01:24:31 +07:00
json.test Stop blob json parsing at null terminator 2025-11-04 23:04:33 +07:00
like.test Escape character is ignored in LIKE function #1051 2025-03-01 18:32:09 +01:00
literal.test handle int64 overflow by f64 2025-05-08 22:22:55 +08:00
materialized_views.test Fix: Drop internal DBSP table when dropping materialized view 2025-11-08 20:28:20 +01:00
math.test is_nonnull returns true on 1 / 0 2025-09-17 14:50:15 +07:00
null.test Fix TCL test 2025-09-01 11:39:43 -04:00
offset.test Fix expected error message 2025-10-15 09:41:44 +03:00
orderby.test Merge branch 'main' into order-by-heap-sort 2025-10-22 11:44:55 +04:00
partial_idx.test Add some tests for UPSERT with partial indexes 2025-09-20 18:32:50 -04:00
pragma.test Fix pragma module list tests 2025-08-11 12:13:47 -04:00
pyproject.toml Add bench-sqlite script and makefile command for benchmarking an I/O backend against sqlite3 2025-08-18 15:11:29 -04:00
README.md Add framework for testing extensions in TCL 2025-08-15 21:06:27 +02:00
rollback.test chore: enable indexes by default 2025-08-01 15:44:56 +03:00
scalar-functions-datetime.test core(datetime): added implementation of ceiling modifier to datetime 2025-08-23 22:59:08 -05:00
scalar-functions-printf.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
scalar-functions.test fmt and add tests 2025-10-12 22:23:04 +05:30
select.test add some ai generated queries to test for affinity related queries 2025-11-10 11:15:54 +02:00
subquery.test Fix EXISTS on LEFT JOIN null rows 2025-11-04 22:01:18 +07:00
tester.tcl Add framework for testing extensions in TCL 2025-08-15 21:06:27 +02:00
testing.db fix: revert changes on testing dbs 2025-08-11 08:42:08 -03:00
testing_norowidalias.db fix: revert changes on testing dbs 2025-08-11 08:42:08 -03:00
testing_small.db
testing_user_version_10.db
time.test extensions/time: normalize offset_sec 2025-02-19 21:25:14 +08:00
total-changes.test Add 'make test-single' 2025-10-30 11:38:56 +02:00
transactions.test Implement deferred transactions 2025-03-17 10:01:00 -03:00
update.test Add TCL smoke tests for UPDATEs affecting indexes 2025-10-14 16:25:05 +03:00
upsert.test fix upsert conflict handling 2025-09-30 22:39:55 +04:00
values.test Fix another "should have been rewritten" translation panic 2025-10-13 11:02:42 +03:00
vector.test proof issue 1454 2025-10-13 16:14:29 -03:00
views.test Remove tests that alter testing.db from views.test 2025-10-18 12:05:33 -04:00
vtab.test Extract TVF-related tests to TCL 2025-08-15 21:06:30 +02:00
where.test fix: result columns have varying binding precedence 2025-09-25 08:07:37 +03:00
window.test Add support for window functions 2025-09-13 11:12:44 +02:00

Turso Testing

Testing Extensions

When adding tests for extensions, please follow these guidelines:

  • Tests that verify the internal logic or behavior of a particular extension should go into cli_tests/extensions.py.
  • Tests that verify how extensions interact with the database engine, such as virtual table handling, should be written in TCL (see vtab.test as an example).

To check which extensions are available in TCL, or to add a new one, refer to the tester.tcl file and look at the extension_map.