(db *sql.DB)
| 55 | } |
| 56 | |
| 57 | func NewPostgresKeyChangesTable(db *sql.DB) (tables.KeyChanges, error) { |
| 58 | s := &keyChangesStatements{ |
| 59 | db: db, |
| 60 | } |
| 61 | _, err := db.Exec(keyChangesSchema) |
| 62 | if err != nil { |
| 63 | return s, err |
| 64 | } |
| 65 | |
| 66 | // TODO: Remove when we are sure we are not having goose artefacts in the db |
| 67 | // This forces an error, which indicates the migration is already applied, since the |
| 68 | // column partition was removed from the table |
| 69 | var count int |
| 70 | err = db.QueryRow("SELECT partition FROM keyserver_key_changes LIMIT 1;").Scan(&count) |
| 71 | if err == nil { |
| 72 | m := sqlutil.NewMigrator(db) |
| 73 | m.AddMigrations(sqlutil.Migration{ |
| 74 | Version: "keyserver: refactor key changes", |
| 75 | Up: deltas.UpRefactorKeyChanges, |
| 76 | }) |
| 77 | return s, m.Up(context.Background()) |
| 78 | } else { |
| 79 | switch e := err.(type) { |
| 80 | case *pq.Error: |
| 81 | // ignore undefined_column (42703) errors, as this is expected at this point |
| 82 | if e.Code != "42703" { |
| 83 | return nil, err |
| 84 | } |
| 85 | default: |
| 86 | return nil, err |
| 87 | } |
| 88 | } |
| 89 | return s, nil |
| 90 | } |
| 91 | |
| 92 | func (s *keyChangesStatements) Prepare() (err error) { |
| 93 | if s.upsertKeyChangeStmt, err = s.db.Prepare(upsertKeyChangeSQL); err != nil { |
no test coverage detected