From 12e6f0d2c540417fcd327cfd8943e66351a9f101 Mon Sep 17 00:00:00 2001 From: Joseph Doherty Date: Mon, 20 Jul 2026 04:51:18 -0400 Subject: [PATCH] fix(localdb): create the database file's parent directory (0.1.1) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SQLite creates the database FILE on demand but never its parent DIRECTORY, and SqliteLocalDb opens the file eagerly in its constructor — so a configured path under a not-yet-existing directory was a hard startup failure ("SQLite Error 14: unable to open database file") rather than a first run that just worked. Relative defaults like ./data/app.db hit it routinely; a containerized consumer escapes only when a volume mount happens to create the directory first. ScadaBridge found this during LocalDb Phase 2 and worked around it app-side (SiteLocalDbDirectory.Ensure). Every other consumer still had the gap, so the guarantee belongs here. The standing objection to a library that creates directories is that it can mask a mis-typed path by silently starting an empty database. That does not apply: SQLite ALREADY does exactly that for a mis-typed file NAME. Refusing to create the directory protects nothing — it only makes the two halves of one path behave inconsistently and turns the directory half into an opaque error. A creation failure (permissions, read-only mount) now throws an InvalidOperationException naming the directory and the cause, instead of surfacing as SQLite error 14. That is a change of exception type, but only on a path that already failed hard. Both behaviours are pinned and verified to fail with the call removed. 147 tests pass, 0 warnings. Published to the Gitea feed at 0.1.1. Claude-Session: https://claude.ai/code/session_01BL2Vu1ESDQ9SCN4gVKkdts --- ZB.MOM.WW.LocalDb/Directory.Build.props | 2 +- .../Internal/SqliteLocalDb.cs | 58 +++++++++++++++++++ .../SqliteLocalDbTests.cs | 54 +++++++++++++++++ 3 files changed, 113 insertions(+), 1 deletion(-) diff --git a/ZB.MOM.WW.LocalDb/Directory.Build.props b/ZB.MOM.WW.LocalDb/Directory.Build.props index 98cc6fa..9a1a7b9 100644 --- a/ZB.MOM.WW.LocalDb/Directory.Build.props +++ b/ZB.MOM.WW.LocalDb/Directory.Build.props @@ -5,7 +5,7 @@ enable enable latest - 0.1.0 + 0.1.1 true true