For kicks I'm writing a "schema documentation" tool that generates a description of the tables and relationships in a database. I'm currently shimming it to work with SQLite.
I've managed to extract the names of all the tables in a SQLite database via a query on the sqlite_master
table. For each table name, I then fire off a simple
select * from <table name>
query, then use the sqlite3_column_count()
and sqlite3_column_name()
APIs to collect the column names, which I further feed to sqlite3_table_column_metadata()
to get additional info. Simple enough, right?
The problem is that it only works for tables that are not empty. That is, the sqlite_column_*()
APIs are only valid if sqlite_step()
has returned SQLITE_ROW
, which is not the case for empty tables.
So the question is, how can I discover column names for empty tables? Or, more generally, is there a better way to get this type of schema info in SQLite?
I feel like there must be another hidden sqlite_xxx
table lurking somewhere containing this info, but so far have not been able to find it.
sqlite> .header on
sqlite> .mode column
sqlite> create table ABC(A TEXT, B VARCHAR);
sqlite> pragma table_info(ABC);
cid name type notnull dflt_value pk
---------- ---------- ---------- ---------- ---------- ----------
0 A TEXT 0 0
1 B VARCHAR 0 0