Pekka Enberg
30d183c58f
bindings/javascript: Improve open error messages
...
Include database path name for debuggability.
2025-10-23 19:42:01 +03:00
pedrocarlo
e93add6c80
remove dyn DatabaseStorage and replace it with DatabaseFile
2025-10-03 14:14:15 -03:00
Nikita Sivukhin
4772c0406e
make connect() method optional and call it implicitly on first query execution
...
- mostly needed for Drizzle - because other clients with ESM can just use await connect(...) wrapper
2025-09-30 18:40:01 +04:00
Nikita Sivukhin
27a7f7faa7
fix clippy
2025-09-25 12:12:39 +04:00
Nikita Sivukhin
a938bdcf09
fix exec to run over multiple statements in the string
2025-09-25 12:03:52 +04:00
Nikita Sivukhin
f8d077c24b
replace cell with mutex
2025-09-25 10:54:31 +04:00
Nikita Sivukhin
cd9cf71568
cleanup napi-rs bindings Rust code
2025-09-24 17:06:52 +04:00
Nikita Sivukhin
cfc8728774
fix clippy
2025-09-19 14:15:04 +04:00
Nikita Sivukhin
7049f3ddae
fix clock implementation for OPFS IO
2025-09-19 13:21:00 +04:00
Nikita Sivukhin
1d3c823c7b
wip
2025-09-19 13:19:30 +04:00
Nikita Sivukhin
974feac27b
move compute to the main thread for browser and node
...
- now, most of the work is happening on the main thread
- for database in browser, we still have dedicated WebWorker - but it is used only for OPFS access and only for that
- for syn in browser we still offload sync operations to the WebWorker
2025-09-19 13:19:30 +04:00
Nikita Sivukhin
ebf042cf6b
refine error message
2025-09-15 10:55:43 +04:00
Nikita Sivukhin
d55026f84f
opfs for sync in one commit!
2025-09-10 22:35:57 +04:00
Pekka Enberg
2131a04b7d
core: Rename IO::run_once() to IO::step()
...
The `run_once()` name is just a historical accident. Furthermore, it now
started to appear elsewhere as well, so let's just call it IO::step() as we
should have from the beginning.
2025-09-10 14:36:02 +03:00
Nikita Sivukhin
7618dfb519
final adjustments
2025-09-09 14:06:10 +04:00
Nikita Sivukhin
dfea7f0458
fix clippy again
2025-09-09 12:25:40 +04:00
Nikita Sivukhin
96a595069c
add browser-specific OPFS file system and few other helpers
2025-09-09 11:32:38 +04:00
PThorpe92
0a56d23402
Use u64 for file offsets in IO and calculate such offsets in u64
2025-08-28 09:44:00 -04:00
Avinash Sajjanshetty
9e663c7f46
Add IOContext to carry encryption/checksum ctx
2025-08-27 21:33:05 +05:30
Pekka Enberg
22c9cb6618
s/PerConnEncryptionContext/EncryptionContext/
2025-08-24 08:17:20 +03:00
Pekka Enberg
1b89273f10
Merge 'refactor encryption module and make it configurable' from Avinash Sajjanshetty
...
Previously, the encryption module had hardcoded a lot of things. This
refactor makes it slightly nice and makes it configurable.
Right now cipher algorithm is assumed and hardcoded, I will make that
configurable in the upcoming PR
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #2722
2025-08-24 08:16:28 +03:00
Pekka Enberg
2c68613709
bindings/javascript: Fix blob type handling
2025-08-22 14:17:40 +03:00
Avinash Sajjanshetty
3090545167
use encryption ctx instead of encryption key
2025-08-21 22:36:32 +05:30
Avinash Sajjanshetty
40a209c000
simplify feature flag usage for encryption
2025-08-20 12:49:38 +05:30
Avinash Sajjanshetty
fc3b76de1b
fix Database storage for WASM bindings
2025-08-20 11:47:25 +05:30
Pekka Enberg
387d384394
javascript: Implement Statement.columns()
2025-08-19 16:35:44 +03:00
Pekka Enberg
5002539b04
javascript: Implement safe integers
2025-08-19 16:35:44 +03:00
Pekka Enberg
6b59bcd51e
javascript: Fix Statement.get() for boundary values
2025-08-19 16:35:44 +03:00
PThorpe92
cc2fed3297
Remove copy_to API from file IO trait
2025-08-14 21:31:13 -04:00
PThorpe92
3c088dda59
Update callsites of copy_to Database impl
2025-08-14 21:31:13 -04:00
Jussi Saurio
c75e4c1092
Fix non-4096 page sizes by making WAL header lazy
2025-08-14 12:40:58 +03:00
Jussi Saurio
ee58b7bd86
Add fn read_header() to DatabaseStorage trait
2025-08-14 12:40:58 +03:00
Nikita Sivukhin
bfa33a27e2
enable indices in database JS sdk
2025-08-13 15:55:40 +04:00
Pekka Enberg
7a09eb0d4c
Merge 'Fix JavaScript bindings packaging' from Nikita Sivukhin
...
This PR configure `#entry-point` import alias for javascript bindings in
order to use `browser.js` napi-rs generated file in browser context.
Also, this PR forces napi-rs to emit `index.js` entrypoint using ESM and
also use typescript for writing our wrapper code around napi-rs
bindings.
In order to make behaviour consistent when lib is imported through ESM
or CommonJS this PR also replace default export of `Database` by named
on. The problem is that `export default Database` will be logically
equivalent to `modules.export.default = Database` which is not the same
thing as `modules.export = Database` and this will need to access
additional `.default` field with CommonJs style imports (e.g. `new
require('@tursodatabase/turso').default(...)`). In order to remove this
difference - I just replaced default export with named one.
Closes #2488
2025-08-08 10:42:21 +03:00
PThorpe92
04b40b4cf5
Impl copy_to for Database impl in JS bindings
2025-08-07 16:27:08 -04:00
Nikita Sivukhin
1a2a1a9ca4
adjust javascript turso bindings for reuse in turso-sync-js package
2025-08-07 16:28:02 +04:00
Pekka Enberg
fa6c925751
bindings/javascript: Switch from RefCell to Cell
2025-08-07 07:47:10 +03:00
Pekka Enberg
6ad50f4581
bindings/javascript: Fix prepare() error message format
2025-08-06 09:13:22 +03:00
Pekka Enberg
79412ea2cc
bindings/javascript: Improve error when prepare() called after close()
2025-08-06 07:48:15 +03:00
PThorpe92
f6a68cffc2
Remove RefCell from IO and Page apis
2025-08-05 16:24:49 -04:00
Pekka Enberg
358c0bfc27
cargo fmt
2025-08-01 17:17:01 +03:00
Pekka Enberg
94efe9dd46
bindings/javascript: Reduce VM/native crossing overhead
...
Before:
```
penberg@vonneumann perf % node perf-turso.js
cpu: Apple M1
runtime: node v22.16.0 (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p999
----------------------------------------------------------------------- -----------------------------
• Statement
----------------------------------------------------------------------- -----------------------------
Statement.get() bind parameters 1'525 ns/iter (1'482 ns … 1'720 ns) 1'534 ns 1'662 ns 1'720 ns
summary for Statement
Statement.get() bind parameters
penberg@vonneumann perf % bun perf-turso.js
cpu: Apple M1
runtime: bun 1.2.15 (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p999
----------------------------------------------------------------------- -----------------------------
• Statement
----------------------------------------------------------------------- -----------------------------
Statement.get() bind parameters 1'198 ns/iter (1'157 ns … 1'495 ns) 1'189 ns 1'456 ns 1'495 ns
summary for Statement
Statement.get() bind parameters
```
After:
```
benchmark time (avg) (min … max) p75 p99 p999
----------------------------------------------------------------------- -----------------------------
• Statement
----------------------------------------------------------------------- -----------------------------
Statement.get() bind parameters 1'206 ns/iter (1'180 ns … 1'402 ns) 1'208 ns 1'365 ns 1'402 ns
summary for Statement
Statement.get() bind parameters
penberg@vonneumann perf % bun perf-turso.js
cpu: Apple M1
runtime: bun 1.2.15 (arm64-darwin)
benchmark time (avg) (min … max) p75 p99 p999
----------------------------------------------------------------------- -----------------------------
• Statement
----------------------------------------------------------------------- -----------------------------
Statement.get() bind parameters 1'019 ns/iter (980 ns … 1'360 ns) 1'005 ns 1'270 ns 1'360 ns
summary for Statement
Statement.get() bind parameters
```
2025-08-01 16:45:03 +03:00
Pekka Enberg
02db72cc2c
Implement JavaScript bindings with minimal Rust core
...
This rewrites the JavaScript bindings completely by exposing only
primitive operations from Rust NAPI-RS code. For example, there is
prepare(), bind(), and step(), but high level interfaces like all() and
get() are implemented in JavaScript.
We're doing this so that we can implement async interfaces in the
JavaScript layer instead of having to bring in Tokio.
2025-08-01 09:03:14 +03:00
PThorpe92
ef69df7258
Apply review suggestions
2025-07-30 19:42:53 -04:00
PThorpe92
88445328a5
Handle partial writes for pwritev calls in io_uring and fix JS bindings
2025-07-30 19:42:50 -04:00
PThorpe92
d189f66328
Add pwritev to wasm/js api
2025-07-30 19:42:48 -04:00
PThorpe92
2c3a9fe5ef
Finish wal transaction handling and add more wal and chkpt testing
2025-07-30 14:10:10 +03:00
PThorpe92
9c75872827
Make writing wal header able to be sync
2025-07-30 14:05:18 +03:00
PThorpe92
dcf346b9b0
Update apparently very old branch to new api
2025-07-30 13:48:05 +03:00
PThorpe92
272a63b562
Fix truncate impl in JS bindings
2025-07-30 13:48:05 +03:00