Commit Graph

3801 Commits

Author SHA1 Message Date
Jussi Saurio
7435d005db Merge ' allow insertion of multiple overflow cells ' from Pere Diaz Bou
With big cells it is easy to see multiple overflow cells happen while
balancing. Previously we disallowed insertion with > 1 overflow cells,
let's fix this by allowing it as we should be safe now.
This pr also adds some more comments to the balancing algorithm.

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1270
2025-04-09 10:17:36 +03:00
Jussi Saurio
ed929d2a0a Merge 'Properly handle insertion of indexed columns' from Preston Thorpe
```console
limbo> create index p on products(price);
limbo> explain insert into products (name,price) values ('huh',32);
addr  opcode             p1    p2    p3    p4             p5  comment
----  -----------------  ----  ----  ----  -------------  --  -------
0     Init               0     17    0                    0   Start at 17
1     OpenWriteAsync     0     273   0                    0
2     OpenWriteAwait     0     0     0                    0
3     String8            0     3     0     huh            0   r[3]='huh'
4     Integer            32    4     0                    0   r[4]=32
5     OpenWriteAsync     1     297   0                    0
6     OpenWriteAwait     0     0     0                    0
7     NewRowId           0     1     0                    0
8     MakeRecord         2     3     5                    0   r[5]=mkrec(r[2..4])
9     InsertAsync        0     5     1                    0
10    InsertAwait        0     0     0                    0
11    Copy               4     6     0                    0   r[6]=r[4]
12    Copy               1     7     0                    0   r[7]=r[1]
13    MakeRecord         6     2     8                    0   r[8]=mkrec(r[6..7])
14    IdxInsertAsync     1     8     6                    0   key=r[8]
15    IdxInsertAwait     1     0     0                    0
16    Halt               0     0     0                    0
17    Transaction        0     1     0                    0   write=true
18    Null               0     2     0                    0   r[2]=NULL
19    Goto               0     1     0                    0
```
When an insert happens, we need to be sure to insert into the index
btree as well.

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1265
2025-04-09 10:13:59 +03:00
Jussi Saurio
08b352cd81 Merge 'VTabs: Proper handling of re-opened db files without the relevant extensions loaded' from Preston Thorpe
closes #1239
![image](https://github.com/user-
attachments/assets/69b9f370-f622-45db-9c61-301991176da9)
warns the user if a .db file is opened that contains a schema entry of a
vtab created with a module that is no longer loaded.
If the module is loaded for that connection, the user can properly query
the table.

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1244
2025-04-09 09:36:26 +03:00
PThorpe92
9b1e60a29c Fix typo in ext library lock err message 2025-04-08 20:10:50 -04:00
PThorpe92
41ac91f14f Add tests for parsing vtab creation sql in ParseSchema 2025-04-08 20:10:49 -04:00
PThorpe92
3a7f1e4056 Add comments explaining flow of reloading vtabs from schema tbl 2025-04-08 20:10:49 -04:00
PThorpe92
6b5ec1f07b Remove mut borrow from sym table in parse schema fn 2025-04-08 20:10:49 -04:00
PThorpe92
a0f71e27be Fix cli tests 2025-04-08 20:10:49 -04:00
PThorpe92
c15035caf8 Add module and vtab to schema after table is reopened with proper ext 2025-04-08 20:10:48 -04:00
PThorpe92
4b9b6c969b Parse schema rows after extensions are loaded 2025-04-08 20:10:47 -04:00
PThorpe92
3ad7d194cb Prevent panic on loading non-existent vtab module 2025-04-08 20:09:27 -04:00
Pere Diaz Bou
ce7e0188f6 bring back i64 page sizes while balancing 2025-04-08 17:57:39 +02:00
Pere Diaz Bou
cf62099bf5 allow insertion of multiple overflow cells 2025-04-08 16:43:15 +02:00
Pere Diaz Bou
029da5c81c Improve readability of balance_non_root with comments and validation extraction 2025-04-08 16:43:15 +02:00
Pere Diaz Bou
e368cd1499 Merge 'Account divider cell in size while distributing cells' from Pere Diaz Bou
~~Moving cells from right to left involves moving cell that are from any
page in the right, from left to right, this means we update the size of
page of adjacent one only but not the last one. This is kinda weird but
it works. I might change it if it feels to weird.~~
Update: my previous analysis was obviously incorrect. Underflowing is
undesired behaviour and accounting for divider cell avoided it.

Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1269
2025-04-08 16:42:16 +02:00
Pekka Enberg
0ec12b0192 Merge 'Format infinite float as "Inf"/"-Inf"' from jachewz
## Issue
Numeric values outside the range of what f64 can represent are formatted
to strings as "Inf" or "-Inf" in sqlite, but they are "inf" and "-inf"
in limbo.
```
sqlite> SELECT 1.7976931348623157E+309;
Inf
```
```
limbo> SELECT 1.7976931348623157E+309;
┌─────────────────────────┐
│ 1.7976931348623157E+309 │
├─────────────────────────┤
│                     inf │
└─────────────────────────┘
```
closes #1248

