Overview
Comment:Correction procédure mise à jour pour tenir compte des versions récentes de SQLite qui changent le comportement lors de la mise à jour d'une table liée à des clés étrangères
Downloads: Tarball | ZIP archive | SQL archive
Timelines: family | ancestors | descendants | both | trunk | stable | 0.9.4
Files: files | file ages | folders
SHA1: 23a0bc46023018fb9e1c7e117cbb66bcede6b9f0
User & Date: bohwaz on 2019-10-10 17:33:41
Other Links: manifest | tags
Context
2019-10-30
13:46
Ne pas supprimer les anciens fichiers check-in: 13877ca03e user: bohwaz tags: trunk
2019-10-10
17:33
Correction procédure mise à jour pour tenir compte des versions récentes de SQLite qui changent le comportement lors de la mise à jour d'une table liée à des clés étrangères check-in: 23a0bc4602 user: bohwaz tags: trunk, stable, 0.9.4
2019-10-09
11:30
Cohérence du retour des fonctions des filtres de squelettes check-in: 302a336a7c user: bohwaz tags: trunk
Changes

Modified src/VERSION from [a416ca4e18] to [19e7436639].

1
0.9.3
|
1
0.9.4

Modified src/include/lib/Garradin/DB.php from [5b61f7e017] to [b5f765f6ec].

78
79
80
81
82
83
84
85


















        $sql = preg_replace_callback('/^\.read (.+\.sql)$/m', function ($match) use ($dir) {
            return file_get_contents($dir . DIRECTORY_SEPARATOR . $match[1]) . "\n";
        }, $sql);

        return $this->exec($sql);
    }
}
























|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102

        $sql = preg_replace_callback('/^\.read (.+\.sql)$/m', function ($match) use ($dir) {
            return file_get_contents($dir . DIRECTORY_SEPARATOR . $match[1]) . "\n";
        }, $sql);

        return $this->exec($sql);
    }

    /**
     * @see https://www.sqlite.org/lang_altertable.html
     */
    public function toggleForeignKeys($enable)
    {
        assert(is_bool($enable));

        if (!$enable) {
            $this->db->exec('PRAGMA legacy_alter_table = ON;');
            $this->db->exec('PRAGMA foreign_keys = OFF;');
        }
        else {
            $this->db->exec('PRAGMA legacy_alter_table = OFF;');
            $this->db->exec('PRAGMA foreign_keys = ON;');
        }
    }
}

Modified src/www/admin/upgrade.php from [0233e009d2] to [9e3246c1b7].

68
69
70
71
72
73
74
75

76
77
78
79
80
81
82
..
97
98
99
100
101
102
103
104
105
106
107
108
109

110
111
112
113
114
115
116
117
118
119
120
121
...
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
...
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
...
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
...
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
</script>';

flush();

try {
    if (version_compare($v, '0.7.0', '<'))
    {
        $db->exec('PRAGMA foreign_keys = OFF; BEGIN;');


        // Mise à jour base de données
        $db->exec(file_get_contents(ROOT . '/include/data/0.7.0.sql'));

        // Changement de syntaxe du Wiki vers SkrivML
        $wiki = new Wiki;
        $res = $db->get('SELECT id_page, contenu, revision, chiffrement FROM wiki_revisions GROUP BY id_page ORDER BY revision DESC;');
................................................................................
                    'id_auteur'     =>  null,
                    'contenu'       =>  $content,
                    'modification'  =>  'Mise à jour 0.7.0 (transformation SPIP vers SkrivML)',
                ]);
            }
        }

        $db->exec('END;');
    }

    if (version_compare($v, '0.7.2', '<'))
    {
        $db->exec('PRAGMA foreign_keys = OFF; BEGIN;');


        // Mise à jour base de données
        $db->exec(file_get_contents(ROOT . '/include/data/0.7.2.sql'));

        $db->exec('END;');
    }

    if (version_compare($v, '0.8.0-beta4', '<'))
    {
        // Inscription de l'appid
        $db->exec('PRAGMA application_id = ' . DB::APPID . ';');

................................................................................
        // Cecit devrait améliorer les performances de la DB
        $db->exec('PRAGMA page_size = 4096;');

        // Application du changement de taille de page
        $db->exec('VACUUM;');

        // Désactivation des foreign keys AVANT le début de la transaction
        $db->exec('PRAGMA foreign_keys = OFF;');

        $db->begin();

        $db->import(ROOT . '/include/data/0.8.0.sql');

        $db->commit();

................................................................................
        $comptes = new Compta\Comptes;
        $comptes->importPlan();
    }

    if (version_compare($v, '0.8.3', '<'))
    {
        // Désactivation des foreign keys AVANT le début de la transaction
        $db->exec('PRAGMA foreign_keys = OFF;');

        $db->begin();

        $db->import(ROOT . '/include/data/0.8.3.sql');

        $db->commit();
    }
