Commit Graph

40 Commits

Author SHA1 Message Date
Pere Diaz Bou
cfeddeaadf core: fix payload serialization 2024-07-31 17:27:02 +02:00
Pere Diaz Bou
84bf0ea96a core: remove a bunch of warnings
Signed-off-by: Pere Diaz Bou <pere-altea@hotmail.com>
2024-07-31 17:27:02 +02:00
Pere Diaz Bou
845a1ea175 core: cacheflush and fix *Completion casting 2024-07-31 17:27:02 +02:00
Pere Diaz Bou
7846a3b29c core: fix calculation of record header size varint 2024-07-31 17:27:02 +02:00
Pere Diaz Bou
e6f8b34f2b core: insert_to_page almost complete 2024-07-31 17:27:02 +02:00
Pere Diaz Bou
4474317aa8 core: compute free space 2024-07-31 17:27:02 +02:00
Pere Diaz Bou
6db82abf63 core: move_to 2024-07-31 17:27:02 +02:00
Pere Diaz Bou
a441e5e302 core: new custom lru page cache 2024-07-31 17:27:02 +02:00
Pere Diaz Bou
6357e88b46 core: implement vdbe opcodes minus newrowid 2024-07-31 17:25:01 +02:00
Pekka Enberg
351242561d Kill anyhow usage
Switch anyhow to explicit `LimboError` type using thiserror crate, which
lets us make error handling more structured.
2024-07-25 17:15:08 +03:00
Joan Martinez
6ff27454cc Merge branch 'main' of https://github.com/JoanFM/limbo into fix-io-arc 2024-07-21 19:31:27 +02:00
Joan Martinez
4bcae54aa9 fix: use Arc to handle IO 2024-07-21 19:01:58 +02:00
Bennett Clement
0a4e094ef6 Update COMPAT table and remove unused deps 2024-07-22 00:28:31 +08:00
Bennett Clement
4590c3cc7c Support select <columns> for order by operation 2024-07-22 00:28:27 +08:00
Bennett Clement
2e0d4c6fdb Implement basic ORDER BY
- Only SELECT * is supported
- Only ASC is supported
2024-07-22 00:28:00 +08:00
jussisaurio
70953a4fd0 Left join initial nested loop implementation 2024-07-18 10:55:27 +03:00
Bennett Clement
9bb15c5788 Read raw bytes for index btree pages 2024-07-17 00:38:35 +08:00
Pekka Enberg
30ec86a81e Add sorter utility functions and opcodes
This adds basic in-memory sorting utility functions, similar to SQLite's
src/vdbesort.c. We need to improve this later with external sorting so
to support large data sets.

This also adds sorting functionality to the VDBE. Note that none of this
is wired to SQL translation yet so it's unused for now.
2024-07-07 13:56:55 +03:00
Pekka Enberg
40e5d58cea Fix RewindAwait branching when cursor is empty
Even if we have a page, the cursor can still be empty if there are no
records.
2024-05-07 06:46:03 -03:00
Pekka Enberg
9a73ded4fa Add a Cursor trait and use it
We need an abstract cursor trait to implement a sorter, for example.
2024-03-28 15:01:52 +02:00
Pekka Enberg
ed9f3e6d1e Single-threaded architecture
Use Rc instead of Arc and replace the concurrent LRU with
single-threaded SIEVE.

Fixes #23
Fixes #29
2024-03-03 12:44:45 +02:00
Pekka Enberg
2c55cc797d cargo clippy --fix 2024-01-28 10:21:38 +02:00
Pekka Enberg
225ee98769 cargo fmt 2024-01-28 09:58:04 +02:00
Pekka Enberg
505e28aaeb Reduce memory allocations
Fixes #26
2024-01-28 09:57:12 +02:00
Pekka Enberg
2d625f34c5 core: Optimize Cursor::next() 2024-01-27 09:32:26 +02:00
Pekka Enberg
ae2f403838 core: Fix step() return path when page is under I/O 2024-01-12 17:35:55 +02:00
Pekka Enberg
a39f5c68b4 core: Populate page contents lazily
We need to be able to allocate a new page and insert it into a page
cache without contents for asynchronoous I/O. Let's do that by making
`contents` optional in Page. (We perhaps ought to rename it to
`inner`...)
2024-01-12 16:38:11 +02:00
Pekka Enberg
c28544530e Prepare for asynchronous I/O with page flags
We want to submit I/O asynchronously with io_uring, which means we can
have multiple concurrent lookups to the page that is under I/O.
Therefore, let's add three page flags: up-to-date, locked, and error, so
that the higher level layers can just look up a page, but wait if
there's I/O happening.
2023-11-18 12:19:44 +02:00
Pekka Enberg
20eba95383 Fix get_next_record() for all pages with right-most pointer
The right-most pointer is always kept separate from the cells in an
interior page so let's traverse it in all cases.
2023-10-18 17:54:20 +03:00
Pekka Enberg
0e9cc6b21f Fix full table scans
A full table scan missed some of the last rows because we don't consider
sibling pages when there is no parent.
2023-10-17 16:53:24 +03:00
Pekka Enberg
a2202ed31e Implement reading primary key columns 2023-09-10 13:19:17 +03:00
Pekka Enberg
4a5c71ab7a I/O interface refactoring 2023-09-09 10:22:26 +03:00
Pekka Enberg
0a942f0fd0 Implement full table scan 2023-09-07 21:59:33 +03:00
Pekka Enberg
7c894f3b70 Parse BTree table interior cells 2023-09-04 21:59:00 +03:00
Pekka Enberg
9d2e7c89d7 Page cache 2023-09-02 19:32:49 +03:00
Pekka Enberg
ae709f04fe Make some opcodes wait for completion 2023-09-02 13:26:44 +03:00
Pekka Enberg
3ec9c0be7c Implement ResultRow opcode 2023-09-02 11:40:11 +03:00
Pekka Enberg
b25f8c4daf Implement Cursor::next() 2023-08-31 21:45:04 +03:00
Pekka Enberg
05621e3286 Cursors 2023-08-30 20:26:15 +03:00
Pekka Enberg
b572d60dc5 B-Tree interface 2023-08-29 20:33:16 +03:00