Stronger schema merges, broader SQLite compatibility, and faster writes.
Version-control correctness
- Table renames merge cleanly, with indexes and triggers following their tables.
- Fixed index corruption during merges and reverts, including keyless tables.
- Fixed false rename detection and
dolt_workspace_*self-subquery updates. - Historical and staged primary-key filters preserve SQLite affinity.
SQLite compatibility
- Restored rowid,
RETURNING, triggers, and incremental BLOB access on clustered primary keys. - Added working
VACUUM INTOand correct transactionalVACUUMerrors. - Fixed
COUNT … BETWEENcollation andINDEXED BYbehavior. - Failed virtual-table creation now rolls back only its statement.
Performance
- Reduced hashing work for large keys and clustered-key updates.
Benchmark / int-keys (100K rows, Linux x64)
File-Backed
Reads
| Test | SQLite (us) | DoltLite (us) | Multiplier |
|---|---|---|---|
| oltp_point_select | 85,616 | 37,624 | 0.44 |
| oltp_range_select | 15,934 | 10,294 | 0.65 |
| oltp_sum_range | 14,957 | 10,078 | 0.67 |
| oltp_order_range | 2,959 | 2,433 | 0.82 |
| oltp_distinct_range | 3,767 | 3,216 | 0.85 |
| oltp_index_scan | 10,172 | 5,923 | 0.58 |
| select_random_points | 16,141 | 10,798 | 0.67 |
| select_random_ranges | 9,166 | 4,796 | 0.52 |
| covering_index_scan | 10,336 | 5,264 | 0.51 |
| groupby_scan | 26,565 | 26,097 | 0.98 |
| index_join | 8,421 | 7,623 | 0.91 |
| index_join_scan | 3,595 | 4,007 | 1.11 |
| types_table_scan | 877,252 | 900,808 | 1.03 |
| table_scan | 990,140 | 1,001,792 | 1.01 |
| oltp_read_only | 175,353 | 108,684 | 0.62 |
| Average | 0.76 |
Writes
| Test | SQLite (us) | DoltLite (us) | Multiplier |
|---|---|---|---|
| oltp_bulk_insert | 202,147 | 251,128 | 1.24 |
| oltp_insert | 26,675 | 35,930 | 1.35 |
| oltp_update_index | 236,596 | 150,088 | 0.63 |
| oltp_update_non_index | 128,724 | 87,220 | 0.68 |
| oltp_delete_insert | 120,982 | 104,263 | 0.86 |
| oltp_write_only | 91,684 | 83,776 | 0.91 |
| types_delete_insert | 87,318 | 66,649 | 0.76 |
| oltp_read_write | 150,678 | 134,047 | 0.89 |
| Average | 0.92 |
100000 rows, median of 5 paired invocations per test; autocommit writes use 9, workload-only timing via host monotonic clock when available.