forked from vmware-archive/atc
/
35_add_pipeline_id_to_resources.go
98 lines (83 loc) · 1.75 KB
/
35_add_pipeline_id_to_resources.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
package migrations
import "github.com/BurntSushi/migration"
func AddPipelineIDToResources(tx migration.LimitedTx) error {
_, err := tx.Exec(`
ALTER TABLE versioned_resources DROP CONSTRAINT versioned_resources_resource_name_fkey;
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE resources DROP CONSTRAINT resources_pkey;
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE resources ADD COLUMN id serial PRIMARY KEY;
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE resources ADD COLUMN pipeline_id int REFERENCES pipelines (id);
`)
if err != nil {
return err
}
_, err = tx.Exec(`
UPDATE resources
SET pipeline_id = (
SELECT id
FROM pipelines
WHERE name = 'main'
LIMIT 1
);
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE resources ADD CONSTRAINT unique_pipeline_id_name UNIQUE (pipeline_id, name);
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE resources ALTER COLUMN pipeline_id SET NOT NULL;
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE resources ALTER COLUMN name SET NOT NULL;
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE versioned_resources ADD COLUMN resource_id int;
`)
if err != nil {
return err
}
_, err = tx.Exec(`
UPDATE versioned_resources
SET resource_id = resources.id
FROM resources
WHERE versioned_resources.resource_name = resources.name;
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE versioned_resources ADD CONSTRAINT fkey_resource_id FOREIGN KEY (resource_id) REFERENCES resources (id);
`)
if err != nil {
return err
}
_, err = tx.Exec(`
ALTER TABLE versioned_resources DROP COLUMN resource_name;
`)
return err
}