Commit graph

11824 commits

Author SHA1 Message Date
PThorpe92
c91205eb1e
incr timeout for simulator CI 2025-12-18 14:47:56 -05:00
PThorpe92
6cebf1cdcf
Fix commit path and fix io_uring issues 2025-12-18 13:06:49 -05:00
Preston Thorpe
887d52f316
Merge 'Simplify slot bitmap to remove complex unused optimizations' from Preston Thorpe
## Description
This PR greatly simplifies the slot bitmap used to track free pages in
the arena buffer pool.
## Motivation and context
An optimization was included that would allow for allocating multiple
contiguous buffers, with the objective being that they would be
coalesced into single buffers when submitting `pwritev` calls, for
things like WAL appends. This optimization was never implemented and we
are left with a very complex bitmap with lots of unused/unnecessary
logic.
## Description of AI Usage
This was mostly codex 5.2 with the prompt:
```
This project is a SQLite rewrite in Rust, it uses a BufferPool that allocates large arenas 
and tracks which slots are free using a bitmap. this bitmap is core/storage/slot_bitmap.rs.. 
it was originally designed in a way that would allow to request multiple buffers that
were contiguous in memory, so that they could be coalesced into a single `pwrite` operation later down the line. 
However this optimization was never implemented and the bitmap has a complex 'two-pointer' algorithm that we no 
longer need. please rewrite this slot_bitmap.rs to simplify and only allocate single buffers at a time, removing the need
for the two pointer hint system.
```

Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>

