Commit Graph

78 Commits

Author SHA1 Message Date
Pekka Enberg
2fc5c0ce5c Switch to runtime flag for enabling indexes
Makes it easier to test the feature:

```
$ cargo run --  --experimental-indexes
Limbo v0.0.22
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database
limbo> CREATE TABLE t(x);
limbo> CREATE INDEX t_idx ON t(x);
limbo> DROP INDEX t_idx;
```
2025-06-26 10:07:28 +03:00
Pekka Enberg
5c35810f78 sqlite3: Make Clippy happy 2025-06-16 11:07:39 +03:00
Pekka Enberg
5b47c9932d sqlite3: Make sqlite3 thread safe with a mutex
Make the sqlite3 object thread-safe with a mutex, like SQLite does.
2025-06-16 11:03:21 +03:00
Pekka Enberg
5fb50245ed sqlite3: Clean up sqlite3_wal_checkpoint() function 2025-06-16 11:02:44 +03:00
Pekka Enberg
50fdf7105d sqlite3: Clean up sqlite3_extended_errcode() function 2025-06-16 11:02:44 +03:00
Pekka Enberg
6901b7bcd6 sqlite3: Clean up sqlite3_errmsg() function 2025-06-16 11:02:44 +03:00
Pekka Enberg
0830578ec5 sqlite3: Clean up sqlite3_errcode() function 2025-06-16 11:02:44 +03:00
Pekka Enberg
5477d0a4f5 sqlite3: Clean up sqlite3_safety_check_sick_or_ok() function
Underscore in parameter or variable name indicates it's not used. Also,
drop useless `crate` qualifier from constants.
2025-06-16 11:02:44 +03:00
Pekka Enberg
0b0f712575 sqlite3: Move sqlite3_safety_check_sick_or_ok() to lib.rs
It's pointless to have a module for just one function...
2025-06-16 11:02:43 +03:00
Pekka Enberg
90c1e3fc06 Switch Connection to use Arc instead of Rc
Connection needs to be Arc so that bindings can wrap it with `Mutex` for
multi-threading.
2025-06-16 10:43:19 +03:00
Pekka Enberg
3250560eb8 sqlite3: Add libsql_wal_get_frame() API 2025-05-27 13:47:40 +03:00
Pekka Enberg
9f5904d4df cargo fmt 2025-05-22 13:02:30 +03:00
Pekka Enberg
7d471889eb sqlite3: Switch to tracing logger
...we now actually see logging from core too.
2025-05-22 12:37:09 +03:00
Pekka Enberg
524a523036 sqlite3: Add libsql_wal_frame_count() API 2025-05-15 11:43:44 +03:00
Pekka Enberg
78eb901940 sqlite3: Fix sqlite3_step() when I/O is submitted 2025-05-15 11:43:44 +03:00
Pekka Enberg
4553adf317 Merge 'Rename OwnedValue -> Value' from Pekka Enberg
We have not had enough merge conflicts for a while so let's do a tree-
wide rename.

Closes #1488
2025-05-15 10:31:36 +03:00
Pekka Enberg
e3f71259d8 Rename OwnedValue -> Value
We have not had enough merge conflicts for a while so let's do a
tree-wide rename.
2025-05-15 09:59:46 +03:00
Pekka Enberg
cac464b49a sqlite3: Switch error to trace-level logging
...it's pretty pointless to spam the logs for this.
2025-05-15 09:15:35 +03:00
Pekka Enberg
41e9d7f9b8 sqlite3/tests: Run Rust-based test suite also with SQLite
You can now run the tests with SQLite with:

```
cargo test --test compat --features sqlite3
```
2025-05-15 09:15:35 +03:00
Pere Diaz Bou
ee55116ca6 return row as reference to registers 2025-03-29 22:04:08 +01:00
Pere Diaz Bou
bf37fd3314 wip 2025-03-29 22:02:49 +01:00
Pere Diaz Bou
9291f60722 Introduce Register struct
OwnedValue has become a powerhouse of madness, mainly because I decided
to do it like that when I first introduced AggContext. I decided it was
enough and I introduced a `Register` struct that contains `OwnedValue`,
`Record` and `Aggregation`, this way we don't use `OwnedValue` for
everything make everyone's life harder.

