[IMPORTANT] ALTER TABLE catch slikt alle fouten — ook serieuze #6

Open
opened 2026-08-05 21:11:31 +02:00 by eddy · 0 comments
Owner

Probleem

src/database/db.ts:28-30:

try {
  await db.execAsync('ALTER TABLE measurements ADD COLUMN deletedAt TEXT');
} catch {
  // Column already exists, ignore
}

De lege catch {} is bedoeld om de "column already exists" fout op te vangen bij herhaaldelijk initialiseren. Maar het vangt ook serieuze fouten:

  • Disk full
  • Corrupte database
  • Permission errors

Bij een corrupte database gaat de app gewoon door alsof alles in orde is, terwijl data-operaties vervolgens stilletjes falen.

Oplossing

Gebruik PRAGMA table_info om te checken of de kolom al bestaat vóór de ALTER:

const columns = await db.getAllAsync<{ name: string }>(
  'PRAGMA table_info(measurements)'
);
const hasDeletedAt = columns.some(col => col.name === 'deletedAt');
if (!hasDeletedAt) {
  await db.execAsync('ALTER TABLE measurements ADD COLUMN deletedAt TEXT');
}

Of als alternatief: check expliciet op "duplicate column" in de catch en re-throw bij andere fouten.

## Probleem `src/database/db.ts:28-30`: ```ts try { await db.execAsync('ALTER TABLE measurements ADD COLUMN deletedAt TEXT'); } catch { // Column already exists, ignore } ``` De lege `catch {}` is bedoeld om de "column already exists" fout op te vangen bij herhaaldelijk initialiseren. Maar het vangt ook serieuze fouten: - Disk full - Corrupte database - Permission errors Bij een corrupte database gaat de app gewoon door alsof alles in orde is, terwijl data-operaties vervolgens stilletjes falen. ## Oplossing Gebruik `PRAGMA table_info` om te checken of de kolom al bestaat vóór de ALTER: ```ts const columns = await db.getAllAsync<{ name: string }>( 'PRAGMA table_info(measurements)' ); const hasDeletedAt = columns.some(col => col.name === 'deletedAt'); if (!hasDeletedAt) { await db.execAsync('ALTER TABLE measurements ADD COLUMN deletedAt TEXT'); } ``` Of als alternatief: check expliciet op "duplicate column" in de catch en re-throw bij andere fouten.
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
eddy/weegschaal-app#6
No description provided.