From 0382d7d25c6c46c69ee8a6e8719ff9cf7c302d44 Mon Sep 17 00:00:00 2001
From: "Committo,Ergo:sum" <esj@rezo.net>
Date: Sun, 30 Dec 2007 19:22:04 +0000
Subject: [PATCH] =?UTF-8?q?D=C3=A9port=20dans=20le=20fonction=20d'abstract?=
 =?UTF-8?q?ion=20sql=5Fin=20du=20traitement=20des=20cas=20particuliers=20d?=
 =?UTF-8?q?e=20l'argument=20de=20IN,=20valable=20pour=20tous=20les=20porta?=
 =?UTF-8?q?ges.=20On=20en=20profite=20pour=20rajouter=20un=20''array=5Funi?=
 =?UTF-8?q?que''=20dans=20le=20cas=20du=20tableau=20pour=20pr=C3=A9parer?=
 =?UTF-8?q?=20[10995].=20Toutefois,=20alors=20que=20PHP=20traite=20intuiti?=
 =?UTF-8?q?vement=20bien=20{{{$x=20.=3D=20'...'}}}=20quand=20{{{$x}}}=20es?=
 =?UTF-8?q?t=20ind=C3=A9fini,=20il=20d=C3=A9clenche=20une=20erreur=20fatal?=
 =?UTF-8?q?e=20pour=20{{{$x=20+=3D=20array(...)}}}.=20Autrement=20dit,=20i?=
 =?UTF-8?q?l=20faut=20produire=20un=20code=20compil=C3=A9=20ne=20g=C3=A9n?=
 =?UTF-8?q?=C3=A9rant=20pas=20de=20Warning=20si=20l'on=20veut=20=C3=A9vite?=
 =?UTF-8?q?r=20les=20r=C3=A9p=C3=A9titions=20dans=20le=20IN=20de=20SQL.=20?=
 =?UTF-8?q?Pour=20plus=20tard.?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 ecrire/base/abstract_sql.php |  6 ++++++
 ecrire/req/mysql.php         | 23 +++++++++++------------
 ecrire/req/pg.php            |  4 ----
 3 files changed, 17 insertions(+), 16 deletions(-)

diff --git a/ecrire/base/abstract_sql.php b/ecrire/base/abstract_sql.php
index d7b44bac08..ff3b3dc0cd 100644
--- a/ecrire/base/abstract_sql.php
+++ b/ecrire/base/abstract_sql.php
@@ -307,6 +307,12 @@ function sql_quote($val, $serveur='')
 
 // http://doc.spip.org/@sql_in
 function sql_in($val, $valeurs, $not='', $serveur='') {
+	if (is_array($valeurs)) {
+		$f = sql_serveur('quote', $serveur);
+		$valeurs = join(',', array_map($f, array_unique($valeurs)));
+	} elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
+	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
+
 	$f = sql_serveur('in', $serveur);
 	return $f($val, $valeurs, $not, $serveur);
 }
diff --git a/ecrire/req/mysql.php b/ecrire/req/mysql.php
index a85de28799..fdfc797803 100644
--- a/ecrire/req/mysql.php
+++ b/ecrire/req/mysql.php
@@ -562,21 +562,10 @@ function spip_mysql_quote($v)
 	return _q($v);
 }
 
-// pour compatibilite
-function spip_mysql_in($val, $valeurs, $not='', $serveur='') {
-	return calcul_mysql_in($val, $valeurs, $not);
-}
-
 //
 // 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));
-	elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
-	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
-
+function spip_mysql_in($val, $valeurs, $not='', $serveur='') {
 	$n = $i = 0;
 	$in_sql ="";
 	while ($n = strpos($valeurs, ',', $n+1)) {
@@ -594,6 +583,16 @@ function calcul_mysql_in($val, $valeurs, $not='') {
 	return "($in_sql)";
 }
 
+// pour compatibilite. Ne plus utiliser.
+// http://doc.spip.org/@calcul_mysql_in
+function calcul_mysql_in($val, $valeurs, $not='') {
+	if (is_array($valeurs))
+		$valeurs = join(',', array_map('_q', $valeurs));
+	elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
+	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
+	return spip_mysql_in($val, $valeurs, $not);
+}
+
 // http://doc.spip.org/@spip_mysql_cite
 function spip_mysql_cite($v, $type) {
 	if (sql_test_date($type) AND preg_match('/^\w+\(/', $v)
diff --git a/ecrire/req/pg.php b/ecrire/req/pg.php
index 7e6ac06d69..96a3d402fd 100644
--- a/ecrire/req/pg.php
+++ b/ecrire/req/pg.php
@@ -743,10 +743,6 @@ function spip_pg_in($val, $valeurs, $not='', $serveur) {
 //
 // IN (...) souvent limite a 255  elements, d'ou cette fonction assistante
 //
-	if (is_array($valeurs))
-		$valeurs = join(',', array_map('_q', $valeurs));
-	elseif ($valeurs[0]===',') $valeurs = substr($valeurs,1);
-	if (!strlen(trim($valeurs))) return ($not ? "0=0" : '0=1');
 	if (strpos($valeurs, "CAST(x'") !== false)
 		return "($val=" . join("OR $val=", explode(',',$valeurs)).')';
 	$n = $i = 0;
-- 
GitLab