importTable reads a table definition and writes a corresponding struct. SELECT table_name, column_name, data_type, character_maximum_length FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'goose_db_version'
(tbl string, b squirrel.StatementBuilderType)
| 185 | // SELECT table_name, column_name, data_type, character_maximum_length |
| 186 | // FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = 'goose_db_version' |
| 187 | func importTable(tbl string, b squirrel.StatementBuilderType) (*structDesc, error) { |
| 188 | |
| 189 | pks, err := primaryKeyField(tbl, b) |
| 190 | if err != nil { |
| 191 | fmt.Fprintf(os.Stderr, "Error getting primary keys: %s", err) |
| 192 | } |
| 193 | |
| 194 | q := b.Select("column_name, data_type, character_maximum_length"). |
| 195 | From("INFORMATION_SCHEMA.COLUMNS"). |
| 196 | Where("table_name = ?", tbl) |
| 197 | |
| 198 | rows, err := q.Query() |
| 199 | if err != nil { |
| 200 | return nil, err |
| 201 | } |
| 202 | defer rows.Close() |
| 203 | |
| 204 | ff := []string{} |
| 205 | for rows.Next() { |
| 206 | c := &column{} |
| 207 | var length sql.NullInt64 |
| 208 | if err := rows.Scan(&c.Name, &c.DataType, &length); err != nil { |
| 209 | return nil, err |
| 210 | } |
| 211 | c.Max = length.Int64 |
| 212 | ff = append(ff, structField(c, pks, tbl, b)) |
| 213 | } |
| 214 | sd := &structDesc{ |
| 215 | StructName: goName(tbl), |
| 216 | TableName: tbl, |
| 217 | Fields: ff, |
| 218 | } |
| 219 | |
| 220 | return sd, nil |
| 221 | } |
| 222 | |
| 223 | func primaryKeyField(tbl string, b squirrel.StatementBuilderType) ([]string, error) { |
| 224 | q := b.Select("column_name"). |
no test coverage detected