Compare commits

...

2 Commits

Author SHA1 Message Date
14d395f0ea Tidy up the Table SQL interface a bit
All checks were successful
CI / release-test (push) Successful in 2m33s
2025-08-23 15:53:23 -07:00
754c21ab29 Move sql views to a .sql file 2025-08-23 14:10:57 -07:00
3 changed files with 35 additions and 26 deletions

View File

@ -1,6 +1,7 @@
package schema
import (
_ "embed"
"strings"
"github.com/jinzhu/inflection"
@ -10,32 +11,14 @@ import (
"git.offline-twitter.com/offline-labs/gas-stack/pkg/textutils"
)
//go:embed views.sql
var create_views string
// InitDB creates an in-memory DB from a given schema string.
func InitDB(sql_schema string) *sqlx.DB {
db := sqlx.MustOpen("sqlite3", ":memory:")
db.MustExec(sql_schema)
db.MustExec(`
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;
`)
db.MustExec(create_views)
return db
}
@ -44,7 +27,7 @@ func SchemaFromDB(db *sqlx.DB) Schema {
ret := Schema{}
var tables []Table
err := db.Select(&tables, `select name, strict from tables`)
err := db.Select(&tables, `select name, is_strict, is_without_rowid from tables`)
if err != nil {
panic(err)
}

View File

@ -21,9 +21,11 @@ func (c Column) IsNullableForeignKey() bool {
// Table is a single SQLite table.
type Table struct {
TableName string `db:"name"`
IsStrict bool `db:"strict"`
Columns []Column
TableName string `db:"name"`
IsStrict bool `db:"is_strict"`
IsWithoutRowid bool `db:"is_without_rowid"`
Columns []Column
TypeIDName string
VarName string

24
pkg/schema/views.sql Normal file
View File

@ -0,0 +1,24 @@
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 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;