create temporary view tables as select l.schema, l.name, l.type, l.wr as is_without_rowid, l.strict as is_strict from sqlite_schema s left join pragma_table_list l on s.name = l.name where s.type = 'table'; create temporary view columns as select tables.name as table_name, table_info.name as column_name, lower(table_info.type) as column_type, "notnull", dflt_value is not null as has_default_value, ifnull(dflt_value, 0) dflt_value, pk != 0 as is_primary_key, pk as primary_key_rank, fk."table" is not null as is_foreign_key, ifnull(fk."table", '') as fk_target_table, ifnull(fk."to", '') as fk_target_column from tables join pragma_table_info(tables.name) as table_info left join pragma_foreign_key_list(tables.name) as fk on fk."from" = column_name; create temporary view indexes as select idx.name as index_name, tables.name as table_name, idx."unique" as is_unique from tables join pragma_index_list(tables.name) idx; create temporary view index_columns as select indexes.index_name, idx_cols.name as column_name, idx_cols.seqno as rank from indexes join pragma_index_info(indexes.index_name) as idx_cols;