Skip to content
Extraits de code Groupes Projets
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
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
......@@ -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){
......
......@@ -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'";
}
......
......@@ -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);
}
......
......@@ -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 {
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter