Pere Diaz Bou
ea04e9033a
core/mvcc: add btree_cursor under MVCC cursor
2025-10-21 18:22:37 +02:00
Pere Diaz Bou
bc05497d99
core/mvcc: implement CursorTrait on MVCC cursor
2025-10-13 19:26:18 +02:00
Duy Dang
f7b3033a09
Merge branch 'main' into rollback-fix
2025-10-08 20:56:54 +07:00
Levy A.
cf53ecb7e3
refactor: remove TextRef and RawSlice and fix tests
2025-10-07 10:43:45 -03:00
Levy A.
77a412f6af
refactor: remove unsafe reference semantics from RefValue
...
also renames `RefValue` to `ValueRef`, to align with rusqlite and other
crates
2025-10-07 10:43:44 -03:00
Pekka Enberg
a72b07e949
Merge 'Fix VDBE program abort' from Nikita Sivukhin
...
This PR add proper program abort in case of unfinished statement reset
and interruption.
Also, this PR makes rollback methods non-failing because otherwise of
their callers usually unclear (if rollback failed - what is the state of
statement/connection/transaction?)
Reviewed-by: Preston Thorpe <preston@turso.tech >
Closes #3591
2025-10-07 09:07:07 +03:00
Pere Diaz Bou
b9b9831d17
core/mvcc: test seek with empty table
2025-10-06 13:28:51 +02:00
Nikita Sivukhin
8dae601fac
make rollback non-failing method
2025-10-06 13:21:45 +04:00
Duy Dang
c57567d776
Adopt Hekaton solution for rollback tx
2025-10-05 23:51:50 +07:00
Pere Diaz Bou
55f5cd2ad7
core/mvcc/logical-log: test automatic checkpoint
2025-10-03 17:23:59 +02:00
Pekka Enberg
297aaf4887
core/mvcc: Rename "-lg" to "-log"
...
The "lg" name is just weird.
2025-10-03 10:08:02 +03:00
Jussi Saurio
d4d50b564a
fix even more tests
2025-09-30 23:22:07 +03:00
Jussi Saurio
fe871188bf
fix tests again
2025-09-30 22:54:48 +03:00
Jussi Saurio
fd84fd0683
fix test compilation errors
2025-09-30 22:27:28 +03:00
Jussi Saurio
64ce33bd5c
Move resolution of tableid/rootpage inside MvCursor constructor
2025-09-30 17:04:37 +03:00
Jussi Saurio
7c897d382f
Implement MvTableId newtype for better type safety of table ids
2025-09-30 16:54:22 +03:00
Jussi Saurio
0ba4c6c00e
use negative table id in mvcc tests
2025-09-30 16:53:12 +03:00
Pere Diaz Bou
0f631101df
core: change page idx type from usize to i64
...
MVCC is like the annoying younger cousin (I know because I was him) that
needs to be treated differently. MVCC requires us to use root_pages that
might not be allocated yet, and the plan is to use negative root_pages
for that case. Therefore, we need i64 in order to fit this change.
2025-09-29 18:38:43 +02:00
Pere Diaz Bou
ae994146af
core/mvcc/logical-log: on mvcc restart clear DATABASE_MANAGER
2025-09-26 12:56:43 +02:00
Pere Diaz Bou
334da8abbb
core/mvcc/logical-log: refactor get log path in tests
2025-09-25 18:33:26 +02:00
Jussi Saurio
949e6dd728
mvcc: remove unused states and fields from CommitStateMachine
...
none of the pager commit related data and logic are used anymore,
so let's delete them.
2025-09-25 08:12:12 +03:00
Pekka Enberg
b590b353eb
core/mvcc: Wrap Transaction::database_header with RwLock
2025-09-24 15:19:00 +03:00
Pekka Enberg
b857f94fe4
Merge 'core: Wrap Connection::pager in RwLock' from Pekka Enberg
...
Closes #3247
2025-09-23 07:29:09 +03:00
Pekka Enberg
aa454a6637
core: Wrap Connection::pager in RwLock
2025-09-22 17:02:08 +03:00
Jussi Saurio
4af49ef98c
mvcc: simplify StateMachine
...
TransitionResult is an internal implementation detail that tells
an invocation of StateMachine::step() to continue looping, but it
is of no use to other callers.
For this reason, just return an IOResult from StateMachine::step()
which simplifies the result handling.
2025-09-22 16:37:31 +03:00
Pekka Enberg
ecbe2c231f
core: Rename Connection::_db to db
2025-09-18 16:00:41 +03:00
Pere Diaz Bou
64616dc2ca
core/mvcc: introduce with_header for MVCC header update tracking
...
Currently header changes are tracked through pager by reading page 1.
MVCC has it's own layer to track changes during txn so this commit makes
it so that headers are tracked by each txn separately.
On commit we update the _global_ header which is used to update
`database_size` because pager commits require it to be up to date. This
also makes it _simpler_ to keep track of header updates and update
pager's header accordingly.
2025-09-17 11:42:44 +02:00
Jussi Saurio
d493a72cc0
dont unwrap begin_tx
2025-09-15 14:48:26 +03:00
Pekka Enberg
a5eac9b700
Merge 'avoid unnecessary cloning when formatting Txn for Display' from Avinash Sajjanshetty
...
Closes #3109
2025-09-15 14:24:32 +03:00
Jussi Saurio
8f43741513
fix mvcc rollback
...
executing ROLLBACK did not rollback the mv-store transaction
2025-09-15 09:29:08 +03:00
Jussi Saurio
f4c15a37d3
add manual hack to mvcc test
...
we rollback the mvcc transaction in the VDBE, so manually roll it
back in the test
2025-09-14 23:46:38 +03:00
Jussi Saurio
db3428a7a9
remove unused pager parameter
2025-09-14 23:44:24 +03:00
Avinash Sajjanshetty
62770033c3
Add a simple test for txn::Display
2025-09-14 23:14:46 +05:30
Pere Diaz Bou
e87226548c
core/mvcc: fix concurrent tests mvcc
2025-09-12 13:49:40 +00:00
Pekka Enberg
45288b1297
core/mvcc: Eliminate RwLock wrapping Transaction
...
The write and read sets in Transaction use SkipSet, which is thread-safe.
Therefore, drop the RwLock wrapping Transaction everywhere, increasing
MVCC throughput by almost 30%.
Before:
```
Running write throughput benchmark with 1 threads, 1000 batch size, 1000 iterations, mode: Mvcc
Database created at: write_throughput_test.db
Thread 0: 1000000 inserts in 6.50s (153927.21 inserts/sec)
=== BENCHMARK RESULTS ===
Total inserts: 1000000
Total time: 6.50s
Overall throughput: 153758.85 inserts/sec
Threads: 1
Batch size: 1000
Iterations per thread: 1000
```
After:
```
Running write throughput benchmark with 1 threads, 1000 batch size, 1000 iterations, mode: Mvcc
Database created at: write_throughput_test.db
Thread 0: 1000000 inserts in 5.10s (195927.13 inserts/sec)
=== BENCHMARK RESULTS ===
Total inserts: 1000000
Total time: 5.11s
Overall throughput: 195663.94 inserts/sec
Threads: 1
Batch size: 1000
Iterations per thread: 1000
```
2025-09-11 20:31:19 +03:00
Pekka Enberg
2131a04b7d
core: Rename IO::run_once() to IO::step()
...
The `run_once()` name is just a historical accident. Furthermore, it now
started to appear elsewhere as well, so let's just call it IO::step() as we
should have from the beginning.
2025-09-10 14:36:02 +03:00
Pere Diaz Bou
b8f83e1fc0
clippy and fmt stuff because if not pekka will tweet
2025-09-03 12:47:55 +02:00
Pere Diaz Bou
f26e36b6de
core/mvcc: test write concurrency
...
fix
2025-09-02 17:07:38 +02:00
Pekka Enberg
1dc6fb97c0
Merge 'core/mvcc: store txid in conn and reset transaction state on commit ' from Pere Diaz Bou
...
We were storing `txid` in `ProgramState`, this meant it was impossible
to track interactive transactions. This was extracted to `Connection`
instead.
Moreover, transaction state for mvcc now is reset on commit.
Closes #2689
2025-08-20 16:51:41 +03:00
Pere Diaz Bou
636a3e76e6
clippy mvcc tests
2025-08-20 12:34:11 +02:00
Pere Diaz Bou
ffaf8580e0
mvcc/core: simple interactive transaction tests for mvcc
2025-08-20 12:22:31 +02:00
Pere Diaz Bou
c8f59a352b
core/mvcc: test delete
2025-08-19 19:48:51 +02:00
Pere Diaz Bou
94cd504d4c
core/mvcc: support schema_did change on commit_txn
...
This not only changes schema_did_change on commit_txn for mvcc, but also
extracts the connection transaction state from non mvcc transactions to
mvcc too.
2025-08-18 15:52:10 +02:00
pedrocarlo
fbe7e685ce
adjust mvcc code to return completions in state machines
2025-08-13 10:24:55 +03:00
pedrocarlo
217c9061e8
advance commit_tx state machine in mvcc tests
2025-08-12 12:28:35 -03:00
Pere Diaz Bou
56240ddac9
core/mvcc: add restart tests
2025-08-04 12:31:17 +02:00
Pere Diaz Bou
83a658d3d6
core/mvcc: add option to test with a random file and restart it
2025-08-04 12:31:17 +02:00
Pere Diaz Bou
764523a8bb
core/mvcc: fix tests with state machines
2025-08-01 15:48:09 +02:00
Pere Diaz Bou
c807b035c5
core/mvcc: fix tests again
...
had to create connections for every different txn
2025-08-01 10:44:19 +02:00
Pere Diaz Bou
c4318cac36
core/mvcc: fix tests
2025-08-01 10:38:41 +02:00