Merge oracle coverage for schema objects; fix both-drop resurrection#1663
Conversation
The merge oracle had no schema-object scenarios. Add nineteen: view add/modify/drop on either or both sides, trigger firing after merge, index merges including same-name divergence, and in-transaction conflict inspection, with dual per-dialect setups where trigger bodies and DROP INDEX cannot share one script. The both-sides-dropped scenarios caught a real bug: the merged catalog rebuild fell back to the ancestor schema entry when a view or trigger was deleted on both branches, resurrecting the dropped object in the merge commit. Dolt keeps it dropped. 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 (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. |
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: 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. |
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. |
Fills the merge × schema-objects oracle gap (follow-on to the #1657 add-oracle coverage).
Coverage added (19 scenarios, live-Dolt comparison)
dolt_conflictscount parity underBEGIN).oracle_dual_poststate/oracle_dual_errorhelpers with per-system setups and a shared post-state probe.DROP INDEXdialect).Bug found and fixed
merge_view_both_dropandmerge_trigger_both_dropfailed on master: when both branches dropped a view or trigger,mergedSchemaChoicefell through to the ancestor entry and the merged catalog resurrected the dropped object. Dolt keeps it dropped. Fixed by returning no entry when both sides changed the name and neither side still has it — the same chokepoint serves hidden autoindex rows, so those can't resurrect either.Tests
Both new both-drop scenarios fail before the fix and pass after. Full local regression green: battery 88/88 suites, C corpus 309,830/309,830, merge oracle 67/67, schema_merge 37/37, fk_merge 39/39, conflicts 9/9, index×VC matrix 38/38.
🤖 Generated with Claude Code