@contember/schema-migrations 1.2.0-alpha.9 → 1.2.0-beta.2
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/Migration.d.ts +2 -0
- package/dist/src/Migration.d.ts.map +1 -1
- package/dist/src/Migration.js +2 -2
- package/dist/src/Migration.js.map +1 -1
- package/dist/src/MigrationCreator.d.ts +3 -1
- package/dist/src/MigrationCreator.d.ts.map +1 -1
- package/dist/src/MigrationCreator.js +2 -2
- package/dist/src/MigrationCreator.js.map +1 -1
- package/dist/src/MigrationFilesManager.d.ts.map +1 -1
- package/dist/src/MigrationFilesManager.js +10 -19
- package/dist/src/MigrationFilesManager.js.map +1 -1
- package/dist/src/MigrationsResolver.d.ts.map +1 -1
- package/dist/src/MigrationsResolver.js +1 -0
- package/dist/src/MigrationsResolver.js.map +1 -1
- package/dist/src/SchemaDiffer.d.ts +6 -1
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +12 -7
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/SchemaMigrator.d.ts +2 -1
- package/dist/src/SchemaMigrator.d.ts.map +1 -1
- package/dist/src/SchemaMigrator.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 +2 -0
- 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/CreateColumnModification.js +3 -3
- package/dist/src/modifications/columns/CreateColumnModification.js.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 +24 -20
- 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/columns/UpdateColumnNameModification.js +7 -7
- package/dist/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +2 -2
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.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/CreateEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.js +2 -2
- package/dist/src/modifications/entities/CreateEntityModification.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/RemoveFieldModification.js +4 -4
- package/dist/src/modifications/fields/RemoveFieldModification.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 +7 -7
- package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
- package/dist/src/modifications/indexes/CreateIndexModification.js +3 -3
- package/dist/src/modifications/indexes/CreateIndexModification.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 +17 -6
- 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/settings/UpdateSettingsModification.d.ts +28 -0
- package/dist/src/modifications/settings/UpdateSettingsModification.d.ts.map +1 -0
- package/dist/src/modifications/settings/UpdateSettingsModification.js +64 -0
- package/dist/src/modifications/settings/UpdateSettingsModification.js.map +1 -0
- package/dist/src/modifications/settings/index.d.ts +2 -0
- package/dist/src/modifications/settings/index.d.ts.map +1 -0
- package/dist/src/modifications/settings/index.js +18 -0
- package/dist/src/modifications/settings/index.js.map +1 -0
- package/dist/src/modifications/utils/columnUtils.d.ts +3 -0
- package/dist/src/modifications/utils/columnUtils.d.ts.map +1 -0
- package/dist/src/modifications/utils/columnUtils.js +9 -0
- package/dist/src/modifications/utils/columnUtils.js.map +1 -0
- 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 +24 -2
- 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/createColumn.test.js +36 -0
- package/dist/tests/cases/integration/createColumn.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/createView.test.js +80 -0
- package/dist/tests/cases/integration/createView.test.js.map +1 -1
- package/dist/tests/cases/integration/removeField.test.js +72 -0
- package/dist/tests/cases/integration/removeField.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/scripts/checkCreateConsistentMigrations.js +5 -4
- package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
- package/dist/tests/src/tests.d.ts.map +1 -1
- package/dist/tests/src/tests.js +15 -5
- package/dist/tests/src/tests.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/Migration.ts +3 -1
- package/src/MigrationCreator.ts +2 -1
- package/src/MigrationFilesManager.ts +10 -20
- package/src/MigrationsResolver.ts +1 -0
- package/src/SchemaDiffer.ts +18 -7
- package/src/SchemaMigrator.ts +2 -1
- package/src/modifications/ModificationHandler.ts +5 -4
- package/src/modifications/ModificationHandlerFactory.ts +4 -1
- package/src/modifications/columns/CreateColumnModification.ts +3 -2
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +33 -24
- package/src/modifications/columns/UpdateColumnNameModification.ts +42 -42
- package/src/modifications/constraints/CreateUniqueConstraintModification.ts +2 -2
- package/src/modifications/differs/RemoveChangedViewDiffer.ts +9 -22
- package/src/modifications/entities/CreateEntityModification.ts +2 -1
- package/src/modifications/entities/RemoveEntityModification.ts +2 -1
- package/src/modifications/entities/UpdateEntityNameModification.ts +2 -1
- package/src/modifications/fields/RemoveFieldModification.ts +4 -4
- package/src/modifications/fields/UpdateFieldNameModification.ts +9 -8
- package/src/modifications/indexes/CreateIndexModification.ts +3 -3
- package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +13 -4
- package/src/modifications/relations/ConvertOneToManyRelationModification.ts +19 -3
- package/src/modifications/relations/CreateRelationModification.ts +33 -11
- package/src/modifications/settings/UpdateSettingsModification.ts +87 -0
- package/src/modifications/settings/index.ts +1 -0
- package/src/modifications/utils/columnUtils.ts +5 -0
- 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 +22 -2
- package/src/modifications/utils/viewDependencies.ts +28 -5
- package/src/tsconfig.json +2 -2
- package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +3 -2
- package/tests/cases/integration/createColumn.test.ts +33 -0
- package/tests/cases/integration/createManyHasMany.test.ts +3 -2
- package/tests/cases/integration/createView.test.ts +70 -0
- package/tests/cases/integration/removeField.test.ts +58 -0
- package/tests/cases/integration/takenIndexName.test.ts +314 -0
- package/tests/cases/integration/updateColumnDefinition.test.ts +138 -1
- package/tests/scripts/checkCreateConsistentMigrations.ts +3 -2
- package/tests/src/tests.ts +21 -11
|
@@ -86,3 +86,73 @@ testMigrations('create view', {
|
|
|
86
86
|
sql: SQL`CREATE VIEW "author_stats" AS SELECT 1;`,
|
|
87
87
|
})
|
|
88
88
|
|
|
89
|
+
|
|
90
|
+
namespace ViewAddRelationOriginalSchema {
|
|
91
|
+
export class Article {
|
|
92
|
+
title = def.stringColumn()
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
|
|
96
|
+
export class Category {
|
|
97
|
+
name = def.stringColumn()
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
namespace ViewAddRelationUpdateSchema {
|
|
102
|
+
export class Article {
|
|
103
|
+
title = def.stringColumn()
|
|
104
|
+
category = def.manyHasOne(Category)
|
|
105
|
+
stats = def.oneHasOneInverse(ArticleStats, 'article')
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export class Category {
|
|
109
|
+
name = def.stringColumn()
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
@def.View('SELECT 1')
|
|
113
|
+
export class ArticleStats {
|
|
114
|
+
article = def.oneHasOne(Article, 'stats')
|
|
115
|
+
visitCount = def.intColumn()
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
testMigrations('create a relation and a view', {
|
|
121
|
+
originalSchema: def.createModel(ViewAddRelationOriginalSchema), updatedSchema: def.createModel(ViewAddRelationUpdateSchema), diff: [
|
|
122
|
+
{
|
|
123
|
+
modification: 'createRelation',
|
|
124
|
+
entityName: 'Article',
|
|
125
|
+
owningSide: { name: 'category', nullable: true, type: 'ManyHasOne', target: 'Category', joiningColumn: { columnName: 'category_id', onDelete: 'restrict' } },
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
modification: 'createView',
|
|
129
|
+
entity: { name: 'ArticleStats',
|
|
130
|
+
primary: 'id',
|
|
131
|
+
primaryColumn: 'id',
|
|
132
|
+
unique: {},
|
|
133
|
+
indexes: {},
|
|
134
|
+
fields: { id: { name: 'id', columnName: 'id', nullable: false, type: 'Uuid', columnType: 'uuid' },
|
|
135
|
+
article: { name: 'article', inversedBy: 'stats', nullable: true, type: 'OneHasOne', target: 'Article', joiningColumn: { columnName: 'article_id', onDelete: 'restrict' } },
|
|
136
|
+
visitCount: { name: 'visitCount', columnName: 'visit_count', nullable: true, type: 'Integer', columnType: 'integer' } },
|
|
137
|
+
tableName: 'article_stats',
|
|
138
|
+
eventLog: { enabled: true },
|
|
139
|
+
view: { sql: 'SELECT 1' } },
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
modification: 'createRelationInverseSide',
|
|
143
|
+
entityName: 'Article',
|
|
144
|
+
relation: {
|
|
145
|
+
name: 'stats',
|
|
146
|
+
ownedBy: 'article',
|
|
147
|
+
target: 'ArticleStats',
|
|
148
|
+
type: 'OneHasOne',
|
|
149
|
+
nullable: true,
|
|
150
|
+
},
|
|
151
|
+
},
|
|
152
|
+
],
|
|
153
|
+
sql: SQL`ALTER TABLE "article" ADD "category_id" uuid;
|
|
154
|
+
ALTER TABLE "article" ADD CONSTRAINT "fk_article_category_id_703b8b" FOREIGN KEY ("category_id") REFERENCES "category"("id") ON DELETE NO ACTION DEFERRABLE INITIALLY IMMEDIATE;
|
|
155
|
+
CREATE INDEX "article_category_id_index" ON "article" ("category_id");
|
|
156
|
+
CREATE VIEW "article_stats" AS SELECT 1;`,
|
|
157
|
+
})
|
|
158
|
+
|
|
@@ -2,6 +2,8 @@ import { testMigrations } from '../../src/tests'
|
|
|
2
2
|
import { SchemaBuilder } from '@contember/schema-definition'
|
|
3
3
|
import { Model } from '@contember/schema'
|
|
4
4
|
import { SQL } from '../../src/tags'
|
|
5
|
+
import { SchemaDefinition as def } from '@contember/schema-definition'
|
|
6
|
+
|
|
5
7
|
|
|
6
8
|
testMigrations('remove relation (many has one)', {
|
|
7
9
|
originalSchema: new SchemaBuilder()
|
|
@@ -128,3 +130,59 @@ testMigrations('remove relation inverse side', {
|
|
|
128
130
|
],
|
|
129
131
|
sql: SQL``,
|
|
130
132
|
})
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
namespace DropIndexOrigSchema {
|
|
136
|
+
|
|
137
|
+
@def.Unique('title', 'author')
|
|
138
|
+
@def.Index('title', 'author')
|
|
139
|
+
export class Article {
|
|
140
|
+
title = def.stringColumn()
|
|
141
|
+
author = def.manyHasOne(Author)
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
export class Author {
|
|
145
|
+
name = def.stringColumn()
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
namespace DropIndexUpSchema {
|
|
150
|
+
@def.Unique('title', 'author')
|
|
151
|
+
@def.Index('title', 'author')
|
|
152
|
+
export class Article {
|
|
153
|
+
title = def.stringColumn()
|
|
154
|
+
author = def.stringColumn()
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export class Author {
|
|
158
|
+
name = def.stringColumn()
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
testMigrations('test drop index / unique when removing a field', {
|
|
164
|
+
originalSchema: def.createModel(DropIndexOrigSchema),
|
|
165
|
+
updatedSchema: def.createModel(DropIndexUpSchema),
|
|
166
|
+
diff: [{
|
|
167
|
+
modification: 'removeField',
|
|
168
|
+
entityName: 'Article',
|
|
169
|
+
fieldName: 'author',
|
|
170
|
+
}, {
|
|
171
|
+
modification: 'createColumn',
|
|
172
|
+
entityName: 'Article',
|
|
173
|
+
field: { name: 'author', columnName: 'author', nullable: true, type: 'String', columnType: 'text' },
|
|
174
|
+
}, {
|
|
175
|
+
modification: 'createUniqueConstraint',
|
|
176
|
+
entityName: 'Article',
|
|
177
|
+
unique: { name: 'unique_Article_title_author_7157ea', fields: ['title', 'author'] },
|
|
178
|
+
}, {
|
|
179
|
+
modification: 'createIndex',
|
|
180
|
+
entityName: 'Article',
|
|
181
|
+
index: { name: 'idx_Article_title_author_7157ea', fields: ['title', 'author'] },
|
|
182
|
+
}],
|
|
183
|
+
sql: SQL`ALTER TABLE "article" DROP "author_id";
|
|
184
|
+
ALTER TABLE "article" ADD "author" text;
|
|
185
|
+
ALTER TABLE "article" ADD CONSTRAINT "unique_Article_title_author_7157ea" UNIQUE ("title", "author");
|
|
186
|
+
CREATE INDEX "idx_Article_title_author_7157ea" ON "article" ("title", "author");`,
|
|
187
|
+
})
|
|
188
|
+
|
|
@@ -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
|
+
})
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { relative } from 'path'
|
|
1
|
+
import { relative } from 'node:path'
|
|
2
2
|
import {
|
|
3
3
|
MigrationFilesManager,
|
|
4
4
|
MigrationsResolver,
|
|
@@ -18,7 +18,8 @@ import { emptySchema, schemaType } from '@contember/schema-utils'
|
|
|
18
18
|
for (const migration of await migrationsResolver.getMigrations()) {
|
|
19
19
|
const nextSchema = migrator.applyModifications(schema, migration.modifications, migration.formatVersion)
|
|
20
20
|
schemaType(nextSchema)
|
|
21
|
-
|
|
21
|
+
const { meta, ...nextSchemaWithoutMeta } = nextSchema
|
|
22
|
+
differ.diffSchemas(schema, nextSchemaWithoutMeta)
|
|
22
23
|
|
|
23
24
|
schema = nextSchema
|
|
24
25
|
}
|
package/tests/src/tests.ts
CHANGED
|
@@ -2,6 +2,8 @@ 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'
|
|
6
|
+
import { emptySchema } from '@contember/schema-utils'
|
|
5
7
|
|
|
6
8
|
const modificationFactory = new ModificationHandlerFactory(ModificationHandlerFactory.defaultFactoryMap)
|
|
7
9
|
const schemaMigrator = new SchemaMigrator(modificationFactory)
|
|
@@ -27,17 +29,24 @@ export function testDiffSchemas(
|
|
|
27
29
|
updatedAcl: Acl.Schema = emptyAcl,
|
|
28
30
|
) {
|
|
29
31
|
const actualDiff = schemaDiffer.diffSchemas(
|
|
30
|
-
{ model: originalModel, acl: originalAcl, validation: {} },
|
|
31
|
-
{ model: updatedModel, acl: updatedAcl, validation: {} },
|
|
32
|
-
|
|
32
|
+
{ ...emptySchema, model: originalModel, acl: originalAcl, validation: {} },
|
|
33
|
+
{ ...emptySchema, model: updatedModel, acl: updatedAcl, validation: {} },
|
|
34
|
+
{ skipRecreateValidation: true },
|
|
33
35
|
)
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
36
|
+
try {
|
|
37
|
+
assert.deepStrictEqual(actualDiff, expectedDiff)
|
|
38
|
+
} catch (e) {
|
|
39
|
+
// eslint-disable-next-line no-console
|
|
40
|
+
console.log(JSON.stringify(actualDiff))
|
|
41
|
+
throw e
|
|
42
|
+
}
|
|
43
|
+
const { meta, ...schema } = schemaMigrator.applyModifications(
|
|
44
|
+
{ ...emptySchema, model: originalModel, acl: originalAcl, validation: {} },
|
|
37
45
|
actualDiff,
|
|
38
46
|
VERSION_LATEST,
|
|
39
|
-
)
|
|
47
|
+
) as SchemaWithMeta
|
|
40
48
|
assert.deepStrictEqual(schema, {
|
|
49
|
+
...emptySchema,
|
|
41
50
|
model: updatedModel,
|
|
42
51
|
acl: updatedAcl,
|
|
43
52
|
validation: {},
|
|
@@ -51,13 +60,14 @@ export function testApplyDiff(
|
|
|
51
60
|
originalAcl: Acl.Schema = emptyAcl,
|
|
52
61
|
expectedAcl: Acl.Schema = emptyAcl,
|
|
53
62
|
) {
|
|
54
|
-
const actualSchema = schemaMigrator.applyModifications(
|
|
55
|
-
{ model: originalModel, acl: originalAcl, validation: {} },
|
|
63
|
+
const { meta, ...actualSchema } = schemaMigrator.applyModifications(
|
|
64
|
+
{ ...emptySchema, model: originalModel, acl: originalAcl, validation: {} },
|
|
56
65
|
diff,
|
|
57
66
|
VERSION_LATEST,
|
|
58
|
-
)
|
|
67
|
+
) as SchemaWithMeta
|
|
59
68
|
|
|
60
69
|
assert.deepStrictEqual(actualSchema, {
|
|
70
|
+
...emptySchema,
|
|
61
71
|
model: expectedModel,
|
|
62
72
|
acl: expectedAcl,
|
|
63
73
|
validation: {},
|
|
@@ -65,7 +75,7 @@ export function testApplyDiff(
|
|
|
65
75
|
}
|
|
66
76
|
|
|
67
77
|
export function testGenerateSql(originalSchema: Model.Schema, diff: Migration.Modification[], expectedSql: string) {
|
|
68
|
-
let schema = { model: originalSchema, acl: emptyAcl, validation: {} }
|
|
78
|
+
let schema = { ...emptySchema, model: originalSchema, acl: emptyAcl, validation: {} }
|
|
69
79
|
const builder = createMigrationBuilder()
|
|
70
80
|
for (let { modification, ...data } of diff) {
|
|
71
81
|
const modificationHandler = modificationFactory.create(modification, data, schema, { formatVersion: VERSION_LATEST, systemSchema: 'system' })
|