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
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
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
2267ee121b
Introduce Completion type
2023-11-09 21:11:48 +02: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
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
4a5c71ab7a
I/O interface refactoring
2023-09-09 10:22:26 +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
Pekka Enberg
f34ccb0f43
Simplify read_varint() function
...
It's in the hot path so let's get rid of the redundant `Result` return type.
2023-09-02 20:40:58 +03:00
Pekka Enberg
7784f4415d
Allocate vector with capacity in read_record()
...
...it's faster that way.
2023-09-02 20:39:15 +03:00
Pekka Enberg
3ec9c0be7c
Implement ResultRow opcode
2023-09-02 11:40:11 +03:00
Pekka Enberg
4b714311b5
Improve Column instruction
2023-08-31 22:05:05 +03:00
Pekka Enberg
b25f8c4daf
Implement Cursor::next()
2023-08-31 21:45:04 +03:00
Pekka Enberg
6a2d36f4c1
Buffer pool
2023-08-27 12:17:20 +03:00
Pekka Enberg
fb72f9688b
Initial commit
2023-08-27 09:59:12 +03:00