@contember/schema-migrations 1.3.0-rc.2 → 1.3.0
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 +1 -2
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/modifications/differs/{RemoveChangedViewDiffer.d.ts → RemoveViewDiffer.d.ts} +5 -2
- package/dist/src/modifications/differs/RemoveViewDiffer.d.ts.map +1 -0
- package/dist/src/modifications/differs/RemoveViewDiffer.js +48 -0
- package/dist/src/modifications/differs/RemoveViewDiffer.js.map +1 -0
- package/dist/src/modifications/differs/index.d.ts +1 -2
- package/dist/src/modifications/differs/index.d.ts.map +1 -1
- package/dist/src/modifications/differs/index.js +1 -2
- package/dist/src/modifications/differs/index.js.map +1 -1
- package/dist/src/modifications/utils/viewDependencies.js +3 -3
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +2 -2
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js.map +1 -1
- package/dist/tests/cases/integration/convertOneToManyRelation.test.js +24 -16
- package/dist/tests/cases/integration/convertOneToManyRelation.test.js.map +1 -1
- package/dist/tests/cases/integration/createAndDropIndex.test.js +4 -4
- package/dist/tests/cases/integration/createAndDropIndex.test.js.map +1 -1
- package/dist/tests/cases/integration/createColumn.test.js +4 -4
- package/dist/tests/cases/integration/createColumn.test.js.map +1 -1
- package/dist/tests/cases/integration/createEntity.test.js +11 -9
- package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
- package/dist/tests/cases/integration/createEnum.test.js +13 -9
- package/dist/tests/cases/integration/createEnum.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasMany.test.js +11 -7
- package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasOne.test.js +13 -9
- package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasMany.test.js +10 -8
- package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasOne.test.js +9 -7
- package/dist/tests/cases/integration/createOneHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/createRelationInverseSide.test.js +24 -16
- package/dist/tests/cases/integration/createRelationInverseSide.test.js.map +1 -1
- package/dist/tests/cases/integration/createView.test.js +3 -3
- package/dist/tests/cases/integration/createView.test.js.map +1 -1
- package/dist/tests/cases/integration/disableOrphanRemoval.test.js +14 -10
- package/dist/tests/cases/integration/disableOrphanRemoval.test.js.map +1 -1
- package/dist/tests/cases/integration/enableOrphanRemoval.test.js +14 -10
- package/dist/tests/cases/integration/enableOrphanRemoval.test.js.map +1 -1
- package/dist/tests/cases/integration/makeColumnNotNull.test.js +10 -6
- package/dist/tests/cases/integration/makeColumnNotNull.test.js.map +1 -1
- package/dist/tests/cases/integration/makeRelationNotNull.test.js +14 -10
- package/dist/tests/cases/integration/makeRelationNotNull.test.js.map +1 -1
- package/dist/tests/cases/integration/makeRelationNullable.test.js +26 -18
- package/dist/tests/cases/integration/makeRelationNullable.test.js.map +1 -1
- package/dist/tests/cases/integration/patchAclSchema.test.js +21 -17
- package/dist/tests/cases/integration/patchAclSchema.test.js.map +1 -1
- package/dist/tests/cases/integration/removeEntity.test.js +60 -52
- package/dist/tests/cases/integration/removeEntity.test.js.map +1 -1
- package/dist/tests/cases/integration/removeEnum.test.js +13 -9
- package/dist/tests/cases/integration/removeEnum.test.js.map +1 -1
- package/dist/tests/cases/integration/removeField.test.js +71 -51
- package/dist/tests/cases/integration/removeField.test.js.map +1 -1
- package/dist/tests/cases/integration/toggleEventLog.test.js +4 -4
- package/dist/tests/cases/integration/toggleEventLog.test.js.map +1 -1
- package/dist/tests/cases/integration/toggleJunctionEventLog.test.js +4 -4
- package/dist/tests/cases/integration/toggleJunctionEventLog.test.js.map +1 -1
- package/dist/tests/cases/integration/updateColumnDefinition.test.js +18 -14
- package/dist/tests/cases/integration/updateColumnDefinition.test.js.map +1 -1
- package/dist/tests/cases/integration/updateEntityName.test.js +66 -50
- package/dist/tests/cases/integration/updateEntityName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateEntityOrderBy.test.js +4 -4
- package/dist/tests/cases/integration/updateEntityOrderBy.test.js.map +1 -1
- package/dist/tests/cases/integration/updateEnum.test.js +16 -12
- package/dist/tests/cases/integration/updateEnum.test.js.map +1 -1
- package/dist/tests/cases/integration/updateFieldName.test.js +120 -96
- package/dist/tests/cases/integration/updateFieldName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateRelationOnDelete.test.js +14 -10
- package/dist/tests/cases/integration/updateRelationOnDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/updateRelationOrderBy.test.js +15 -11
- package/dist/tests/cases/integration/updateRelationOrderBy.test.js.map +1 -1
- package/dist/tests/cases/integration/updateView.test.js +8 -8
- package/dist/tests/cases/integration/updateView.test.js.map +1 -1
- package/dist/tests/src/tests.d.ts +7 -9
- package/dist/tests/src/tests.d.ts.map +1 -1
- package/dist/tests/src/tests.js +13 -16
- 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 +2 -3
- package/src/modifications/differs/{RemoveChangedViewDiffer.ts → RemoveViewDiffer.ts} +30 -7
- package/src/modifications/differs/index.ts +1 -2
- package/src/modifications/utils/viewDependencies.ts +3 -3
- package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +3 -3
- package/tests/cases/integration/convertOneToManyRelation.test.ts +32 -24
- package/tests/cases/integration/createAndDropIndex.test.ts +5 -5
- package/tests/cases/integration/createColumn.test.ts +5 -5
- package/tests/cases/integration/createEntity.test.ts +14 -12
- package/tests/cases/integration/createEnum.test.ts +15 -11
- package/tests/cases/integration/createManyHasMany.test.ts +13 -9
- package/tests/cases/integration/createManyHasOne.test.ts +15 -11
- package/tests/cases/integration/createOneHasMany.test.ts +14 -12
- package/tests/cases/integration/createOneHasOne.test.ts +11 -9
- package/tests/cases/integration/createRelationInverseSide.test.ts +26 -18
- package/tests/cases/integration/createView.test.ts +4 -4
- package/tests/cases/integration/disableOrphanRemoval.test.ts +18 -14
- package/tests/cases/integration/enableOrphanRemoval.test.ts +18 -14
- package/tests/cases/integration/makeColumnNotNull.test.ts +10 -6
- package/tests/cases/integration/makeRelationNotNull.test.ts +18 -14
- package/tests/cases/integration/makeRelationNullable.test.ts +30 -22
- package/tests/cases/integration/patchAclSchema.test.ts +21 -17
- package/tests/cases/integration/removeEntity.test.ts +63 -55
- package/tests/cases/integration/removeEnum.test.ts +15 -11
- package/tests/cases/integration/removeField.test.ts +86 -66
- package/tests/cases/integration/toggleEventLog.test.ts +5 -5
- package/tests/cases/integration/toggleJunctionEventLog.test.ts +5 -5
- package/tests/cases/integration/updateColumnDefinition.test.ts +22 -18
- package/tests/cases/integration/updateEntityName.test.ts +67 -51
- package/tests/cases/integration/updateEntityOrderBy.test.ts +5 -5
- package/tests/cases/integration/updateEnum.test.ts +20 -16
- package/tests/cases/integration/updateFieldName.test.ts +126 -102
- package/tests/cases/integration/updateRelationOnDelete.test.ts +18 -14
- package/tests/cases/integration/updateRelationOrderBy.test.ts +23 -19
- package/tests/cases/integration/updateView.test.ts +9 -9
- package/tests/src/tests.ts +19 -29
- package/dist/src/modifications/differs/ChangeViewNonViewDiffer.d.ts +0 -6
- package/dist/src/modifications/differs/ChangeViewNonViewDiffer.d.ts.map +0 -1
- package/dist/src/modifications/differs/ChangeViewNonViewDiffer.js +0 -19
- package/dist/src/modifications/differs/ChangeViewNonViewDiffer.js.map +0 -1
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts.map +0 -1
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +0 -33
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.js.map +0 -1
- package/src/modifications/differs/ChangeViewNonViewDiffer.ts +0 -17
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@contember/schema-migrations",
|
|
3
|
-
"version": "1.3.0
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/src/index.js",
|
|
6
6
|
"typings": "dist/src/index.d.ts",
|
|
@@ -12,15 +12,15 @@
|
|
|
12
12
|
"test": "vitest --dir ./tests/cases"
|
|
13
13
|
},
|
|
14
14
|
"dependencies": {
|
|
15
|
-
"@contember/database-migrations": "1.3.0
|
|
16
|
-
"@contember/engine-common": "1.3.0
|
|
17
|
-
"@contember/schema": "1.3.0
|
|
18
|
-
"@contember/schema-utils": "1.3.0
|
|
15
|
+
"@contember/database-migrations": "1.3.0",
|
|
16
|
+
"@contember/engine-common": "1.3.0",
|
|
17
|
+
"@contember/schema": "1.3.0",
|
|
18
|
+
"@contember/schema-utils": "1.3.0",
|
|
19
19
|
"fast-deep-equal": "^3.1.3",
|
|
20
20
|
"rfc6902": "^5.0.1"
|
|
21
21
|
},
|
|
22
22
|
"devDependencies": {
|
|
23
|
-
"@contember/schema-definition": "1.3.0
|
|
23
|
+
"@contember/schema-definition": "1.3.0"
|
|
24
24
|
},
|
|
25
25
|
"peerDependencies": {
|
|
26
26
|
"pg": "^8.9.0"
|
package/src/SchemaDiffer.ts
CHANGED
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
UpdateValidationSchemaDiffer,
|
|
36
36
|
VERSION_LATEST,
|
|
37
37
|
} from './modifications'
|
|
38
|
-
import {
|
|
38
|
+
import { RemoveChangedFieldDiffer, RemoveViewDiffer } from './modifications/differs'
|
|
39
39
|
import { CreateIndexDiffer, RemoveIndexDiffer } from './modifications/indexes'
|
|
40
40
|
import { CreateTriggerDiffer, RemoveTriggerDiffer, UpdateTriggerDiffer } from './modifications/actions'
|
|
41
41
|
import { UpdateTargetDiffer } from './modifications/actions/UpdateTargetModification'
|
|
@@ -71,8 +71,7 @@ export class SchemaDiffer {
|
|
|
71
71
|
new ConvertOneHasManyToManyHasManyRelationDiffer(),
|
|
72
72
|
new RemoveUniqueConstraintDiffer(),
|
|
73
73
|
new RemoveIndexDiffer(),
|
|
74
|
-
new
|
|
75
|
-
new RemoveChangedViewDiffer(),
|
|
74
|
+
new RemoveViewDiffer(),
|
|
76
75
|
new RemoveEntityDiffer(),
|
|
77
76
|
new RemoveFieldDiffer(),
|
|
78
77
|
new CreateEnumDiffer(),
|
|
@@ -4,26 +4,49 @@ import deepEqual from 'fast-deep-equal'
|
|
|
4
4
|
import { cascadeRemoveDependantViews } from '../utils/viewDependencies'
|
|
5
5
|
import { UpdateColumnDefinitionDiffer } from '../columns'
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
/**
|
|
8
|
+
* Remove changed or removed view.
|
|
9
|
+
*/
|
|
10
|
+
export class RemoveViewDiffer implements Differ {
|
|
8
11
|
constructor() {
|
|
9
12
|
}
|
|
10
13
|
|
|
11
14
|
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
12
|
-
const
|
|
15
|
+
const changedOrRemovedViews = Object.values(originalSchema.model.entities)
|
|
13
16
|
.filter(it => {
|
|
14
17
|
const updatedEntity = updatedSchema.model.entities[it.name]
|
|
15
|
-
|
|
16
|
-
|
|
18
|
+
|
|
19
|
+
if (!updatedEntity && !!it.view) {
|
|
20
|
+
return true // view entity removed
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
if (!updatedEntity) {
|
|
24
|
+
return false // non-view entity removed
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
if (!updatedEntity.view && !it.view) {
|
|
28
|
+
return false // none is view
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
if (!!it.view !== !!updatedEntity.view) {
|
|
32
|
+
return true // change between regular entity and view entity
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (!deepEqual(updatedEntity.view, it.view)) {
|
|
36
|
+
return true // view is different
|
|
17
37
|
}
|
|
18
|
-
|
|
38
|
+
|
|
39
|
+
return false
|
|
19
40
|
})
|
|
41
|
+
|
|
20
42
|
const columnDiffer = new UpdateColumnDefinitionDiffer()
|
|
21
43
|
const columnChanges = columnDiffer.createDiff(originalSchema, updatedSchema)
|
|
22
|
-
if (
|
|
44
|
+
if (changedOrRemovedViews.length === 0 && columnChanges.length === 0) {
|
|
23
45
|
return []
|
|
24
46
|
}
|
|
47
|
+
|
|
25
48
|
const changedColumnsEntities = Array.from(new Set(columnChanges.map(it => it.entityName)))
|
|
26
49
|
.map(it => originalSchema.model.entities[it])
|
|
27
|
-
return cascadeRemoveDependantViews(originalSchema.model, [...
|
|
50
|
+
return cascadeRemoveDependantViews(originalSchema.model, [...changedOrRemovedViews, ...changedColumnsEntities])
|
|
28
51
|
}
|
|
29
52
|
}
|
|
@@ -21,14 +21,14 @@ export const getEntityDependantViews = (model: Model.Schema): EntityDependantVie
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
export const cascadeRemoveDependantViews = (model: Model.Schema, entities: Model.Entity[]): Migration.Modification[] => {
|
|
24
|
-
const
|
|
24
|
+
const visited = new Set<string>()
|
|
25
25
|
const dependants = getEntityDependantViews(model)
|
|
26
26
|
const modifications: Migration.Modification[] = []
|
|
27
27
|
const removeCascade = (entity: Model.Entity) => {
|
|
28
|
-
if (
|
|
28
|
+
if (visited.has(entity.name)) {
|
|
29
29
|
return
|
|
30
30
|
}
|
|
31
|
-
|
|
31
|
+
visited.add(entity.name)
|
|
32
32
|
for (const dependant of dependants.get(entity.name) ?? []) {
|
|
33
33
|
removeCascade(dependant)
|
|
34
34
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { testMigrations } from '../../src/tests'
|
|
2
2
|
import { SQL } from '../../src/tags'
|
|
3
|
-
import { SchemaDefinition as def } from '@contember/schema-definition'
|
|
3
|
+
import { createSchema, SchemaDefinition as def } from '@contember/schema-definition'
|
|
4
4
|
|
|
5
5
|
namespace ConvertOHMToMHMSchemaOrig {
|
|
6
6
|
export class Article {
|
|
@@ -26,8 +26,8 @@ namespace ConvertOHMToMHMSchemaOrigUpdated {
|
|
|
26
26
|
|
|
27
27
|
|
|
28
28
|
testMigrations('convert one has many to many has many', {
|
|
29
|
-
|
|
30
|
-
|
|
29
|
+
original: createSchema(ConvertOHMToMHMSchemaOrig),
|
|
30
|
+
updated: createSchema(ConvertOHMToMHMSchemaOrigUpdated),
|
|
31
31
|
diff: [
|
|
32
32
|
{
|
|
33
33
|
modification: 'convertOneHasManyToManyHasManyRelation',
|
|
@@ -4,18 +4,22 @@ import { Model } from '@contember/schema'
|
|
|
4
4
|
import { SQL } from '../../src/tags'
|
|
5
5
|
|
|
6
6
|
testMigrations('convert one has one to many has one relation without inverse side', {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
entity
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
)
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
original: {
|
|
8
|
+
model: new SchemaBuilder()
|
|
9
|
+
.entity('Post', entity =>
|
|
10
|
+
entity.oneHasOne('image', rel => rel.target('Image')),
|
|
11
|
+
)
|
|
12
|
+
.entity('Image', e => e.column('url', c => c.type(Model.ColumnType.String)))
|
|
13
|
+
.buildSchema(),
|
|
14
|
+
},
|
|
15
|
+
updated: {
|
|
16
|
+
model: new SchemaBuilder()
|
|
17
|
+
.entity('Post', entity =>
|
|
18
|
+
entity.manyHasOne('image', rel => rel.target('Image')),
|
|
19
|
+
)
|
|
20
|
+
.entity('Image', e => e.column('url', c => c.type(Model.ColumnType.String)))
|
|
21
|
+
.buildSchema(),
|
|
22
|
+
},
|
|
19
23
|
diff: [
|
|
20
24
|
{
|
|
21
25
|
modification: 'convertOneToManyRelation',
|
|
@@ -31,18 +35,22 @@ testMigrations('convert one has one to many has one relation without inverse sid
|
|
|
31
35
|
|
|
32
36
|
|
|
33
37
|
testMigrations('convert one has one to many has one relation with inverse side', {
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
entity
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
)
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
original: {
|
|
39
|
+
model: new SchemaBuilder()
|
|
40
|
+
.entity('Post', entity =>
|
|
41
|
+
entity.oneHasOne('image', rel => rel.target('Image').inversedBy('post')),
|
|
42
|
+
)
|
|
43
|
+
.entity('Image', e => e.column('url', c => c.type(Model.ColumnType.String)))
|
|
44
|
+
.buildSchema(),
|
|
45
|
+
},
|
|
46
|
+
updated: {
|
|
47
|
+
model: new SchemaBuilder()
|
|
48
|
+
.entity('Post', entity =>
|
|
49
|
+
entity.manyHasOne('image', rel => rel.target('Image').inversedBy('posts')),
|
|
50
|
+
)
|
|
51
|
+
.entity('Image', e => e.column('url', c => c.type(Model.ColumnType.String)))
|
|
52
|
+
.buildSchema(),
|
|
53
|
+
},
|
|
46
54
|
diff: [
|
|
47
55
|
{
|
|
48
56
|
modification: 'convertOneToManyRelation',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { testMigrations } from '../../src/tests'
|
|
2
2
|
import { SQL } from '../../src/tags'
|
|
3
|
-
import { SchemaDefinition as def } from '@contember/schema-definition'
|
|
3
|
+
import { createSchema, SchemaDefinition as def } from '@contember/schema-definition'
|
|
4
4
|
|
|
5
5
|
namespace SchemaWithoutIndex {
|
|
6
6
|
export class Article {
|
|
@@ -17,8 +17,8 @@ namespace SchemaWithIndex {
|
|
|
17
17
|
|
|
18
18
|
|
|
19
19
|
testMigrations('create index', {
|
|
20
|
-
|
|
21
|
-
|
|
20
|
+
original: createSchema(SchemaWithoutIndex),
|
|
21
|
+
updated: createSchema(SchemaWithIndex),
|
|
22
22
|
diff: [
|
|
23
23
|
{
|
|
24
24
|
modification: 'createIndex',
|
|
@@ -31,8 +31,8 @@ testMigrations('create index', {
|
|
|
31
31
|
|
|
32
32
|
|
|
33
33
|
testMigrations('drop index', {
|
|
34
|
-
|
|
35
|
-
|
|
34
|
+
original: createSchema(SchemaWithIndex),
|
|
35
|
+
updated: createSchema(SchemaWithoutIndex),
|
|
36
36
|
diff: [
|
|
37
37
|
{
|
|
38
38
|
modification: 'removeIndex',
|
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import { SchemaDefinition as def } from '@contember/schema-definition'
|
|
1
|
+
import { createSchema, SchemaDefinition as def } from '@contember/schema-definition'
|
|
2
2
|
import { Model } from '@contember/schema'
|
|
3
3
|
import { SQL } from '../../src/tags'
|
|
4
4
|
import { testMigrations } from '../../src/tests'
|
|
5
5
|
|
|
6
6
|
testMigrations('create a column with default value', {
|
|
7
|
-
|
|
7
|
+
original: createSchema({
|
|
8
8
|
Author: class Author {
|
|
9
9
|
email = def.stringColumn().unique()
|
|
10
10
|
},
|
|
11
11
|
}),
|
|
12
|
-
|
|
12
|
+
updated: createSchema({
|
|
13
13
|
Author: class Author {
|
|
14
14
|
name = def.stringColumn().default('unnamed author').notNull()
|
|
15
15
|
email = def.stringColumn().unique()
|
|
@@ -37,12 +37,12 @@ ALTER TABLE "author" ALTER "name" SET NOT NULL;`,
|
|
|
37
37
|
})
|
|
38
38
|
|
|
39
39
|
testMigrations('create a column with copy value', {
|
|
40
|
-
|
|
40
|
+
original: createSchema({
|
|
41
41
|
Author: class Author {
|
|
42
42
|
email = def.stringColumn().unique()
|
|
43
43
|
},
|
|
44
44
|
}),
|
|
45
|
-
|
|
45
|
+
updated: createSchema({
|
|
46
46
|
Author: class Author {
|
|
47
47
|
name = def.stringColumn().notNull()
|
|
48
48
|
email = def.stringColumn().unique()
|
|
@@ -1,19 +1,21 @@
|
|
|
1
|
-
import { SchemaBuilder } from '@contember/schema-definition'
|
|
1
|
+
import { createSchema, SchemaBuilder } from '@contember/schema-definition'
|
|
2
2
|
import { Model } from '@contember/schema'
|
|
3
3
|
import { SQL } from '../../src/tags'
|
|
4
4
|
import { testMigrations } from '../../src/tests'
|
|
5
5
|
import { SchemaDefinition as def } from '@contember/schema-definition'
|
|
6
6
|
|
|
7
7
|
testMigrations('create a table (no relations, unique on column)', {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
e
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
original: { },
|
|
9
|
+
updated: {
|
|
10
|
+
model: new SchemaBuilder()
|
|
11
|
+
.entity('Author', e =>
|
|
12
|
+
e
|
|
13
|
+
.column('name', c => c.type(Model.ColumnType.String))
|
|
14
|
+
.column('email', c => c.type(Model.ColumnType.String).unique())
|
|
15
|
+
.column('registeredAt', c => c.type(Model.ColumnType.Date)),
|
|
16
|
+
)
|
|
17
|
+
.buildSchema(),
|
|
18
|
+
},
|
|
17
19
|
diff: [
|
|
18
20
|
{
|
|
19
21
|
modification: 'createEntity',
|
|
@@ -108,8 +110,8 @@ namespace ViewEntityUpdatedSchema {
|
|
|
108
110
|
}
|
|
109
111
|
}
|
|
110
112
|
testMigrations('create a view', {
|
|
111
|
-
|
|
112
|
-
|
|
113
|
+
original: {},
|
|
114
|
+
updated: createSchema(ViewEntityUpdatedSchema),
|
|
113
115
|
diff: [
|
|
114
116
|
{
|
|
115
117
|
modification: 'createView',
|
|
@@ -4,17 +4,21 @@ import { Model } from '@contember/schema'
|
|
|
4
4
|
import { SQL } from '../../src/tags'
|
|
5
5
|
|
|
6
6
|
testMigrations('create enum', {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
original: {
|
|
8
|
+
model: new SchemaBuilder()
|
|
9
|
+
.entity('Post', e => e.column('title', c => c.type(Model.ColumnType.String)))
|
|
10
|
+
.buildSchema(),
|
|
11
|
+
},
|
|
12
|
+
updated: {
|
|
13
|
+
model: new SchemaBuilder()
|
|
14
|
+
.entity('Post', e =>
|
|
15
|
+
e
|
|
16
|
+
.column('title', c => c.type(Model.ColumnType.String))
|
|
17
|
+
.column('status', c => c.type(Model.ColumnType.Enum, { enumName: 'postStatus' })),
|
|
18
|
+
)
|
|
19
|
+
.enum('postStatus', ['publish', 'draft'])
|
|
20
|
+
.buildSchema(),
|
|
21
|
+
},
|
|
18
22
|
diff: [
|
|
19
23
|
{
|
|
20
24
|
modification: 'createEnum',
|
|
@@ -4,15 +4,19 @@ import { Model } from '@contember/schema'
|
|
|
4
4
|
import { SQL } from '../../src/tags'
|
|
5
5
|
|
|
6
6
|
testMigrations('create many has many relation (post with categories)', {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
)
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
original: {
|
|
8
|
+
model: new SchemaBuilder()
|
|
9
|
+
.entity('Post', e => e.column('title', c => c.type(Model.ColumnType.String)))
|
|
10
|
+
.buildSchema(),
|
|
11
|
+
},
|
|
12
|
+
updated: {
|
|
13
|
+
model: new SchemaBuilder()
|
|
14
|
+
.entity('Post', e =>
|
|
15
|
+
e.column('title', c => c.type(Model.ColumnType.String)).manyHasMany('categories', r => r.target('Category')),
|
|
16
|
+
)
|
|
17
|
+
.entity('Category', e => e.column('title', c => c.type(Model.ColumnType.String)))
|
|
18
|
+
.buildSchema(),
|
|
19
|
+
},
|
|
16
20
|
diff: [
|
|
17
21
|
{
|
|
18
22
|
modification: 'createEntity',
|
|
@@ -4,17 +4,21 @@ import { SQL } from '../../src/tags'
|
|
|
4
4
|
import { testMigrations } from '../../src/tests'
|
|
5
5
|
|
|
6
6
|
testMigrations('create many has one relation (post with author)', {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
7
|
+
original: {
|
|
8
|
+
model: new SchemaBuilder()
|
|
9
|
+
.entity('Author', e => e.column('name', c => c.type(Model.ColumnType.String)))
|
|
10
|
+
.buildSchema(),
|
|
11
|
+
},
|
|
12
|
+
updated: {
|
|
13
|
+
model: new SchemaBuilder()
|
|
14
|
+
.entity('Author', e => e.column('name', c => c.type(Model.ColumnType.String)))
|
|
15
|
+
.entity('Post', e =>
|
|
16
|
+
e
|
|
17
|
+
.column('title', c => c.type(Model.ColumnType.String))
|
|
18
|
+
.manyHasOne('author', r => r.target('Author').onDelete(Model.OnDelete.cascade)),
|
|
19
|
+
)
|
|
20
|
+
.buildSchema(),
|
|
21
|
+
},
|
|
18
22
|
diff: [
|
|
19
23
|
{
|
|
20
24
|
modification: 'createEntity',
|
|
@@ -4,18 +4,20 @@ import { Model } from '@contember/schema'
|
|
|
4
4
|
import { SQL } from '../../src/tags'
|
|
5
5
|
|
|
6
6
|
testMigrations('create one has many relation (post with locales)', {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
e
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
7
|
+
original: { model: new SchemaBuilder().entity('Post', e => e).buildSchema() },
|
|
8
|
+
updated: {
|
|
9
|
+
model: new SchemaBuilder()
|
|
10
|
+
.entity('Post', e =>
|
|
11
|
+
e.oneHasMany('locales', r => r.target('PostLocale').ownerNotNull().ownedBy('post').orderBy('title')),
|
|
12
|
+
)
|
|
13
|
+
.entity('PostLocale', e =>
|
|
14
|
+
e
|
|
15
|
+
.unique(['post', 'locale'])
|
|
16
|
+
.column('title', c => c.type(Model.ColumnType.String))
|
|
17
|
+
.column('locale', c => c.type(Model.ColumnType.String)),
|
|
18
|
+
)
|
|
19
|
+
.buildSchema(),
|
|
20
|
+
},
|
|
19
21
|
diff: [
|
|
20
22
|
{
|
|
21
23
|
modification: 'createEntity',
|
|
@@ -4,15 +4,17 @@ import { Model } from '@contember/schema'
|
|
|
4
4
|
import { SQL } from '../../src/tags'
|
|
5
5
|
|
|
6
6
|
testMigrations('create one has one relation (site with settings)', {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
entity
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
7
|
+
original: {},
|
|
8
|
+
updated: {
|
|
9
|
+
model: new SchemaBuilder()
|
|
10
|
+
.entity('Site', entity =>
|
|
11
|
+
entity
|
|
12
|
+
.column('name', c => c.type(Model.ColumnType.String))
|
|
13
|
+
.oneHasOne('setting', r => r.target('SiteSetting').inversedBy('site')),
|
|
14
|
+
)
|
|
15
|
+
.entity('SiteSetting', e => e.column('url', c => c.type(Model.ColumnType.String)))
|
|
16
|
+
.buildSchema(),
|
|
17
|
+
},
|
|
16
18
|
diff: [
|
|
17
19
|
{
|
|
18
20
|
modification: 'createEntity',
|
|
@@ -4,14 +4,18 @@ import { SQL } from '../../src/tags'
|
|
|
4
4
|
import { SchemaBuilder } from '@contember/schema-definition'
|
|
5
5
|
|
|
6
6
|
testMigrations('create inverse side relation (post with locales)', {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
original: {
|
|
8
|
+
model: new SchemaBuilder()
|
|
9
|
+
.entity('Post', e => e)
|
|
10
|
+
.entity('PostLocale', e => e.manyHasOne('post', r => r.target('Post')))
|
|
11
|
+
.buildSchema(),
|
|
12
|
+
},
|
|
13
|
+
updated: {
|
|
14
|
+
model: new SchemaBuilder()
|
|
15
|
+
.entity('Post', e => e)
|
|
16
|
+
.entity('PostLocale', e => e.manyHasOne('post', r => r.target('Post').inversedBy('locales')))
|
|
17
|
+
.buildSchema(),
|
|
18
|
+
},
|
|
15
19
|
diff: [
|
|
16
20
|
{
|
|
17
21
|
modification: 'createRelationInverseSide',
|
|
@@ -28,16 +32,20 @@ testMigrations('create inverse side relation (post with locales)', {
|
|
|
28
32
|
})
|
|
29
33
|
|
|
30
34
|
testMigrations('create inverse side relation together with changing onDelete behaviour', {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
35
|
+
original: {
|
|
36
|
+
model: new SchemaBuilder()
|
|
37
|
+
.entity('Post', e => e)
|
|
38
|
+
.entity('PostLocale', e => e.manyHasOne('post', r => r.target('Post')))
|
|
39
|
+
.buildSchema(),
|
|
40
|
+
},
|
|
41
|
+
updated: {
|
|
42
|
+
model: new SchemaBuilder()
|
|
43
|
+
.entity('Post', e => e)
|
|
44
|
+
.entity('PostLocale', e =>
|
|
45
|
+
e.manyHasOne('post', r => r.target('Post').inversedBy('locales').onDelete(Model.OnDelete.cascade)),
|
|
46
|
+
)
|
|
47
|
+
.buildSchema(),
|
|
48
|
+
},
|
|
41
49
|
diff: [
|
|
42
50
|
{
|
|
43
51
|
modification: 'updateRelationOnDelete',
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { testMigrations } from '../../src/tests.js'
|
|
2
2
|
import { SQL } from '../../src/tags.js'
|
|
3
|
-
import { SchemaDefinition as def } from '@contember/schema-definition'
|
|
3
|
+
import { createSchema, SchemaDefinition as def } from '@contember/schema-definition'
|
|
4
4
|
|
|
5
5
|
namespace ViewEntityOriginalSchema {
|
|
6
6
|
|
|
@@ -24,8 +24,8 @@ namespace ViewEntityUpdatedSchema {
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
testMigrations('create view', {
|
|
27
|
-
|
|
28
|
-
|
|
27
|
+
original: createSchema(ViewEntityOriginalSchema),
|
|
28
|
+
updated: createSchema(ViewEntityUpdatedSchema),
|
|
29
29
|
diff: [
|
|
30
30
|
{
|
|
31
31
|
modification: 'createView',
|
|
@@ -118,7 +118,7 @@ namespace ViewAddRelationUpdateSchema {
|
|
|
118
118
|
|
|
119
119
|
|
|
120
120
|
testMigrations('create a relation and a view', {
|
|
121
|
-
|
|
121
|
+
original: createSchema(ViewAddRelationOriginalSchema), updated: createSchema(ViewAddRelationUpdateSchema), diff: [
|
|
122
122
|
{
|
|
123
123
|
modification: 'createRelation',
|
|
124
124
|
entityName: 'Article',
|
|
@@ -4,20 +4,24 @@ import { Model } from '@contember/schema'
|
|
|
4
4
|
import { SQL } from '../../src/tags'
|
|
5
5
|
|
|
6
6
|
testMigrations('disable orphan removal', {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
entity
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
)
|
|
19
|
-
|
|
20
|
-
|
|
7
|
+
original: {
|
|
8
|
+
model: new SchemaBuilder()
|
|
9
|
+
.entity('Post', entity =>
|
|
10
|
+
entity
|
|
11
|
+
.column('name', c => c.type(Model.ColumnType.String))
|
|
12
|
+
.oneHasOne('content', r => r.target('Content').removeOrphan()),
|
|
13
|
+
)
|
|
14
|
+
.entity('Content', e => e.column('text', c => c.type(Model.ColumnType.String)))
|
|
15
|
+
.buildSchema(),
|
|
16
|
+
},
|
|
17
|
+
updated: {
|
|
18
|
+
model: new SchemaBuilder()
|
|
19
|
+
.entity('Post', entity =>
|
|
20
|
+
entity.column('name', c => c.type(Model.ColumnType.String)).oneHasOne('content', r => r.target('Content')),
|
|
21
|
+
)
|
|
22
|
+
.entity('Content', e => e.column('text', c => c.type(Model.ColumnType.String)))
|
|
23
|
+
.buildSchema(),
|
|
24
|
+
},
|
|
21
25
|
diff: [
|
|
22
26
|
{
|
|
23
27
|
modification: 'disableOrphanRemoval',
|