Jussi Saurio
c752058a97
VDBE: introduce state machine for op_idx_insert for more granular IO control
...
Separates cursor.key_exists_in_index() into a state machine. The problem with
the main branch implementation is this:
`return_if_io!(seek)`
`return_if_io!(cursor.record())`
The latter may yield on IO and cause the seek to start over, causing an infinite
loop. With an explicit state machine we can control and prevent this.
2025-07-09 11:43:18 +03:00
Jussi Saurio
c13b2d5d90
sqlite3_ondisk: generalize left-child-pointer reading function to both index/table btrees
2025-07-09 11:07:42 +03:00
Pekka Enberg
5216e67d53
bindings/python: Start transaction implicitly in execute()
...
We need to start transaction implicitly in execute() for DML statements
to make sure first transaction is actually started.
Fixes #2002
2025-07-09 10:59:52 +03:00
Jussi Saurio
6faa07505c
Merge 'uv run ruff format && uv run ruff check --fix' from Jussi Saurio
...
Closes #2012
2025-07-09 10:50:56 +03:00
Jussi Saurio
b1d51aadc5
Merge 'stress clippy' from Jussi Saurio
...
Closes #2014
2025-07-09 10:50:43 +03:00
Jussi Saurio
1bda8bb47a
stress clippy
2025-07-09 10:41:18 +03:00
Pekka Enberg
a1ab0f12ea
stress: Make error reporting less verbose by default
2025-07-09 10:18:23 +03:00
Jussi Saurio
f312227825
uv run ruff format && uv run ruff check --fix
2025-07-09 10:06:29 +03:00
Pekka Enberg
3e898cceb9
Merge 'Synchronize WAL checkpointing' from Pere Diaz Bou
...
Closes #2007
2025-07-09 09:40:26 +03:00
Pekka Enberg
943793a571
Turso 0.1.2-pre.1
2025-07-09 09:27:31 +03:00
Pekka Enberg
cf47097f45
Turso v0.1.2-pre.1
2025-07-09 09:27:25 +03:00
Pekka Enberg
1e9fd7d5ed
Add scripts/gen-changelog.py
2025-07-09 09:27:09 +03:00
alpaylan
a7b5a2c435
Merge branch 'main' of https://github.com/alpaylan/limbo
2025-07-09 00:14:24 -04:00
alpaylan
44a2fa60a3
add union all cardinality preservation, start generating INSERT INTO t SELECT... queries, add integrity checks to the end of run_simulation
2025-07-09 00:14:13 -04:00
Ihor Andrianov
2d41791f3d
clippy
2025-07-09 00:07:33 +03:00
Ihor Andrianov
f81bfa3daf
use pread and pwrite for unix io
2025-07-09 00:07:25 +03:00
Levy A.
4eea4a71d7
fix: add fuzz to CI checks
2025-07-08 13:41:05 -03:00
Pere Diaz Bou
f7465f665d
add checkpoint lock to wal
2025-07-08 17:53:04 +02:00
Pekka Enberg
d0a80c6acd
Merge 'Support except operator for Compound select ' from meteorgan
...
Closes : #1574
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #1858
2025-07-08 18:48:36 +03:00
Mikaël Francoeur
2a691f5044
make some errors compatible with better-sqlite3
2025-07-08 11:36:23 -04:00
meteorgan
99e0cf0603
add a constant MINIMUM_CELL_SIZE
2025-07-08 22:57:20 +08:00
meteorgan
04575456a9
fix Minimum cell size must not be less than 4
2025-07-08 22:57:20 +08:00
meteorgan
3065416bb2
cargo fmt
2025-07-08 22:57:20 +08:00
meteorgan
08be906bb1
return early if index is not found in op_idx_delete
2025-07-08 22:57:20 +08:00
meteorgan
829e44c539
fix test data
2025-07-08 22:57:20 +08:00
meteorgan
f44d818400
cargo fmt
2025-07-08 22:57:20 +08:00
meteorgan
6768f073c8
add tests for except operator
2025-07-08 22:57:20 +08:00
meteorgan
c6ef4898b0
fix: IdxDelete shouldn't raise error if P5 == 0
2025-07-08 22:57:20 +08:00
meteorgan
4a516ab414
Support except operator for compound select
2025-07-08 22:57:20 +08:00
Pekka Enberg
7c4bb3d4b9
Merge 'vdbe: fix compilation' from Pere Diaz Bou
...
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #2008
2025-07-08 17:55:59 +03:00
Pekka Enberg
b895381ae6
Revert "Merge 'Reachable assertions in Antithesis Python Test for better logging' from Pedro Muniz"
...
This reverts commit dbbc3f5190 , reversing
changes made to 1cd5a49705 . We're missing
some mandatory parameters, causing these to fail under Antithesis.
2025-07-08 17:51:12 +03:00
Pere Diaz Bou
511b80a062
do not assert connection is closed and return error on api
2025-07-08 16:47:03 +02:00
Pere Diaz Bou
232beddf62
vdbe: fix compilation
2025-07-08 16:15:29 +02:00
Pekka Enberg
ddbbddfbc3
Merge 'bindings/python: close connection only when reference count is one' from Pere Diaz Bou
...
Due to how `execute` is implemented, it returns a `Connection` clone
which internally shares a turso_core::Connection with every other
Connection. Since `execute` returns `Connection` and immediatly it is
dropped, it will close connection, checkpoint and leave database in
weird state.
Let's make sure we don't keep using a connection after it was dropped.
In case of executing a query that was closed we will try to rollback and
return early.
Closes #2006
2025-07-08 17:12:00 +03:00
Pere Diaz Bou
ef41c19542
assert is not closed already
2025-07-08 15:58:11 +02:00
Pere Diaz Bou
5319af8fd8
set closed to cell
2025-07-08 15:55:50 +02:00
Pekka Enberg
7ca84ee5b0
Merge 'parser: use YYSTACKDEPTH' from Lâm Hoàng Phúc
...
sqlite uses [fixed-size](https://github.com/sqlite/sqlite/blob/7fc6e6a27
26e650d3b82c6d3683bdbdc10e02467/tool/lempar.c#L238) array for `yystack`
and grow stack if needed. Let replace `vec` with `smallvec` in rust
version.
after:
```sh
sqlparser-rs parsing benchmark/sqlparser::select
time: [564.19 ns 565.63 ns 567.18 ns]
change: [-11.514% -11.288% -11.067%] (p = 0.00 < 0.05)
Performance has improved.
Found 4 outliers among 100 measurements (4.00%)
1 (1.00%) low mild
3 (3.00%) high mild
sqlparser-rs parsing benchmark/sqlparser::with_select
time: [1.9812 µs 1.9861 µs 1.9914 µs]
change: [-7.5226% -7.3080% -7.0858%] (p = 0.00 < 0.05)
Performance has improved.
Found 5 outliers among 100 measurements (5.00%)
1 (1.00%) low mild
4 (4.00%) high mild
```
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #1999
2025-07-08 16:20:51 +03:00
Pekka Enberg
6fd03c5bb0
Merge 'CI: remove duplicate fuzz run' from Jussi Saurio
...
Closes #2003
2025-07-08 16:20:46 +03:00
Pere Diaz Bou
8909e198ae
set closed flag for connection to detect force zombies
...
Let's make sure we don't keep using a connection after it was dropped.
In case of executing a query that was closed we will try to rollback and
return early.
2025-07-08 15:19:20 +02:00
Pere Diaz Bou
91107d364a
only close connection in case of reference count is 1
...
Due to how `execute` is implemented, it returns a `Connection` clone
which internally shares a turso_core::Connection with every other
Connection. Since `execute` returns `Connection` and immediatly it is
dropped, it will close connection, checkpoint and leave database in
weird state.
2025-07-08 15:19:20 +02:00
Jussi Saurio
ee1ed1a6e6
Merge 'btree: fix incorrect comparison implementation in key_exists_in_index()' from Jussi Saurio
...
1. current implementation did not use the custom PartialOrd
implementation for RefValue
2. current implementation did not take collation into account
I don't have a test for this in this PR but it fixes an issue related to
#1757
EDIT:
Okay, it appears the first commit cannot be merged by itself because
since it fixes the incorrect comparison logic, now our UNION tests fail
due to UNIQUE constraint violation (since we are now correctly detecting
duplicates). I have introduced a workaround for this in https://github.c
om/tursodatabase/turso/pull/2001/commits/cb8a576501702cf91713c7f76520501
77318c49c
So, in effect, this PR:
Closes #1757
But, I will make better fixes in #1988 later.
Reviewed-by: Pere Diaz Bou <pere-altea@homail.com >
Closes #2001
2025-07-08 16:03:34 +03:00
Jussi Saurio
6d6ab7480b
revert running with release so that debug assertions will trigger in fuzz runs
2025-07-08 15:04:17 +03:00
Jussi Saurio
1aa379de60
CI: run long fuzz/stress tests in release mode and remove duplicate run
2025-07-08 13:13:49 +03:00
Jussi Saurio
cb8a576501
op_idx_insert: introduce flag for ignoring duplicates
2025-07-08 12:14:20 +03:00
Jussi Saurio
3ab5f07389
btree: fix incorrect comparison implementation in key_exists_in_index()
...
1. current implementation did not use the custom PartialOrd implementation
for RefValue
2. current implementation did not take collation into account
2025-07-08 11:58:57 +03:00
TcMits
edeced8912
parser: use YYSTACKDEPTH
2025-07-08 14:58:33 +07:00
Pekka Enberg
68060dabe2
Merge 'bindings/java: Implement required methods to run on JetBrains Datagrip' from Kim Seon Woo
...
Now, you can upload driver zar to Datagrip and use Turso database.
<img width="852" alt="image" src="https://github.com/user-
attachments/assets/27b071c3-bef7-4c4a-926d-9225de3c5a5b" />
## How to set up
### Build jar file
command: `make libs && make publish_local`
- this will build and put your jar file under `~/.m2/...`
### Register driver

### Set up datasource

Closes #1971
2025-07-08 10:23:14 +03:00
Pekka Enberg
1907df825c
Merge 'Use binary search in find_cell()' from Ihor Andrianov
...
Find cell using bin search
Reviewed-by: Pere Diaz Bou <pere-altea@homail.com >
Closes #1875
2025-07-08 10:22:26 +03:00
Pekka Enberg
97c5bdf408
Merge 'Use str_to_f64 on float conversion' from Levy A.
...
Closes #1870
2025-07-08 10:21:29 +03:00
Pekka Enberg
27705ce00a
Merge 'parser: replace KEYWORDS with matching' from Lâm Hoàng Phúc
...
before:
```sh
sqlparser-rs parsing benchmark/sqlparser::select
time: [693.20 ns 693.96 ns 694.73 ns]
change: [+7.4382% +7.6384% +7.8250%] (p = 0.00 < 0.05)
Performance has regressed.
Found 3 outliers among 100 measurements (3.00%)
1 (1.00%) low severe
1 (1.00%) low mild
1 (1.00%) high mild
sqlparser-rs parsing benchmark/sqlparser::with_select
time: [2.5734 µs 2.5763 µs 2.5796 µs]
change: [+16.583% +16.809% +17.024%] (p = 0.00 < 0.05)
Performance has regressed.
sqlparser-rs parsing benchmark/keyword_token
time: [3.1919 µs 3.1983 µs 3.2047 µs]
change: [+944.74% +948.97% +952.91%] (p = 0.00 < 0.05)
Performance has regressed.
Found 2 outliers among 100 measurements (2.00%)
2 (2.00%) low mild
```
after:
```sh
sqlparser-rs parsing benchmark/sqlparser::select
time: [637.09 ns 638.50 ns 640.15 ns]
change: [-1.8412% -1.5494% -1.2424%] (p = 0.00 < 0.05)
Performance has improved.
Found 8 outliers among 100 measurements (8.00%)
1 (1.00%) low severe
3 (3.00%) low mild
3 (3.00%) high mild
1 (1.00%) high severe
sqlparser-rs parsing benchmark/sqlparser::with_select
time: [2.1896 µs 2.1919 µs 2.1942 µs]
change: [-0.6894% -0.3923% -0.1517%] (p = 0.00 < 0.05)
Change within noise threshold.
Found 4 outliers among 100 measurements (4.00%)
4 (4.00%) low severe
sqlparser-rs parsing benchmark/keyword_token
time: [298.99 ns 299.82 ns 300.72 ns]
change: [-1.4726% -1.0148% -0.5702%] (p = 0.00 < 0.05)
Change within noise threshold.
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) low mild
6 (6.00%) high mild
```
Reviewed-by: Jussi Saurio <jussi.saurio@gmail.com >
Closes #1939
2025-07-08 10:21:03 +03:00