// SqQueryColumns parses a sqlite query and generates a type for it. func SqQueryColumns(args *internal.ArgType, inspect []string) ([]*models.Column, error) { var err error // create temporary view xoid xoid := "_xo_" + internal.GenRandomID() viewq := `CREATE TEMPORARY VIEW ` + xoid + ` AS ` + strings.Join(inspect, "\n") models.XOLog(viewq) _, err = args.DB.Exec(viewq) if err != nil { return nil, err } // load column information return models.SqTableColumns(args.DB, xoid) }
func init() { internal.SchemaLoaders["sqlite3"] = internal.TypeLoader{ ProcessRelkind: SqRelkind, ParamN: func(int) string { return "?" }, MaskFunc: func() string { return "?" }, ParseType: SqParseType, TableList: func(db models.XODB, schema string, relkind string) ([]*models.Table, error) { return models.SqTables(db, relkind) }, ColumnList: func(db models.XODB, schema string, table string) ([]*models.Column, error) { return models.SqTableColumns(db, table) }, ForeignKeyList: func(db models.XODB, schema string, table string) ([]*models.ForeignKey, error) { return models.SqTableForeignKeys(db, table) }, IndexList: func(db models.XODB, schema string, table string) ([]*models.Index, error) { return models.SqTableIndexes(db, table) }, IndexColumnList: func(db models.XODB, schema string, table string, index string) ([]*models.IndexColumn, error) { return models.SqIndexColumns(db, index) }, QueryColumnList: SqQueryColumns, } }