Commit Graph

84 Commits

Author SHA1 Message Date
Pekka Enberg
7c05149bcf core: Optimize read_value() for strings 2024-01-24 17:56:09 +02:00
Pekka Enberg
490c3b2dda core: Optimize read_varint() 2024-01-24 17:56:09 +02:00
Pekka Enberg
8c2926e4d1 core/linux: Make io_uring larger 2024-01-24 17:25:33 +02:00
Pekka Enberg
d2a925698d core/linux: Don't block in run_once() 2024-01-24 17:25:19 +02:00
Pekka Enberg
0b9b6cfd29 Asynchronous I/O 2024-01-24 08:14:53 +02:00
Pekka Enberg
2bb56ade4b Tracing improvements 2024-01-14 15:47:54 +02:00
Pekka Enberg
725eed964b Tracing improvements 2024-01-14 15:36:59 +02:00
Pekka Enberg
44dcd48071 Fix WebAssembly build 2024-01-14 15:29:27 +02:00
Pekka Enberg
9af2a285b1 Fix build on Darwin 2024-01-13 09:14:26 +02:00
Pekka Enberg
08b40f2af7 core/linux: Move I/O completion to io_uring
Move the Completion::complete() call to the io_uring machinery. We still
essentially do synchronous I/O because of the call to submit_and_wait()
in pread(), but let's take one step at a time...
2024-01-13 09:11:35 +02:00
Pekka Enberg
5ea214083a core: Switch to using Arc<Completion>
We need to be able to leak a reference for io_uring so switch to
Arc<Completion> in the code.
2024-01-13 09:03:21 +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
e5798838a0 core: Split page reading into I/O and parsing
In preparation for actually making page reads async, split page reading
into two parts: I/O submission with `begin_read_btree_page()` and
parsing with `finish_read_btree_page()`. Also wire up completion to
perform the read parsing.

Next step is to move the Completion.complete() call somewhere in the I/O
layer and make sure we return from the VM correctly if page is under
I/O.
2024-01-12 17:23:46 +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
93670b0505 core: Add Completion.complete() helper 2024-01-12 15:51:10 +02:00
Pekka Enberg
2724b0f411 Simplify Buffer and Completion
Eliminate the explicit lifetime parameter from Buffer to simplify the code.
2024-01-05 16:32:21 +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
509b322f8a Fix build on Linux 2023-11-11 09:21:13 +02:00
Pekka Enberg
2267ee121b Introduce Completion type 2023-11-09 21:11:48 +02:00
Pekka Enberg
76d16cb506 Fix I/O module compilation on wasm target 2023-10-24 19:05:34 +03:00
Pekka Enberg
dad0b6d627 Disable mimalloc for wasm target 2023-10-24 19:01:22 +03: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
97185bfefc Pin buffer into memory
Make sure the buffer is pinned into memory for I/O.
2023-09-30 19:24:09 +03:00
Pekka Enberg
9098744a37 Rename to Limbo 2023-09-30 15:40:35 +03:00
Pekka Enberg
de6f327a4a Move raw buffer to I/O module 2023-09-30 14:19:55 +03:00
Pekka Enberg
1e1e096a48 Refactor I/O and storage layers 2023-09-16 09:34:17 +03:00
Pekka Enberg
b49c242266 Rename PageSource to File 2023-09-10 22:01:45 +03:00
Pekka Enberg
fe41f46bc0 I/O trait 2023-09-10 21:57:36 +03:00
Pekka Enberg
58eab38066 I/O layer cleanups 2023-09-10 21:02:23 +03:00
Pekka Enberg
72e92820d6 Share I/O ring across multiple files 2023-09-10 20:57:54 +03:00
Pekka Enberg
e08d23a008 Implement LIMIT clause
Note that we handle `LIMIT 0` a bit different from SQLite, which just
detects the case and generates an unconditional jump doing nothing.

Fixes #3
2023-09-10 13:42:57 +03:00
Pekka Enberg
a2202ed31e Implement reading primary key columns 2023-09-10 13:19:17 +03:00
Pekka Enberg
28854b3606 Merge branch 'main' of github.com:penberg/lig 2023-09-10 12:43:21 +03:00
Pekka Enberg
25ab9afd65 Silence function not used warning 2023-09-10 12:43:08 +03:00
Pekka Enberg
031071d80e Eliminate enum warning 2023-09-10 12:41:07 +03:00
Pekka Enberg
f6cbd9cd6c Eliminate unused variables 2023-09-10 12:39:30 +03:00
Pekka Enberg
e38c816ee8 Move translate() into its own file 2023-09-10 12:37:17 +03:00
Pekka Enberg
a80fa36d1e Fix compliation on Linux 2023-09-09 12:43:08 +03:00
Pekka Enberg
caf56bdc77 Fix build on macOS 2023-09-09 12:42:22 +03:00
Pekka Enberg
60abb68cef io_uring support 2023-09-09 12:36:54 +03:00
Pekka Enberg
29a6c6b877 Fix benchmark compilation 2023-09-09 10:24:08 +03:00
Pekka Enberg
4a5c71ab7a I/O interface refactoring 2023-09-09 10:22:26 +03:00
Pekka Enberg
49c19b55ab Unify sync I/O 2023-09-08 20:27:32 +03:00
Pekka Enberg
0a942f0fd0 Implement full table scan 2023-09-07 21:59:33 +03:00
Pekka Enberg
e75fa010dc Add tests for SerialType::try_from() 2023-09-06 22:06:29 +03:00
Pekka Enberg
7977b23ae5 Fix read_value() and read_varint() corner cases 2023-09-06 19:46:18 +03:00
Pekka Enberg
7c894f3b70 Parse BTree table interior cells 2023-09-04 21:59:00 +03:00
Pekka Enberg
0cdf54a8c7 Fix column affinity detection
As it turns out, column affinity is tricky in SQLite...

https://www.sqlite.org/datatype3.html#determination_of_column_affinity
2023-09-04 21:19:12 +03:00
Pekka Enberg
b113fa2d10 Fix read_varint() implementation
It was giving wrong results when reading a database file.
2023-09-04 21:11:11 +03:00