Nous avons récemment eu besoin d'ajouter des colonnes à quelques-unes de nos tables de base de données SQLite existantes. Cela peut être fait avec ALTER TABLE ADD COLUMN
. Bien entendu, si la table a déjà été modifiée, nous voulons la laisser telle quelle. Malheureusement, SQLite ne prend pas en charge la fonction IF NOT EXISTS
clause sur ALTER TABLE
.
Notre solution actuelle consiste à exécuter l'instruction ALTER TABLE et à ignorer les erreurs de type "nom de colonne en double", de la manière suivante cet exemple Python (mais en C++).
Cependant, notre approche habituelle de la mise en place de schémas de base de données consiste à disposer d'un script .sql contenant les éléments suivants CREATE TABLE IF NOT EXISTS
y CREATE INDEX IF NOT EXISTS
qui peuvent être exécutées à l'aide de sqlite3_exec
ou le sqlite3
outil de ligne de commande. Nous ne pouvons pas mettre ALTER TABLE
dans ces fichiers script car si cette instruction échoue, tout ce qui suit ne sera pas exécuté.
Je souhaite que les définitions des tables soient regroupées en un seul endroit et ne soient pas réparties entre les fichiers .sql et .cpp. Existe-t-il un moyen d'écrire une solution de contournement pour ALTER TABLE ADD COLUMN IF NOT EXISTS
en SQLite pur ?