Closes #4277
2025-12-18 13:05:23 -05:00
Jussi Saurio
caa71ea39c
Merge 'implement state machine for op_journal_mode' from Pedro Muniz
Some checks are pending
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-unknown-linux-gnu - node@20 (push) Waiting to run
Python / linux (x86_64) (push) Waiting to run
Python / sdist (push) Waiting to run
Python / Release (push) Blocked by required conditions
Rust / test-sqlite (push) Waiting to run
Rust / cargo-fmt-check (push) Waiting to run
Rust / build-native (blacksmith-4vcpu-ubuntu-2404) (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 / 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 / macos-arm64 (aarch64) (push) Waiting to run
Python / configure-strategy (push) Waiting to run
Python / test (push) Blocked by required conditions
Python / lint (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 / build-native (macos-latest) (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
Rust Benchmarks+Nyrkiö / tpc-h (push) Waiting to run
## Description
Remove sync IO hacks for `op_journal_mode`
Close #4268
<!--
Please include a summary of the changes and the related issue.
-->
## Motivation and context
Remove sync io hacks so it is friendlier for WASM
<!--
Please include relevant motivation and context.
Link relevant issues here.
-->
## Description of AI Usage
Ai basically made the bulk refactoring and I made some adjustments and
trimmed down the implementation
**Prompt**:
```
if look at @core/storage/journal_mode.rs and `op_journal_mode` in `execute.rs` you will see that we have some blocking io operations with
`pager.io.block` and `program.connection.checkpoint` that also blocks. I want you refactor the code to use state machines similar in nature to how we do it
 in many functions in `execute.rs`
```
<!--
Please disclose how AI was used to help create this PR. For example, you
can share prompts,
specific tools, or ways of working that you took advantage of. You can
also share whether the
creation of the PR was mainly driven by AI, or whether it was used for
assistance.
This is a good way of sharing knowledge to other contributors about how
we can work more efficiently with
AI tools. Note that the use of AI is encouraged, but the committer is
still fully responsible for understanding
and reviewing the output.
-->

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #4279
2025-12-18 10:12:12 +02:00
Pekka Enberg
be4ac763ef
Merge 'aws/sim: fixes and tweaks' from Jussi Saurio
Closes #4283
2025-12-18 10:05:51 +02:00
Jussi Saurio
4318e0b7d4 sim/aws: increase single run timeout to 20 minutes
some write heavy profiles may take long so let's not necessarily
fail them if they do
2025-12-18 09:54:56 +02:00
Jussi Saurio
36dae9ddd1 sim/aws: don't loop - reproductions are easier typically this way 2025-12-18 09:54:49 +02:00
Jussi Saurio
ad06fa8ee4 sim/aws: select random sim profile 50% of the time 2025-12-18 09:54:18 +02:00
Jussi Saurio
22b77aa381 sim/aws: select random io backend 2025-12-18 09:53:54 +02:00
Jussi Saurio
6f43fdcbff sim/aws: add bun and node TS types to suppress red squigglies 2025-12-18 09:53:29 +02:00
Jussi Saurio
4c13d73c84
Merge 'fix succeeded check' from Pedro Muniz
## Description
We should correctly check for completion success
<!--
Please include a summary of the changes and the related issue.
-->
## Motivation and context
<!--
Please include relevant motivation and context.
Link relevant issues here.
-->
## Description of AI Usage
Ai made the tests for me
<!--
Please disclose how AI was used to help create this PR. For example, you
can share prompts,
specific tools, or ways of working that you took advantage of. You can
also share whether the
creation of the PR was mainly driven by AI, or whether it was used for
assistance.
This is a good way of sharing knowledge to other contributors about how
we can work more efficiently with
AI tools. Note that the use of AI is encouraged, but the committer is
still fully responsible for understanding
and reviewing the output.
-->

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #4263
2025-12-18 09:39:56 +02:00
Jussi Saurio
9115b74751
Merge 'fix/sim: all alter table ops must be recorded and applied in order' from Jussi Saurio
## Background
In the simulator, we do our best to replicate the effects of an
interactive transaction into the simulator's shadow state whenever that
transaction commits.
## Problem
this didn't work:
BEGIN;
ALTER TABLE t ADD COLUMN foo;
DELETE FROM t WHERE bar != 5;
COMMIT;
None of the rows where bar != 5 were deleted because apply_snapshot()
was checking that the rows in the committed table were exactly equal to
the rows that were recorded, but since the recorded deletes contained a
NULL `foo` column, they never matched. This meant that the sim thought
it should still have all the rows that were deleted.
## Fix:
like all the other operations, record add column / drop column too so
that they are applied in sequential order in apply_snapshot()
No explicit test for this - I ran into this in another branch of mine
whose seed doesn't reproduce on main (because I changed the simulator in
that branch).

Reviewed-by: Pedro Muniz (@pedrocarlo)

Closes #4264
2025-12-18 09:28:28 +02:00
Jussi Saurio
37a8897bc6
Merge 'triggers: don't rewrite qualified table names' from Pavan Nambi
## Description
closes https://github.com/tursodatabase/turso/issues/4142
<!--
Please include a summary of the changes and the related issue.
-->
## Motivation and context
compatibility, we were  wrongly rewriting table qualified cols, also
added trigger.test to all.test and expect correct values in a test
<!--
Please include relevant motivation and context.
Link relevant issues here.
-->
## AI Disclosure
None
<!--
Please disclose if any LLM's were used in the creation of this PR and to
what extent,
to help maintainers properly review.
-->

Closes #4206
2025-12-18 09:26:46 +02:00
Jussi Saurio
c282c24d94
Merge 'clean up core tester to use conn.execute and conn.exec_rows for parsing correctly the expected values from select queries' from Pedro Muniz
## Description
The PR title. `exec_rows` also does validation of outputs automatically
which is good practice for testing
<!--
Please include a summary of the changes and the related issue.
-->
## Motivation and context
Better typing and don't have to constantly match on `turso_core::Value`
<!--
Please include relevant motivation and context.
Link relevant issues here.
-->
## AI Disclosure
Ai did most of the migration
<!--
Please disclose if any LLM's were used in the creation of this PR and to
what extent,
to help maintainers properly review.
-->

Closes #4192
2025-12-18 09:22:45 +02:00
Jussi Saurio
2c212696f8
Merge 'Connection small refactor' from Dave Warnock
## Description
Connection has grown to the point where a separate module to make future
refactoring easier makers sense.
Replaced manually getting the inner connection with all the
locking/error handling with a utility method. This will be handy for the
ConnectionPool work
## Motivation and context
Foundation work for the ConnectionPool and removing an unwrap
## AI Disclosure
None

Reviewed-by: Mikaël Francoeur (@LeMikaelF)

Closes #4187
2025-12-18 09:21:36 +02:00
Jussi Saurio
00d266665b
Merge 'fix coroutine panic: replace ended_coroutine Bitfield with vec' from Jussi Saurio
## Description
Closes #4146
## Motivation and context
panics are bad
## AI Disclosure
none used

Reviewed-by: Pedro Muniz (@pedrocarlo)
Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>

Closes #4177
2025-12-18 09:20:05 +02:00
Pekka Enberg
e9e825d004 Add missing bindings/dotnet to Dockerfile.antithesis
The workspace includes bindings/dotnet but it was not being copied
in the Docker build, causing cargo chef prepare to fail.
2025-12-18 08:13:50 +02:00
pedrocarlo
81ef597873 implement state machine for op_journal_mode 2025-12-18 01:23:24 -03:00
PThorpe92
b3a481bf10
Rewrite and simplify slot bitmap to remove unused two pointer optimization 2025-12-17 21:41:30 -05:00
Preston Thorpe
9bd94347f0
Merge 'Add io_uring option for IO backend to simulator' from Preston Thorpe
Some checks are pending
Python / macos-arm64 (aarch64) (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 / linux (x86_64) (push) Waiting to run
Python / configure-strategy (push) Waiting to run
Python / test (push) Blocked by required conditions
Python / lint (push) Waiting to run
Python / sdist (push) Waiting to run
Python / Release (push) Blocked by required conditions
Rust / cargo-fmt-check (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 / test-sqlite (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
Rust Benchmarks+Nyrkiö / tpc-h (push) Waiting to run
## Description
I'm working on a branch that fixes/improves on our `io_uring` backend
and fixes a lot of the existing issues we have, I wanted to be able to
test it thoroughly so I thought I'd have opus 4.5 add it to the
simulator while I'm working so I could test the upcoming branch/PR.
## Description of AI Usage
This was mostly generated by Opus 4.5/claude code 🤖

Reviewed-by: Pedro Muniz (@pedrocarlo)

Closes #4274
2025-12-17 18:11:53 -05:00
PThorpe92
787e1f5d84
use new syntax for simulator in github action 2025-12-17 17:23:09 -05:00
PThorpe92
a9842d1116
Add simulator run with io_uring io backend to github action 2025-12-17 17:22:41 -05:00
PThorpe92
378de85657
Add io_uring IoBackend to simulator 2025-12-17 16:41:24 -05:00
pedrocarlo
702f1b5e05 add tests for completions 2025-12-17 17:44:02 -03:00
pedrocarlo
2abf9ab0a1 fix succeeded check 2025-12-17 17:44:02 -03:00
Jussi Saurio
d0f92856fb be stricter in apply_snapshot() 2025-12-17 22:32:58 +02:00
Jussi Saurio
eb59bc6ae6 Merge 'Enable MVCC with PRAGMA journal_mode' from Pedro Muniz
Some checks are pending
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 / configure-strategy (push) Waiting to run
Python / test (push) Blocked by required conditions
Python / lint (push) Waiting to run
Python / linux (x86_64) (push) Waiting to run
Python / macos-arm64 (aarch64) (push) Waiting to run
Python / sdist (push) Waiting to run
Python / Release (push) Blocked by required conditions
Rust / cargo-fmt-check (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 / test-sqlite (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
Rust Benchmarks+Nyrkiö / tpc-h (push) Waiting to run
Closes #3536
# Description
This PR implements **dynamic journal mode switching** via `PRAGMA
journal_mode`, allowing users to switch between WAL and MVCC modes at
runtime.
### Key Changes
**Core Feature: Journal Mode Switching**
- Added new `JournalMode` module (`core/storage/journal_mode.rs`) to
parse and handle journal mode transitions
- Modified `op_journal_mode` to correctly parse journal modes and update
the database header
- Emit checkpoint when setting a new journal mode to ensure data
consistency
- Added MVCC checkpoint support to `Connection::checkpoint`
**Database Initialization Improvements**
- Read DB header on `Database::open` and simplified `init_pager`
- Made `Version` an enum for better comparison semantics
- Automatically convert legacy SQLite databases to WAL mode
- Ensure DB header is flushed to disk when header changes during open
- Clear page cache after header validation
**Bug Fixes**
- Fixed dirty page invalidation in pager when clearing dirty pages in
page cache
- Fixed `is_none_or` check for row version existence in DB file (handles
MvStore initialization and empty database cases)
- Added `btree_resident` field in `RowVersion` to track if
insert/deletion originated from a btree
**Testing**
- Added fuzz tests for `journal_mode` transitions with Database
operations in between
- Added integration tests for testing switching from the different modes
while checking the header version is correct
- Added some specific regression tests for delete operations lost on
mode switch
- Fixed `index_scan_compound_key_fuzz` to use separate databases for
Turso and SQLite in MVCC mode. Also had to decrease number of rows for
MVCC test, as insert was very slow.
# TODO's
- Remove sync hacks from `op_journal_mode`
- Expand fuzzer with different queries
- Add to Simulator
- Special handling for read only databases and not allow any header
changes
# Motivation and context
Facilitate our users to test MVCC and transition back and forth from it.
# AI Disclosure
Used AI to catch and fix bugs in MVCC, further my understanding with
MVCC, write tests in `tests` folder, most of the PR summary, and the
docs in the `docs/manual.md` file

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #4074
2025-12-17 21:03:56 +02:00
Preston Thorpe
91d597eeb8
Merge 'core/storage: implement Cache Spilling' from Preston Thorpe
## Description
This PR (finally) implements spilling to disk (WAL for the common case,
or to temp files for ephemeral tables/indexes)
## Motivation and context
closes https://github.com/tursodatabase/turso/issues/1661
(can run the above referenced query with cache_size=200, producing the
same results as SQLite)
## How this was tested
I left running overnight with `cache_size=200` (which is the new minimum
page cache size) for the following:
```console
for i in (seq 100); ./scripts/run-sim --maximum-tests 5000 --min-tick 10 --max-tick 50  --memory-io --differential --profile write_heavy  || break; end;
```
And again with normal profile:
```console
for i in (seq 100); ./scripts/run-sim --maximum-tests 5000 --min-tick 10 --max-tick 50  --memory-io --differential  || break; end
```
And no issues were found.
## New simulator profile
This PR also adds `write_heavy_spill` profile to the simulator, and adds
an additional run in CI for it. All it does is set the `cache_size=200`
before kicking off a `write_heavy` profile run.
## AI Disclosure
Some general guidance was provided and it did help locate a bug but
pretty much all the code here is hand written.

Closes #4211
2025-12-17 13:43:12 -05:00
PThorpe92
5e5a406cbf
Reset commit_info on brand new commit each time 2025-12-17 11:57:39 -05:00
PThorpe92
1d28086cd5
Dont clear dirty pages till WalCommit is finished 2025-12-17 11:57:39 -05:00
PThorpe92
c2d9fabfe4
Disable spilling temporarily on wasm targets due to synchronous IO in read_page 2025-12-17 11:57:39 -05:00
PThorpe92
db60db7d9b
impl cache spilling in pager 2025-12-17 11:57:34 -05:00
Jussi Saurio
52401521bb
Merge 'Fix: update schema if DDL commit succeeded but checkpoint failed' from Jussi Saurio
This is already done in abort() but if the checkpoint error is
returned directly from commit_tx() instead of in an IO completion,
then the Tx state will be cleared and the DDL change won't be applied.
So, do it explicitly in step_end_write_txn() too.
Fixes this failing seed:
cargo run -- --memory-io --seed 12902559987470385066 --disable-
heuristic-shrinking

Closes #4265
2025-12-17 18:43:14 +02:00
Dave Warnock
70f3ae2912
Merge branch 'tursodatabase:main' into Connection-small-refactor 2025-12-17 16:36:48 +00:00
Jussi Saurio
41c3dcd2ed fix: update schema if DDL commit succeeded, checkpoint failed
This is already done in abort() but if the checkpoint error is
returned directly from commit_tx() instead of in an IO completion,
then the Tx state will be cleared and the DDL change won't be applied.
So, do it explicitly in step_end_write_txn() too.

Fixes this failing seed:

cargo run -- --memory-io --seed 12902559987470385066 --disable-heuristic-shrinking
2025-12-17 17:16:43 +02:00
Jussi Saurio
770df9068e uncommitted cargo lock change 2025-12-17 17:16:37 +02:00
Pekka Enberg
fcfcc04550
Merge 'Add dotnet bindings to Turso' from Kopylov Dmitriy
Added C#/dotnet bindings for turso

Reviewed-by: Nikita Sivukhin (@sivukhin)

Closes #3594
2025-12-17 16:45:55 +02:00
Pekka Enberg
83cd3f6583
Merge 'Fix race condition in WAL frame_cache update with io_uring' from Mikaël Francoeur
## Description
We had a turso_stress failure happening on Antithesis. See the
associated issue for how to reproduce it. It happens only on io_uring.
This PR fixes the failure by ensuring writes to the WAL are completed
before the frame cache is updated. Without this, other threads can
retrieve a frame from the cache before the frame has been persisted.
## Motivation and context
Closes https://github.com/tursodatabase/turso/issues/4249
## Description of AI Usage
I used the reproducer in
https://github.com/tursodatabase/turso/issues/4249, and told Claude to
fix it. I then reviewed its work to make sure I understood it.

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

Closes #4252
2025-12-17 16:44:24 +02:00
Jussi Saurio
da0ec21580 fix/sim: all alter table ops must be recorded and applied in order
this didn't work:

BEGIN;
ALTER TABLE t ADD COLUMN foo;
DELETE FROM t WHERE bar != 5;
COMMIT;

None of the rows where bar != 5 were deleted because apply_snapshot()
was checking that the rows in the committed table were exactly equal
to the rows that were recorded, but since the recorded deletes contained
a NULL `foo` column, they never matched. This meant that the sim thought
it should still have all the rows that were deleted.

Fix:

like all the other operations, record add column / drop column too so
that they are applied in sequential order in apply_snapshot()

No explicit test for this - I ran into this in another branch of mine
whose seed doesn't reproduce on main (because I changed the simulator
in that branch).
2025-12-17 16:27:36 +02:00
pedrocarlo
5242c4017c print warning message correctly 2025-12-17 10:59:04 -03:00
pedrocarlo
18b810bb04 adjust cli to Print warnings + print a warning about not converting to MVCC mode with WAL file 2025-12-17 10:55:25 -03:00
pedrocarlo
fc6ce8920a add section to docs/manual.md 2025-12-17 10:55:25 -03:00
pedrocarlo
27cd107185 add btree_resident field in RowVersion to track if the insert and deletion is originally from a btree 2025-12-17 10:55:25 -03:00
pedrocarlo
3df4f46d80 minimal repro regression test for starting in MVCC
and later switching to WAL and back to MVCC and then updating and deleting a row that only existed in the BTree
2025-12-17 10:55:25 -03:00
pedrocarlo
87dd5ce455 we should not use is_none_or when checking if row version exists in
the DB file, as if self.checkpointed_txid_max_old == None it could mean
the MvStore recently initialized or we are dealing with an empty
database. In both cases, we cannot assert the row version exists in the
db file
2025-12-17 10:55:25 -03:00
pedrocarlo
8f1dcbf625 add regression test for a delete being lost on switch to wal mode 2025-12-17 10:55:25 -03:00
pedrocarlo
ef2ac899e3 do not track agents folder in .claude 2025-12-17 10:55:25 -03:00
pedrocarlo
bd4f4d9aa5 add fuzz tests for jounral_mode 2025-12-17 10:55:25 -03:00
pedrocarlo
ef7ee83991 we should invalidate dirty pages in pager when clearing dirty pages in page cache 2025-12-17 10:55:25 -03:00
pedrocarlo
d73a283136 fix index_scan_compound_key_fuzz, as it always open the same database in both limbo and sqlite. But with the version changes we cannot do that. We need separate databases for each 2025-12-17 10:55:25 -03:00