Refuse an unversioned database that already has a files table (closes #11)
check / check (push) Successful in 2m22s

scan opened any database whose user_version was 0 as empty and ran an
unconditional CREATE TABLE files, so a foreign or partially initialized
file with a files table failed with the raw SQLite "table files already
exists", which explains nothing. createSchema now checks for an existing
files table first and, when one is present at version 0, reports the
schema-version error telling the operator to remove the file and rescan,
matching the README rule that an unrecognized database is fatal.

Model: opus-4-8
This commit is contained in:
2026-09-21 07:23:09 +00:00
parent 337b319542
commit b2a4f748b7
3 changed files with 60 additions and 2 deletions
+32
View File
@@ -78,6 +78,38 @@ func TestOpenScanDatabaseCreates(t *testing.T) {
}
}
func TestOpenScanDatabaseUnversionedForeign(t *testing.T) {
t.Parallel()
path := testDBPath(t)
// A database that has a files table but user_version 0 — a foreign
// or partially initialized file. scan must refuse it with a clear
// schema-version error, not adopt it and not emit a raw SQLite
// "table files already exists".
db, err := openDB(path)
if err != nil {
t.Fatal(err)
}
_, err = db.ExecContext(t.Context(), "CREATE TABLE files (x INTEGER)")
if err != nil {
t.Fatal(err)
}
_ = db.Close()
_, err = openScanDatabase(t.Context(), path)
if !errors.Is(err, errSchemaVersion) {
t.Fatalf("err = %v, want errSchemaVersion", err)
}
if !strings.Contains(err.Error(), "remove the file and rescan") {
t.Fatalf("err = %v, want it to tell the operator to remove and rescan",
err)
}
}
func TestOpenReportDatabaseMissing(t *testing.T) {
t.Parallel()