From bfa8ed706794501f2d40f90f13f8c28f13e29d85 Mon Sep 17 00:00:00 2001
From: Cerdic <cedric@yterium.com>
Date: Mon, 4 Oct 2010 08:28:37 +0000
Subject: [PATCH] Report de [16380] gestion des hexa et referers_md5 en sqlite

---
 ecrire/req/sqlite_generique.php | 27 ++++++++++++++++-----------
 1 file changed, 16 insertions(+), 11 deletions(-)

diff --git a/ecrire/req/sqlite_generique.php b/ecrire/req/sqlite_generique.php
index 3c6d1362b0..31143965d4 100644
--- a/ecrire/req/sqlite_generique.php
+++ b/ecrire/req/sqlite_generique.php
@@ -691,7 +691,7 @@ function spip_sqlite_get_charset($charset=array(), $serveur='',$requeter=true){
 
 // http://doc.spip.org/@spip_sqlite_hex
 function spip_sqlite_hex($v){
-	return "0x" . $v;
+	return hexdec($v);
 }
 
 
@@ -838,6 +838,7 @@ function spip_sqlite_optimize($table, $serveur='', $requeter=true) {
 // avoir le meme comportement que _q()
 function spip_sqlite_quote($v, $type=''){
 	if (is_int($v)) return strval($v);
+	if (strncmp($v,'0x',2)==0 AND ctype_xdigit(substr($v,2))) return hexdec(substr($v,2));
 	if ($type === 'int' AND !$v) return '0';
 	if (is_array($v)) return join(",", array_map('spip_sqlite_quote', $v));
 
@@ -1141,14 +1142,16 @@ function _sqlite_link($serveur = '', $recharger = false){
 // renvoie les bons echappements (pas sur les fonctions now())
 // http://doc.spip.org/@_sqlite_calculer_cite
 function _sqlite_calculer_cite($v, $type) {
-	if (sql_test_date($type) AND preg_match('/^\w+\(/', $v)
-	OR (sql_test_int($type)
-		 AND (is_numeric($v)
-		      OR (ctype_xdigit(substr($v,2))
-			  AND $v[0]=='0' AND $v[1]=='x'))))
+	if (sql_test_date($type) AND preg_match('/^\w+\(/', $v))
 		return $v;
+	if (sql_test_int($type)) {
+		if (is_numeric($v))
+			return $v;
+		if (ctype_xdigit(substr($v,2)) AND strncmp($v,'0x',2)==0)
+			return hexdec(substr($v,2));
+	}
 	//else return  ("'" . spip_sqlite_quote($v) . "'");
-	else return  (spip_sqlite_quote($v));
+	return  (spip_sqlite_quote($v));
 }
 
 
@@ -1480,14 +1483,12 @@ function _sqlite_ref_fonctions(){
 
 // $query est une requete ou une liste de champs
 // http://doc.spip.org/@_sqlite_remplacements_definitions_table
-function _sqlite_remplacements_definitions_table($query){
+function _sqlite_remplacements_definitions_table($query,$autoinc=false){
 	// quelques remplacements
 	$num = "(\s*\([0-9]*\))?";
 	$enum = "(\s*\([^\)]*\))?";
 	
 	$remplace = array(
-		// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
-		'/(big|small|medium|tiny)?int(eger)?'.$num.'/is' => 'INTEGER',		
 		'/enum'.$enum.'/is' => 'VARCHAR',
 		'/binary/is' => '',
 		'/COLLATE \w+_bin/is' => '',
@@ -1496,6 +1497,10 @@ function _sqlite_remplacements_definitions_table($query){
 		'/character set \w+/is' => '',
 	);
 
+	// pour l'autoincrement, il faut des INTEGER NOT NULL PRIMARY KEY
+	if ($autoinc)
+		$remplace['/(big|small|medium|tiny)?int(eger)?'.$num.'/is'] = 'INTEGER';
+
 	return preg_replace(array_keys($remplace), $remplace, $query);
 }
 
@@ -1529,7 +1534,7 @@ function _sqlite_requete_create($nom, $champs, $cles, $autoinc=false, $temporary
 	}
 	if ($c) $keys = "\n\t\t$pk ($c)";
 	
-	$champs = _sqlite_remplacements_definitions_table($champs);
+	$champs = _sqlite_remplacements_definitions_table($champs, $autoinc);
 	foreach($champs as $k => $v) {
 		$query .= "$s\n\t\t$k $v";
 		$s = ",";
-- 
GitLab