Pekka Enberg
f57d2b32af
core: Clean up B-Tree creation code
...
Move page allocation to pager so that we don't need to instantiate a
cursor to create a B-Tree.
2025-03-04 18:38:06 +02:00
Pere Diaz Bou
1de4861414
fix balance_non_root should trigger balance again
2025-03-02 23:16:32 +01:00
Pere Diaz Bou
10824e3eb3
remove new_pages, remove extra divider_cells and cells capacity
2025-03-02 22:49:20 +01:00
Pere Diaz Bou
0da12df67c
Introduce BalanceInfo to hold all balance procedure information
2025-03-02 22:42:48 +01:00
PThorpe92
588e43c5aa
Minor improvements and cleanups in btree
2025-03-01 15:48:42 -05:00
Pekka Enberg
1de73b389e
Merge ' fix usable_space calculation and wrong old pages cell count usage ' from Pere Diaz Bou
...
Closes #1067
2025-02-28 19:45:07 +02:00
Pere Diaz Bou
e545cc7057
fix btree_insert_fuzz_ex implementation
2025-02-28 18:21:38 +01:00
Pere Diaz Bou
bbb3252ab6
fix usable_space calculation and wrong old pages cell count usage
2025-02-28 18:19:27 +01:00
Pekka Enberg
20d618f35c
Disable some failing b-tree tests until we've fixed them
2025-02-28 19:17:29 +02:00
Pekka Enberg
13750e9255
Human Rust programmers exist to keep Clippy happy
2025-02-28 19:12:12 +02:00
Pekka Enberg
b4e8afa3c7
Merge 'Implement SQLite balancing algorithm' from Pere Diaz Bou
...
Beep boop.
What happened you ask? I removed the dumb balancing algorithm I
implemented in favor of SQLite's implementation based on B*Tree[1] where
a page is 2/3 full instead of 1/2. It also tries to balance a page by
taking a maximum 3 pages and distributing cells evenly between them.
I've made some changes that are somewhat related:
* Moved most operations on pages out of BTreeCursor because those
operations are based on a page, not on a cursor, and it makes it easier
to test.
* Fixed `write_u16` and `read_u16` cases that didn't need a implicit
offset calculation. Added: `write_u16_no_offset` and
`read_u16_no_offset` to counter this.
* Added some tests with fuzz testing too.
* Fixed some important actions like: `compute_free_space`,
`defragment_page` and `drop_cell`.
[1] https://dl.acm.org/doi/10.1145/356770.356776
Closes #968
2025-02-28 19:10:52 +02:00
Pekka Enberg
6d44ad22fd
core: Optimize read_record() function
...
The SerialType::try_from() was pretty high up in CPU profiles so I asked
my dear friend Claude to optimize it away by using the serial type
integer value directly instead of constructing a fancy enumeration.
2025-02-26 13:31:38 +02:00
Pere Diaz Bou
e25272adc0
fix free_cell_space extend content area
2025-02-17 11:50:15 +01:00
Pere Diaz Bou
ddbfada8bd
fix wrong usage of insert in fuzz tests
2025-02-17 08:47:55 +01:00
Pere Diaz Bou
4d6843d1cc
clippy
2025-02-16 19:27:34 +01:00
Pere Diaz Bou
d276c22a0c
clippy
2025-02-16 19:25:41 +01:00
Pere Diaz Bou
a6f5bcbaf4
fix return find_free_cell
2025-02-16 19:21:37 +01:00
Pere Diaz Bou
286cb8c5bc
fix some free_cell_range pointer reads
2025-02-16 19:10:15 +01:00
Pere Diaz Bou
aea4560422
bring back corrupt errors
2025-02-16 18:51:09 +01:00
Pere Diaz Bou
1687072d77
remove dbg
2025-02-16 18:31:19 +01:00
Pere Diaz Bou
b64cc769b6
fix rebase
2025-02-16 18:31:03 +01:00
Pere Diaz Bou
b5ec5186ea
fix divider cell on leaf data
2025-02-16 18:30:42 +01:00
Pere Diaz Bou
177dbcd403
simplify balance_root
2025-02-16 18:01:33 +01:00
Nikita Sivukhin
37e27131e3
fix inequality
2025-02-16 12:49:55 +04:00
Nikita Sivukhin
d2a507e458
add unit tests for reading integer serial types
2025-02-16 12:46:45 +04:00
Nikita Sivukhin
279652b271
extend sign for 24/48 bit width serial types
2025-02-16 12:46:18 +04:00
Pere Diaz Bou
f9d979575b
fix defragment_page cell payload size calculation
2025-02-15 16:51:52 +01:00
Pere Diaz Bou
d3574f1e55
fix root offfset handling
2025-02-15 16:51:52 +01:00
Pere Diaz Bou
8ba7022e0b
remove dbg prints
2025-02-15 16:51:52 +01:00
Pere Diaz Bou
1b96bd8a30
fix free_cell_area offset check
2025-02-15 16:46:22 +01:00
Pere Diaz Bou
7e55f46b26
fix defragment
2025-02-15 16:46:22 +01:00
Pere Diaz Bou
c65dce6cfd
re implemenet free cell range
2025-02-15 16:46:22 +01:00
Pere Diaz Bou
9d2aaea439
add no offset write and read u16 from page
2025-02-15 16:46:22 +01:00
Pere Diaz Bou
4907de6e21
fix rightpoitner load + some stuff
2025-02-15 16:46:22 +01:00
Pere Diaz Bou
5ff66b8c62
fix reset content area in drop_cell
2025-02-15 16:42:26 +01:00
Pere Diaz Bou
78e7364f45
fuzz test
2025-02-15 16:30:59 +01:00
Pere Diaz Bou
ea77902e24
add defragment test after deletion of odd cells
...
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com >
2025-02-15 16:30:59 +01:00
Pere Diaz Bou
0274f74f32
fix drop cell and add some tests
2025-02-15 16:30:59 +01:00
Pere Diaz Bou
44857cdd17
fix insert test
2025-02-15 16:21:33 +01:00
Pere Diaz Bou
48f0fe0904
multiple cell insert test
2025-02-15 16:21:33 +01:00
Pere Diaz Bou
c4c5a74e16
add a bit of testing
2025-02-15 16:21:33 +01:00
Pere Diaz Bou
7e3470fb8e
fix rebase
2025-02-15 16:18:04 +01:00
Pere Diaz Bou
915bb42412
fix rightmost pointer update
2025-02-15 16:18:04 +01:00
Pere Diaz Bou
0c015e43a2
some fixes
2025-02-15 16:18:04 +01:00
Pere Diaz Bou
05ca716f82
up to finish without fixing stuff
2025-02-15 16:11:29 +01:00
Pere Diaz Bou
0035b9d1bd
up to edit
2025-02-15 15:55:42 +01:00
Pere Diaz Bou
1266994a0a
balance sibling pages
2025-02-15 15:37:13 +01:00
Doug Anderson444
0aa5de6d9f
rm log, switch all to tracing
2025-02-11 09:03:36 -04:00
Pekka Enberg
d221f158cc
Merge 'Add read implementation of user_version pragma with ReadCookie opcode' from Jonathan Webb
...
Just a bare bones implementation of ReadCookie and support for the
user_version pragma
Closes #909
2025-02-10 12:12:15 +02:00
Pekka Enberg
0638550be7
Merge 'Remove unnecessary reference counting from completion I/O callbacks' from Preston Thorpe
...
I am on a bit of a mission to revisit a lot of the ref counting, this
was an easy first win.
It seems to be a linear path of function calls or hashmaps which can own
the completions directly, no cloning needed.
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #912
2025-02-10 12:11:30 +02:00