labfy-investigation/database/schema_v2.sql
2026-07-18 19:18:51 +02:00

105 lines
2.6 KiB
SQL
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/******************************************************************************
* Labfy Investigation
*
* Migration du schéma SQLite V1 vers V2
******************************************************************************/
/*
* Nom du fichier tel quil existait avant son import.
*
* La colonne name existante conserve le nom interne utilisé dans
* larborescence de lenquête.
*/
ALTER TABLE preuves
ADD COLUMN original_name TEXT;
/*
* Date déclarée de collecte de la preuve.
*
* Elle est distincte de :
*
* - file_created_at : date technique connue du fichier ;
* - imported_at : date dimport dans lenquête.
*/
ALTER TABLE preuves
ADD COLUMN collected_at TEXT;
/*
* Description textuelle initiale de la provenance.
*
* Une future évolution pourra relier une preuve à la table sources
* avec un identifiant métier.
*/
ALTER TABLE preuves
ADD COLUMN source TEXT;
/*
* Correspondance avec EvidenceIntegrityStatus :
*
* 0 = UNKNOWN
* 1 = VALID
* 2 = MISSING
* 3 = MODIFIED
* 4 = ERROR
*/
ALTER TABLE preuves
ADD COLUMN integrity_status INTEGER NOT NULL DEFAULT 0
CHECK (
integrity_status BETWEEN 0 AND 4
);
/*
* Les éventuelles preuves V1 utilisent leur ancien nom visible comme
* nom original afin de rester lisibles après migration.
*/
UPDATE preuves
SET original_name = name
WHERE original_name IS NULL
OR length(trim(original_name)) = 0;
CREATE INDEX idx_preuves_imported_at
ON preuves(imported_at);
/*
* SQLite ne permet pas dajouter directement une contrainte NOT NULL
* à une colonne ajoutée lorsque des lignes peuvent déjà exister.
*
* Ces triggers renforcent donc les insertions et modifications V2.
*/
CREATE TRIGGER preuves_v2_validate_insert
BEFORE INSERT ON preuves
FOR EACH ROW
WHEN
NEW.original_name IS NULL
OR length(trim(NEW.original_name)) = 0
OR NEW.size_bytes IS NULL
OR NEW.size_bytes < 0
OR NEW.sha256 IS NULL
OR length(NEW.sha256) != 64
OR NEW.sha256 != lower(NEW.sha256)
OR NEW.integrity_status NOT BETWEEN 0 AND 4
BEGIN
SELECT RAISE(
ABORT,
'La preuve ne respecte pas les contraintes du schéma V2.'
);
END;
CREATE TRIGGER preuves_v2_validate_update
BEFORE UPDATE ON preuves
FOR EACH ROW
WHEN
NEW.original_name IS NULL
OR length(trim(NEW.original_name)) = 0
OR NEW.size_bytes IS NULL
OR NEW.size_bytes < 0
OR NEW.sha256 IS NULL
OR length(NEW.sha256) != 64
OR NEW.sha256 != lower(NEW.sha256)
OR NEW.integrity_status NOT BETWEEN 0 AND 4
BEGIN
SELECT RAISE(
ABORT,
'La preuve ne respecte pas les contraintes du schéma V2.'
);
END;