Releases: tidesdb/tidesql
v3.7.0
TideSQL v3.7.0 MINOR
This release introduces pessimistic locking as an opt-in concurrency strategy via the new tidesdb_pessimistic_locking system variable (disabled by default). When enabled, the plugin applies striped mutex row locks for high-contention workloads such as TPC-C benchmarks, acquiring locks on exact PK lookups in index_read_map() and on scan-based mutations in update_row()/delete_row(), held through commit or rollback. Isolation is downgraded to READ COMMITTED when active, since row locks already serialize access. When disabled, TideSQL retains its native optimistic MVCC semantics with write-write conflict detection at commit time, the recommended mode for low-contention OLTP, analytics, and write-heavy workloads. The stripe array is hashed using xxh3_64bits() from TideSQL's bundled xxhash.h. Stripe count is tunable via the new read-only variable tidesdb_row_lock_stripes (default 1024, range 64–65536), allocated at plugin init and freed at deinit.
This release also improves installation and test reliability: the default my.cnf has been updated for better scale-oriented defaults, duplicate and redundant configuration entries have been removed from install.sh, and a new cleanup_tidesdb.inc restores the original collation state after test execution. A race condition in tidesdb_stress has been corrected where a SELECT could be dispatched before an autocommit INSERT had committed on fast CI environments such as macOS.
v3.6.0
TideSQL v3.6.0 MINOR
This release introduces configurable default engine settings, allowing table options to be defined globally via my.cnf or per-session using new tidesdb_default_* variables, removing the need to repeat options on every CREATE TABLE. Table-level options still override these defaults.
It also expands configuration coverage with new default system variables for performance, indexing, memory behavior, and compaction tuning.
Additionally, the max_memory_usage variable documentation has been corrected to reflect the actual library default of 50% of system RAM (with a 5% minimum floor).
v3.5.0
TideSQL 3 MINOR (v3.5.0)
This minor release of TideSQL introduces enhanced runtime configurability, improved maintenance operations, and expanded operational visibility. Table option changes made through ALTER TABLE now apply directly to live column families via tidesdb_cf_update_runtime_config, ensuring settings such as sync_mode, compression, bloom_fpr, and klog_value_threshold take effect immediately instead of only being stored in the table metadata. The optimizer path has also been improved; OPTIMIZE TABLE now performs a synchronous flush and compaction using tidesdb_purge_cf, guaranteeing that compaction is complete when the statement returns.
The release adds new read-only system variables tidesdb_log_to_file and tidesdb_log_truncation_at, providing visibility into logging behavior that was previously hardcoded. Snapshot capabilities are expanded with the new tidesdb_checkpoint_dir trigger variable, enabling near-instant hard-link snapshots through tidesdb_checkpoint, following the same operational pattern as the existing backup trigger.
Additionally, this release moves the TideSQL plugin to gamma status, reflecting increased stability and maturity while continuing active development.
v.3.4.1
TideSQL 3 PATCH (v3.4.1)
This patch release of TideSQL focuses on installer reliability, cross-platform correctness, and improved setup compatibility with newer MariaDB versions. It hardens the installation process by removing deprecated query cache options that caused startup failures on MariaDB 12.x, ensuring platform-correct plugin loading, and forcing mariadb-install-db to use the generated configuration to avoid conflicts with system defaults. The installer also improves macOS PGO support with Clang-compatible profiling flags, adds missing Windows build cases, and introduces smarter privilege detection to avoid unnecessary sudo. Additional fixes include correct runtime user configuration in my.cnf, improved dependency detection on Windows, more robust git submodule handling, and cleaner build configuration that skips unnecessary test builds while improving installer output formatting.
v3.4.0
TideSQL 3 MINOR (v3.4.0)
This minor release of TideSQL focuses on correctness, compatibility, and significant performance improvements. It fixes multiple issues (#72-#84), including proper transaction isolation mapping so MariaDB session isolation levels are now respected, correct dup_ref handling that previously caused “Can't find record” errors with INSERT ... ON DUPLICATE KEY UPDATE, and improved conflict handling. Compatibility with MariaDB 11.4+ and 12+ is corrected, along with updates to the MTR test suite. The release also includes a major performance pass that removes several per-row overheads in hot paths, adds caching and iterator reuse, reduces heap allocations, and gates debug logging to eliminate contention. Additional features include SHOW ENGINE TIDESDB STATUS, per-index USE_BTREE support, ANALYZE TABLE cardinality estimation, configurable default table options, a tidesdb_data_home_dir sysvar, and improved conflict diagnostics.
v3.3.6
TideSQL 3 PATCH (v3.3.6)
This patch improves MariaDB compatibility, fixes several correctness issues in metadata reporting and uniqueness enforcement, and resolves stability problems during DDL operations and engine conversions.
Information schema statistics now correctly report data_length and index_length. Previously these values returned 0 because only SSTable sizes were counted and the active memtable was ignored. The engine now includes memtable usage and falls back to an estimated size when only key statistics are available. create_time and update_time are also now reported correctly. create_time is seeded from the table .frm file and update_time is atomically updated after write statements so information_schema.tables reflects real activity.
Duplicate handling has been fixed. Primary key and unique index violations are now detected before writes and return the standard ER_DUP_ENTRY error instead of silently overwriting data. ALTER TABLE ADD UNIQUE now also validates duplicates during index population and aborts safely if conflicts exist, ensuring no rows are lost.
Several DDL stability issues were resolved. Large ALTER TABLE operations could previously crash MariaDB because read set tracking grew unbounded during table scans. DDL operations now run at READ_COMMITTED isolation which disables unnecessary conflict tracking and prevents memory corruption. DROP TABLE behavior has also been corrected so TidesDB data is properly removed instead of persisting across recreate operations.
Engine conversion and transaction behavior were improved. InnoDB tables with foreign keys can now be converted to TidesDB when FOREIGN_KEY_CHECKS is disabled, with unsupported foreign keys safely dropped during conversion. START TRANSACTION WITH CONSISTENT SNAPSHOT now behaves correctly and new safeguards prevent stale iterator reuse when transactions are recycled.
Additional fixes include improved MariaDB version compatibility through 11.8 and 12.3, a session level TTL override that allows per session or per statement expiration policies, and CI stability fixes to ensure clean library builds and reliable test execution.
v3.3.5
TideSQL 3 PATCH (v3.3.5)
This patch fixes retryable error handling under high-concurrency writes.
Previously, some non-fatal TidesDB errors were surfaced as a generic fatal error (1030), causing MariaDB and applications to abort unnecessarily. We’ve introduced centralized error mapping so retryable conditions; Such as conflicts, lock backpressure, and memory pressure are correctly classified as deadlocks (1213) and retried instead.
Only truly unexpected errors now fall back to generic fatal handling. Logging for transient errors has also been reduced to prevent noise, and a new concurrency stress test ensures error-1030 no longer occurs while preserving data integrity.
v3.3.4
TideSQL 3 PATCH (v3.3.4)
This patch implements full savepoints,and extends MTR suite with JSON tests.
v3.3.3
TideSQL 3 PATCH (v3.3.3)
This patch improves stability and correctness under common write and query workloads. Bulk inserts are now automatically split with mid-transaction commits to avoid transaction size limits and reduce failure risk during large inserts.
Autocommit single-statement transactions are downgraded to READ COMMITTED isolation, eliminating unnecessary conflict checks and fixing commit-time errors seen in high concurrency environments, while multi-statement transactions continue to honor the configured isolation level.
The release also hardens encryption handling, error recovery, and transaction cleanup paths, and fixes several query correctness bugs affecting joins and composite primary key lookups.
All changes are format-compatible and require no data migration.
v3.3.2
TideSQL 3 PATCH (v3.3.2)
This patch fixes a heap corruption in the row serialization path that could cause crashes under extremely high-concurrency write workloads. The buffer size estimate in serialize_row did not account for the length-prefix overhead added by MariaDB's internal string packing for CHAR columns, leading to silent heap corruption detectable as unaligned fastbin chunk errors in production.
Additionally, the auto-increment counter recovery at table open time now uses the proper deserialization path instead of a raw memcpy, ensuring correct seeding regardless of table schema layout.
Both fixes are format-compatible with existing data and require no migration.