forked from vmware-archive/atc
/
36_add_pipeline_id_to_jobs.go
134 lines (116 loc) · 2.23 KB
/
36_add_pipeline_id_to_jobs.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
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package migrations
import "github.com/BurntSushi/migration"
func AddPipelineIDToJobs(tx migration.LimitedTx) error {
_, err := tx.Exec(`
ALTER TABLE builds DROP CONSTRAINT builds_job_name_fkey
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs_serial_groups DROP CONSTRAINT jobs_serial_groups_job_name_fkey
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs DROP CONSTRAINT jobs_pkey
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs ADD COLUMN id serial PRIMARY KEY
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs ADD COLUMN pipeline_id int REFERENCES pipelines (id)
`)
if err != nil {
return err
}
_, err = tx.Exec(`
UPDATE jobs
SET pipeline_id = (
SELECT id
FROM pipelines
WHERE name = 'main'
LIMIT 1
)
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs ADD CONSTRAINT jobs_unique_pipeline_id_name UNIQUE (pipeline_id, name)
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs ALTER COLUMN pipeline_id SET NOT NULL
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs ALTER COLUMN name SET NOT NULL
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE builds ADD COLUMN job_id int
`)
if err != nil {
return err
}
_, err = tx.Exec(`
UPDATE builds
SET job_id = jobs.id
FROM jobs
WHERE builds.job_name = jobs.name
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE builds ADD CONSTRAINT fkey_job_id FOREIGN KEY (job_id) REFERENCES jobs (id)
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE builds DROP COLUMN job_name
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs_serial_groups ADD COLUMN job_id int
`)
if err != nil {
return err
}
_, err = tx.Exec(`
UPDATE jobs_serial_groups
SET job_id = jobs.id
FROM jobs
WHERE jobs_serial_groups.job_name = jobs.name
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs_serial_groups ADD CONSTRAINT fkey_job_id FOREIGN KEY (job_id) REFERENCES jobs (id)
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE jobs_serial_groups DROP COLUMN job_name
`)
return err
}