From 0a7bc6ede3882646421171c12f111852fe872523 Mon Sep 17 00:00:00 2001 From: Cerdic <cedric@yterium.com> Date: Thu, 17 Nov 2011 08:55:58 +0000 Subject: [PATCH] Gerer un flag pour savoir si une transaction est ouverte ou non. Utiliser ce flag pour gerer la fermeture, ce qui permet d'appeler la fonction de fermeture sans savoir a priori, et son retour permet d'avoir l'info si une transaction etait ouverte ou non. (Provision pour la gestion d'erreur de lock dans sqlite) --- ecrire/req/sqlite_generique.php | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/ecrire/req/sqlite_generique.php b/ecrire/req/sqlite_generique.php index 40adefc616..13c77b8636 100644 --- a/ecrire/req/sqlite_generique.php +++ b/ecrire/req/sqlite_generique.php @@ -1823,6 +1823,7 @@ function spip_versions_sqlite(){ class spip_sqlite { static $requeteurs = array(); + static $transaction_en_cours = array(); function spip_sqlite(){} @@ -1840,6 +1841,7 @@ class spip_sqlite { static function demarrer_transaction($serveur){ spip_sqlite::executer_requete("BEGIN TRANSACTION",$serveur); + spip_sqlite::$transaction_en_cours[$serveur] = true; } static function executer_requete($query, $serveur, $tracer=null){ @@ -1854,10 +1856,18 @@ class spip_sqlite { static function annuler_transaction($serveur){ spip_sqlite::executer_requete("ROLLBACK",$serveur); + spip_sqlite::$transaction_en_cours[$serveur] = false; } static function finir_transaction($serveur){ + // si pas de transaction en cours, ne rien faire et le dire + if (!isset (spip_sqlite::$transaction_en_cours[$serveur]) + OR spip_sqlite::$transaction_en_cours[$serveur]==false) + return false; + // sinon fermer la transaction et retourner true spip_sqlite::executer_requete("COMMIT",$serveur); + spip_sqlite::$transaction_en_cours[$serveur] = false; + return true; } } -- GitLab