Project

General

Profile

Anomalie #4374

Sauvegarde au format SQLite impossible avec les dernières version de MariaDB

Added by Olivier Tétard 27 days ago.

Status:
Nouveau
Priority:
Normal
Assignee:
-
Category:
base de données
Target version:
-
Start date:
08/25/2019
Due date:
% Done:

0%

Resolution:
Navigateur:

Description

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 ou cette discussion sur StackOverflow. Ce problème est par ailleurs évoqué sur les forums de SPIP, ici.

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).

Also available in: Atom PDF