................................................................................
        $db->import(ROOT . '/include/data/0.8.4.sql');

        $db->commit();
    }

    if (version_compare($v, '0.9.0-rc1', '<'))
    {
        $db->exec('PRAGMA foreign_keys = OFF;');
        $db->begin();

        $db->import(ROOT . '/include/data/0.9.0.sql');

        // Correction des ID parents des comptes qui ont été mal renseignés
        // exemple : compte 512A avec "5" comme parent (c'était permis,
        // par erreur, par le formulaire d'ajout de compte dans le plan)
................................................................................

    if (version_compare($v, '0.9.1', '<'))
    {
        // Mise à jour plan comptable: ajout compte licences fédérales
        $comptes = new Compta\Comptes;
        $comptes->importPlan();

        $db->exec('PRAGMA foreign_keys = OFF;');
        $db->begin();

        $db->exec('INSERT INTO "compta_categories" VALUES(NULL,-1,\'Licences fédérales\',\'Licences payées pour les adhérents (par exemple fédération sportive etc.)\',\'652\');');

        $db->import(ROOT . '/include/data/0.9.1.sql');

        $db->commit();







|
>







 







|




|
>




|







 







|







 







|







 







|







 







|







68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
..
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
...
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
...
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
...
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
...
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
</script>';

flush();

try {
    if (version_compare($v, '0.7.0', '<'))
    {
        $db->toggleForeignKeys(false);
        $db->begin();

        // Mise à jour base de données
        $db->exec(file_get_contents(ROOT . '/include/data/0.7.0.sql'));

        // Changement de syntaxe du Wiki vers SkrivML
        $wiki = new Wiki;
        $res = $db->get('SELECT id_page, contenu, revision, chiffrement FROM wiki_revisions GROUP BY id_page ORDER BY revision DESC;');
................................................................................
                    'id_auteur'     =>  null,
                    'contenu'       =>  $content,
                    'modification'  =>  'Mise à jour 0.7.0 (transformation SPIP vers SkrivML)',
                ]);
            }
        }

        $db->commit();
    }

    if (version_compare($v, '0.7.2', '<'))
    {
        $db->toggleForeignKeys(false);
        $db->begin();

        // Mise à jour base de données
        $db->exec(file_get_contents(ROOT . '/include/data/0.7.2.sql'));

        $db->commit();
    }

    if (version_compare($v, '0.8.0-beta4', '<'))
    {
        // Inscription de l'appid
        $db->exec('PRAGMA application_id = ' . DB::APPID . ';');

................................................................................
        // Cecit devrait améliorer les performances de la DB
        $db->exec('PRAGMA page_size = 4096;');

        // Application du changement de taille de page
        $db->exec('VACUUM;');

        // Désactivation des foreign keys AVANT le début de la transaction
        $db->toggleForeignKeys(false);

        $db->begin();

        $db->import(ROOT . '/include/data/0.8.0.sql');

        $db->commit();

................................................................................
        $comptes = new Compta\Comptes;
        $comptes->importPlan();
    }

    if (version_compare($v, '0.8.3', '<'))
    {
        // Désactivation des foreign keys AVANT le début de la transaction
        $db->toggleForeignKeys(false);

        $db->begin();

        $db->import(ROOT . '/include/data/0.8.3.sql');

        $db->commit();
    }
................................................................................
        $db->import(ROOT . '/include/data/0.8.4.sql');

        $db->commit();
    }

    if (version_compare($v, '0.9.0-rc1', '<'))
    {
        $db->toggleForeignKeys(false);
        $db->begin();

        $db->import(ROOT . '/include/data/0.9.0.sql');

        // Correction des ID parents des comptes qui ont été mal renseignés
        // exemple : compte 512A avec "5" comme parent (c'était permis,
        // par erreur, par le formulaire d'ajout de compte dans le plan)
................................................................................

    if (version_compare($v, '0.9.1', '<'))
    {
        // Mise à jour plan comptable: ajout compte licences fédérales
        $comptes = new Compta\Comptes;
        $comptes->importPlan();

        $db->toggleForeignKeys(false);
        $db->begin();

        $db->exec('INSERT INTO "compta_categories" VALUES(NULL,-1,\'Licences fédérales\',\'Licences payées pour les adhérents (par exemple fédération sportive etc.)\',\'652\');');

        $db->import(ROOT . '/include/data/0.9.1.sql');

        $db->commit();