Skip to content
Extraits de code Groupes Projets
Valider 69fb777d rédigé par marcimat's avatar marcimat
Parcourir les fichiers

Permettre a sqlite de tracer correctement les requetes aussi; et petit...

Permettre a sqlite de tracer correctement les requetes aussi; et petit nettoyage pour le comptage des requetes select en sqlite3.
parent 37f08b86
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -382,8 +382,13 @@ function spip_sqlite_errno($serveur='') { ...@@ -382,8 +382,13 @@ function spip_sqlite_errno($serveur='') {
function spip_sqlite_explain($query, $serveur=''){ function spip_sqlite_explain($query, $serveur=''){
if (strpos(ltrim($query), 'SELECT') !== 0) return array(); if (strpos(ltrim($query), 'SELECT') !== 0) return array();
$query = 'EXPLAIN ' . _sqlite_traite_query($query, $db, $prefixe); $requete = new sqlite_traiter_requete("$query", $serveur);
$r = spip_sqlite_query($query, $serveur); $requete->traduire_requete(); // mysql -> sqlite
$requete->query = 'EXPLAIN ' . $requete->query;
// on ne trace pas ces requetes, sinon on obtient un tracage sans fin...
$requete->tracer = false;
$r = $requete->executer_requete();
return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier return $r ? spip_sqlite_fetch($r, null, $serveur) : false; // hum ? etrange ca... a verifier
} }
...@@ -1183,6 +1188,7 @@ class sqlite_traiter_requete{ ...@@ -1183,6 +1188,7 @@ class sqlite_traiter_requete{
var $link = ''; // le link (ressource) sqlite var $link = ''; // le link (ressource) sqlite
var $prefixe = ''; // le prefixe des tables var $prefixe = ''; // le prefixe des tables
var $db = ''; // le nom de la base var $db = ''; // le nom de la base
var $tracer = false; // doit-on tracer les requetes (var_profile)
/* constructeur */ /* constructeur */
function sqlite_traiter_requete($query, $serveur = ''){ function sqlite_traiter_requete($query, $serveur = ''){
...@@ -1196,6 +1202,9 @@ class sqlite_traiter_requete{ ...@@ -1196,6 +1202,9 @@ class sqlite_traiter_requete{
$this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe']; $this->prefixe = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['prefixe'];
$this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db']; $this->db = $GLOBALS['connexions'][$this->serveur ? $this->serveur : 0]['db'];
// tracage des requetes ?
$this->tracer = (isset($_GET['var_profile']) && $_GET['var_profile']);
} }
...@@ -1206,24 +1215,25 @@ class sqlite_traiter_requete{ ...@@ -1206,24 +1215,25 @@ class sqlite_traiter_requete{
$analyse->creerLesRequetes(); $analyse->creerLesRequetes();
// renvoyer // renvoyer
$this->query = $analyse->query; $this->query = $analyse->query;
$this->queryCount = $analyse->queryCount;
} }
/* lancer la requete $this->requete et faire le tracage si demande */ /* lancer la requete $this->requete et faire le tracage si demande */
function executer_requete(){ function executer_requete(){
$t = !isset($_GET['var_profile']) ? 0 : trace_query_start(); $t = $this->tracer ? trace_query_start(): 0;
//echo("<br /><b>executer_requete() $this->serveur >></b> $this->query"); // boum ? pourquoi ? //echo("<br /><b>executer_requete() $this->serveur >></b> $this->query"); // boum ? pourquoi ?
if ($this->link){ if ($this->link){
if (_sqlite_is_version(3, $this->link)) { if (_sqlite_is_version(3, $this->link)) {
$r = $this->link->query($this->query); $r = $this->link->query($this->query);
// comptage : oblige de compter le nombre d'entrees retournees par la requete // comptage : oblige de compter le nombre d'entrees retournees
// par une requete SELECT
// aucune autre solution ne donne le nombre attendu :( ! // aucune autre solution ne donne le nombre attendu :( !
// particulierement s'il y a des LIMIT dans la requete. // particulierement s'il y a des LIMIT dans la requete.
if ($this->queryCount){ if (strpos($this->query,'SELECT')!==false){
if ($r) { if ($r) {
$l = $this->link->query($this->queryCount); $l = $this->link->query($this->query);
$r->spipSqliteRowCount = count($l->fetchAll()); $r->spipSqliteRowCount = count($l->fetchAll());
unset($l);
} elseif (is_a($r, 'PDOStatement')) { } elseif (is_a($r, 'PDOStatement')) {
$r->spipSqliteRowCount = 0; $r->spipSqliteRowCount = 0;
} }
...@@ -1241,7 +1251,7 @@ class sqlite_traiter_requete{ ...@@ -1241,7 +1251,7 @@ class sqlite_traiter_requete{
//} //}
if (!$r && $e = spip_sqlite_errno($this->serveur)) // Log de l'erreur eventuelle if (!$r && $e = spip_sqlite_errno($this->serveur)) // Log de l'erreur eventuelle
$e .= spip_sqlite_error($this->query, $this->serveur); // et du fautif $e .= spip_sqlite_error($this->query, $this->serveur); // et du fautif
return $t ? trace_query_end($this->query, $t, $r, $e, $serveur) : $r; return $t ? trace_query_end($this->query, $t, $r, $e, $serveur) : $r;
} }
} }
...@@ -1286,10 +1296,6 @@ class sqlite_analyse_requete { ...@@ -1286,10 +1296,6 @@ class sqlite_analyse_requete {
$this->corrigerTout(); $this->corrigerTout();
// hop, on remet les 'textes' // hop, on remet les 'textes'
$this->afficherLesTextes(); $this->afficherLesTextes();
// requete pour comptage
if ($this->sqlite_version == 3){
$this->creerRequeteCount();
}
} }
...@@ -1424,15 +1430,6 @@ class sqlite_analyse_requete { ...@@ -1424,15 +1430,6 @@ class sqlite_analyse_requete {
} }
// les creations !
function creerRequeteCount(){
if (strpos($this->query,'SELECT')!==false){
$this->queryCount = $this->query;
//preg_replace('/SELECT(\s*)(DISTINCT)?(\s*)/s','SELECT$1$2$3COUNT(*) AS sqlite_count, ', $this->query, 1); // 1 seul !
}
}
// les callbacks // les callbacks
// remplacer DATE_ / INTERVAL par DATE...strtotime // remplacer DATE_ / INTERVAL par DATE...strtotime
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter