diff --git a/cli/diagnose_db.php b/cli/diagnose_db.php new file mode 100644 index 0000000..17662d8 --- /dev/null +++ b/cli/diagnose_db.php @@ -0,0 +1,49 @@ +query('PRAGMA user_version')->fetchColumn(); + $users = (int)$pdo->query('SELECT COUNT(*) FROM users')->fetchColumn(); + $hasSession = qdb_table_exists($pdo, 'session'); + qdb_discard($tmpDb, $lockFp); + echo "OK: database opened and decrypted.\n"; + echo " PRAGMA user_version: $version (expected " . QDB_VERSION . ")\n"; + echo " users: $users\n"; + echo " session table: " . ($hasSession ? 'yes' : 'MISSING') . "\n"; + exit(0); +} catch (Throwable $e) { + echo "FAILED: " . $e->getMessage() . "\n"; + echo " (Check Apache/PHP error_log for stack trace.)\n"; + exit(1); +} diff --git a/db_init.php b/db_init.php index ecf22be..1742902 100644 --- a/db_init.php +++ b/db_init.php @@ -94,6 +94,21 @@ function qdb_apply_migrations(PDO $pdo, string $schemaSql): bool { $changed = true; } + if (!qdb_table_exists($pdo, 'session')) { + $pdo->exec(" + CREATE TABLE session ( + token TEXT NOT NULL PRIMARY KEY, + userID TEXT NOT NULL, + role TEXT NOT NULL, + entityID TEXT NOT NULL DEFAULT '', + createdAt INTEGER NOT NULL, + expiresAt INTEGER NOT NULL, + temp INTEGER NOT NULL DEFAULT 0 + ) + "); + $changed = true; + } + if (qdb_table_exists($pdo, 'questionnaire_submission')) { require_once __DIR__ . '/lib/submissions.php'; if (qdb_backfill_submissions_from_live($pdo)) {