Commit Graph

9888 Commits

Author SHA1 Message Date
Pere Diaz Bou
55f5cd2ad7 core/mvcc/logical-log: test automatic checkpoint 2025-10-03 17:23:59 +02:00
Pere Diaz Bou
7db5a09005 core/mvcc/logical-log: checkpoint support not updating transaction_state if needed 2025-10-03 17:23:35 +02:00
Pere Diaz Bou
9c9d4d147e core/btree: fuzz tests force page 1 allocation with a transaction 2025-10-03 13:28:28 +02:00
Pere Diaz Bou
8f103f7c35 core/wal: introduce transaction_count, same as iChange in sqlite 2025-10-03 13:02:47 +02:00
Pekka Enberg
c98bf9b593 Merge 'core/wal: check index header on begin_write_tx' from Pere Diaz Bou
Fixes a page cache staleness issue where connections could incorrectly
believe the database hasn't changed after checkpointing. This can happen
when writes following a checkpoint resulted in the same `max_frame
value`, causing connections to miss updates since they only checked
`max_frame` to detect changes.

Closes #3502
2025-10-03 13:51:22 +03:00
Pere Diaz Bou
b5a969933c core/wal: remove dbg! 2025-10-03 12:17:35 +02:00
Pekka Enberg
7d45253d03 Merge 'Disallow unexpected interop between WAL mode and MVCC mode' from Jussi Saurio
1. DB cannot be opened with MVCC if non-zero WAL file exists
2. DB cannot be opened without MVCC if non-zero logical log file exists

Closes #3557
2025-10-03 12:55:03 +03:00
Pekka Enberg
5c0b3313f2 Add encryption at rest feature to README 2025-10-03 12:32:01 +03:00
Pekka Enberg
7905841990 Turso 0.2.0 2025-10-03 12:20:42 +03:00
Pekka Enberg
91983abaa5 Update CHANGELOG.md 2025-10-03 12:20:20 +03:00
Jussi Saurio
ec6731de0a Disallow unexpected interop between WAL mode and MVCC mode
1. DB cannot be opened with MVCC if non-zero WAL file exists
2. DB cannot be opened without MVCC if non-zero logical log file exists
2025-10-03 12:00:35 +03:00
Pekka Enberg
3867e5a60e Merge 'CI: run long fuzz tests and stress on every PR, use 2 threads for stress' from Jussi Saurio
Reviewed-by: Pere Diaz Bou <pere-altea@homail.com>

Closes #3556
2025-10-03 11:49:20 +03:00
Pekka Enberg
3b1d2535de Turso 0.2.0-pre.15 2025-10-03 11:29:43 +03:00
Pekka Enberg
d9e607082f Merge 'Disallow INDEXED BY / NOT INDEXED in select' from Jussi Saurio
Closes #3547

Closes #3551
2025-10-03 11:29:13 +03:00
Pekka Enberg
87a6a90fdf Merge 'core/mvcc: Rename "-lg" to "-log"' from Pekka Enberg
The "lg" name is just weird.

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

Closes #3554
2025-10-03 11:28:54 +03:00
Jussi Saurio
653f9323c3 Update .github/workflows/long_fuzz_tests_btree.yml
Co-authored-by: Pere Diaz Bou <30913090+pereman2@users.noreply.github.com>
2025-10-03 11:18:09 +03:00
Jussi Saurio
509486bc05 CI: run long fuzz tests and stress on every PR, use 2 threads for stress 2025-10-03 11:12:01 +03:00
Pekka Enberg
297aaf4887 core/mvcc: Rename "-lg" to "-log"
The "lg" name is just weird.
2025-10-03 10:08:02 +03:00
Pekka Enberg
ced8284fa0 Merge 'fix sync-engine bug when auth token is provided as dynamic function' from Nikita Sivukhin
Closes #3553
2025-10-03 09:53:23 +03:00
Pekka Enberg
dcbbd99d00 Merge 'docs: Document more CLI command line options' from Pekka Enberg
Closes #3550
2025-10-03 09:53:04 +03:00
Pekka Enberg
d93846c010 Merge 'Update man pages for encryption' from Avinash Sajjanshetty
Closes #3552
2025-10-03 09:52:06 +03:00
Nikita Sivukhin
9a82a9509f fix sync-engine bug when auth token is provided as dynamic function 2025-10-03 10:50:54 +04:00
Avinash Sajjanshetty
44c387ff71 Update man pages for encryption 2025-10-03 12:18:55 +05:30
Jussi Saurio
b142dd42b5 Disallow INDEXED BY in select 2025-10-03 09:46:23 +03:00
Pekka Enberg
7c83ebca41 docs: Document more CLI command line options 2025-10-03 09:35:57 +03:00
Jussi Saurio
d2f5e67b25 Merge 'Fix COLLATE' from Jussi Saurio
Fixes the following problems with COLLATE:
- Fix: incorrectly used e.g. `x COLLATE NOCASE = 'fOo'` as index
constraint on an index whose column was not case-insensitively collated
- Fix: various ephemeral indexes (in GROUP BY, ORDER BY, DISTINCT) and
subqueries did not retain proper collation information of columns
- Fix: collation of a given expression was not determined properly
according to SQLite's rules
Adds TCL tests and fuzz test
Closes #3476
Closes #1524
Closes #3305

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

