Skip to content

Commit

Permalink
Fix petite salade autour de la suppression des resultats de recherche…
Browse files Browse the repository at this point in the history
… 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
  • Loading branch information
Cerdic committed May 29, 2020
1 parent 9059f67 commit 33d22be
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 6 deletions.
9 changes: 5 additions & 4 deletions ecrire/inc/prepare_recherche.php
Expand Up @@ -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;
Expand Down Expand Up @@ -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)) {
Expand Down
3 changes: 2 additions & 1 deletion ecrire/req/mysql.php
Expand Up @@ -1544,12 +1544,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))
. ' '
Expand Down
3 changes: 2 additions & 1 deletion ecrire/req/sqlite_generique.php
Expand Up @@ -2614,9 +2614,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);
}
}
}
Expand Down

0 comments on commit 33d22be

Please sign in to comment.