@contember/schema-migrations 1.2.0-alpha.15 → 1.2.0-alpha.16
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +2 -1
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/modifications/ModificationHandler.d.ts +7 -4
- package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
- package/dist/src/modifications/ModificationHandler.js.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.d.ts +2 -2
- package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
- package/dist/src/modifications/columns/CreateColumnModification.d.ts +1 -3
- package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +3 -5
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +11 -5
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts +1 -3
- package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
- package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts +1 -3
- package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts.map +1 -1
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts +1 -2
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts.map +1 -1
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +7 -20
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.js.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts +2 -1
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +2 -2
- package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +2 -2
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +3 -4
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +2 -2
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +3 -4
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +10 -2
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +1 -3
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.d.ts +3 -4
- package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.js +14 -3
- package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +1 -3
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts +1 -3
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts +1 -3
- package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts +1 -3
- package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +1 -3
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +1 -3
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +1 -3
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
- package/dist/src/modifications/utils/columnUtils.d.ts +1 -1
- package/dist/src/modifications/utils/columnUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/columnUtils.js.map +1 -1
- package/dist/src/modifications/utils/createJunctionTable.d.ts +2 -1
- package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
- package/dist/src/modifications/utils/createJunctionTable.js +7 -5
- package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
- package/dist/src/modifications/utils/diffUtils.d.ts +14 -12
- package/dist/src/modifications/utils/diffUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/diffUtils.js.map +1 -1
- package/dist/src/modifications/utils/schemaMeta.d.ts +8 -0
- package/dist/src/modifications/utils/schemaMeta.d.ts.map +1 -0
- package/dist/src/modifications/utils/schemaMeta.js +13 -0
- package/dist/src/modifications/utils/schemaMeta.js.map +1 -0
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +4 -2
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.js +16 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/src/modifications/utils/viewDependencies.d.ts +4 -2
- package/dist/src/modifications/utils/viewDependencies.d.ts.map +1 -1
- package/dist/src/modifications/utils/viewDependencies.js +29 -6
- package/dist/src/modifications/utils/viewDependencies.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +3 -2
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasMany.test.js +3 -2
- package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/takenIndexName.test.d.ts +2 -0
- package/dist/tests/cases/integration/takenIndexName.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/takenIndexName.test.js +307 -0
- package/dist/tests/cases/integration/takenIndexName.test.js.map +1 -0
- package/dist/tests/cases/integration/updateColumnDefinition.test.js +160 -0
- package/dist/tests/cases/integration/updateColumnDefinition.test.js.map +1 -1
- package/dist/tests/src/tests.d.ts.map +1 -1
- package/dist/tests/src/tests.js +2 -2
- package/dist/tests/src/tests.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/SchemaDiffer.ts +3 -1
- package/src/modifications/ModificationHandler.ts +5 -4
- package/src/modifications/ModificationHandlerFactory.ts +2 -1
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +19 -10
- package/src/modifications/differs/RemoveChangedViewDiffer.ts +9 -22
- package/src/modifications/entities/RemoveEntityModification.ts +2 -1
- package/src/modifications/entities/UpdateEntityNameModification.ts +2 -1
- package/src/modifications/fields/UpdateFieldNameModification.ts +2 -1
- package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +13 -4
- package/src/modifications/relations/ConvertOneToManyRelationModification.ts +19 -3
- package/src/modifications/relations/CreateRelationModification.ts +30 -8
- package/src/modifications/utils/columnUtils.ts +1 -1
- package/src/modifications/utils/createJunctionTable.ts +7 -5
- package/src/modifications/utils/diffUtils.ts +12 -12
- package/src/modifications/utils/schemaMeta.ts +18 -0
- package/src/modifications/utils/schemaUpdateUtils.ts +14 -1
- package/src/modifications/utils/viewDependencies.ts +28 -5
- package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +3 -2
- package/tests/cases/integration/createManyHasMany.test.ts +3 -2
- package/tests/cases/integration/takenIndexName.test.ts +314 -0
- package/tests/cases/integration/updateColumnDefinition.test.ts +138 -1
- package/tests/src/tests.ts +5 -4
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
import { test } from 'vitest'
|
|
2
|
+
import { testGenerateSql } from '../../src/tests'
|
|
3
|
+
import {
|
|
4
|
+
createEntityModification,
|
|
5
|
+
createRelationModification,
|
|
6
|
+
removeFieldModification,
|
|
7
|
+
updateEntityNameModification,
|
|
8
|
+
} from '../../../src'
|
|
9
|
+
import { emptyModelSchema } from '@contember/schema-utils'
|
|
10
|
+
import { Model } from '@contember/schema'
|
|
11
|
+
import { SQL } from '../../src/tags'
|
|
12
|
+
|
|
13
|
+
test('taken fk index name', () => {
|
|
14
|
+
testGenerateSql(emptyModelSchema, [
|
|
15
|
+
createEntityModification.createModification({
|
|
16
|
+
entity: {
|
|
17
|
+
fields: {
|
|
18
|
+
id: {
|
|
19
|
+
columnName: 'id',
|
|
20
|
+
name: 'id',
|
|
21
|
+
nullable: false,
|
|
22
|
+
type: Model.ColumnType.Uuid,
|
|
23
|
+
columnType: 'uuid',
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
name: 'Post',
|
|
27
|
+
primary: 'id',
|
|
28
|
+
primaryColumn: 'id',
|
|
29
|
+
tableName: 'post',
|
|
30
|
+
unique: {},
|
|
31
|
+
eventLog: {
|
|
32
|
+
enabled: true,
|
|
33
|
+
},
|
|
34
|
+
indexes: {},
|
|
35
|
+
},
|
|
36
|
+
}),
|
|
37
|
+
createEntityModification.createModification({
|
|
38
|
+
entity: {
|
|
39
|
+
fields: {
|
|
40
|
+
id: {
|
|
41
|
+
columnName: 'id',
|
|
42
|
+
name: 'id',
|
|
43
|
+
nullable: false,
|
|
44
|
+
type: Model.ColumnType.Uuid,
|
|
45
|
+
columnType: 'uuid',
|
|
46
|
+
},
|
|
47
|
+
},
|
|
48
|
+
name: 'Author',
|
|
49
|
+
primary: 'id',
|
|
50
|
+
primaryColumn: 'id',
|
|
51
|
+
tableName: 'author',
|
|
52
|
+
unique: {},
|
|
53
|
+
eventLog: {
|
|
54
|
+
enabled: true,
|
|
55
|
+
},
|
|
56
|
+
indexes: {},
|
|
57
|
+
},
|
|
58
|
+
}),
|
|
59
|
+
createRelationModification.createModification({
|
|
60
|
+
entityName: 'Post',
|
|
61
|
+
owningSide: {
|
|
62
|
+
name: 'author',
|
|
63
|
+
type: Model.RelationType.ManyHasOne,
|
|
64
|
+
target: 'Author',
|
|
65
|
+
joiningColumn: {
|
|
66
|
+
columnName: 'author_id',
|
|
67
|
+
onDelete: Model.OnDelete.cascade,
|
|
68
|
+
},
|
|
69
|
+
nullable: true,
|
|
70
|
+
},
|
|
71
|
+
|
|
72
|
+
}),
|
|
73
|
+
updateEntityNameModification.createModification({
|
|
74
|
+
entityName: 'Post',
|
|
75
|
+
newEntityName: 'Article',
|
|
76
|
+
tableName: 'article',
|
|
77
|
+
}),
|
|
78
|
+
createEntityModification.createModification({
|
|
79
|
+
entity: {
|
|
80
|
+
fields: {
|
|
81
|
+
id: {
|
|
82
|
+
columnName: 'id',
|
|
83
|
+
name: 'id',
|
|
84
|
+
nullable: false,
|
|
85
|
+
type: Model.ColumnType.Uuid,
|
|
86
|
+
columnType: 'uuid',
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
name: 'Post',
|
|
90
|
+
primary: 'id',
|
|
91
|
+
primaryColumn: 'id',
|
|
92
|
+
tableName: 'post',
|
|
93
|
+
unique: {},
|
|
94
|
+
eventLog: {
|
|
95
|
+
enabled: true,
|
|
96
|
+
},
|
|
97
|
+
indexes: {},
|
|
98
|
+
},
|
|
99
|
+
}),
|
|
100
|
+
createRelationModification.createModification({
|
|
101
|
+
entityName: 'Post',
|
|
102
|
+
owningSide: {
|
|
103
|
+
name: 'author',
|
|
104
|
+
type: Model.RelationType.ManyHasOne,
|
|
105
|
+
target: 'Author',
|
|
106
|
+
joiningColumn: {
|
|
107
|
+
columnName: 'author_id',
|
|
108
|
+
onDelete: Model.OnDelete.cascade,
|
|
109
|
+
},
|
|
110
|
+
nullable: true,
|
|
111
|
+
},
|
|
112
|
+
|
|
113
|
+
}),
|
|
114
|
+
], SQL`CREATE TABLE "post" (
|
|
115
|
+
"id" uuid PRIMARY KEY NOT NULL
|
|
116
|
+
);
|
|
117
|
+
CREATE TRIGGER "log_event"
|
|
118
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post"
|
|
119
|
+
FOR EACH ROW
|
|
120
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$id$pga$);
|
|
121
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
122
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post"
|
|
123
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
124
|
+
FOR EACH ROW
|
|
125
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();
|
|
126
|
+
CREATE TABLE "author" (
|
|
127
|
+
"id" uuid PRIMARY KEY NOT NULL
|
|
128
|
+
);
|
|
129
|
+
CREATE TRIGGER "log_event"
|
|
130
|
+
AFTER INSERT OR UPDATE OR DELETE ON "author"
|
|
131
|
+
FOR EACH ROW
|
|
132
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$id$pga$);
|
|
133
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
134
|
+
AFTER INSERT OR UPDATE OR DELETE ON "author"
|
|
135
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
136
|
+
FOR EACH ROW
|
|
137
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();
|
|
138
|
+
ALTER TABLE "post"
|
|
139
|
+
ADD "author_id" uuid;
|
|
140
|
+
ALTER TABLE "post"
|
|
141
|
+
ADD CONSTRAINT "fk_post_author_id_87ef9a" FOREIGN KEY ("author_id") REFERENCES "author"("id") ON DELETE NO ACTION DEFERRABLE INITIALLY IMMEDIATE;
|
|
142
|
+
CREATE INDEX "post_author_id_index" ON "post" ("author_id");
|
|
143
|
+
ALTER TABLE "post" RENAME TO "article";
|
|
144
|
+
CREATE TABLE "post" (
|
|
145
|
+
"id" uuid PRIMARY KEY NOT NULL
|
|
146
|
+
);
|
|
147
|
+
CREATE TRIGGER "log_event"
|
|
148
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post"
|
|
149
|
+
FOR EACH ROW
|
|
150
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$id$pga$);
|
|
151
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
152
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post"
|
|
153
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
154
|
+
FOR EACH ROW
|
|
155
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();
|
|
156
|
+
ALTER TABLE "post"
|
|
157
|
+
ADD "author_id" uuid;
|
|
158
|
+
ALTER TABLE "post"
|
|
159
|
+
ADD CONSTRAINT "fk_post_author_id_87ef9a" FOREIGN KEY ("author_id") REFERENCES "author"("id") ON DELETE NO ACTION DEFERRABLE INITIALLY IMMEDIATE;
|
|
160
|
+
CREATE INDEX "post_author_id_index1" ON "post" ("author_id");`)
|
|
161
|
+
})
|
|
162
|
+
|
|
163
|
+
|
|
164
|
+
test('taken junction table index name', () => {
|
|
165
|
+
testGenerateSql(emptyModelSchema, [
|
|
166
|
+
createEntityModification.createModification({
|
|
167
|
+
entity: {
|
|
168
|
+
fields: {
|
|
169
|
+
id: {
|
|
170
|
+
columnName: 'id',
|
|
171
|
+
name: 'id',
|
|
172
|
+
nullable: false,
|
|
173
|
+
type: Model.ColumnType.Uuid,
|
|
174
|
+
columnType: 'uuid',
|
|
175
|
+
},
|
|
176
|
+
},
|
|
177
|
+
name: 'Post',
|
|
178
|
+
primary: 'id',
|
|
179
|
+
primaryColumn: 'id',
|
|
180
|
+
tableName: 'post',
|
|
181
|
+
unique: {},
|
|
182
|
+
eventLog: {
|
|
183
|
+
enabled: true,
|
|
184
|
+
},
|
|
185
|
+
indexes: {},
|
|
186
|
+
},
|
|
187
|
+
}),
|
|
188
|
+
createEntityModification.createModification({
|
|
189
|
+
entity: {
|
|
190
|
+
fields: {
|
|
191
|
+
id: {
|
|
192
|
+
columnName: 'id',
|
|
193
|
+
name: 'id',
|
|
194
|
+
nullable: false,
|
|
195
|
+
type: Model.ColumnType.Uuid,
|
|
196
|
+
columnType: 'uuid',
|
|
197
|
+
},
|
|
198
|
+
},
|
|
199
|
+
name: 'Author',
|
|
200
|
+
primary: 'id',
|
|
201
|
+
primaryColumn: 'id',
|
|
202
|
+
tableName: 'author',
|
|
203
|
+
unique: {},
|
|
204
|
+
eventLog: {
|
|
205
|
+
enabled: true,
|
|
206
|
+
},
|
|
207
|
+
indexes: {},
|
|
208
|
+
},
|
|
209
|
+
}),
|
|
210
|
+
createRelationModification.createModification({
|
|
211
|
+
entityName: 'Post',
|
|
212
|
+
owningSide: {
|
|
213
|
+
name: 'authors',
|
|
214
|
+
type: Model.RelationType.ManyHasMany,
|
|
215
|
+
target: 'Author',
|
|
216
|
+
joiningTable: {
|
|
217
|
+
tableName: 'post_authors',
|
|
218
|
+
joiningColumn: {
|
|
219
|
+
columnName: 'post_id',
|
|
220
|
+
onDelete: Model.OnDelete.cascade,
|
|
221
|
+
},
|
|
222
|
+
inverseJoiningColumn: {
|
|
223
|
+
columnName: 'author_id',
|
|
224
|
+
onDelete: Model.OnDelete.cascade,
|
|
225
|
+
},
|
|
226
|
+
eventLog: {
|
|
227
|
+
enabled: true,
|
|
228
|
+
},
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
}),
|
|
232
|
+
removeFieldModification.createModification({
|
|
233
|
+
entityName: 'Post',
|
|
234
|
+
fieldName: 'authors',
|
|
235
|
+
}),
|
|
236
|
+
createRelationModification.createModification({
|
|
237
|
+
entityName: 'Post',
|
|
238
|
+
owningSide: {
|
|
239
|
+
name: 'authors',
|
|
240
|
+
type: Model.RelationType.ManyHasMany,
|
|
241
|
+
target: 'Author',
|
|
242
|
+
joiningTable: {
|
|
243
|
+
tableName: 'post_authors',
|
|
244
|
+
joiningColumn: {
|
|
245
|
+
columnName: 'post_id',
|
|
246
|
+
onDelete: Model.OnDelete.cascade,
|
|
247
|
+
},
|
|
248
|
+
inverseJoiningColumn: {
|
|
249
|
+
columnName: 'author_id',
|
|
250
|
+
onDelete: Model.OnDelete.cascade,
|
|
251
|
+
},
|
|
252
|
+
eventLog: {
|
|
253
|
+
enabled: true,
|
|
254
|
+
},
|
|
255
|
+
},
|
|
256
|
+
},
|
|
257
|
+
}),
|
|
258
|
+
], SQL`CREATE TABLE "post" (
|
|
259
|
+
"id" uuid PRIMARY KEY NOT NULL
|
|
260
|
+
);
|
|
261
|
+
CREATE TRIGGER "log_event"
|
|
262
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post"
|
|
263
|
+
FOR EACH ROW
|
|
264
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$id$pga$);
|
|
265
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
266
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post"
|
|
267
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
268
|
+
FOR EACH ROW
|
|
269
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();
|
|
270
|
+
CREATE TABLE "author" (
|
|
271
|
+
"id" uuid PRIMARY KEY NOT NULL
|
|
272
|
+
);
|
|
273
|
+
CREATE TRIGGER "log_event"
|
|
274
|
+
AFTER INSERT OR UPDATE OR DELETE ON "author"
|
|
275
|
+
FOR EACH ROW
|
|
276
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$id$pga$);
|
|
277
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
278
|
+
AFTER INSERT OR UPDATE OR DELETE ON "author"
|
|
279
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
280
|
+
FOR EACH ROW
|
|
281
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();
|
|
282
|
+
CREATE TABLE "post_authors" (
|
|
283
|
+
"post_id" uuid NOT NULL REFERENCES "post"("id") ON DELETE CASCADE,
|
|
284
|
+
"author_id" uuid NOT NULL REFERENCES "author"("id") ON DELETE CASCADE
|
|
285
|
+
);
|
|
286
|
+
ALTER TABLE "post_authors"
|
|
287
|
+
ADD CONSTRAINT "post_authors_pkey" PRIMARY KEY ("post_id", "author_id");
|
|
288
|
+
CREATE TRIGGER "log_event"
|
|
289
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post_authors"
|
|
290
|
+
FOR EACH ROW
|
|
291
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$post_id$pga$, $pga$author_id$pga$);
|
|
292
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
293
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post_authors"
|
|
294
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
295
|
+
FOR EACH ROW
|
|
296
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();
|
|
297
|
+
DROP TABLE "post_authors";
|
|
298
|
+
CREATE TABLE "post_authors" (
|
|
299
|
+
"post_id" uuid NOT NULL REFERENCES "post"("id") ON DELETE CASCADE,
|
|
300
|
+
"author_id" uuid NOT NULL REFERENCES "author"("id") ON DELETE CASCADE
|
|
301
|
+
);
|
|
302
|
+
ALTER TABLE "post_authors"
|
|
303
|
+
ADD CONSTRAINT "post_authors_pkey1" PRIMARY KEY ("post_id", "author_id");
|
|
304
|
+
CREATE TRIGGER "log_event"
|
|
305
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post_authors"
|
|
306
|
+
FOR EACH ROW
|
|
307
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$post_id$pga$, $pga$author_id$pga$);
|
|
308
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
309
|
+
AFTER INSERT OR UPDATE OR DELETE ON "post_authors"
|
|
310
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
311
|
+
FOR EACH ROW
|
|
312
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();
|
|
313
|
+
`)
|
|
314
|
+
})
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { testMigrations } from '../../src/tests'
|
|
2
|
-
import { SchemaBuilder } from '@contember/schema-definition'
|
|
2
|
+
import { SchemaBuilder, SchemaDefinition as def, createSchema } from '@contember/schema-definition'
|
|
3
3
|
import { Model } from '@contember/schema'
|
|
4
4
|
import { SQL } from '../../src/tags'
|
|
5
|
+
import { updateColumnDefinitionModification } from '../../../src'
|
|
5
6
|
|
|
6
7
|
testMigrations('update column definition', {
|
|
7
8
|
originalSchema: new SchemaBuilder()
|
|
@@ -31,3 +32,139 @@ testMigrations('update column definition', {
|
|
|
31
32
|
sql: SQL`ALTER TABLE "author"
|
|
32
33
|
ALTER "registered_at" SET DATA TYPE timestamptz USING "registered_at"::timestamptz;`,
|
|
33
34
|
})
|
|
35
|
+
|
|
36
|
+
namespace SeqOrig {
|
|
37
|
+
export class Author {
|
|
38
|
+
idSeq = def.intColumn()
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
namespace SeqUpdated {
|
|
42
|
+
export class Author {
|
|
43
|
+
idSeq = def.intColumn().notNull().sequence({ start: 10 })
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
testMigrations('add sequence to existing column', {
|
|
47
|
+
originalSchema: createSchema(SeqOrig).model,
|
|
48
|
+
updatedSchema: createSchema(SeqUpdated).model,
|
|
49
|
+
diff: [
|
|
50
|
+
updateColumnDefinitionModification.createModification({
|
|
51
|
+
entityName: 'Author',
|
|
52
|
+
fieldName: 'idSeq',
|
|
53
|
+
definition: {
|
|
54
|
+
type: Model.ColumnType.Int,
|
|
55
|
+
columnType: 'integer',
|
|
56
|
+
nullable: false,
|
|
57
|
+
sequence: {
|
|
58
|
+
precedence: 'BY DEFAULT',
|
|
59
|
+
start: 10,
|
|
60
|
+
},
|
|
61
|
+
},
|
|
62
|
+
}),
|
|
63
|
+
],
|
|
64
|
+
sql: SQL`
|
|
65
|
+
ALTER TABLE "author"
|
|
66
|
+
ALTER "id_seq" SET DATA TYPE integer USING COALESCE("id_seq"::integer, nextval(PG_GET_SERIAL_SEQUENCE($pga$author$pga$, $pga$id_seq$pga$))),
|
|
67
|
+
ALTER "id_seq" SET NOT NULL,
|
|
68
|
+
ALTER "id_seq" ADD GENERATED BY DEFAULT AS IDENTITY (START WITH 10);`,
|
|
69
|
+
})
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
namespace ViewColDepOrig {
|
|
73
|
+
export class Author {
|
|
74
|
+
val = def.intColumn()
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
@def.View('SELECT * FROM author', {
|
|
78
|
+
dependencies: [Author],
|
|
79
|
+
})
|
|
80
|
+
export class AuthorMetaX {
|
|
81
|
+
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
@def.View('SELECT * FROM author_meta_x', {
|
|
85
|
+
dependencies: [AuthorMetaX],
|
|
86
|
+
})
|
|
87
|
+
export class AuthorMetaY {
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
namespace ViewColDepUpdated {
|
|
92
|
+
export class Author {
|
|
93
|
+
val = def.stringColumn()
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
@def.View('SELECT * FROM author', {
|
|
97
|
+
dependencies: [Author],
|
|
98
|
+
})
|
|
99
|
+
export class AuthorMetaX {
|
|
100
|
+
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
@def.View('SELECT * FROM author_meta_x', {
|
|
104
|
+
dependencies: [AuthorMetaX],
|
|
105
|
+
})
|
|
106
|
+
export class AuthorMetaY {
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
testMigrations('recreate view dependent on entity after changing column type', {
|
|
111
|
+
originalSchema: createSchema(ViewColDepOrig).model,
|
|
112
|
+
updatedSchema: createSchema(ViewColDepUpdated).model,
|
|
113
|
+
diff: [{ modification: 'removeEntity', entityName: 'AuthorMetaY' }, {
|
|
114
|
+
modification: 'removeEntity',
|
|
115
|
+
entityName: 'AuthorMetaX',
|
|
116
|
+
}, {
|
|
117
|
+
modification: 'updateColumnDefinition',
|
|
118
|
+
entityName: 'Author',
|
|
119
|
+
fieldName: 'val',
|
|
120
|
+
definition: { nullable: true, type: 'String', columnType: 'text' },
|
|
121
|
+
}, {
|
|
122
|
+
modification: 'createView',
|
|
123
|
+
entity: {
|
|
124
|
+
name: 'AuthorMetaX',
|
|
125
|
+
primary: 'id',
|
|
126
|
+
primaryColumn: 'id',
|
|
127
|
+
unique: {},
|
|
128
|
+
indexes: {},
|
|
129
|
+
fields: {
|
|
130
|
+
id: {
|
|
131
|
+
name: 'id',
|
|
132
|
+
columnName: 'id',
|
|
133
|
+
nullable: false,
|
|
134
|
+
type: 'Uuid',
|
|
135
|
+
columnType: 'uuid',
|
|
136
|
+
},
|
|
137
|
+
},
|
|
138
|
+
tableName: 'author_meta_x',
|
|
139
|
+
eventLog: { enabled: true },
|
|
140
|
+
view: { sql: 'SELECT * FROM author', dependencies: ['Author'] },
|
|
141
|
+
},
|
|
142
|
+
}, {
|
|
143
|
+
modification: 'createView',
|
|
144
|
+
entity: {
|
|
145
|
+
name: 'AuthorMetaY',
|
|
146
|
+
primary: 'id',
|
|
147
|
+
primaryColumn: 'id',
|
|
148
|
+
unique: {},
|
|
149
|
+
indexes: {},
|
|
150
|
+
fields: {
|
|
151
|
+
id: {
|
|
152
|
+
name: 'id',
|
|
153
|
+
columnName: 'id',
|
|
154
|
+
nullable: false,
|
|
155
|
+
type: 'Uuid',
|
|
156
|
+
columnType: 'uuid',
|
|
157
|
+
},
|
|
158
|
+
},
|
|
159
|
+
tableName: 'author_meta_y',
|
|
160
|
+
eventLog: { enabled: true },
|
|
161
|
+
view: { sql: 'SELECT * FROM author_meta_x', dependencies: ['AuthorMetaX'] },
|
|
162
|
+
},
|
|
163
|
+
}],
|
|
164
|
+
sql: SQL`DROP VIEW "author_meta_y";
|
|
165
|
+
DROP VIEW "author_meta_x";
|
|
166
|
+
ALTER TABLE "author"
|
|
167
|
+
ALTER "val" SET DATA TYPE text USING "val"::text;
|
|
168
|
+
CREATE VIEW "author_meta_x" AS SELECT * FROM author;
|
|
169
|
+
CREATE VIEW "author_meta_y" AS SELECT * FROM author_meta_x;`,
|
|
170
|
+
})
|
package/tests/src/tests.ts
CHANGED
|
@@ -2,6 +2,7 @@ import { Migration, ModificationHandlerFactory, SchemaDiffer, SchemaMigrator, VE
|
|
|
2
2
|
import { Acl, Model } from '@contember/schema'
|
|
3
3
|
import { createMigrationBuilder } from '@contember/database-migrations'
|
|
4
4
|
import { assert, describe, it } from 'vitest'
|
|
5
|
+
import { SchemaWithMeta } from '../../src/modifications/utils/schemaMeta'
|
|
5
6
|
|
|
6
7
|
const modificationFactory = new ModificationHandlerFactory(ModificationHandlerFactory.defaultFactoryMap)
|
|
7
8
|
const schemaMigrator = new SchemaMigrator(modificationFactory)
|
|
@@ -32,11 +33,11 @@ export function testDiffSchemas(
|
|
|
32
33
|
false,
|
|
33
34
|
)
|
|
34
35
|
assert.deepStrictEqual(actualDiff, expectedDiff)
|
|
35
|
-
const schema = schemaMigrator.applyModifications(
|
|
36
|
+
const { meta, ...schema } = schemaMigrator.applyModifications(
|
|
36
37
|
{ model: originalModel, acl: originalAcl, validation: {} },
|
|
37
38
|
actualDiff,
|
|
38
39
|
VERSION_LATEST,
|
|
39
|
-
)
|
|
40
|
+
) as SchemaWithMeta
|
|
40
41
|
assert.deepStrictEqual(schema, {
|
|
41
42
|
model: updatedModel,
|
|
42
43
|
acl: updatedAcl,
|
|
@@ -51,11 +52,11 @@ export function testApplyDiff(
|
|
|
51
52
|
originalAcl: Acl.Schema = emptyAcl,
|
|
52
53
|
expectedAcl: Acl.Schema = emptyAcl,
|
|
53
54
|
) {
|
|
54
|
-
const actualSchema = schemaMigrator.applyModifications(
|
|
55
|
+
const { meta, ...actualSchema } = schemaMigrator.applyModifications(
|
|
55
56
|
{ model: originalModel, acl: originalAcl, validation: {} },
|
|
56
57
|
diff,
|
|
57
58
|
VERSION_LATEST,
|
|
58
|
-
)
|
|
59
|
+
) as SchemaWithMeta
|
|
59
60
|
|
|
60
61
|
assert.deepStrictEqual(actualSchema, {
|
|
61
62
|
model: expectedModel,
|