fix: migration crash 'no such column: undone' on old DBs

When migrateDB() upgraded the transactions table to add the 'waste'
CHECK constraint, the new table was created WITHOUT the 'undone' column.
The migration then tried to build idx_transactions_pid_type_undone, which
references 'undone' → PDOException SQLSTATE[HY000].

Fix:
- Add undone INTEGER DEFAULT 0 to the migration CREATE TABLE
- Replace 'INSERT INTO transactions SELECT * FROM transactions_old'
  with explicit column list (transactions_old may predate undone column)

Fixes: #56
This commit is contained in:
dadaloop82
2026-05-16 07:15:03 +00:00
parent f121b8804c
commit 6b982b6730
+4 -1
View File
@@ -138,11 +138,14 @@ function migrateDB(PDO $db): void {
quantity REAL NOT NULL, quantity REAL NOT NULL,
location TEXT NOT NULL DEFAULT 'dispensa', location TEXT NOT NULL DEFAULT 'dispensa',
notes TEXT DEFAULT '', notes TEXT DEFAULT '',
undone INTEGER DEFAULT 0,
created_at DATETIME DEFAULT CURRENT_TIMESTAMP, created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE FOREIGN KEY (product_id) REFERENCES products(id) ON DELETE CASCADE
) )
"); ");
$db->exec("INSERT INTO transactions SELECT * FROM transactions_old"); // Insert with explicit columns: transactions_old may lack 'undone' (pre-v1.7.x DB)
$db->exec("INSERT INTO transactions (id, product_id, type, quantity, location, notes, created_at)
SELECT id, product_id, type, quantity, location, notes, created_at FROM transactions_old");
$db->exec("DROP TABLE transactions_old"); $db->exec("DROP TABLE transactions_old");
$db->exec("CREATE INDEX IF NOT EXISTS idx_transactions_product ON transactions(product_id)"); $db->exec("CREATE INDEX IF NOT EXISTS idx_transactions_product ON transactions(product_id)");
$db->exec("CREATE INDEX IF NOT EXISTS idx_transactions_date ON transactions(created_at)"); $db->exec("CREATE INDEX IF NOT EXISTS idx_transactions_date ON transactions(created_at)");