Skip to content
Extraits de code Groupes Projets
Valider 4311c86c rédigé par esj's avatar esj
Parcourir les fichiers

Ne pas trop abuser des TimeStamp dans MySQL2PG ça crée des besoins de doubles...

Ne pas trop abuser des TimeStamp dans MySQL2PG ça crée des besoins de doubles précisions ingérables. Par ailleurs, produire des constantes numériques plutot que des chaines pour les critères de date relatifs, bien que pour une fois PG semble s'en accomoder (jusqu'à quand ?)
parent 8953c007
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -712,6 +712,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { ...@@ -712,6 +712,7 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
$type = $boucle->type_requete; $type = $boucle->type_requete;
$table = $boucle->id_table; $table = $boucle->id_table;
$desc = $boucle->show; $desc = $boucle->show;
$date = array();
list($fct, $col, $op, $val, $args_sql) = list($fct, $col, $op, $val, $args_sql) =
calculer_critere_infixe_ops($idb, $boucles, $crit); calculer_critere_infixe_ops($idb, $boucles, $crit);
...@@ -736,9 +737,9 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { ...@@ -736,9 +737,9 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
} }
// Cas particulier : expressions de date // Cas particulier : expressions de date
else if ($regs = tester_param_date($boucle->type_requete, $col)) { else if ($date = tester_param_date($boucle->type_requete, $col)) {
list($col, $table) = list($col, $table) =
calculer_critere_infixe_date($idb, $boucles, $regs); calculer_critere_infixe_date($idb, $boucles, $date);
} else { } else {
if (@!array_key_exists($col, $desc['field'])) { if (@!array_key_exists($col, $desc['field'])) {
$calculer_critere_externe = 'calculer_critere_externe_init'; $calculer_critere_externe = 'calculer_critere_externe_init';
...@@ -756,12 +757,17 @@ function calculer_critere_infixe($idb, &$boucles, $crit) { ...@@ -756,12 +757,17 @@ function calculer_critere_infixe($idb, &$boucles, $crit) {
list($nom, $desc) = trouver_champ_exterieur($col, $boucle->jointures, $boucle); list($nom, $desc) = trouver_champ_exterieur($col, $boucle->jointures, $boucle);
} }
} }
// Si la colonne SQL est numerique // Si la colonne SQL est numerique ou le critere est une date relative
// forcer une conversion pour eviter un erreur au niveau SQL // forcer une conversion pour eviter un erreur au niveau SQL
if ($op == '=' OR in_array($op, $table_criteres_infixes)) { if ($op == '=' OR in_array($op, $table_criteres_infixes)) {
if (strpos($val[0], 'sql_quote(') === 0 if (($desc AND sql_test_int($desc['field'][$col]))
AND $desc AND sql_test_int($desc['field'][$col])) OR ($date AND strpos($date[0], '_relatif'))) {
$val[0] = 'intval' . substr($val[0],strlen('sql_quote')); if (strpos($val[0], 'sql_quote(') === 0)
$val[0] = 'intval' . substr($val[0],strlen('sql_quote'));
elseif (preg_match("/^\"'(-?\d+)'\"$/", $val[0], $r))
$val[0] = $r[1];
}
} }
// tag du critere pour permettre aux boucles de modifier leurs requetes par defaut en fonction de ca // tag du critere pour permettre aux boucles de modifier leurs requetes par defaut en fonction de ca
$boucles[$idb]->modificateur['criteres'][$col] = true; $boucles[$idb]->modificateur['criteres'][$col] = true;
......
...@@ -413,7 +413,8 @@ function spip_pg_frommysql($arg) ...@@ -413,7 +413,8 @@ function spip_pg_frommysql($arg)
$res = preg_replace('/(timestamp .\d+)-00-/','\1-01-', $res); $res = preg_replace('/(timestamp .\d+)-00-/','\1-01-', $res);
$res = preg_replace('/(timestamp .\d+-\d+)-00/','\1-01',$res); $res = preg_replace('/(timestamp .\d+-\d+)-00/','\1-01',$res);
$res = preg_replace("/(EXTRACT[(][^ ]* FROM *)(timestamp *'[^']*' *[+-] *timestamp *'[^']*') *[)]/", '\2', $res); # correct en theorie mais produit des debordements arithmetiques
# $res = preg_replace("/(EXTRACT[(][^ ]* FROM *)(timestamp *'[^']*' *[+-] *timestamp *'[^']*') *[)]/", '\2', $res);
$res = preg_replace("/(EXTRACT[(][^ ]* FROM *)('[^']*')/", '\1 timestamp \2', $res); $res = preg_replace("/(EXTRACT[(][^ ]* FROM *)('[^']*')/", '\1 timestamp \2', $res);
return str_replace('REGEXP', '~', $res); return str_replace('REGEXP', '~', $res);
......
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