Closes #3538
2025-10-03 09:34:24 +03:00
Pekka Enberg
33e727ce8f Merge 'core/mvcc: Return completions from logical log methods' from Pedro Muniz
`IOResult` implies we have a state machine that needs to be polled to
`Completion`, which is not the case here. We are just emitting the IO
operation in this case. This led us to never reaching the
`IOResult::Done` branch that actually fsynced the logical log in
`Checkpoint`.
I also sprinkled some
```rust
if c.is_completed() {
   Ok(TransitionResult::Continue)
} else {
   Ok(TransitionResult::Io(IOCompletions::Single(c)))
}
```
just to be more efficient with sync IO, but it is not strictly necessary
here.

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

Closes #3549
2025-10-03 09:29:31 +03:00
Pekka Enberg
4de5ea9d91 Merge 'Improve MCP configuration docs' from Jamie Barton
A little bit of docs restructuring for MCP client usage based on recent
user questions/feedback.

Closes #3410
2025-10-03 09:26:25 +03:00
Pekka Enberg
bd47237835 Merge branch 'main' into mcp-config-docs 2025-10-03 09:26:11 +03:00
pedrocarlo
131a5b8048 adjust logical log IO functions to return Completions and not IOResult 2025-10-03 01:44:41 -03:00
Pekka Enberg
f21230ed76 cli: Remove unused "--experimental-logical-log" option 2025-10-03 07:39:07 +03:00
Preston Thorpe
990740ab73 Merge 'core/vdbe: Don't clear cursors in ProgramState::reset()' from Pekka Enberg
We don't need to clear the cursors explicitly because OpenRead and
OpenWrite will anyway replace them.

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

Closes #3526
2025-10-02 17:32:05 -04:00
Preston Thorpe
c30c1ca591 Merge 'core/translate: fix rowid affinity' from Preston Thorpe
closes https://github.com/tursodatabase/turso/issues/3478

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

Closes #3539
2025-10-02 16:37:59 -04:00
Jussi Saurio
58ea9e4c3c clippy 2025-10-02 21:49:33 +03:00
Jussi Saurio
8e2e557da4 Collate: fix Insn::Compare to use collation seq of each compared column 2025-10-02 21:49:33 +03:00
Jussi Saurio
edd4651b97 Collate: add proper collation info for GROUP BY sorter columns 2025-10-02 21:49:33 +03:00
Jussi Saurio
f02757fe11 Collate: add proper collation to FROM-clause subquery result cols 2025-10-02 21:49:33 +03:00
Jussi Saurio
edfe0cb4fe Collate: prevent using an index if collation sequences don't match 2025-10-02 21:49:33 +03:00
Jussi Saurio
d42f3c7cbb Collate: compute collations properly for ORDER BY 2025-10-02 21:49:33 +03:00
Jussi Saurio
5a5f49933d Collate: add proper collation info to DISTINCT indexes 2025-10-02 21:49:33 +03:00
Jussi Saurio
f4ee0457b2 Collate: add proper collation info to compound select deduplication indexes 2025-10-02 21:49:33 +03:00
Jussi Saurio
e1fcd7b5e9 Collate: add get_collseq_from_expr()
Determines collation sequence to use for a given Expr
based on SQLite collation rules.
2025-10-02 21:49:33 +03:00
Jussi Saurio
b351993cb0 Collate: add fuzz test 2025-10-02 21:49:33 +03:00
Jussi Saurio
ce7fe54841 Collate: add more TCL tests 2025-10-02 21:49:33 +03:00
PThorpe92
361bd70a26 Add regression test for rowid affinity 2025-10-02 14:31:22 -04:00
PThorpe92
43aba0ee95 Fix integer affinity for rowid expr type 2025-10-02 14:29:53 -04:00
Pekka Enberg
dc1463c70d Merge 'Improve error handling for cyclic views' from Duy Dang
The cycle is detected by marking a seen view, if a seen view is process
again, that's a cycle and we throw an error.
Close #3404

Closes #3467
2025-10-02 19:33:12 +03:00
Pekka Enberg
ed09403e70 Merge 'docs: Add section on MVCC limitations' from Pekka Enberg
Document limitations in MVCC pointed out by Jussi.

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

Closes #3519
2025-10-02 19:21:46 +03:00
Pekka Enberg
6d06dce2bb docs: Add section on MVCC limitations
Document limitations in MVCC pointed out by Jussi.
2025-10-02 18:49:12 +03:00
Pekka Enberg
b11246278f Merge 'Enable encryption properly in Rust bindings, whopper, and throughput tests' from Avinash Sajjanshetty
This is a follow up from PR - #3457 which requires users to opt in to
enable encryption. This patch
- Makes appropriate changes to Whopper and Encryption throughput tests
- Updated Rust bindings to pass the encryption options properly
- Added a test for rust bindings
To use encryption in Rust bindings, one needs to do:
```rust
let opts = EncryptionOpts {
    hexkey: "b1bbfda...02a5669fc76327".to_string(),
    cipher: "aegis256".to_string(),
};

let builder = Builder::new_local(&db_file).experimental_encryption(true).with_encryption(opts.clone());
let db = builder.build().await.unwrap();
```
We will remove the `experimental_encryption` once the feature is stable.

Closes #3532
2025-10-02 18:32:06 +03:00