Valider c6b27468 rédigé par esj's avatar esj
Parcourir les fichiers

La fonction {{{calcul_mysql_in}}} doit finalement elle aussi être abstraite à...

La fonction {{{calcul_mysql_in}}} doit finalement elle aussi être abstraite à cause des valeurs hexadécimales qui peuvent s'y trouver. Pour éviter des problèmes de compatibilité, cette fonction reste sous ce nom dans le coeur de SPIP, mais il faut la considérer comme obsolète et lui préférer:

{{{
in => fonction d'abstraction du test de la présence d'une valeur dans une liste.
}}}
Cette fonction s'ajoute à celles définies dans [10667], [10433], [10131], [10146], [10154] et [10113].

Par ailleurs, les fonctions récemment introduites {{{test_sql_int}}} et {{{test_sql_date}}} se nomment finalement {{{sql_test_int}}} et {{{sql_test_date}}}: bien qu'elles n'abstraient actuellement rien, il est vraisemblable que ce soit le cas lors d'autre portages, on unifie donc tout de suite les nommages.

Ce dépot a remplacé les occurrences de {{{calcul_mysql_in}}} dans {{{ecrire/}} avec:
{{{
for i in $(grep -l calcul_mysql_in [pige]*/*.php)
do 
sed s/calcul_mysql_in/sql_in/g $i > x
mv x $i
done
}}}
parent bc797a20
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+7 −28
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -319,32 +319,6 @@ function sql_version($serveur='') {
	return ($row['n']);
}

//
// IN (...) est limite a 255 elements, d'ou cette fonction assistante
//
// http://doc.spip.org/@calcul_mysql_in
function calcul_mysql_in($val, $valeurs, $not='') {
	if (is_array($valeurs))
		$valeurs = join(',', array_map('_q', $valeurs));
	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');

	$n = $i = 0;
	$in_sql ="";
	while ($n = strpos($valeurs, ',', $n+1)) {
	  if ((++$i) >= 255) {
			$in_sql .= "($val $not IN (" .
			  substr($valeurs, 0, $n) .
			  "))\n" .
			  ($not ? "AND\t" : "OR\t");
			$valeurs = substr($valeurs, $n+1);
			$i = $n = 0;
		}
	}
	$in_sql .= "($val $not IN ($valeurs))";

	return "($in_sql)";
}

// prend une chaine sur l'aphabet hexa
// et retourne sa representation numerique:
// FF ==> 0xFF en MySQL mais x'FF' en PG
@@ -355,8 +329,13 @@ function sql_hex($val, $serveur='')
	return $f($val);
}

function sql_in($val, $valeurs, $not='', $serveur='') {
	$f = sql_serveur('in', $serveur);
	return $f($val, $valeurs, $not, $serveur);
}

// http://doc.spip.org/@test_sql_int
function test_sql_int($type)
function sql_test_int($type)
{
  return (preg_match('/^bigint/i',$type)
	  OR preg_match('/^int/i',$type)
@@ -364,7 +343,7 @@ function test_sql_int($type)
}

// http://doc.spip.org/@test_sql_date
function test_sql_date($type)
function sql_test_date($type)
{
  return (preg_match('/^datetime/i',$type)
	  OR preg_match('/^timestamp/i',$type));
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -267,7 +267,7 @@ function requete_auteurs($tri, $statut, $recherche=NULL)
		$tables = array('auteur'=>$tables['auteur']);
		$results = recherche_en_base($recherche, $tables);
		$in_auteurs = $results['auteur']
			? calcul_mysql_in('aut.id_auteur',array_keys($results['auteur']))
			? sql_in('aut.id_auteur',array_keys($results['auteur']))
			: '0=1';
	}
  
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -111,7 +111,7 @@ function exec_recherche_dist() {
				array(
					// gasp: la requete spip_articles exige AS articles...
					'FROM' => table_objet_sql($table).' AS '.$table.'s',
					'WHERE' => calcul_mysql_in(
					'WHERE' => sql_in(
						$table.'s.'.id_table_objet($table),
						array_keys($r)
					),
+1 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -73,7 +73,7 @@ function optimiser_sansref($table, $id, $sel)

	if ($in) {
		$in = join(',', array_keys($in));
		sql_delete($table,  calcul_mysql_in($id,$in));
		sql_delete($table,  sql_in($id,$in));
		spip_log("Numeros des entrees $id supprimees dans la table $table: $in");
	}
	return count($in);
+5 −5
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -111,7 +111,7 @@ function calculer_visites($t) {
			} else $ar[$n][] = $id_article;
		}
		foreach ($ar as $n => $liste) {
			$tous = calcul_mysql_in('id_article', $liste);
			$tous = sql_in('id_article', $liste);
			sql_update('spip_visites_articles',
				array('visites' => "visites+$n"),
				   "date='$date' AND $tous");
@@ -127,14 +127,14 @@ function calculer_visites($t) {
					array('visites' => "visites+$n",
					 'popularite' => "popularite+$n",
					 'maj' => 'maj'),
					calcul_mysql_in('id_article',$noref));
					sql_in('id_article',$noref));
					   
			if ($ref)
				sql_update('spip_articles',
					   array('visites' => "visites+".($n+1),
					 'popularite' => "popularite+$n",
					 'maj' => 'maj'),
					calcul_mysql_in('id_article',$ref));
					sql_in('id_article',$ref));
					   
			## Ajouter un JOIN sur le statut de l'article ?
		}
@@ -162,10 +162,10 @@ function calculer_visites($t) {
		}

	// appliquer les increments sur les anciens
	// attention on appelle calcul_mysql_in en mode texte et pas array
	// attention on appelle sql_in en mode texte et pas array
	// pour ne pas passer _q() sur les '0x1234' de referer_md5, cf #849
		foreach ($ar as $num => $liste) {
			sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"), calcul_mysql_in('referer_md5',join(', ', $liste)));
			sql_update('spip_referers', array('visites' => "visites+$num", 'visites_jour' => "visites_jour+$num"), sql_in('referer_md5',join(', ', $liste)));
		}
	}
	
Chargement en cours