From e3a3145f87d5a21215951d3dd2d07dde4872fab7 Mon Sep 17 00:00:00 2001 From: Matthieu Marcillaud <marcimat@rezo.net> Date: Thu, 28 Feb 2008 14:35:03 +0000 Subject: [PATCH] =?UTF-8?q?-=20Eviter=20que=20SQLite=202.x=20se=20m=C3=A9l?= =?UTF-8?q?ange=20les=20pinceaux=20entre=20REGEXP=20et=20REGEXP=5FREPLACE?= =?UTF-8?q?=20(fonction=20SQLite=20renomm=C3=A9e=20ici=20en=20PREG=5FREPLA?= =?UTF-8?q?CE)=20lorsqu'il=20calcule=20l'=C3=A9criture=20de=20la=20requete?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ecrire/exec/auteurs.php | 21 ++++++++++++++++++--- ecrire/req/sqlite_fonctions.php | 21 ++++++++++++--------- ecrire/req/sqlite_generique.php | 2 +- 3 files changed, 31 insertions(+), 13 deletions(-) diff --git a/ecrire/exec/auteurs.php b/ecrire/exec/auteurs.php index 5c628857e3..d7c473e618 100644 --- a/ecrire/exec/auteurs.php +++ b/ecrire/exec/auteurs.php @@ -322,15 +322,30 @@ function requete_auteurs($tri, $statut, $recherche=NULL) case 'nom': default: - $sql_sel = ", ".sql_multi ("nom", $spip_lang); + $sql_sel = sql_multi ("nom", $spip_lang); $sql_order = "multi"; } // // La requete de base est tres sympa // (pour les visiteurs, ca postule que les messages concernent des articles) - - return sql_select(" aut.id_auteur AS id_auteur, aut.statut AS statut, aut.nom_site AS site, aut.nom AS nom, UPPER(aut.nom) AS unom, COUNT(lien.id_article) AS compteur $sql_sel ", "spip_auteurs as aut " . ($visit ? "LEFT JOIN spip_forum AS lien ON aut.id_auteur=lien.id_auteur " : ("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)")), $sql_visible . ($recherche ? " AND $recherche" : ''), "aut.statut, aut.nom_site, aut.nom, aut.id_auteur", $sql_order); + return sql_select( + array( + "aut.id_auteur AS id_auteur", + "aut.statut AS statut", + "aut.nom_site AS site", + "aut.nom AS nom", + "UPPER(aut.nom) AS unom", + "COUNT(lien.id_article) AS compteur", + $sql_sel), + "spip_auteurs AS aut " . ($visit + ? "LEFT JOIN spip_forum AS lien ON aut.id_auteur=lien.id_auteur " + : ("LEFT JOIN spip_auteurs_articles AS lien ON aut.id_auteur=lien.id_auteur LEFT JOIN spip_articles AS art ON (lien.id_article = art.id_article)")), + $sql_visible . ($recherche + ? " AND $recherche" + : ''), + "aut.statut, aut.nom_site, aut.nom, aut.id_auteur", + $sql_order); } // http://doc.spip.org/@afficher_n_auteurs diff --git a/ecrire/req/sqlite_fonctions.php b/ecrire/req/sqlite_fonctions.php index 59cf248caf..0410162154 100644 --- a/ecrire/req/sqlite_fonctions.php +++ b/ecrire/req/sqlite_fonctions.php @@ -41,11 +41,13 @@ function _sqlite_init_functions(&$sqlite){ 'MD5' => array( 'md5' ,1), 'MONTH' => array( '_sqlite_func_month' ,1), - + + 'PREG_REPLACE' => array( '_sqlite_func_preg_replace' ,3), + 'RAND' => array( '_sqlite_func_rand' ,0), // sinon random() v2.4 'REGEXP' => array( '_sqlite_func_regexp_match' ,2), // critere REGEXP supporte a partir de v3.3.2 //'REGEXP_MATCH' => array( '_sqlite_func_regexp_match' ,2), // critere REGEXP supporte a partir de v3.3.2 - 'REGEXP_REPLACE'=> array( '_sqlite_func_regexp_replace' ,3), + 'RIGHT' => array( '_sqlite_func_right' ,2), # 'RTRIM' => array( 'rtrim' ,1), // present en theorie @@ -170,6 +172,14 @@ function _sqlite_func_month ($d) { } + +function _sqlite_func_preg_replace($quoi, $cherche, $remplace) { + $return = preg_replace('%'.$cherche.'%', $remplace, $quoi); + #spip_log("preg_replace : $quoi, $cherche, $remplace, $return",'debug'); + return $return; +} + + function _sqlite_func_rand() { return rand(); } @@ -187,13 +197,6 @@ function _sqlite_func_regexp_match($cherche, $quoi) { } -function _sqlite_func_regexp_replace($quoi, $cherche, $remplace) { - $return = preg_replace('%'.$cherche.'%', $remplace, $quoi); - #spip_log("regexp_replace : $quoi, $cherche, $remplace, $return",'debug'); - return $return; -} - - function _sqlite_func_to_days ($d) { $result = date("z", _sqlite_func_unix_timestamp($d)); #spip_log("Passage avec TO_DAYS : $d, $result",'debug'); diff --git a/ecrire/req/sqlite_generique.php b/ecrire/req/sqlite_generique.php index 9776c66448..e1a7f396a8 100644 --- a/ecrire/req/sqlite_generique.php +++ b/ecrire/req/sqlite_generique.php @@ -544,7 +544,7 @@ function spip_sqlite_listdbs($serveur='',$requeter=true) { function spip_sqlite_multi ($objet, $lang) { - $r = "REGEXP_REPLACE(" + $r = "PREG_REPLACE(" . $objet . ",'<multi>.*[\[]" . $lang -- GitLab