Version 1 of SQLite introspection

Updated 2010-10-03 18:53:03 by nem

aricb 2010-10-01: I'm a SQLite novice and had a hard time finding the following info, so I thought I'd stick it here for my own sake and hopefully others' as well.

Listing the tables (views, indexes, etc.) in a SQLite database

There's a magical read-only table in every SQLite database called "SQLITE_MASTER" (details at [L1 ]). It has the columns type, name, tbl_name, rootpage, and sql. So, for example, you can get the names of all tables in a given database using:

  $dbhandle eval {SELECT name FROM sqlite_master WHERE type='table'}

Listing the columns in a table/view of a SQLite database

If you feel so inclined, you can parse the SQL statement that defines the table or view; it will be contained in the sql column of the "SQLITE_MASTER" table mentioned above. However, if you don't need that much detail and don't wish to go to that much trouble, you can use PRAGMA table_info(tableName). For example, to find out about the columns in someTable, you can do:

  $dbhandle eval {PRAGMA table_info(someTable)}

This returns one row for each column in the table in question. Each row contains six items:

  1. column id
  2. column name
  3. column type
  4. whether column prohibits NULL values (0=NULLs not prohibited, 1=NULLs prohibited)
  5. default value for column
  6. whether column is part of the table's primary key (0=not part of primary key, 1=part of primary key)

NEM I believe TDBC can also provide this information.