diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php
index 9750937f2b138c426bbd37ee81b386647afd0f20..a8320ef0197ac8177b773320c421d40f1a9c0649 100644
--- a/ecrire/base/abstract_sql.php
+++ b/ecrire/base/abstract_sql.php
@@ -21,50 +21,20 @@ if (!defined("_ECRIRE_INC_VERSION")) return;
 // Cette fonction charge la description d'un serveur de base de donnees
 // (via la fonction spip_connect qui etablira la connexion si ce n'est fait)
 // et retourne la fonction produisant la requĂȘte SQL demandee
-// Erreur fatale si la fonctionnalite est absente
+// Erreur fatale si la fonctionnalite est absente sauf si le 3e arg <> false
 
 // http://doc.spip.org/@sql_serveur
-function sql_serveur($ins_sql, $serveur='') {
+function sql_serveur($ins_sql, $serveur='', $continue=false) {
 
 	$desc = spip_connect($serveur);
 	if (function_exists($f = @$desc[$ins_sql])) return $f;
 	spip_log("Le serveur '$serveur' ne dispose pas de  '$ins_sql'");
+	if ($continue) return false;
 	include_spip('inc/minipres');
 	echo minipres(_T('info_travaux_titre'),  _T('titre_probleme_technique'));
 	exit;
 }
 
-// Dans quelques cas, l'absence de fonctionnalite ne doit pas declencher
-// d'erreur fatale ==> ne pas utiliser la fonction generale
-
-// http://doc.spip.org/@sql_explain
-function sql_explain($q, $serveur='') {
-	$desc = spip_connect($serveur);
-	if (function_exists($f = @$desc['explain'])) {
-		return $f($q, $serveur);
-	}
-	spip_log("Le serveur '$serveur' ne dispose pas de 'explain'");
-	return false;
-}
-
-// http://doc.spip.org/@sql_optimize
-function sql_optimize($q, $serveur='') {
-	$desc = spip_connect($serveur);
-	if (function_exists($f = @$desc['optimize'])) {
-		return $f($q, $serveur);
-	}
-	spip_log("Le serveur '$serveur' ne dispose pas de 'optimize'");
-}
-
-// http://doc.spip.org/@sql_repair
-function sql_repair($table, $serveur='') {
-	$desc = spip_connect($serveur);
-	if (function_exists($f = @$desc['repair'])) {
-		return $f($table, $serveur);
-	}
-	spip_log("Le serveur '$serveur' ne dispose pas de 'repair'");
-}
-
 // Demande si un charset est disponible. 
 // http://doc.spip.org/@sql_get_charset
 function sql_get_charset($charset, $serveur=''){
@@ -275,6 +245,24 @@ function sql_errno($serveur='') {
 	return $f();
 }
 
+// http://doc.spip.org/@sql_explain
+function sql_explain($q, $serveur='') {
+	$f = sql_serveur('explain', $serveur, true);
+	return $f ?  $f($q, $serveur) : false;
+}
+
+// http://doc.spip.org/@sql_optimize
+function sql_optimize($q, $serveur='') {
+	$f = sql_serveur('optimize', $serveur, true);
+	return $f ?  $f($q, $serveur) : false;
+}
+
+// http://doc.spip.org/@sql_repair
+function sql_repair($table, $serveur='') {
+	$f = sql_serveur('repair', $serveur, true);
+	return $f ?  $f($q, $serveur) : false;
+}
+
 // Fonction la plus generale ... et la moins portable
 // A n'utiliser qu'en derniere extremite