forked from vmware-archive/atc
/
12_replace_build_events_id_with_event_id.go
64 lines (52 loc) · 1.13 KB
/
12_replace_build_events_id_with_event_id.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
package migrations
import "github.com/concourse/atc/dbng/migration"
func ReplaceBuildEventsIDWithEventID(tx migration.LimitedTx) error {
_, err := tx.Exec(`ALTER TABLE build_events ADD COLUMN event_id integer`)
if err != nil {
return err
}
startIDs := map[int]int{}
rows, err := tx.Query(`
SELECT build_id, min(id)
FROM build_events
GROUP BY build_id
`)
if err != nil {
return err
}
for rows.Next() {
var buildID, id int
err := rows.Scan(&buildID, &id)
if err != nil {
return err
}
startIDs[buildID] = id
}
err = rows.Close()
if err != nil {
return err
}
for buildID, id := range startIDs {
_, err := tx.Exec(`
UPDATE build_events
SET event_id = id - $2
WHERE build_id = $1
`, buildID, id)
if err != nil {
return err
}
}
_, err = tx.Exec(`ALTER TABLE build_events DROP COLUMN id`)
if err != nil {
return err
}
_, err = tx.Exec(`ALTER TABLE build_events ALTER COLUMN event_id SET NOT NULL`)
if err != nil {
return err
}
_, err = tx.Exec(`CREATE UNIQUE INDEX build_events_build_id_event_id ON build_events (build_id, event_id)`)
if err != nil {
return err
}
return nil
}