Migrer l’initialisation vers la couche Database #27
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Ticket #026 — Migrer l’initialisation vers la couche Database
Contexte
Le ticket #025 a introduit l’infrastructure principale de la couche Database :
Database;DatabaseStatement;Cependant,
database_initialize()utilise encore directement plusieurs fonctions de l’API SQLite :De son côté,
schema_install_v1()reçoit toujours directement unsqlite3 *, ce qui contourne l’abstractionDatabase.Objectif
Réécrire l’initialisation d’une nouvelle enquête afin qu’elle utilise l’infrastructure créée au ticket #025.
L’initialisation doit rester atomique :
Travail à réaliser
Adapter l’installation du schéma
Modifier la signature actuelle :
afin qu’elle reçoive un contexte Database :
L’installation du fichier SQL complet pourra continuer à utiliser
sqlite3_exec()en interne, car le schéma contient plusieurs instructions SQL.L’accès au handle SQLite devra passer par l’API interne :
La fonction ne devra réaliser ni
COMMITniROLLBACK.Migrer l’insertion des métadonnées
Réécrire les fonctions responsables de l’insertion dans la table
metadataavecDatabaseStatement.Les opérations devront utiliser l’API suivante :
Les métadonnées obligatoires restent :
Une seule requête préparée devra pouvoir être réutilisée pour insérer les quatre métadonnées.
Migrer l’insertion de l’enquête
Réécrire l’insertion dans la table
investigationavecDatabaseStatement.Les champs insérés restent :
Le déroulement attendu est :
Tout échec après le début de la transaction doit provoquer un rollback.
Utiliser l’infrastructure d’erreurs
Les erreurs rencontrées pendant :
doivent être enregistrées dans le contexte Database lorsque celui-ci est disponible.
L’infrastructure interne existante pourra être utilisée :
Nettoyer l’ancien code SQLite
Supprimer de la logique d’initialisation les appels directs à :
Supprimer également les commandes manuelles :
La fonction utilitaire
database_execute_sql()pourra être conservée uniquement si elle reste nécessaire àdatabase_open()pour l’activation des clés étrangères.Mettre à jour la documentation publique
Dans
include/database/database.h, supprimer la mention temporaire :La documentation de
database_initialize()devra préciser que :Tests à ajouter ou adapter
Initialisation réussie
Vérifier qu’une initialisation valide crée :
Paramètres invalides
Vérifier le refus des cas suivants :
Rollback
Provoquer un échec après le démarrage de la transaction.
Une seconde tentative d’initialisation sur une base déjà initialisée pourra être utilisée pour provoquer une erreur de contrainte ou de création de schéma.
Après l’échec, vérifier que :
Régression
Tous les tests existants doivent rester valides :
Critères d’acceptation
database_initialize()n’appelle plus directementsqlite3_open_v2().database_initialize()utilisedatabase_open().database_initialize()utilisedatabase_close().transaction.DatabaseStatement.InvestigationNodeInvestigationschema_install_v1()reçoit unDatabase *.InvestigationNode
Investigation
schema_install_v1()reçoit unDatabase *.schema_install_v1()récupère le handle avec l’API interne.sqlite3_stmt *n’est manipulé dans le code d’initialisation.BEGIN,COMMITouROLLBACKmanuel ne reste dansdatabase.c.makeréussit sans erreur.make testréussit.git diff --checkne retourne aucune erreur.Hors périmètre
Ce ticket ne doit pas ajouter :
schema_v1.sql;Fichiers principalement concernés
Résultat attendu
À la fin du ticket,
database_initialize()doit être un utilisateur normal de la couche Database.La fonction ne doit plus contourner cette couche avec des appels SQLite directs.
L’initialisation d’une enquête doit être entièrement transactionnelle, testée et cohérente avec l’architecture mise en place au ticket #025.
Commit attendu
Une fois tous les critères d’acceptation validés, le ticket pourra être enregistré avec le commit suivant :
Le commit doit principalement contenir :
Avant le commit, exécuter :