Commit graph

455 commits

Author SHA1 Message Date
Pekka Enberg
edd45ff7b8 Improve MVCC DX by dropping --experimental-mvcc flag
The DX is right now pretty terrible:

```
penberg@vonneumann turso % cargo run -- hello.db
    Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.15s
     Running `target/debug/tursodb hello.db`
Turso v0.4.0-pre.18
Enter ".help" for usage hints.
Did you know that Turso supports live materialized views? Type .manual materialized-views to learn more.
This software is in BETA, use caution with production data and ensure you have backups.
turso> PRAGMA journal_mode = 'experimental_mvcc';
  × Invalid argument supplied: MVCC is not enabled. Enable it with `--experimental-mvcc` flag in the CLI or by setting the MVCC option in `DatabaseOpts`

turso>
```

To add insult to the injury, many SDKs don't even have a way to enable
MVCC via database options. Therefore, let's remove the flag altogether.
2025-12-19 12:59:42 +02:00
Pekka Enberg
3009ae14e0 Turso 0.4.0-pre.18 2025-12-19 09:57:09 +02:00
Nikita Sivukhin
5f002f9441 fix another bug 🤦 2025-12-17 15:54:05 +04:00
Nikita Sivukhin
07c7f90aea propagate partial sync settings in the web 2025-12-17 15:44:34 +04:00
Pekka Enberg
a0bd11c035
Merge 'No tempfiles on wasm' from Nikita Sivukhin
We now can attempt to create temp file in WASM for sorter and hash join
which will result in crash:
```
stderr | promise.test.ts > sorter-wasm
thread '<unnamed>' panicked at library/std/src/sys/pal/wasi/os.rs:125:5:
stderr | promise.test.ts > sorter-wasm
no filesystem on wasm
stderr | promise.test.ts > sorter-wasm
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
```
This PR make simple adjustment to always use in-memory IO for temp files
in WASM

Closes #4256
2025-12-17 12:23:09 +02:00
Pekka Enberg
7fd4b0ed63 Turso 0.4.0-pre.17 2025-12-17 10:18:19 +02:00
Nikita Sivukhin
fb568b9ead add test with huge hash join 2025-12-17 12:18:16 +04:00
Pekka Enberg
8eeec6811b
Merge 'fix bug in the sync engine wasm implementation' from Nikita Sivukhin
- We do unnecessary clone of the underlying DB object which we will
never be able to close explicitly
- For language with GC this means that user has no control over object
lifetime

Closes #4242
2025-12-17 10:07:09 +02:00
Nikita Sivukhin
8b781b6646 add tests with sorter which will attempt to create tempfile in wasm 2025-12-17 11:05:04 +04:00
Nikita Sivukhin
b373c60b3d fix bug in the sync engine wasm implementation
- we do unnecessary clone of the underlying DB object which we will never be able to close explicitly
2025-12-16 14:03:07 +04:00
Nikita Sivukhin
5ab69bcf20 rename speculative load to prefetch (docs already uses this terminology) 2025-12-16 13:59:39 +04:00
Pekka Enberg
574c8258b0 Turso 0.4.0-pre.16 2025-12-15 09:58:23 +02:00
Pekka Enberg
944664a16e Turso 0.4.0-pre.15 2025-12-15 09:12:29 +02:00
Nikita Sivukhin
bbb483b311 run get(...) to completion - otherwise INSERT ... RETURNING will be executed incorrectly
- dirty fix, the proper fix is to use primitives from sdk-kit
2025-12-12 17:37:04 +04:00
Preston Thorpe
73289c6325
Merge 'Go driver' from Nikita Sivukhin
This PR brings back go driver to the turso monorepo and adds sync
support for the golang.
It depends on the pre-compiled binaries at
https://github.com/tursodatabase/turso-go-platform-libs repository
There is a CI which trigger build on the turso-go-platform-libs repo in
case when release tag is published

Reviewed-by: Preston Thorpe <preston@turso.tech>

