enhanced questionnaire version handling and handling uploads from outdated questionnaires through automatic revisioning and checks
Some checks failed
PHPUnit / test (push) Has been cancelled
Some checks failed
PHPUnit / test (push) Has been cancelled
This commit is contained in:
64
db_init.php
64
db_init.php
@ -13,7 +13,7 @@ if (defined('QDB_TEST_UPLOADS')) {
|
||||
define('QDB_LOCK', QDB_UPLOADS_DIR . '/.qdb_lock');
|
||||
}
|
||||
define('QDB_SCHEMA', __DIR__ . '/schema.sql');
|
||||
define('QDB_VERSION', 11);
|
||||
define('QDB_VERSION', 12);
|
||||
|
||||
function qdb_table_exists(PDO $pdo, string $table): bool {
|
||||
$stmt = $pdo->prepare(
|
||||
@ -55,6 +55,68 @@ function qdb_apply_migrations(PDO $pdo, string $schemaSql): bool {
|
||||
}
|
||||
}
|
||||
|
||||
if (qdb_table_exists($pdo, 'questionnaire')) {
|
||||
if (!qdb_column_exists($pdo, 'questionnaire', 'structureRevision')) {
|
||||
$pdo->exec('ALTER TABLE questionnaire ADD COLUMN structureRevision INTEGER NOT NULL DEFAULT 1');
|
||||
$changed = true;
|
||||
}
|
||||
if (!qdb_column_exists($pdo, 'questionnaire', 'structureChangedAt')) {
|
||||
$pdo->exec('ALTER TABLE questionnaire ADD COLUMN structureChangedAt INTEGER NOT NULL DEFAULT 0');
|
||||
$changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!qdb_table_exists($pdo, 'questionnaire_structure_snapshot')) {
|
||||
$pdo->exec("
|
||||
CREATE TABLE questionnaire_structure_snapshot (
|
||||
questionnaireID TEXT NOT NULL,
|
||||
structureRevision INTEGER NOT NULL,
|
||||
createdAt INTEGER NOT NULL,
|
||||
manifestJson TEXT NOT NULL DEFAULT '{}',
|
||||
PRIMARY KEY (questionnaireID, structureRevision),
|
||||
FOREIGN KEY(questionnaireID) REFERENCES questionnaire(questionnaireID) ON DELETE CASCADE
|
||||
)
|
||||
");
|
||||
$changed = true;
|
||||
}
|
||||
|
||||
if (qdb_table_exists($pdo, 'question')) {
|
||||
if (!qdb_column_exists($pdo, 'question', 'retiredAt')) {
|
||||
$pdo->exec('ALTER TABLE question ADD COLUMN retiredAt INTEGER NOT NULL DEFAULT 0');
|
||||
$changed = true;
|
||||
}
|
||||
if (!qdb_column_exists($pdo, 'question', 'retiredInRevision')) {
|
||||
$pdo->exec('ALTER TABLE question ADD COLUMN retiredInRevision INTEGER NOT NULL DEFAULT 0');
|
||||
$changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (qdb_table_exists($pdo, 'answer_option')) {
|
||||
if (!qdb_column_exists($pdo, 'answer_option', 'retiredAt')) {
|
||||
$pdo->exec('ALTER TABLE answer_option ADD COLUMN retiredAt INTEGER NOT NULL DEFAULT 0');
|
||||
$changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (qdb_table_exists($pdo, 'questionnaire_submission')) {
|
||||
if (!qdb_column_exists($pdo, 'questionnaire_submission', 'structureRevision')) {
|
||||
$pdo->exec('ALTER TABLE questionnaire_submission ADD COLUMN structureRevision INTEGER NOT NULL DEFAULT 1');
|
||||
$changed = true;
|
||||
}
|
||||
if (!qdb_column_exists($pdo, 'questionnaire_submission', 'structureSnapshotJson')) {
|
||||
$pdo->exec("ALTER TABLE questionnaire_submission ADD COLUMN structureSnapshotJson TEXT NOT NULL DEFAULT '{}'");
|
||||
$changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (qdb_table_exists($pdo, 'questionnaire_structure_snapshot')
|
||||
&& qdb_table_exists($pdo, 'questionnaire')) {
|
||||
require_once __DIR__ . '/lib/questionnaire_structure.php';
|
||||
if (qdb_backfill_structure_snapshots($pdo)) {
|
||||
$changed = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (!qdb_table_exists($pdo, 'questionnaire_submission')) {
|
||||
$pdo->exec("
|
||||
CREATE TABLE questionnaire_submission (
|
||||
|
||||
Reference in New Issue
Block a user