Commit Graph

123 Commits

Author SHA1 Message Date
Pekka Enberg
d5bceaefdb Remove redundant loop from Statement::step() 2024-01-28 10:18:59 +02:00
Pekka Enberg
bb3cc32d6d Use RefCell instead of Mutex for DatabaseHeader 2024-01-28 10:17:23 +02:00
Pekka Enberg
f2cd403944 core: Replace Mutex with RefCell in BufferPool 2024-01-28 10:13:03 +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
af258a4958 core: Disable invalid UTF-8 sequence test case
We disabled UTF-8 validation in read_value() in
bb56ba0736 so let's fix the test case to
reflect that.
2024-01-27 10:16:59 +02:00
Pekka Enberg
3e6bf6892a core: Switch to Rc in Value::Text
Makes deallocation much faster...
2024-01-27 10:09:35 +02:00
Pekka Enberg
0b3db02451 core: Make Value::Text reference counted
Avoids lots of memory copies as values get passed through the different
layers.
2024-01-27 09:48:02 +02:00
Pekka Enberg
bb56ba0736 core: Skip UTF-8 validation in read_value()
The UTF-8 validation is very expensive. It's unclear if we ever need to
do it at read time and if we do, let's do it when we know the value is
actually going to be used. Speeds up read_value() a lot.
2024-01-27 09:46:20 +02:00
Pekka Enberg
2d625f34c5 core: Optimize Cursor::next() 2024-01-27 09:32:26 +02:00
Pekka Enberg
a06225d4ff Fix broken test case 2024-01-26 17:27:31 +02:00
Pekka Enberg
4fe59a1edb SQLite compatibility document 2024-01-26 17:25:12 +02:00
Pekka Enberg
426b2d568b Revert "core: Optimize read_value() for strings"
This reverts commit 7c05149bcf.
2024-01-24 19:14:20 +02:00
Pekka Enberg
7bdecf2e41 Update README.md 2024-01-24 17:57:43 +02:00
Pekka Enberg
fe82aa569f core: Optimize read_record() 2024-01-24 17:56:09 +02:00
Pekka Enberg
274c8109d6 core: Optimize read_record()
The serial type varints are typically just a single byte, so let's
allocate at least header size bytes in the vector to reduce need to grow
it.
2024-01-24 17:56:09 +02:00
Pekka Enberg
4804c2a686 core: Optimize finish_read_btree_page() 2024-01-24 17:56:09 +02:00
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