Closes #4085
2025-12-11 09:52:15 -05:00
Pekka Enberg
b6d4e5ff69 Turso 0.4.0-pre.14 2025-12-11 14:33:40 +02:00
Pekka Enberg
8f4c2f558d Turso 0.4.0-pre.13 2025-12-11 13:34:47 +02:00
Nikita Sivukhin
78eac5083b fix js field names for consistency with other drivers 2025-12-11 15:14:48 +04:00
Pekka Enberg
b0400a3ed6 Turso 0.4.0-pre.12
Some checks are pending
Build & publish @tursodatabase/database / db-bindings-x86_64-pc-windows-msvc - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-x86_64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-aarch64-apple-darwin - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-aarch64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-wasm32-wasip1-threads - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-x86_64-pc-windows-msvc - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-x86_64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / Test DB bindings on Linux-x64-gnu - node@20 (push) Blocked by required conditions
Build & publish @tursodatabase/database / Test DB bindings on browser@20 (push) Blocked by required conditions
Build & publish @tursodatabase/database / Publish (push) Blocked by required conditions
Python / configure-strategy (push) Waiting to run
Python / test (push) Blocked by required conditions
Python / lint (push) Waiting to run
Python / linux (x86_64) (push) Waiting to run
Python / macos-arm64 (aarch64) (push) Waiting to run
Python / sdist (push) Waiting to run
Python / Release (push) Blocked by required conditions
Rust / cargo-fmt-check (push) Waiting to run
Rust / build-native (blacksmith-4vcpu-ubuntu-2404) (push) Waiting to run
Rust / build-native (macos-latest) (push) Waiting to run
Rust / build-native (windows-latest) (push) Waiting to run
Rust / clippy (push) Waiting to run
Rust / simulator (push) Waiting to run
Rust / test-limbo (push) Waiting to run
Rust / test-sqlite (push) Waiting to run
Rust Benchmarks+Nyrkiö / bench (push) Waiting to run
Rust Benchmarks+Nyrkiö / clickbench (push) Waiting to run
Rust Benchmarks+Nyrkiö / tpc-h-criterion (push) Waiting to run
Rust Benchmarks+Nyrkiö / tpc-h (push) Waiting to run
Rust Benchmarks+Nyrkiö / vfs-bench-compile (push) Waiting to run
2025-12-11 12:58:26 +02:00
Nikita Sivukhin
91115a0d90 fix js naming 2025-12-11 14:43:28 +04:00
Pekka Enberg
a0123f62e5 Turso 0.4.0-pre.11 2025-12-10 16:14:58 +02:00
Pekka Enberg
1ce09b26ea Turso 0.4.0-pre.10 2025-12-10 15:09:56 +02:00
Pekka Enberg
01fc636da4 Turso 0.4.0-pre.9 2025-12-09 14:55:30 +02:00
Pekka Enberg
d2e26f944c Turso 0.4.0-pre.8 2025-12-09 14:39:23 +02:00
Nikita Sivukhin
17d433afaf add concurrency test 2025-12-09 14:50:01 +04:00
Nikita Sivukhin
617aa2d713 add comments 2025-12-09 14:41:56 +04:00
Nikita Sivukhin
82b677f7d0 fix test 2025-12-09 14:10:15 +04:00
Nikita Sivukhin
dca6d0e05c fix bindings 2025-12-09 13:14:25 +04:00
Jussi Saurio
826ca4d44d chore: remove experimental_indexes feature flags 2025-12-08 13:00:37 +02:00
Nikita Sivukhin
510a61b5eb Merge branch 'main' into sync-sdk-kit 2025-12-03 21:16:15 +04:00
Pekka Enberg
2e3161942e Turso 0.4.0-pre.7 2025-12-03 10:47:06 +02:00
Pekka Enberg
0352247783 Turso 0.4.0-pre.6 2025-12-03 10:05:01 +02:00
Pekka Enberg
34964680ca Turso 0.4.0-pre.5
Some checks are pending
Rust Benchmarks+Nyrkiö / tpc-h-criterion (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-x86_64-pc-windows-msvc - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-x86_64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-aarch64-apple-darwin - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-aarch64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-wasm32-wasip1-threads - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-x86_64-pc-windows-msvc - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-x86_64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / Test DB bindings on Linux-x64-gnu - node@20 (push) Blocked by required conditions
Build & publish @tursodatabase/database / Test DB bindings on browser@20 (push) Blocked by required conditions
Build & publish @tursodatabase/database / Publish (push) Blocked by required conditions
Python / configure-strategy (push) Waiting to run
Python / test (push) Blocked by required conditions
Python / lint (push) Waiting to run
Python / linux (x86_64) (push) Waiting to run
Python / macos-arm64 (aarch64) (push) Waiting to run
Python / sdist (push) Waiting to run
Python / Release (push) Blocked by required conditions
Rust / cargo-fmt-check (push) Waiting to run
Rust / build-native (blacksmith-4vcpu-ubuntu-2404) (push) Waiting to run
Rust / build-native (macos-latest) (push) Waiting to run
Rust / build-native (windows-latest) (push) Waiting to run
Rust / clippy (push) Waiting to run
Rust / simulator (push) Waiting to run
Rust / test-limbo (push) Waiting to run
Rust / test-sqlite (push) Waiting to run
Rust Benchmarks+Nyrkiö / bench (push) Waiting to run
Rust Benchmarks+Nyrkiö / clickbench (push) Waiting to run
Rust Benchmarks+Nyrkiö / tpc-h (push) Waiting to run
Rust Benchmarks+Nyrkiö / vfs-bench-compile (push) Waiting to run
2025-12-03 09:39:38 +02:00
Nikita Sivukhin
5bb5bae01c Merge branch 'main' into sync-sdk-kit 2025-12-02 17:28:06 +04:00
Nikita Sivukhin
ae603000e1 implement simple turso-sync bindings for python 2025-12-02 17:18:46 +04:00
Nikita Sivukhin
8df7f7e416 adjust python bindings 2025-12-02 16:03:06 +04:00
Nikita Sivukhin
65ec20a562 small renames 2025-12-01 22:53:39 +04:00
Pekka Enberg
730836f3f3 Turso 0.4.0-pre.4
Some checks are pending
Build & publish @tursodatabase/database / db-bindings-x86_64-pc-windows-msvc - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / db-bindings-x86_64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-aarch64-apple-darwin - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-aarch64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-wasm32-wasip1-threads - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-x86_64-pc-windows-msvc - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / sync-bindings-x86_64-unknown-linux-gnu - node@20 (push) Waiting to run
Build & publish @tursodatabase/database / Test DB bindings on Linux-x64-gnu - node@20 (push) Blocked by required conditions
Build & publish @tursodatabase/database / Test DB bindings on browser@20 (push) Blocked by required conditions
Build & publish @tursodatabase/database / Publish (push) Blocked by required conditions
Python / sdist (push) Waiting to run
Python / Release (push) Blocked by required conditions
Python / configure-strategy (push) Waiting to run
Python / test (push) Blocked by required conditions
Python / lint (push) Waiting to run
Python / linux (x86_64) (push) Waiting to run
Python / macos-arm64 (aarch64) (push) Waiting to run
Rust / cargo-fmt-check (push) Waiting to run
Rust / build-native (blacksmith-4vcpu-ubuntu-2404) (push) Waiting to run
Rust / build-native (macos-latest) (push) Waiting to run
Rust / build-native (windows-latest) (push) Waiting to run
Rust / clippy (push) Waiting to run
Rust / simulator (push) Waiting to run
Rust / test-limbo (push) Waiting to run
Rust / test-sqlite (push) Waiting to run
Rust Benchmarks+Nyrkiö / bench (push) Waiting to run
Rust Benchmarks+Nyrkiö / clickbench (push) Waiting to run
Rust Benchmarks+Nyrkiö / tpc-h-criterion (push) Waiting to run
Rust Benchmarks+Nyrkiö / tpc-h (push) Waiting to run
Rust Benchmarks+Nyrkiö / vfs-bench-compile (push) Waiting to run
2025-12-01 19:49:10 +02:00
Nikita Sivukhin
3cad64e5e4 rename weird ProtocolIo to the SyncEngineIo 2025-11-28 21:40:52 +04:00
Pekka Enberg
9bf6e6efd9
Merge 'use i64 for registers p1,p2,p3,p5 in EXPLAIN output' from Mikaël Francoeur
To avoid overflows, use i64 for p1,p2,p3,p5 in EXPLAIN output. This
matches SQLite's behaviour (https://github.com/sqlite/sqlite/blob/master
/src/vdbeaux.c#L2460-L2476).
I also changed the column type string for p4, there was a preexisting
mismatch between the value type and the explicit type string.
Closes https://github.com/tursodatabase/turso/issues/3944

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

Closes #3961
2025-11-23 09:47:22 +02:00
Pekka Enberg
b5c5666a49 Turso 0.4.0-pre.3 2025-11-22 09:56:18 +02:00
Pekka Enberg
687d9faf37 Turso 0.4.0-pre.2 2025-11-19 09:40:08 +02:00
Mikaël Francoeur
e65fbfe6f6
use i64 for register values p1,p2,p3,p5 2025-11-16 09:58:05 -05:00
Pekka Enberg
1f79fbc22c
Merge 'Partial sync basic' from Nikita Sivukhin
This PR implements basic support for partial sync. Right now the scope
is limited to only `:memory:` IO and later will be properly expanded to
the file based IO later.
The main addition is `PartialDatabaseStorage` which make request to the
remote server for missing local pages on demand.
The main change is that now tursodatabase JS bindings accept optional
"external" IO event loop which in case of sync will drive `ProtocolIo`
internal work associated with remote page fetching tasks.

Closes #3931
2025-11-13 16:38:04 +02:00
Nikita Sivukhin
72089d2682 adjust compilation 2025-11-12 16:30:50 +04:00
Nikita Sivukhin
41d7d5af49 adjust tests 2025-11-12 16:15:54 +04:00
Nikita Sivukhin
2d517f9fd7 use sparse io fir partial sync in case when file is used 2025-11-12 14:20:26 +04:00
Nikita Sivukhin
d519945098 make ArenaBuffer unsafe Send + Sync 2025-11-12 10:54:40 +04:00
Nikita Sivukhin
02275a6fa1 fix js bindings 2025-11-12 10:53:25 +04:00
Nikita Sivukhin
98db727a99 integrate extra io stepping logic to the JS bindings 2025-11-12 10:53:25 +04:00