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
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+1 −51
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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]; 
}
+6 −6
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -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']);