-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbackwards_compat_cases_test.go
137 lines (118 loc) · 5.2 KB
/
backwards_compat_cases_test.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
135
136
137
package migration_acceptance_tests
import "github.com/DoWithLogic/mysql-schema-diff/pkg/diff"
var backCompatAcceptanceTestCases = []acceptanceTestCase{
{
name: "Drop partitioned table, Add partitioned table with local keys",
oldSchemaDDL: []string{
`
-- Create a table in a different schema to validate it is being ignored (no delete operation).
CREATE SCHEMA schema_filtered_1;
CREATE TABLE schema_filtered_1.foo();
CREATE TABLE foobar(
id INT,
bar SERIAL NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (foo, id),
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);
CREATE TABLE foobar_1 PARTITION of foobar(
fizz NOT NULL
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');
-- partitioned indexes
CREATE INDEX foobar_normal_idx ON foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON foobar(foo, fizz);
-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);
CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);
CREATE TABLE fizz(
);
`,
},
newSchemaDDL: []string{
`
CREATE TABLE new_foobar(
id INT,
bar TIMESTAMPTZ NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);
CREATE TABLE foobar_1 PARTITION of new_foobar(
fizz NOT NULL,
PRIMARY KEY (foo, bar)
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');
-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);
-- partitioned indexes
CREATE INDEX foobar_normal_idx ON new_foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON new_foobar(foo, fizz);
CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES new_foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);
CREATE TABLE fizz(
);
`,
},
expectedHazardTypes: []diff.MigrationHazardType{
diff.MigrationHazardTypeDeletesData,
},
expectedDBSchemaDDL: []string{`
-- Create a table in a different schema to validate it is being ignored (no delete operation).
CREATE SCHEMA schema_filtered_1;
CREATE TABLE schema_filtered_1.foo();
CREATE TABLE new_foobar(
id INT,
bar TIMESTAMPTZ NOT NULL,
foo VARCHAR(255) DEFAULT 'some default' NOT NULL CHECK (LENGTH(foo) > 0),
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
UNIQUE (foo, bar)
) PARTITION BY LIST(foo);
CREATE TABLE foobar_1 PARTITION of new_foobar(
fizz NOT NULL,
PRIMARY KEY (foo, bar)
) FOR VALUES IN ('foobar_1_val_1', 'foobar_1_val_2');
-- local indexes
CREATE INDEX foobar_1_local_idx ON foobar_1(foo, bar);
-- partitioned indexes
CREATE INDEX foobar_normal_idx ON new_foobar(foo, bar);
CREATE UNIQUE INDEX foobar_unique_idx ON new_foobar(foo, fizz);
CREATE table bar(
id VARCHAR(255) PRIMARY KEY,
foo VARCHAR(255),
bar DOUBLE PRECISION NOT NULL DEFAULT 8.8,
fizz TIMESTAMPTZ DEFAULT CURRENT_TIMESTAMP,
buzz REAL NOT NULL CHECK (buzz IS NOT NULL),
FOREIGN KEY (foo, fizz) REFERENCES new_foobar (foo, fizz)
);
CREATE INDEX bar_normal_idx ON bar(bar);
CREATE INDEX bar_another_normal_id ON bar(bar, fizz);
CREATE UNIQUE INDEX bar_unique_idx on bar(fizz, buzz);
CREATE TABLE fizz(
);
`},
// Ensure that we're maintaining backwards compatibility with the old generate plan func
planFactory: diff.GeneratePlan,
},
}
func (suite *acceptanceTestSuite) TestBackCompatTestCases() {
suite.runTestCases(backCompatAcceptanceTestCases)
}