From 04dfc57388a402dfe0f44f6a0864dad9a906b7f4 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Tue, 27 Jul 2021 11:47:15 +0200
Subject: [PATCH] =?UTF-8?q?Bugfix=20sqlite=20sur=20le=20traitement=20des?=
 =?UTF-8?q?=20cas=20`SELECT=200=20as=20num=20+=20ORDER=20BY=20num`=20:=20a?=
 =?UTF-8?q?vec=20l'ajout=20d'une=20clause=20sinum=20systematique,=20on=20a?=
 =?UTF-8?q?vait=20maintenant=20un=20`ORDER=20BY=20sinum,=20num`=20qui=20se?=
 =?UTF-8?q?=20transformait=20en=20`ORDER=20BY=20siVIDE(),=20VIDE()`=20inva?=
 =?UTF-8?q?lide=20Cela=20dit,=20avec=20un=20sqlite=203.28=20ce=20remplacem?=
 =?UTF-8?q?ent=20parait=20superflu,=20sa=20suppression=20serait=20peut-?=
 =?UTF-8?q?=C3=AAtre=20judicieuse=20=3F?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/req/sqlite_generique.php | 7 +++++--
 1 file changed, 5 insertions(+), 2 deletions(-)

diff --git a/ecrire/req/sqlite_generique.php b/ecrire/req/sqlite_generique.php
index 42856286ab..aca50f796f 100644
--- a/ecrire/req/sqlite_generique.php
+++ b/ecrire/req/sqlite_generique.php
@@ -3019,7 +3019,8 @@ class sqlite_traducteur {
 		// il dit que x ne doit pas être un integer dans le order by !
 		// on remplace du coup x par vide() dans ce cas uniquement
 		//
-		// rien que pour public/vertebrer.php ?
+		// apparait dans public/vertebrer.php et dans le plugin menu aussi qui genere aussi ce genre de requete via un {par num #GET{tri_num}}
+		// mais est-ce encore un soucis pour sqlite en 2021 ? (ie commenter le preg_replace marche très bien en sqlite 3.28)
 		if ((strpos($this->query, "0 AS") !== false)) {
 			// on ne remplace que dans ORDER BY ou GROUP BY
 			if (preg_match('/\s(ORDER|GROUP) BY\s/i', $this->query, $regs)) {
@@ -3030,7 +3031,9 @@ class sqlite_traducteur {
 				// on remplace dans $suite le nom par vide()
 				preg_match_all('/\b0 AS\s*([^\s,]+)/', $this->query, $matches, PREG_PATTERN_ORDER);
 				foreach ($matches[1] as $m) {
-					$suite = str_replace($m, 'VIDE()', $suite);
+					if (strpos($suite, $m) !== false) {
+						$suite = preg_replace(",\b$m\b,", 'VIDE()', $suite);
+					}
 				}
 				$this->query .= $suite;
 			}
-- 
GitLab