Release Notes
Added
- add missing module type for browser package (Nikita Sivukhin)
- Implement 2-args json_each (Mikaël Francoeur)
- Add OPFS support to JavaScript bindings (Nikita Sivukhin)
- test/fuzz: add UPDATE/DELETE fuzz test (Jussi Saurio)
- add gen-bigass-database.py (Jussi Saurio)
- Add assertion: we read a page with the correct id (Jussi Saurio)
- support float without fractional part (Lâm Hoàng Phúc)
- expr: use more efficient implementation for binary condition exprs (Jussi Saurio)
- Add json_each table-valued function (1-arg only) (Mikaël Francoeur)
- Add io_uring support to stress (Pekka Enberg)
- Refactor LIMIT/OFFSET handling to support expressions (bit-aloo)
- Encryption: add support for other AEGIS and AES-GCM cipher variants (Frank Denis)
- introduce package.json for separate *-browser package (both database and sync) (Nikita Sivukhin)
- introduce
eq/contains/starts_with/ends_with_ignore_ascii_case
macros (Lâm Hoàng Phúc) - introduce
match_ignore_ascii_case
macro (Lâm Hoàng Phúc) - core: Make strict schema support experimental (Pekka Enberg)
- core/printf: support for more basic substitution types (Luiz Gustavo)
- Return sqlite_version() without being initialized (Preston Thorpe)
- Support encryption for raw WAL frames (Gaurav Sarma)
- bindings/java: Implement date, time related methods under JDBC4PreparedStatement (Kim Seon Woo)
- Support cipher and encryption key URI options (William Souza)
- Implement UPSERT (Preston Thorpe)
- CLI: implement
Line
output .mode (Andrey Oskin) - add sqlite integrity check back (Pedro Muniz)
- core: Initial pass on synchronous pragma (Pekka Enberg)
- Introduce and propagate
IOContext
as required (Avinash Sajjanshetty) - Add some docs on encryption (Avinash Sajjanshetty)
- sqlite3: Implement sqlite3_malloc() and sqlite3_free() (Pekka Enberg)
- sqlite3: Implement sqlite3_next_stmt() (Pekka Enberg)
- core/translate: Add support (Pekka Enberg)
- sqlite3: Implement sqlite3_db_filename() (Pekka Enberg)
- flake.nix: add uv dependency to nativeBuildInputs (Ceferino Patino)
- sqlite3: Implement sqlite3_bind_parameter_index() (Pekka Enberg)
- sqlite3: Implement sqlite3_clear_bindings() (Pekka Enberg)
- sqlite3: Implement sqlite3_get_autocommit() (Pekka Enberg)
- Add support for AEGIS encryption algorithm (Avinash Sajjanshetty)
- bindings/java: Implement batch operations for JDBC4Statement (Kim Seon Woo)
- Add syntax highlighting for EXPLAIN and ANALYZE (Alex Miller)
- Add basic support for ANALYZE statement (Alex Miller)
- correctly implement offset() in parser (Lâm Hoàng Phúc)
- Switch to new parser in core (Levy A.)
- github: Remove Intel Mac support (Pekka Enberg)
- add remove_file method to the IO (Nikita Sivukhin)
- Add libc fault injection to Antithesis (Pekka Enberg)
- core/mvcc: support for MVCC (Pere Diaz Bou)
- SQLite C API improvements: add column type and column decltype (Danawan Bimantoro)
- Initial pass to support per page encryption (Avinash Sajjanshetty)
Updated
- clean
print_query_result
(Lâm Hoàng Phúc) - update update-script to properly handle JS workspace (Nikita Sivukhin)
- no need
QueryStatistics
ifself.opts.timer
is not set (Lâm Hoàng Phúc) - optimizer: convert outer join to inner join if possible (Jussi Saurio)
- Handle case where null flag is set in op_column (Jussi Saurio)
- remove &1 (Lâm Hoàng Phúc)
- reduce cloning
Arc<Page>
(Lâm Hoàng Phúc) - Evaluate left join seek key condition again after null row (Jussi Saurio)
- use mlugg/setup-zig instead of unmaintained action (Kingsword)
- Prevent setting of encryption keys if already set (Gaurav Sarma)
- Remove RefCell from Cursor (Pedro Muniz)
- Page Cache: optimize and use sieve/Gclock hybird algorithm in place of LRU (Preston Thorpe)
- core: handle edge cases for read_varint (Sonny)
- Persistence for DBSP-based materialized views (Glauber Costa)
- io_uring: prevent out of order operations that could interfere with durability (Preston Thorpe)
- core: Simplify WalFileShared life cycle (Pekka Enberg)
- prevent modification to system tables. (Glauber Costa)
- mark completion as done only after callback will be executed (Nikita Sivukhin)
- core/mvcc: make commit_txn return on I/O (Pere Diaz Bou)
- windows iterator returns no values for shorter slice (Lâm Hoàng Phúc)
- Unify resolution of aggregate functions (Piotr Rżysko)
- replace some matches with
match_ignore_ascii_case
macro (Lâm Hoàng Phúc) - Make io_uring sound for connections on multiple threads (Preston Thorpe)
- build native package for ARM64 (Nikita Sivukhin)
- refactor parser fmt (Lâm Hoàng Phúc)
- string sometimes used as identifier quoting (Lâm Hoàng Phúc)
- CURRENT_TIMESTAMP can fallback TK_ID (Lâm Hoàng Phúc)
- remove
turso_sqlite3_parser
fromturso_parser
(Lâm Hoàng Phúc) - Simulate I/O in memory (Pedro)
- Simulate I/O in memory (Pedro Muniz)
- Refactor encryption to manage authentication tag internally (bit-aloo)
- Unify handling of grouped and ungrouped aggregations (Piotr Rżysko)
- Evict page from cache if page is unlocked and unloaded (Pedro Muniz)
- Use u64 for file offsets in I/O and calculate such offsets in u64 (Preston Thorpe)
- Document how to use CDC (Pavan Nambi)
- Upgrade Rust version in simulator build Dockerfile (Preston Thorpe)
- Parse booleans to integer literals in expressions (Preston Thorpe)
- Simulator Profiles (Pedro Muniz)
- Change views to use DBSP circuits (Glauber Costa)
- core/wal: cache file size (Pere Diaz Bou)
- Remove some code duplication in the CLI (Preston Thorpe)
- core/translate: parse_table remove unnecessary clone of table name (Pere Diaz Bou)
- Update COMPAT.md to remove CREATE INDEX default disabled (Preston Thorpe)
- core/translate: remove unneessary agg clones (Pere Diaz Bou)
- core/vdbe: Micro-optimize "zero_or_null" opcode (Pekka Enberg)
- translate: with_capacity insns (Pere Diaz Bou)
- perf: avoid constructing PageType in helper methods (Jussi Saurio)
- refactor/perf: remove BTreePageInner (Jussi Saurio)
- Improve integrity check (Nikita Sivukhin)
- translate/insert: Improve string format performance (Pere Diaz Bou)
- core/schema: get_dependent_materialized_views_unnormalized (Pere Diaz Bou)
- core/util: emit literal, cow instead of replace (Pere Diaz Bou)
- core/translate: sanize_string fast path improvement (Pere Diaz Bou)
- core/io: Switch Unix I/O to use libc::pwrite() (Pekka Enberg)
- Update README.md for Go documentation (Preston Thorpe)
- improve sync engine (Nikita Sivukhin)
- Remove Go bindings (Preston Thorpe)
- core/storage: Micro-optimize Pager::commit_dirty_pages() (Pekka Enberg)
- Rename Go driver to
turso
to not conflict with sqlite3 (Preston Thorpe) - Refactor:
Cell
instead ofRefCell
to storeCipherMode
in connection (Avinash Sajjanshetty) - Improve documentation of page pinning (Jussi Saurio)
- Remove double indirection in the Parser (Pedro Muniz")
- Fail CI run if Turso output differs from SQLite in TPC-H queries (Jussi Saurio)
- Decouple SQL generation from Simulator crate (Pedro Muniz)
- Make fill_cell_payload() safe for async IO and cache spilling (Jussi Saurio)
- Remove Windows IO in place of Generic IO (Preston Thorpe)
- Improve encryption API (Avinash Sajjanshetty)
- Remove double indirection in the Parser (Pedro Muniz)
- Update TPC-H running instructions in PERF.md (Alex Miller)
- Truncate the WAL on last connection close (Preston Thorpe)
- DBSP projection (Pekka Enberg)
- Use vectored I/O for appending WAL frames (Preston Thorpe)
- Remove unnecessary argument from Pager::end_tx() (Nikita Sivukhin)
- refactor/btree: rewrite the find_free_cell() function (Jussi Saurio)
- refactor/btree: rewrite the free_cell_range() function (Jussi Saurio)
- Remove Result from signature (Mikaël Francoeur)
- Remove duplicated attribute in (bit-aloo)
- reduce cloning Token in parser (Lâm Hoàng Phúc)
- refactor encryption module and make it configurable (Avinash Sajjanshetty)
- Replace a couple refcells for types that trivially impl Copy (Preston Thorpe)
- wal-api: allow to mix frames insert with SQL execution (Nikita Sivukhin)
- move check code into parser (Lâm Hoàng Phúc)
- Serialize compat tests and use Mutex::lock() instead of Mutex::try_lock() in UnixIO (Jussi Saurio)
- sim: remove "run_once faults" (Jussi Saurio)
- should not return a Completion when there is a page cache hit (Pedro Muniz)
- github: Reduce Python build matrix (Pekka Enberg)
- Page cache truncate (Nikita Sivukhin)
- Wal api checkpoint seq (Nikita Sivukhin)
- Use more structured approach in translate_insert (Jussi Saurio)
- Remove hardcoded flag usage in DBHeader for encryption (Avinash Sajjanshetty)
- properly execute pragmas - they may require some IO (Nikita Sivukhin)
- Wal checkpoint upper bound (Nikita Sivukhin)
- Improve WAL checkpointing performance (Preston Thorpe)
- core/mvcc: store txid in conn and reset transaction state on commit (Pere Diaz Bou)
- core/mvcc: start first rowid at 1 (Pere Diaz Bou)
- refactor/vdbe: move insert-related seeking to VDBE from BTreeCursor (Jussi Saurio)
Fixed
- Fix clear_page_cache method and rollback (Preston Thorpe)
- Fix read_entire_wal_dumb: incrementally build the frame cache (Preston Thorpe)
- Fix merge script to prompt if tests are still in progress (Preston Thorpe)
- SQL generation fixes (Pekka Enberg)
- Fix affinity handling in MakeRecord (Pekka Enberg)
- Fix infinite loop when IO failure happens on allocating first page (Preston Thorpe)
- Fix crash in Next opcode if cursor stack has no pages (Jussi Saurio)
- cli: Fix dump compatibility in "PRAGMA foreign_keys" (Pekka Enberg)
- Small fixes (Nikita Sivukhin)
- Avoid allocating and then immediately fallbacking errors in affinity (Jussi Saurio)
- Fix float formatting and comparison + Blob concat (Levy A.)
- Fix infinite loop when query starts comment token ("--") (Lâm Hoàng Phúc)
- Fix sqlite3 test cases (Pekka Enberg)
- Fix non-determinism in simulator (Pedro Muniz)
- Fix column count in ImmutableRow (Glauber Costa)
- Fix memory leak in page cache during balancing (Preston Thorpe)
- Fix
sim-schema
command (Pedro Muniz) - Propagate decryption error from the callback (Avinash Sajjanshetty)
- Fix sorter column deduplication (Piotr Rżysko)
- Fix missing functions after revert (Pedro Muniz)
- ci: fix merge-pr issue to escape command-line backticks (Ceferino Patino)
- Fix several issues with integrity_check (Jussi Saurio)
- core/io: Fix build on Android and iOS (Pekka Enberg)
- WAL txn: fix reads from DB file (Nikita Sivukhin)
- Fix blob type handling in JavaScript (Pekka Enberg)
- Fix: all indexes need to be updated if the rowid changes (Jussi Saurio)
- Fix: in UPDATE, insert rowid into index instead of NULL (Jussi Saurio)
- Fix: normalize table name in DELETE (Jussi Saurio)
Install turso_cli 0.1.5
Install prebuilt binaries via shell script
curl --proto '=https' --tlsv1.2 -LsSf https://github.com/tursodatabase/turso/releases/download/v0.1.5/turso_cli-installer.sh | sh
Install prebuilt binaries via powershell script
powershell -ExecutionPolicy Bypass -c "irm https://github.com/tursodatabase/turso/releases/download/v0.1.5/turso_cli-installer.ps1 | iex"
Download turso_cli 0.1.5
File | Platform | Checksum |
---|---|---|
turso_cli-aarch64-apple-darwin.tar.xz | Apple Silicon macOS | checksum |
turso_cli-x86_64-apple-darwin.tar.xz | Intel macOS | checksum |
turso_cli-x86_64-pc-windows-msvc.zip | x64 Windows | checksum |
turso_cli-x86_64-unknown-linux-gnu.tar.xz | x64 Linux | checksum |
Verifying GitHub Artifact Attestations
The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:
gh attestation verify <file-path of downloaded artifact> --repo tursodatabase/turso
You can also download the attestation from GitHub and verify against that directly:
gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>