fix(reference): select verified station deterministically

This commit is contained in:
jb
2026-09-19 09:57:48 -04:00
parent 18515efbdf
commit 0c03a59b02
3 changed files with 16 additions and 9 deletions
+3 -2
View File
@@ -202,6 +202,7 @@ export function createReferenceSchema(db: Database): void {
CREATE INDEX systems_name_idx ON systems(name);
CREATE INDEX gates_destination_idx ON gates(destination_system_id);
CREATE INDEX stations_system_idx ON stations(system_id);
CREATE INDEX stations_source_verified_idx ON stations(source_verified, station_id);
`);
}
@@ -209,7 +210,7 @@ export function createReferenceSchema(db: Database): void {
export function assertReferenceReaderSchema(db: Database): void {
const version = Number((db.query<{ user_version: number }, []>('PRAGMA user_version').get() as { user_version: number } | null)?.user_version ?? 0);
const row = db.query<{ present: number }, []>("SELECT COUNT(*) AS present FROM sqlite_master WHERE type='table' AND name IN ('types','type_search','type_search_fts','categories','groups','regions','constellations','systems','stations')").get();
const index = db.query<{ present: number }, []>("SELECT COUNT(*) AS present FROM sqlite_master WHERE type='index' AND name='type_search_normalized_name_idx'").get();
const indexes = db.query<{ present: number }, []>("SELECT COUNT(*) AS present FROM sqlite_master WHERE type='index' AND name IN ('type_search_normalized_name_idx','stations_source_verified_idx')").get();
const requiredColumns: Record<string, string[]> = {
types: ['type_id', 'group_id', 'category_id', 'name_json', 'published', 'volume'],
type_search: ['type_id', 'language', 'name', 'normalized_name'],
@@ -225,7 +226,7 @@ export function assertReferenceReaderSchema(db: Database): void {
const present = new Set(db.query<{ name: string }, []>(`PRAGMA table_info(${table})`).all().map((column) => column.name));
return columns.every((column) => present.has(column));
});
if (version !== SCHEMA_VERSION || !row || Number(row.present) !== 9 || !index || Number(index.present) !== 1 || !columnsValid) throw new Error(`active reference database has an incompatible schema version (expected ${SCHEMA_VERSION})`);
if (version !== SCHEMA_VERSION || !row || Number(row.present) !== 9 || !indexes || Number(indexes.present) !== 2 || !columnsValid) throw new Error(`active reference database has an incompatible schema version (expected ${SCHEMA_VERSION})`);
}
const bool = (value: boolean | undefined): number | null => value === undefined ? null : value ? 1 : 0;