Valider fca2cfca rédigé par esj's avatar esj
Parcourir les fichiers

La fonction Rand, utilisée pour le critère ''{par hasard}'' est inconnue de...

La fonction Rand, utilisée pour le critère ''{par hasard}'' est inconnue de PG. Le code pour les version de MySQL ne l'ayant pas non plus ne marchait en fait plus, car il supposait que les clés primaires de toutes les tables sont numériques ce qui n'est plus le cas. Remède express:  hasard = l'heure qu'il est. Il y aurait mieux à trouver, mais il y a plus urgent (et qui utilise ce critère ?). On en profite pour abstraire un peu mieux les fonctions autour des dates.
parent 452385a1
Chargement en cours
Chargement en cours
Chargement en cours
Chargement en cours
+9 −4
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -352,13 +352,18 @@ function calcul_mysql_in($val, $valeurs, $not='') {
// http://doc.spip.org/@test_sql_int
function test_sql_int($type)
{
	return (strpos($type, 'bigint') === 0
	OR strpos($type, 'int') === 0
	OR strpos($type, 'tinyint') === 0);
  return (preg_match('/^bigint/i',$type)
	  OR preg_match('/^int/i',$type)
	  OR preg_match('/^tinyint/i',$type));
}

function test_sql_date($type)
{
  return (preg_match('/^datetime/i',$type)
	  OR preg_match('/^timestamp/i',$type));
}

// Cette fonction est vouee a disparaitre
// Cette fonction devrait disparaitre

// http://doc.spip.org/@description_table
function description_table($nom){
+4 −13
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -344,12 +344,9 @@ function critere_parinverse($idb, &$boucles, $crit, $sens='') {
	  if ($tri[0]->type != 'texte') {
	  	// calculer le order dynamique qui verifie les champs
			$order = calculer_critere_arg_dynamique($idb, $boucles, $tri, $sens);
	    // et ajouter un champ hasard dans le select pour supporter 'hasard' comme tri dynamique
			if (sql_select(array("RAND()")))
				$par = "RAND()";
			else
				$par = "MOD(".$boucle->id_table.'.'.$boucle->primary
			  ." * UNIX_TIMESTAMP(),32767) & UNIX_TIMESTAMP()";
			// et ajouter un champ hasard dans le select 
			//pour supporter 'hasard' comme tri dynamique
			$par = "UNIX_TIMESTAMP()";
			$boucle->select[]= $par . " AS hasard";
	  } else {
	      $par = array_shift($tri);
@@ -375,13 +372,7 @@ function critere_parinverse($idb, &$boucles, $crit, $sens='') {
		if (count($match)>2) { $par = substr($match[2],1,-1); $fct = $match[1]; }
	// par hasard
		if ($par == 'hasard') {
		// tester si cette version de MySQL accepte la commande RAND()
		// sinon faire un gloubi-boulga maison avec de la mayonnaise.
		  if (sql_select(array("RAND()")))
			$par = "RAND()";
		  else
			$par = "MOD(".$boucle->id_table.'.'.$boucle->primary
			  ." * UNIX_TIMESTAMP(),32767) & UNIX_TIMESTAMP()";
			$par = "UNIX_TIMESTAMP()";
		  $boucle->select[]= $par . " AS alea";
		  $order = "'alea'";
		}
+1 −2
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -553,8 +553,7 @@ function spip_release_lock($nom) {

// http://doc.spip.org/@spip_mysql_cite
function spip_mysql_cite($val, $type) {
	if(((strpos($type, 'datetime')===0) OR strpos($type, 'TIMESTAMP')===0)
	 AND preg_match('/^\w+\(/', $val))
	if (test_sql_date($type) AND preg_match('/^\w+\(/', $val))
		return $val;
	return _q($val);
}
+4 −1
Numéro de ligne d'origine Numéro de ligne de diff Ligne de diff
@@ -340,6 +340,9 @@ function spip_pg_frommysql($arg)
	$res = preg_replace('/\b0[+]([^, ]+)\s*/',
			    'CAST(substring(\1, \'^ *[0-9]+\') as int)',
			    $res);
	$res = preg_replace('/UNIX_TIMESTAMP\s*[(]\s*[)]/',
			    'EXTRACT(\'epoch\' FROM NOW())', $res);

	$res = preg_replace('/UNIX_TIMESTAMP\s*[(]([^)]*)[)]/',
			    'EXTRACT(\'epoch\' FROM \1)', $res);

@@ -627,7 +630,7 @@ function spip_pg_sequence($table)
// http://doc.spip.org/@spip_pg_cite
function spip_pg_cite($v, $t)
{
	if ((strpos($t, 'datetime')===0) OR (strpos($t, 'TIMESTAMP')===0)) {
	if (test_sql_date($t)) {
		if (strpos("0123456789", $v[0]) === false)
			return spip_pg_frommysql($v);
		else {