Closes #1272
2025-04-08 16:52:36 +03:00
jachewz
12ae07874e fmt inf float str as "Inf"/"-Inf" 2025-04-08 23:33:34 +10:00
PThorpe92
224f913ae7 Handle composite key indexes on insert 2025-04-08 08:55:14 -04:00
PThorpe92
878c987026 Remove is_null check from create index translation 2025-04-08 08:55:14 -04:00
PThorpe92
1f29307fe8 Support proper index handling when doing insertions 2025-04-08 08:55:14 -04:00
Pere Diaz Bou
fded6ccaf3 rever iterations fuzz test 2025-04-08 14:09:17 +02:00
Pere Diaz Bou
c0c66bf8af remove wrong comment 2025-04-08 14:06:48 +02:00
Pere Diaz Bou
8c4003908f bring back usize, it shouldn't underflow 2025-04-08 14:05:30 +02:00
Pere Diaz Bou
40f8bbe132 clippy 2025-04-08 11:31:38 +02:00
Pere Diaz Bou
8e88b0cd14 new_page_sizes as Vec<i64> 2025-04-08 11:31:38 +02:00
Pere Diaz Bou
3950ab1e52 account for divider cell size in page size 2025-04-08 11:31:38 +02:00
Pere Diaz Bou
f7de575873 Merge 'update sqlite download version to 2025 + remove www.' from Pere Diaz Bou
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com>

Closes #1271
2025-04-08 11:30:53 +02:00
Pere Diaz Bou
b83b51e973 remove www. prefix 2025-04-08 11:16:32 +02:00
Pere Diaz Bou
03f531417c update sqlite download version to 2025 2025-04-08 11:12:20 +02:00
Pekka Enberg
33afc7cef3 Merge 'Improve validation of btree balancing' from Pere Diaz Bou
This pr sprinkles debug compile check to ensure things stay in a
reliable state.

Closes #1261
2025-04-07 19:35:00 +03:00
Pere Diaz Bou
6086284613 fix debug imports 2025-04-07 18:06:52 +02:00
Pere Diaz Bou
83f13596a4 decrease fuzz test steps again 2025-04-07 18:01:08 +02:00
Pere Diaz Bou
f137ddfdf8 add loop left pointer validation 2025-04-07 18:01:08 +02:00
Pere Diaz Bou
6ac2368ae2 update divider cell that is being balanced 2025-04-07 18:00:49 +02:00
Pere Diaz Bou
0541da46df add strict btree validation after non root balancing in debug mode 2025-04-07 18:00:49 +02:00
Pere Diaz Bou
ff8ec5455c fix divider cell selection 2025-04-07 18:00:30 +02:00
Pere Diaz Bou
9eb9e7021e Fix index table new divider cell pointer 2025-04-07 18:00:30 +02:00
Pere Diaz Bou
f4920cb96b assert new divider cell points to the correct place 2025-04-07 18:00:30 +02:00
Pere Diaz Bou
15ed7642c9 check all keys are present on every insert with fuzz test
Let's make sure every insert does still contain all keys. Previously we
did this at the end but it made it hard to debug issues that
`validate_btree` might not encounter.
2025-04-07 18:00:30 +02:00
Pekka Enberg
96ed7c5982 Merge 'Remainder fixes' from jachewz
This PR should close two related issues:
## 1. Remainder operand with lhs as text
Before:
```
limbo> SELECT 10 % '3';
┌──────────┐
│ 10 % '3' │
├──────────┤
│        3 │
└──────────┘
```
sqlite:
```
sqlite> SELECT 10 % '3';
1
```
After:
```
limbo> SELECT 10 % '3';
┌──────────┐
│ 10 % '3' │
├──────────┤
│        1 │
└──────────┘
```
## Overflow when min int64 % -1
Before:
```
limbo> SELECT -9223372036854775808 % -1;
thread 'main' panicked at core/vdbe/insn.rs:974:37:
attempt to calculate the remainder with overflow
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
sqlite:
```
sqlite> SELECT -9223372036854775808 % -1;
0
```
After:
```
limbo> SELECT -9223372036854775808 % -1;
┌─────────────────────────────┐
│ - 9223372036854775808 % - 1 │
├─────────────────────────────┤
│                           0 │
└─────────────────────────────┘
```
Tests for these cases are also added, and the `%` operator tests in
`math.test` were renamed to `remainder-` instead of `mod-` to
differentiate from tests for the `mod()` function.
Closes #1172

Closes #1267
2025-04-07 17:22:15 +03:00
jachewz
ebf467d04e rename math.test % operator tests from mod- to remainder- 2025-04-07 22:03:48 +10:00
jachewz
db15661b7e fix: i64 % -1 overflow panic 2025-04-07 22:03:48 +10:00
jachewz
a72b75e193 fix: remainder operator rhs text 2025-04-07 22:03:48 +10:00
Pekka Enberg
3a1b87eb21 Update README.md 2025-04-07 09:02:55 +03:00
Pekka Enberg
4ca8efac0d Merge 'Added 'Likely' Scalar Function' from Duncan Lutz
This patch implements the "likely(x)" scalar function, which simply
returns the original value provided to it as it's result.

Closes #1266
2025-04-07 08:52:38 +03:00
Duncan Lutz
aa7c64cb19 feat: added likely scalar function 2025-04-06 23:14:30 -06:00
Pekka Enberg
6eb89ca2a1 Merge 'Add deterministic Clock' from Avinash Sajjanshetty
Fixes #603
This patch adds a `Clock` trait whose member function `now` returns an
`Instant`. Now in sim, we can nicely make the clock deterministic.
The earlier method `get_current_time` returned `chrono::Local::now()`.
The `Instant` returned by `now` carries the same information.

Closes #1263
2025-04-06 23:27:36 +03:00
Avinash Sajjanshetty
3543e83b91 Impl Clock trait in bindings 2025-04-06 23:34:15 +05:30
Avinash Sajjanshetty
2873c36b31 Implement trait Clock for implemented IOs
Replace `chrono::Local::now()` to return `Instant` but containing
same info
2025-04-06 23:34:13 +05:30
Avinash Sajjanshetty
8d6d50d9d5 Update IO trait
- Remove existing `get_current_time() -> String`
- Add super trait bound `Clock`
2025-04-06 23:06:57 +05:30