Kunal Singh
00c26286ce
fix: lint warnings
2024-07-08 22:43:11 +05:30
Pere Diaz Bou
932ae7bf3f
core: update pragma in transalte
2024-06-19 20:37:17 +02:00
Pere Diaz Bou
53c348402a
core: parse unary and write to disk
2024-06-19 20:37:15 +02:00
Pere Diaz Bou
d795a7a3ba
core: introduce pseudo program with pragma
...
Introduced pragma statement parsing and update in memory of default page cache size.
There are some more "improvements" to the print insn procedure — I couldn't decide what was the preferred way in rust to do printing on different int types so I went with the stupidest I could think of at the moment.
2024-06-19 20:32:21 +02:00
Pekka Enberg
ed9f3e6d1e
Single-threaded architecture
...
Use Rc instead of Arc and replace the concurrent LRU with
single-threaded SIEVE.
Fixes #23
Fixes #29
2024-03-03 12:44:45 +02:00
Pekka Enberg
3d1d4e5355
core: Make OwnedValue cloning cheaper
2024-01-28 12:56:34 +02:00
Pekka Enberg
07912ee139
Use OwnedRecord::new()
2024-01-28 10:22:22 +02:00
Pekka Enberg
2c55cc797d
cargo clippy --fix
2024-01-28 10:21:38 +02:00
Pekka Enberg
bb3cc32d6d
Use RefCell instead of Mutex for DatabaseHeader
2024-01-28 10:17:23 +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
a06225d4ff
Fix broken test case
2024-01-26 17:27:31 +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
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
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