limbo/extensions
Pekka Enberg 7f2525ac27 Merge 'Implement create virtual table using vtab modules, more work on virtual tables' from Preston Thorpe
This PR started out as one to improve the API of extensions but I ended
up building on top of this quite a bit and it just kept going. Sorry
this one is so large but there wasn't really a good stopping point, as
it kept leaving stuff in broken states.
**VCreate**: Support for `CREATE VIRTUAL TABLE t USING vtab_module`
**VUpdate**: Support for `INSERT` and `DELETE` methods on virtual
tables.
Sqlite uses `xUpdate` function with the `VUpdate` opcode to handle all
insert/update/delete functionality in virtual tables..
have to just document that:
```
if args[0] == NULL:  INSERT args[1] the values in args[2..]

if args[1] == NULL: DELETE args[0]

if args[0] != NULL && len(args) > 2: Update values=args[2..]  rowid=args[0]
```
I know I asked @jussisaurio on discord about this already, but it just
sucked so bad that I added some internal translation so we could expose
a [nice API](https://github.com/tursodatabase/limbo/pull/996/files#diff-
3e8f8a660b11786745b48b528222d11671e9f19fa00a032a4eefb5412e8200d1R54) and
handle the logic ourselves while keeping with sqlite's opcodes.
I'll change it back if I have to, I just thought it was genuinely awful
to have to rely on comments to explain all that to extension authors.
The included extension is not meant to be a legitimately useful one, it
is there for testing purposes. I did something similar in #960 using a
test extension, so I figure when they are both merged, I will go back
and combine them into one since you can do many kinds at once, and that
way it will reduce the amount of crates and therefore compile time.
1. Remaining opcodes.
2. `UPDATE` (when we support the syntax)
3. `xConnect` - expose API for a DB connection to a vtab so it can
perform arbitrary queries.

Closes #996
2025-02-25 15:31:12 +02:00
..
core Merge 'Implement create virtual table using vtab modules, more work on virtual tables' from Preston Thorpe 2025-02-25 15:31:12 +02:00
crypto extensions/crypto: Fix mimalloc version 2025-02-18 20:05:10 +02:00
kvstore Add more tests for vtab impl 2025-02-17 23:22:02 -05:00
percentile Merge 'Implement create virtual table using vtab modules, more work on virtual tables' from Preston Thorpe 2025-02-25 15:31:12 +02:00
regexp extensions/regexp: Fix mimalloc version 2025-02-18 20:06:43 +02:00
series Merge 'Implement create virtual table using vtab modules, more work on virtual tables' from Preston Thorpe 2025-02-25 15:31:12 +02:00
time extensions/time: normalize offset_sec 2025-02-19 21:25:14 +08:00
uuid extensions/uuid: Fix mimalloc version 2025-02-18 20:08:30 +02:00