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

Suppression (revert) des fonctions de cache sur sql_getfetsel et...

Suppression (revert) des fonctions de cache sur sql_getfetsel et sql_fetsel_cache introduites par [11842] et [12002].

Synthèse de petites discussions :
- Ces fonctions avaient été introduites car la compilation de squelettes peut induire de nombreuses requetes identiques.
- Cependant, ce n'est pas à cette api SQL de gérer des caches, mais au compilateur qui doit pouvoir optimiser le code généré.
- Il y avait trop de risques en cas d'accès concurrent à une même donnée que l'information rendue ne soit pas fraîche.
parent f3c19807
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -152,7 +152,6 @@ function sql_insert($table, $noms, $valeurs, $desc=array(), $serveur='', $option
{
$f = sql_serveur('insert', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $noms, $valeurs, $desc, $serveur, $option!==false);
}
......@@ -161,7 +160,6 @@ function sql_insertq($table, $couples=array(), $desc=array(), $serveur='', $opti
{
$f = sql_serveur('insertq', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $couples, $desc, $serveur, $option!==false);
}
......@@ -170,7 +168,6 @@ function sql_insertq_multi($table, $tab_couples=array(), $desc=array(), $serveur
{
$f = sql_serveur('insertq_multi', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $tab_couples, $desc, $serveur, $option!==false);
}
......@@ -179,7 +176,6 @@ function sql_update($table, $exp, $where='', $desc=array(), $serveur='', $option
{
$f = sql_serveur('update', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $exp, $where, $desc, $serveur, $option!==false);
}
......@@ -191,7 +187,6 @@ function sql_updateq($table, $exp, $where='', $desc=array(), $serveur='', $optio
{
$f = sql_serveur('updateq', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $exp, $where, $desc, $serveur, $option!==false);
}
......@@ -200,7 +195,6 @@ function sql_delete($table, $where='', $serveur='', $option=true)
{
$f = sql_serveur('delete', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $where, $serveur, $option!==false);
}
......@@ -209,7 +203,6 @@ function sql_replace($table, $couples, $desc=array(), $serveur='', $option=true)
{
$f = sql_serveur('replace', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $couples, $desc, $serveur, $option!==false);
}
......@@ -219,7 +212,6 @@ function sql_replace_multi($table, $tab_couples, $desc=array(), $serveur='', $op
{
$f = sql_serveur('replace_multi', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $tab_couples, $desc, $serveur, $option!==false);
}
......@@ -228,7 +220,6 @@ function sql_drop_table($table, $exist='', $serveur='', $option=true)
{
$f = sql_serveur('drop_table', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $exist, $serveur, $option!==false);
}
......@@ -238,7 +229,6 @@ function sql_drop_view($table, $exist='', $serveur='', $option=true)
{
$f = sql_serveur('drop_view', $serveur, $continue = $option==='continue' OR $option===false);
if (!is_string($f) OR !$f) return false;
sql_purge_cache($serveur);
return $f($table, $exist, $serveur, $option!==false);
}
......@@ -360,46 +350,6 @@ function sql_fetsel(
return $r2;
}
# une composition tellement frequente...
# avec un cache en plus pour les requetes repetitives sur un meme hit
// http://doc.spip.org/@sql_fetsel_cache
function sql_fetsel_cache(
$select = array(), $from = array(), $where = array(),
$groupby = array(), $orderby = array(), $limit = '',
$having = array(), $serveur='', $option=true) {
static $cache_fetsel=array();
$req = sql_get_select($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur);
if ($option==false) return $req;
return sql_fetsel_en_cache($req);
}
// Permet de stocker une ligne de requete sql_fetsel_cache dans un cache
// * $req est la requete calculee (sql_fetsel et le parametre $option a false)
// - si le resultat est en cache, il sera donne
// - sinon, la requete est executee, mise en cache et renvoyee
// * si $req === false, le cache est vide (cf. sql_purge_cache)
// http://doc.spip.org/@sql_fetsel_en_cache
function sql_fetsel_en_cache($req, $serveur=""){
static $cache=array();
// purger
if ($req===false) return is_array($cache = array());
// chercher en cache
$k = md5($req.$serveur);
if (isset($cache[$k])) return $cache[$k];
// sinon calculer
$r = sql_query($req, $serveur, $option!==false);
if (!$r) return $cache[$k]=NULL;
$r2 = sql_fetch($r, $serveur, $option!==false);
sql_free($r, $serveur, $option!==false);
return $cache[$k]=$r2;
}
// purge le cache de sql_fetsel_en_cache()
// http://doc.spip.org/@sql_purge_cache
function sql_purge_cache($serveur="") {
return sql_fetsel_en_cache(false, $serveur);
}
# Retourne l'unique champ demande dans une requete Select a resultat unique
// http://doc.spip.org/@sql_getfetsel
......@@ -409,7 +359,7 @@ function sql_getfetsel(
if (preg_match('/\s+as\s+(\w+)$/i', $select, $c)) $id = $c[1];
elseif (!preg_match('/\W/', $select)) $id = $select;
else {$id = 'n'; $select .= ' AS n';}
$r = sql_fetsel_cache($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option!==false);
$r = sql_fetsel($select, $from, $where, $groupby, $orderby, $limit, $having, $serveur, $option!==false);
if (!$r) return NULL;
return $r[$id];
}
......
......@@ -135,14 +135,14 @@ function quete_rubrique_fond($contexte) {
if (isset($contexte['id_rubrique'])
AND $id = intval($contexte['id_rubrique'])
AND $row = sql_fetsel_cache('id_parent, lang', 'spip_rubriques',"id_rubrique=$id")) {
AND $row = sql_fetsel('id_parent, lang', 'spip_rubriques',"id_rubrique=$id")) {
$lang = isset($row['lang']) ? $row['lang'] : '';
return array ($id, $lang);
}
if (isset($contexte['id_breve'])
AND $id = intval($contexte['id_breve'])
AND $row = sql_fetsel_cache('id_rubrique, lang', 'spip_breves', "id_breve=$id")
AND $row = sql_fetsel('id_rubrique, lang', 'spip_breves', "id_breve=$id")
AND $id_rubrique_fond = $row['id_rubrique']) {
$lang = isset($row['lang']) ? $row['lang'] : '';
return array($id_rubrique_fond, $lang);
......@@ -150,16 +150,16 @@ function quete_rubrique_fond($contexte) {
if (isset($contexte['id_syndic'])
AND $id = intval($contexte['id_syndic'])
AND $row = sql_fetsel_cache('id_rubrique', 'spip_syndic', "id_syndic=$id")
AND $row = sql_fetsel('id_rubrique', 'spip_syndic', "id_syndic=$id")
AND $id_rubrique_fond = $row['id_rubrique']
AND $row = sql_fetsel_cache('id_parent, lang', 'spip_rubriques', "id_rubrique=$id_rubrique_fond")) {
AND $row = sql_fetsel('id_parent, lang', 'spip_rubriques', "id_rubrique=$id_rubrique_fond")) {
$lang = isset($row['lang']) ? $row['lang'] : '';
return array($id_rubrique_fond, $lang);
}
if (isset($contexte['id_article'])
AND $id = intval($contexte['id_article'])
AND $row = sql_fetsel_cache('id_rubrique, lang', 'spip_articles', "id_article=$id")
AND $row = sql_fetsel('id_rubrique, lang', 'spip_articles', "id_article=$id")
AND $id_rubrique_fond = $row['id_rubrique']) {
$lang = isset($row['lang']) ? $row['lang'] : '';
return array($id_rubrique_fond, $lang);
......@@ -181,7 +181,7 @@ function quete_parent($id_rubrique) {
if (!$id_rubrique = intval($id_rubrique))
return 0;
$id_parent = sql_fetsel_cache('id_parent, lang','spip_rubriques',"id_rubrique=" . $id_rubrique);
$id_parent = sql_fetsel('id_parent, lang','spip_rubriques',"id_rubrique=" . $id_rubrique);
if ($id_parent['id_parent']!=$id_rubrique)
return intval($id_parent['id_parent']);
......
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