This is the next step towards making ImmutableRecords the default
because I want to remove unnecessary allocations. Right now we clone
OwnedValues when we generate a record more than needed.
2025-03-27 17:53:02 +01:00
Pekka Enberg
7fc61b7b3d sqlite3: Add trace logging to sqlite3_exec() 2025-03-17 16:17:18 +02:00
Pekka Enberg
7ae1da0f3c Ignore some failing Rust SQLite test cases
...they fail on CI, but not locally so disable them until we got them sorted out.
2025-03-12 18:56:32 +02:00
Pere Diaz Bou
f7c8d4cc69 test_open_existing fix 2025-03-12 16:06:52 +01:00
Pere Diaz Bou
e65d76f51f fmt 2025-03-12 16:06:29 +01:00
Pere Diaz Bou
40a78c32b6 fix sqlite3 lib db test path 2025-03-12 16:00:46 +01:00
Pekka Enberg
cb68b2ec1b sqlite3: cargo fmt 2025-03-10 12:22:01 +02:00
karan
34876c4711 fixing erro code for sqlite open
Signed-off-by: karan <karanjanthe@gmail.com>
2025-03-08 09:52:43 +05:30
Pekka Enberg
96175cccf7 cli: Add --experimental-mvcc option to enable MVCC 2025-03-06 10:16:42 +02:00
Pere Diaz Bou
8daf7666d1 Make database Sync + Send 2025-03-05 14:07:48 +01:00
Pekka Enberg
936ae307b7 core: Kill value type
We currently have two value types, `Value` and `OwnedValue`. The
original thinking was that `Value` is external type and `OwnedValue` is
internal type. However, this just results in unnecessary transformation
between the types as data crosses the Limbo library boundary.

Let's just follow SQLite here and consolidate on a single value type
(where `sqlite3_value` is just an alias for the internal `Mem` type).
The way this will eventually work is that we can have bunch of
pre-allocated `OwnedValue` objects in `ProgramState` and basically
return a reference to them all the way to the application itself, which
extracts the actual value.
2025-02-26 10:57:45 +02:00
Tiago Ribeiro
d807b533f7 Update sqlite3 c binding to use the new retrieval methods to access Record values. 2025-02-10 00:27:52 -07:00
Pekka Enberg
c210821100 core: Move result row to ProgramState
Move result row to `ProgramState` to mimic what SQLite does where `Vdbe`
struct has a `pResultRow` member. This makes it easier to deal with result
lifetime, but more importantly, eventually lazily parse values at the edges of
the API.
2025-02-06 11:52:26 +02:00
Jorge López
86a4714711 syntactic changes: remove unneeded paths when the type is already imported 2025-01-18 18:29:12 +01:00
Pekka Enberg
276819369c sqlite3: Add in-memory support to sqlite3_open() 2025-01-04 10:58:51 +02:00
Daniel Kaluza
3b85015f55 Fix inconsistent SQLITE_NOTFOUND error code 2025-01-03 11:19:21 +01:00
PThorpe92
f6cd707544 Add clippy CI, fix or ignore warnings where appropriate 2024-12-29 10:25:41 -05:00
Pekka Enberg
f2ecebc357 Rename RowResult to StepResult
The name "row result" is confusing because it really *is* a result from
a step() call. The only difference is how a row is represented as we
return from VDBE or from a statement.

Therefore, rename RowResult to StepResult.
2024-12-27 10:20:41 +02:00
Pere Diaz Bou
5cd84a407f fmt 2024-12-24 18:42:58 +01:00
Pere Diaz Bou
aed14117c9 core: transaction support 2024-12-24 18:04:30 +01:00
Pekka Enberg
8387e7903c sqlite: Fix source formatting 2024-12-20 09:30:03 +02:00
Pekka Enberg
56710b0187 sqlite3: Implement sqlite3_free_table() 2024-12-20 09:18:31 +02:00
Pekka Enberg
d0fa9e07f7 Merge 'sqlite3: Add sqlite3_wal_checkpoint_*() API' from Pekka Enberg
This wires up checkpointing to the SQLite C API. We don't respect the
checkpointing mode because core does not have that nor do we report back
some stats.

Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>

Closes #480
2024-12-20 09:06:04 +02:00
Diego Reis
3a0e56bca5 Implement basic sqlite3_get_table() API 2024-12-19 23:13:51 -03:00
Pekka Enberg
e93ac38e55 Add statement interruption support
This adds an interrupt() method to Statement that allows apps to
interrupt a running statement. Please note that this is different from
`sqlite3_interrupt()` which interrupts all ongoing operations in a
database. Although we want to support that too, per statement interrupt
is much more useful to apps.
2024-12-19 12:30:32 +02:00
Pekka Enberg
f1937ee47f sqlite3: Add sqlite3_wal_checkpoint_*() API
This wires up checkpointing to the SQLite C API. We don't respect the
checkpointing mode because core does not have that nor do we report back
some stats.

Refs: #478
2024-12-15 10:58:52 +02:00
Pere Diaz Bou
3e59da439c fmt 2024-12-13 13:10:33 +01:00
Pere Diaz Bou
97dd95abea core: change Rc<RefCell<Page>> to Arc<Page>
This includes an inner struct in Page wrapped with Unsafe cell to access
it. This is done intentionally because concurrency control of pages is
handled by pages and not by the page itself.
2024-12-13 13:09:13 +01:00
Pere Diaz Bou
a4297702bd extract page cache to be multi threaded 2024-12-13 13:09:13 +01:00