Jussi Saurio
6d2ca58235
get_prev_record() small fixes
2025-06-10 14:16:26 +03:00
Jussi Saurio
07c947b47d
use GE for idx delete seek, although it doesnt really matter
2025-06-10 14:16:26 +03:00
Jussi Saurio
9caa8334be
add FIXME about balance after interior node replacement
2025-06-10 14:16:26 +03:00
Jussi Saurio
10caca25c9
advance in balance_non_root() if -1 idx
2025-06-10 14:16:26 +03:00
Jussi Saurio
d827eeade0
For now always calculate post-balance seek key
2025-06-10 14:16:26 +03:00
Jussi Saurio
976c2f72ef
OpIdxDeleteState needs another state to be re-entrant
2025-06-10 14:16:26 +03:00
Jussi Saurio
58172641fd
Use SeekOP:LT after post-deletebalancing to end up pointing to the left of the deleted row
2025-06-10 14:16:26 +03:00
Jussi Saurio
e1bc268a65
fix CREATE TABLE hang
2025-06-10 14:16:26 +03:00
Jussi Saurio
a5aeff9a3d
Fix index insert accidentally double-inserting after balance
2025-06-10 14:16:26 +03:00
Jussi Saurio
04e89c0c4a
actually fix drop table
2025-06-10 14:16:26 +03:00
Jussi Saurio
843eb18daf
simplify cursor.exists() by using seek()
2025-06-10 14:16:26 +03:00
Jussi Saurio
844461d20b
update and delete fixes
2025-06-10 14:16:26 +03:00
Jussi Saurio
d81f5f67bd
insert spaghetti fixes
2025-06-10 14:16:26 +03:00
Jussi Saurio
499296d396
fix drop table again: only stack.advance() in a single place
2025-06-10 14:16:26 +03:00
Jussi Saurio
1b4bef9c7c
Fix op_idx_delete infinite seeking loop
2025-06-10 14:16:26 +03:00
Jussi Saurio
5c08d259bf
Fix drop table: initialize loaded pages to cell idx 0
2025-06-10 14:16:26 +03:00
Jussi Saurio
e897052650
flatten process_overflow_read() to get rid of borrowmuterror possibility
2025-06-10 14:16:26 +03:00
Jussi Saurio
da2437408e
get_new_rowid(): fix off by one - rowids start at 1
2025-06-10 14:16:26 +03:00
Jussi Saurio
5f60cce3c7
fix seek_to_last()
2025-06-10 14:16:26 +03:00
Jussi Saurio
0ce18a9146
Fix comment
2025-06-10 14:16:26 +03:00
Jussi Saurio
0b7f5a2a13
Merge MoveTo&Seek states, remove unnecessary seekstate methods, add eq_seen flag to prevent unnecessary next()/prev()
2025-06-10 14:16:26 +03:00
Jussi Saurio
2bac140d73
Remove SeekOp::EQ and encode eq_only in LE&GE - needed for iteration direction aware equality seeks
2025-06-10 14:16:26 +03:00
Jussi Saurio
ae6a943e43
Leave parent pointing at rightmost pointer at the end of balance_root()
2025-06-10 14:16:26 +03:00
Jussi Saurio
cba84b7ce9
Remove premature cast to usize (cell_idx can be negative)
2025-06-10 14:16:26 +03:00
Jussi Saurio
8ad6aadbbd
remove unnecessary SeekingIndexMoveUp state
2025-06-10 14:16:26 +03:00
Jussi Saurio
a3ffc6f4e2
Align prev() implementation with next()
2025-06-10 14:16:26 +03:00
Jussi Saurio
58e1a2f5bc
Remove unnecessary self.prev() from last()
2025-06-10 14:16:26 +03:00
Jussi Saurio
8941c4a537
fmt
2025-06-10 14:16:26 +03:00
Jussi Saurio
6e5f05a257
Remove unnecessary cell_idx move from tablebtree_move_to()
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
0f79b0dd50
fix prev?
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
f83d837131
fix next to not advance if not necessary
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
f261d5b6af
compare on next/prev after seek
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
681df9b1eb
fix get record
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
b46852a366
move setting target key in delete if balance is needed
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
c52d9a52d9
fix count
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
96324834a5
invalidate records on movement
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
77b6896eae
implement lazy record and rowid in cursor
...
This also comments save_context for now
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
b0c64cb4d2
parse record lazily
2025-06-10 14:16:26 +03:00
Pere Diaz Bou
105de7e1d8
seek, next and prev return bool
2025-06-10 14:16:26 +03:00
pedrocarlo
a9ed8dd288
namespace exec_min and exec_max to Value for reuse in simulator
2025-06-09 11:59:44 -03:00
pedrocarlo
39f85ffd03
namespace exec_like to Value
2025-06-09 11:39:55 -03:00
pedrocarlo
6c95a88533
namespace many functions to Value
2025-06-09 11:38:15 -03:00
pedrocarlo
4bbe780a34
add optional serde serialization and deserialization to limbo Value
2025-06-09 11:38:15 -03:00
Pere Diaz Bou
cb4efdbc19
Merge 'LimboRwLock write and read lock fixes' from Pere Diaz Bou
...
* `write` was returning `true` even though it shouldn't because it
should return `false` in case it was already acquired.
* `read` theoritically can increase `nread` after another thread calls
`unlock` between first lock load and increase of `nread`. So it looks
something like this:
1. THREAD 1: read()
2. THREAD 2: get lock = `SHARED_LOCK`
3. THREAD 1: unlock -> lock is now `NO_LOCK`
4. THREAD 2: increase nread, return true.
This is obviously wrong because `nreads` will be ` > 0 ` but `lock`
is `NO_LOCK`
Closes #1676
2025-06-09 16:15:46 +02:00
Jussi Saurio
18e6987904
Remove plan.to_sql_string() from optimize_plan() as it panics on TODOs
2025-06-09 09:45:06 +03:00
Jussi Saurio
2075e5f3eb
Fix UPDATE always inserting only nulls into non-unique indexes
2025-06-09 08:51:23 +03:00
Jussi Saurio
8ffe6208a3
Merge 'Minor: use use_eq_ignore_ascii_case in some places' from Anton Harniakou
...
Use `eq_ignore_ascii_case` because it's cooler 😎 than `x.to_lowercase()
== y.to_lowercase()`.
Closes #1678
2025-06-09 08:29:56 +03:00
Jussi Saurio
f289897450
Merge 'Remove the FromValue trait' from Anton Harniakou
...
This PR removes the FromValue trait and implements TryFrom trait instead
for RefValue.
Closes #1682
2025-06-09 08:26:04 +03:00
Jussi Saurio
9c9869f485
Merge 'Support sqlite_master schema table name alias' from Anton Harniakou
...
Related to #1641 . Adds support for `sqlite_master` schema table name.
Reviewed-by: Diego Reis (@el-yawd)
Closes #1669
2025-06-09 08:23:58 +03:00
Jussi Saurio
eec7c0529c
Merge 'Beginnings of AUTOVACUUM' from Zaid Humayun
...
This PR adds the beginnings of
[AUTOVACUUM](https://www.sqlite.org/lang_vacuum.html ) to Limbo. It adds
a feature flag called `omit_autovacuum` which is analogous to
`SQLITE_OMIT_AUTOVACUUM`. It is off by default, same as SQLite.
It introduces the concept of [pointer map pages](https://www.sqlite.org/
fileformat.html#pointer_map_or_ptrmap_pages) which are reverse index
pages used to map pages to their parents. This is used to swap pages
(when a table is deleted for instance) to keep root pages clustered at
the beginning of the file. It's also used while creating a table to
ensure that root pages are clustered at the beginning (although, this
isn't completely implemented yet)
Finally, it also adds a couple of missing instructions like `Int64` that
are required for `PRAGMA` commands related to `auto_vacuum` settings
<img width="1512" alt="Screenshot 2025-05-28 at 8 47 51 PM"
src="https://github.com/user-
attachments/assets/d52eb74f-5b79-4d52-9401-1bdc2dcc304d" />
Closes #1600
2025-06-09 08:20:24 +03:00