Valider 0880b517 rédigé par cerdic's avatar cerdic
Parcourir les fichiers

Fix petite salade autour de la suppression des resultats de recherche trop vieux :

- on utilise le champ maj comme indice de peremption qui est au format timestamp
- sous mysql, le champ maj est donc rempli avec la date mysql equivalente a NOW(), mais la compairaison issue de spip_mysql_date_proche() se faisait sur la date php
- sous sqlite, le champ maj est donc rempli avec la date sqlite, non equivalente a NOW() qui est fourni par php
- dans la recherche on faisait une fois la comparaison avec NOW() avant recherche et une fois la comparaison avec la date php
On remets donc tout d'equerre :
- dans preparer_recherche on utilise toujours sql_date_proche() pour la comparaison
- dans req/mysql on utilise NOW() si sql_date_proche concerne un champ maj (c'est un peu un hack mais bon)
- sous sqlite on emule le format timestamp avec une date php qui est bien coherente avec le NOW() fournit lui meme par une date php
parent f6e3627c
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+5 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -77,14 +77,14 @@ function inc_prepare_recherche_dist(

	$rechercher = false;

	$where_resultat_recent = sql_date_proche('maj', (0 - ($delai_fraicheur + 100)), " SECOND");
	if (!isset($cache[$serveur][$table][$recherche])) {
		$hash_serv = ($serveur ? substr(md5($serveur), 0, 16) : '');
		$hash = substr(md5($recherche . $table), 0, 16);
		$where = "(resultats.recherche='$hash' AND resultats.table_objet=" . sql_quote($table) . " AND resultats.serveur='$hash_serv')";
		$row = sql_fetsel('UNIX_TIMESTAMP(NOW())-UNIX_TIMESTAMP(resultats.maj) AS fraicheur', 'spip_resultats AS resultats',
			$where, '', 'fraicheur DESC', '0,1');
		$row = sql_fetsel('recherche', 'spip_resultats AS resultats',
			$where . " AND $where_resultat_recent", '', '', '0,1');
		if (!$row
			or ($row['fraicheur'] > $delai_fraicheur)
			or (defined('_VAR_MODE') and _VAR_MODE == 'recalcul')
		) {
			$rechercher = true;
@@ -122,8 +122,9 @@ function inc_prepare_recherche_dist(
		// pas de AS resultats dans un delete (mysql)
		$whered = str_replace(array("resultats.recherche", "resultats.table_objet", "resultats.serveur"),
			array("recherche", "table_objet", "serveur"), $where);

		sql_delete('spip_resultats',
			'NOT(' . sql_date_proche('maj', (0 - ($delai_fraicheur + 100)), " SECOND") . ") OR ($whered)");
			"NOT($where_resultat_recent) OR ($whered)");

		// inserer les resultats dans la table de cache des resultats
		if (count($points)) {
+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -1543,12 +1543,13 @@ function spip_mysql_quote($v, $type = '') {
 *     Expression SQL
 **/
function spip_mysql_date_proche($champ, $interval, $unite) {
	$use_now = ( ($champ === 'maj' or strpos($champ, '.maj')) ? true : false );
	return '('
	. $champ
	. (($interval <= 0) ? '>' : '<')
	. (($interval <= 0) ? 'DATE_SUB' : 'DATE_ADD')
	. '('
	. sql_quote(date('Y-m-d H:i:s'))
	. ($use_now ? 'NOW()' : sql_quote(date('Y-m-d H:i:s')))
	. ', INTERVAL '
	. (($interval > 0) ? $interval : (0 - $interval))
	. ' '
+2 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -2723,9 +2723,10 @@ function _sqlite_ajouter_champs_timestamp($table, $couples, $desc = '', $serveur
		// mais ceux-ci ne sont pas utilises dans le core
		$tables[$table] = array();

		$now = _sqlite_func_now();
		foreach ($desc['field'] as $k => $v) {
			if (strpos(strtolower(ltrim($v)), 'timestamp') === 0) {
				$tables[$table][$k] = "datetime('now')";
				$tables[$table][$k] = _sqlite_calculer_cite($now, $v);
			}
		}
	}