Pour commencer, je suis en train d'écrire un outil de "documentation de schéma" qui génère une description des tables et des relations dans une base de données. Je suis en train de le modifier pour qu'il fonctionne avec SQLite.
J'ai réussi à extraire les noms de toutes les tables d'une base de données SQLite via une requête sur le fichier sqlite_master
table. Pour chaque nom de table, je lance alors un simple
select * from <table name>
puis utilisez la fonction sqlite3_column_count()
et sqlite3_column_name()
pour collecter les noms de colonnes, que j'envoie ensuite à l'application sqlite3_table_column_metadata()
pour obtenir des informations supplémentaires. C'est assez simple, non ?
Le problème est que cela ne fonctionne que pour les tables qui ne sont pas vides. C'est-à-dire que les sqlite_column_*()
Les API ne sont valables que si sqlite_step()
est revenu SQLITE_ROW
ce qui n'est pas le cas pour les tables vides.
La question est donc la suivante : comment puis-je découvrir les noms de colonnes pour les tables vides ? Ou, plus généralement, y a-t-il un meilleur moyen d'obtenir ce type d'informations sur le schéma en SQLite ?
J'ai l'impression qu'il doit y avoir un autre caché sqlite_xxx
table se cachant quelque part contenant cette information, mais jusqu'à présent je n'ai pas pu la trouver.