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
Pekka Enberg
9b268dcc6f
Compare performance to rusqlite
2023-09-02 21:22:38 +03:00
Pekka Enberg
f92a83d083
Switch to LRU page cache
...
Fixes #5
2023-09-02 21:12:41 +03:00
Pekka Enberg
f6f1f97171
Switch cursor lookup to use BTreeMap
...
We're storing integers into the HashMap, BTreeMap is faster because
it avoid the hash function. Furthermore, we expect only to have very few
cursors here anyway, so BTreeMap is perfect.
2023-09-02 20:59:22 +03:00
Pekka Enberg
942239fab1
Simplify ProgramState register allocation
...
...it's faster this way.
2023-09-02 20:55:20 +03:00