create temporary view tables as
    select l.schema, l.name, l.type, l.ncol, l.wr, l.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 as is_primary_key,
            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;
