Sauvegarde au format SQLite impossible avec les dernières version de MariaDB
Les dernières versions de MariaDB exportent utilisent current_timestamp()
en tant que fonction quand on exporte le format des tables SQL (via la commande SHOW CREATE TABLE
). C’est ce résultat qui est utilisé pour créer les tables dans la base SQLite, or, l’utilisation de la fonction current_timestamp()
n’est pas possible avec SQLite.
Ce problème a été introduit avec les dernières version de MariaDB (voir par exemple "ce rapport de bug":https://jira.mariadb.org/browse/MDEV-13377 ou cette discussion sur "StackOverflow":https://stackoverflow.com/questions/44722541/mariadb-current-timestamp-gets-changed-to-current-timestamp. Ce problème est par ailleurs "évoqué sur les forums de SPIP, ici":https://forum.spip.net/fr_270745.html#forum271721.
Un correctif bête et méchant est de modifier le code de SPIP pour permettre de changer l’appel à la fonction current_timestamp()
vers la variable CURRENT_TIMESTAMP
. Ça peut soit être fait dans le code de la fonction base_copier_table()
en rajoutant le bout de code suivant ligne 604 :
foreach($desc_source["field"] as $k => $v) {
$desc_source["field"][$k] = str_replace("current_timestamp()", "CURRENT_TIMESTAMP", $v);
}
(L’idéal serait de vérifier que la base de données source utilise bien la dernière version de MariaDB histoire d’éviter des appels inutiles à str_replace
).