Pin per-system dolt_schema_diff shapes for schema objects#1668
Conversation
The two systems intentionally present schema objects differently: doltlite emits one row per SQLite schema object while Dolt folds index changes into the owning table's row and stores views and triggers as dolt_schemas rows, whose own schema only changes on creation or drop — a view modification produces no Dolt schema_diff row at all. Cross- comparing is meaningless, so ten scenarios pin each system to its own expected shape (index add/drop/modify, view add/drop/modify, trigger add, a mixed commit, and doltlite's object-name filter semantics); a change on either side surfaces as a failure. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Version-Control Performance CeilingsRuns: median of 3 executions per benchmark, excluding fixture setup. The
|
Sysbench-Style Benchmark (TEXT PK): Doltlite vs SQLiteCompanion to the classic Sysbench-Style Benchmark. Every workload here In-MemoryReads
Writes
File-BackedReads
Writes
File-Backed (autocommit)Each statement runs as its own transaction — exposes per-commit ReadsReads have no commit cost; these are the same SQL files as the
Writes
100000 rows, median of 5 invocations per test; autocommit writes use 9, workload-only timing via host monotonic clock when available. Performance Ceiling Check (2.5x individual, 2x average; autocommit writes: 6x / 5x)All tests within ceilings. |
Sysbench-Style Benchmark (BLOB PK): Doltlite vs SQLiteCompanion to the classic Sysbench-Style Benchmark. Every workload here In-MemoryReads
Writes
File-BackedReads
Writes
File-Backed (autocommit)Each statement runs as its own transaction — exposes per-commit ReadsReads have no commit cost; these are the same SQL files as the
Writes
100000 rows, median of 5 invocations per test; autocommit writes use 9, workload-only timing via host monotonic clock when available. Performance Ceiling Check (2.5x individual, 2x average; autocommit writes: 6x / 5x)All tests within ceilings. |
Sysbench-Style Benchmark (composite PK): Doltlite vs SQLiteCompanion to the classic Sysbench-Style Benchmark. Every workload here In-MemoryReads
Writes
File-BackedReads
Writes
File-Backed (autocommit)Each statement runs as its own transaction — exposes per-commit ReadsReads have no commit cost; these are the same SQL files as the
Writes
100000 rows, median of 5 invocations per test; autocommit writes use 9, workload-only timing via host monotonic clock when available. Performance Ceiling Check (2.5x individual, 2x average; autocommit writes: 6x / 5x)All tests within ceilings. |
The pinned literals were captured under macOS collation, where sort places '~' before letters; CI's C locale orders it after, failing the multi-row scenario. Both pinned-shape sorts now force LC_ALL=C and the literals use byte order. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sysbench-Style Benchmark: Doltlite vs SQLiteIn-MemoryReads
Writes
File-BackedReads
Writes
File-Backed (autocommit)Each statement runs as its own transaction — exposes per-commit ReadsReads have no commit cost; these are the same SQL files as the
Writes
100000 rows, median of 5 invocations per test; autocommit writes use 9, workload-only timing via host monotonic clock when available. Performance Ceiling Check (2.5x individual, 2x average; autocommit writes: 6x / 5x)All tests within ceilings. |
Final piece of the schema-objects × VC oracle campaign (#1657 add, #1663 merge, #1665 checkout, #1666 revert/cherry-pick, #1667 remotes).
The surface divergence, pinned rather than papered over
dolt_schema_diffis the one VC surface where doltlite and Dolt intentionally disagree on shape:idxt → tvdolt_schemastable created/droppedv → vtrgdoltlite's per-object rows follow the SQLite surface (indexes/views/triggers are first-class schema objects) and are strictly more informative for view/trigger edits. Cross-comparing outputs is meaningless, so the new scenarios pin each system to its own expected shape — if either doltlite regresses or upstream Dolt changes behavior, the suite flags it for a deliberate decision.
Coverage added (10 scenarios)
Index add/drop/modify, view add/drop/modify, trigger add alongside an existing view, a mixed commit (table ALTER + index + view in one commit), and doltlite's 3-arg filter semantics: filtering by object name returns that object's row; filtering by the owning table returns only the table's own DDL changes (the index is its own object — flagging this judgment call for review, since a user filtering by table might expect its indexes included).
No engine changes
Suite total: 59/59.
🤖 Generated with Claude Code