Commit Graph

106 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
d672fc74c3 Update README.md 2024-01-24 17:41:49 +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
5c88141a4f Merge pull request #18 from penberg/async-io
Asynchronous I/O
2024-01-24 17:22:58 +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
1d3560f9a7 Merge pull request #24 from penberg/fix-wasm
Fix WebAssembly build
2024-01-14 15:32:34 +02:00
Pekka Enberg
44dcd48071 Fix WebAssembly build 2024-01-14 15:29:27 +02:00
Pekka Enberg
6c0fb89671 wasm: Fix IO.get() function signature 2024-01-14 15:04:05 +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
9a463c636c Update README.md 2023-12-28 12:49:44 +02:00
Pekka Enberg
9a81ff7fdd Merge pull request #14 from penberg/penberg-patch-1
Configure GitHub Actions
2023-12-28 12:45:27 +02:00
Pekka Enberg
458dcc6204 Configure GitHub Actions 2023-12-28 12:42:41 +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
9781b2fdf2 Add publication 2023-10-26 15:02:56 +03: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
e17eea96ab Add support for executing SQL directly without REPL 2023-10-06 20:03:02 +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
9db164b319 Update README.md 2023-09-30 15:58:36 +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
917bf258d9 Fixup gen-database.py 2023-09-10 13:48:23 +03:00
Pekka Enberg
8b0d4e731a Update README.md 2023-09-10 13:48:14 +03:00
Pekka Enberg
f59aea7dd9 Update README.md 2023-09-10 13:45:01 +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
bc9c53ec52 Switch to raw output mode by default 2023-09-10 12:44:33 +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