@contember/schema-migrations 1.1.0-alpha.4 → 1.1.0-alpha.7
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/MigrationFilesManager.js +5 -1
- package/dist/src/MigrationFilesManager.js.map +1 -1
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +2 -0
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/index.js +5 -1
- package/dist/src/index.js.map +1 -1
- 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/acl/index.js +5 -1
- package/dist/src/modifications/acl/index.js.map +1 -1
- package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/CreateColumnModification.js +1 -0
- package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +8 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +16 -0
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnNameModification.js +62 -3
- package/dist/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
- package/dist/src/modifications/columns/index.js +5 -1
- package/dist/src/modifications/columns/index.js.map +1 -1
- package/dist/src/modifications/constraints/index.js +5 -1
- package/dist/src/modifications/constraints/index.js.map +1 -1
- package/dist/src/modifications/differs/index.js +5 -1
- package/dist/src/modifications/differs/index.js.map +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.d.ts +3 -1
- package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.js +10 -3
- package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.d.ts +3 -1
- package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.js +4 -1
- package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +7 -0
- package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -0
- package/dist/src/modifications/entities/ToggleEventLogModification.js +63 -0
- package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -0
- package/dist/src/modifications/entities/index.d.ts +1 -0
- package/dist/src/modifications/entities/index.d.ts.map +1 -1
- package/dist/src/modifications/entities/index.js +6 -1
- package/dist/src/modifications/entities/index.js.map +1 -1
- package/dist/src/modifications/enums/CreateEnumModification.d.ts +1 -1
- package/dist/src/modifications/enums/CreateEnumModification.d.ts.map +1 -1
- package/dist/src/modifications/enums/UpdateEnumModification.d.ts +1 -1
- package/dist/src/modifications/enums/UpdateEnumModification.d.ts.map +1 -1
- package/dist/src/modifications/enums/enumUtils.d.ts +1 -1
- package/dist/src/modifications/enums/enumUtils.d.ts.map +1 -1
- package/dist/src/modifications/enums/enumUtils.js.map +1 -1
- package/dist/src/modifications/enums/index.js +5 -1
- package/dist/src/modifications/enums/index.js.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +1 -0
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.js +13 -2
- package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
- package/dist/src/modifications/fields/index.js +5 -1
- package/dist/src/modifications/fields/index.js.map +1 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +2 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +3 -2
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.d.ts +5 -4
- package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.js +10 -2
- package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts +8 -0
- package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts.map +1 -0
- package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js +81 -0
- package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js.map +1 -0
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +1 -1
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/index.d.ts +1 -0
- package/dist/src/modifications/relations/index.d.ts.map +1 -1
- package/dist/src/modifications/relations/index.js +6 -1
- package/dist/src/modifications/relations/index.js.map +1 -1
- package/dist/src/modifications/relations/normalization.d.ts +8 -0
- package/dist/src/modifications/relations/normalization.d.ts.map +1 -0
- package/dist/src/modifications/relations/normalization.js +16 -0
- package/dist/src/modifications/relations/normalization.js.map +1 -0
- package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
- package/dist/src/modifications/utils/createJunctionTable.js +4 -2
- package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
- package/dist/src/modifications/utils/renameConstraintsHelper.d.ts.map +1 -1
- package/dist/src/modifications/utils/renameConstraintsHelper.js.map +1 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/src/modifications/utils/sqlUpdateUtils.d.ts +2 -0
- package/dist/src/modifications/utils/sqlUpdateUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/sqlUpdateUtils.js +9 -1
- package/dist/src/modifications/utils/sqlUpdateUtils.js.map +1 -1
- package/dist/src/modifications/validation/index.js +5 -1
- package/dist/src/modifications/validation/index.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +3 -0
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js.map +1 -1
- package/dist/tests/cases/integration/createEntity.test.js +6 -0
- package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasMany.test.js +6 -0
- package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasOne.test.js +3 -0
- package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasMany.test.js +3 -0
- package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasOne.test.js +6 -0
- package/dist/tests/cases/integration/createOneHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/createView.test.js +3 -0
- package/dist/tests/cases/integration/createView.test.js.map +1 -1
- package/dist/tests/cases/integration/toggleEventLog.test.d.ts +2 -0
- package/dist/tests/cases/integration/toggleEventLog.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/toggleEventLog.test.js +68 -0
- package/dist/tests/cases/integration/toggleEventLog.test.js.map +1 -0
- package/dist/tests/cases/integration/toggleJunctionEventLog.test.d.ts +2 -0
- package/dist/tests/cases/integration/toggleJunctionEventLog.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/toggleJunctionEventLog.test.js +75 -0
- package/dist/tests/cases/integration/toggleJunctionEventLog.test.js.map +1 -0
- package/dist/tests/cases/integration/updateFieldName.test.js +40 -0
- package/dist/tests/cases/integration/updateFieldName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateView.test.js +27 -0
- package/dist/tests/cases/integration/updateView.test.js.map +1 -1
- package/dist/tests/scripts/checkCreateConsistentMigrations.js +5 -0
- package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
- package/dist/tests/src/tests.d.ts +1 -1
- package/dist/tests/src/tests.d.ts.map +1 -1
- package/dist/tests/src/tests.js +19 -39
- package/dist/tests/src/tests.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -8
- package/src/SchemaDiffer.ts +4 -0
- package/src/modifications/ModificationHandlerFactory.ts +4 -0
- package/src/modifications/columns/CreateColumnModification.ts +1 -0
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +30 -1
- package/src/modifications/columns/UpdateColumnNameModification.ts +62 -3
- package/src/modifications/entities/CreateEntityModification.ts +14 -4
- package/src/modifications/entities/CreateViewModification.ts +7 -2
- package/src/modifications/entities/ToggleEventLogModification.ts +83 -0
- package/src/modifications/entities/index.ts +1 -0
- package/src/modifications/enums/CreateEnumModification.ts +1 -1
- package/src/modifications/enums/UpdateEnumModification.ts +1 -1
- package/src/modifications/enums/enumUtils.ts +1 -1
- package/src/modifications/fields/UpdateFieldNameModification.ts +26 -4
- package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +4 -3
- package/src/modifications/relations/CreateRelationModification.ts +17 -5
- package/src/modifications/relations/ToggleManyHasManyEventLogModification.ts +102 -0
- package/src/modifications/relations/UpdateRelationOrderByModification.ts +1 -1
- package/src/modifications/relations/index.ts +1 -0
- package/src/modifications/relations/normalization.ts +21 -0
- package/src/modifications/utils/createJunctionTable.ts +4 -2
- package/src/modifications/utils/renameConstraintsHelper.ts +2 -2
- package/src/modifications/utils/schemaUpdateUtils.ts +2 -2
- package/src/modifications/utils/sqlUpdateUtils.ts +8 -0
- package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +3 -0
- package/tests/cases/integration/createEntity.test.ts +6 -0
- package/tests/cases/integration/createManyHasMany.test.ts +6 -0
- package/tests/cases/integration/createManyHasOne.test.ts +3 -0
- package/tests/cases/integration/createOneHasMany.test.ts +3 -0
- package/tests/cases/integration/createOneHasOne.test.ts +6 -0
- package/tests/cases/integration/createView.test.ts +3 -0
- package/tests/cases/integration/toggleEventLog.test.ts +54 -0
- package/tests/cases/integration/toggleJunctionEventLog.test.ts +63 -0
- package/tests/cases/integration/updateFieldName.test.ts +47 -0
- package/tests/cases/integration/updateView.test.ts +27 -0
- package/tests/scripts/checkCreateConsistentMigrations.ts +6 -1
- package/tests/src/tests.ts +18 -19
- package/tests/tsconfig.json +3 -0
|
@@ -13,6 +13,10 @@ export const createEventTrigger = (builder: MigrationBuilder, systemSchema: stri
|
|
|
13
13
|
})
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
+
export const dropEventTrigger = (builder: MigrationBuilder, tableName: Name) => {
|
|
17
|
+
builder.dropTrigger(tableName, 'log_event')
|
|
18
|
+
}
|
|
19
|
+
|
|
16
20
|
export const createEventTrxTrigger = (builder: MigrationBuilder, systemSchema: string, tableName: Name) => {
|
|
17
21
|
builder.createTrigger(tableName, 'log_event_trx', {
|
|
18
22
|
when: 'AFTER',
|
|
@@ -27,3 +31,7 @@ export const createEventTrxTrigger = (builder: MigrationBuilder, systemSchema: s
|
|
|
27
31
|
},
|
|
28
32
|
})
|
|
29
33
|
}
|
|
34
|
+
|
|
35
|
+
export const dropEventTrxTrigger = (builder: MigrationBuilder, tableName: Name) => {
|
|
36
|
+
builder.dropTrigger(tableName, 'log_event_trx')
|
|
37
|
+
}
|
|
@@ -32,6 +32,9 @@ testMigrations('create a table (no relations, unique on column)', {
|
|
|
32
32
|
primaryColumn: 'id',
|
|
33
33
|
tableName: 'author',
|
|
34
34
|
unique: {},
|
|
35
|
+
eventLog: {
|
|
36
|
+
enabled: true,
|
|
37
|
+
},
|
|
35
38
|
},
|
|
36
39
|
},
|
|
37
40
|
{
|
|
@@ -135,6 +138,9 @@ testMigrations('create a view', {
|
|
|
135
138
|
tableName: 'author',
|
|
136
139
|
unique: {},
|
|
137
140
|
view: { sql: "SELECT null as id, 'John' AS name" },
|
|
141
|
+
eventLog: {
|
|
142
|
+
enabled: true,
|
|
143
|
+
},
|
|
138
144
|
},
|
|
139
145
|
},
|
|
140
146
|
],
|
|
@@ -31,6 +31,9 @@ testMigrations('create many has many relation (post with categories)', {
|
|
|
31
31
|
primaryColumn: 'id',
|
|
32
32
|
tableName: 'category',
|
|
33
33
|
unique: {},
|
|
34
|
+
eventLog: {
|
|
35
|
+
enabled: true,
|
|
36
|
+
},
|
|
34
37
|
},
|
|
35
38
|
},
|
|
36
39
|
{
|
|
@@ -61,6 +64,9 @@ testMigrations('create many has many relation (post with categories)', {
|
|
|
61
64
|
columnName: 'category_id',
|
|
62
65
|
onDelete: Model.OnDelete.cascade,
|
|
63
66
|
},
|
|
67
|
+
eventLog: {
|
|
68
|
+
enabled: true,
|
|
69
|
+
},
|
|
64
70
|
},
|
|
65
71
|
},
|
|
66
72
|
},
|
|
@@ -31,6 +31,9 @@ testMigrations('create one has one relation (site with settings)', {
|
|
|
31
31
|
primaryColumn: 'id',
|
|
32
32
|
tableName: 'site',
|
|
33
33
|
unique: {},
|
|
34
|
+
eventLog: {
|
|
35
|
+
enabled: true,
|
|
36
|
+
},
|
|
34
37
|
},
|
|
35
38
|
},
|
|
36
39
|
{
|
|
@@ -50,6 +53,9 @@ testMigrations('create one has one relation (site with settings)', {
|
|
|
50
53
|
primaryColumn: 'id',
|
|
51
54
|
tableName: 'site_setting',
|
|
52
55
|
unique: {},
|
|
56
|
+
eventLog: {
|
|
57
|
+
enabled: true,
|
|
58
|
+
},
|
|
53
59
|
},
|
|
54
60
|
},
|
|
55
61
|
{
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { SchemaDefinition as def } from '@contember/schema-definition'
|
|
2
|
+
import { testMigrations } from '../../src/tests'
|
|
3
|
+
import { SQL } from '../../src/tags'
|
|
4
|
+
|
|
5
|
+
namespace EventLogNoConfig {
|
|
6
|
+
export class Author {
|
|
7
|
+
name = def.stringColumn()
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
namespace EventLogDisabled {
|
|
12
|
+
@def.DisableEventLog()
|
|
13
|
+
export class Author {
|
|
14
|
+
name = def.stringColumn()
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
testMigrations('event log - disable', {
|
|
20
|
+
originalSchema: def.createModel(EventLogNoConfig),
|
|
21
|
+
updatedSchema: def.createModel(EventLogDisabled),
|
|
22
|
+
diff: [
|
|
23
|
+
{
|
|
24
|
+
modification: 'toggleEventLog',
|
|
25
|
+
entityName: 'Author',
|
|
26
|
+
enabled: false,
|
|
27
|
+
},
|
|
28
|
+
],
|
|
29
|
+
sql: SQL `DROP TRIGGER "log_event" ON "author";
|
|
30
|
+
DROP TRIGGER "log_event_trx" ON "author";`,
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
testMigrations('event log - enable', {
|
|
34
|
+
originalSchema: def.createModel(EventLogDisabled),
|
|
35
|
+
updatedSchema: def.createModel(EventLogNoConfig),
|
|
36
|
+
diff: [
|
|
37
|
+
{
|
|
38
|
+
modification: 'toggleEventLog',
|
|
39
|
+
entityName: 'Author',
|
|
40
|
+
enabled: true,
|
|
41
|
+
},
|
|
42
|
+
],
|
|
43
|
+
sql: SQL`CREATE TRIGGER "log_event"
|
|
44
|
+
AFTER INSERT OR UPDATE OR DELETE
|
|
45
|
+
ON "author"
|
|
46
|
+
FOR EACH ROW
|
|
47
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$id$pga$);
|
|
48
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
49
|
+
AFTER INSERT OR UPDATE OR DELETE
|
|
50
|
+
ON "author"
|
|
51
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
52
|
+
FOR EACH ROW
|
|
53
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();`,
|
|
54
|
+
})
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { SchemaDefinition as def } from '@contember/schema-definition'
|
|
2
|
+
import { testMigrations } from '../../src/tests'
|
|
3
|
+
import { SQL } from '../../src/tags'
|
|
4
|
+
|
|
5
|
+
namespace EventLogNoConfig {
|
|
6
|
+
export class Author {
|
|
7
|
+
name = def.stringColumn()
|
|
8
|
+
tags = def.manyHasMany(Tag)
|
|
9
|
+
}
|
|
10
|
+
export class Tag {
|
|
11
|
+
name = def.stringColumn()
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
namespace EventLogDisabled {
|
|
16
|
+
export class Author {
|
|
17
|
+
name = def.stringColumn()
|
|
18
|
+
tags = def.manyHasMany(Tag).joiningTable({ eventLog: { enabled: false } })
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export class Tag {
|
|
22
|
+
name = def.stringColumn()
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
testMigrations('event log junction - disable', {
|
|
27
|
+
originalSchema: def.createModel(EventLogNoConfig),
|
|
28
|
+
updatedSchema: def.createModel(EventLogDisabled),
|
|
29
|
+
diff: [
|
|
30
|
+
{
|
|
31
|
+
modification: 'toggleJunctionEventLog',
|
|
32
|
+
entityName: 'Author',
|
|
33
|
+
fieldName: 'tags',
|
|
34
|
+
enabled: false,
|
|
35
|
+
},
|
|
36
|
+
],
|
|
37
|
+
sql: SQL `DROP TRIGGER "log_event" ON "author_tags";
|
|
38
|
+
DROP TRIGGER "log_event_trx" ON "author_tags";`,
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
testMigrations('event log junction - enable', {
|
|
42
|
+
originalSchema: def.createModel(EventLogDisabled),
|
|
43
|
+
updatedSchema: def.createModel(EventLogNoConfig),
|
|
44
|
+
diff: [
|
|
45
|
+
{
|
|
46
|
+
modification: 'toggleJunctionEventLog',
|
|
47
|
+
entityName: 'Author',
|
|
48
|
+
fieldName: 'tags',
|
|
49
|
+
enabled: true,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
sql: SQL`CREATE TRIGGER "log_event"
|
|
53
|
+
AFTER INSERT OR UPDATE OR DELETE
|
|
54
|
+
ON "author_tags"
|
|
55
|
+
FOR EACH ROW
|
|
56
|
+
EXECUTE PROCEDURE "system"."trigger_event"($pga$author_id$pga$, $pga$tag_id$pga$);
|
|
57
|
+
CREATE CONSTRAINT TRIGGER "log_event_trx"
|
|
58
|
+
AFTER INSERT OR UPDATE OR DELETE
|
|
59
|
+
ON "author_tags"
|
|
60
|
+
DEFERRABLE INITIALLY DEFERRED
|
|
61
|
+
FOR EACH ROW
|
|
62
|
+
EXECUTE PROCEDURE "system"."trigger_event_commit"();`,
|
|
63
|
+
})
|
|
@@ -22,6 +22,27 @@ testMigrations('rename a field', {
|
|
|
22
22
|
noDiff: true,
|
|
23
23
|
})
|
|
24
24
|
|
|
25
|
+
testMigrations('rename a field with column', {
|
|
26
|
+
originalSchema: new SchemaBuilder()
|
|
27
|
+
.entity('Author', e => e.column('firstName', c => c.type(Model.ColumnType.String)))
|
|
28
|
+
.buildSchema(),
|
|
29
|
+
updatedSchema: new SchemaBuilder()
|
|
30
|
+
.entity('Author', e => e.column('name', c => c.type(Model.ColumnType.String)))
|
|
31
|
+
.buildSchema(),
|
|
32
|
+
diff: [
|
|
33
|
+
{
|
|
34
|
+
modification: 'updateFieldName',
|
|
35
|
+
entityName: 'Author',
|
|
36
|
+
fieldName: 'firstName',
|
|
37
|
+
newFieldName: 'name',
|
|
38
|
+
columnName: 'name',
|
|
39
|
+
},
|
|
40
|
+
],
|
|
41
|
+
sql: SQL`ALTER TABLE "author" RENAME "first_name" TO "name";`,
|
|
42
|
+
noDiff: true,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
|
|
25
46
|
testMigrations('rename a field with a constraint', {
|
|
26
47
|
originalSchema: new SchemaBuilder()
|
|
27
48
|
.entity('Author', e => e.column('slug', c => c.type(Model.ColumnType.String).unique()))
|
|
@@ -65,6 +86,32 @@ testMigrations('rename a relation', {
|
|
|
65
86
|
noDiff: true,
|
|
66
87
|
})
|
|
67
88
|
|
|
89
|
+
|
|
90
|
+
testMigrations('rename a relation with joining column', {
|
|
91
|
+
originalSchema: new SchemaBuilder()
|
|
92
|
+
.entity('Post', e => e.column('title').manyHasOne('user', r => r.target('Author').inversedBy('posts')))
|
|
93
|
+
.entity('Author', e => e.column('name'))
|
|
94
|
+
.buildSchema(),
|
|
95
|
+
updatedSchema: new SchemaBuilder()
|
|
96
|
+
.entity('Post', e =>
|
|
97
|
+
e.column('title').manyHasOne('author', r => r.target('Author').inversedBy('posts')),
|
|
98
|
+
)
|
|
99
|
+
.entity('Author', e => e.column('name'))
|
|
100
|
+
.buildSchema(),
|
|
101
|
+
diff: [
|
|
102
|
+
{
|
|
103
|
+
modification: 'updateFieldName',
|
|
104
|
+
entityName: 'Post',
|
|
105
|
+
fieldName: 'user',
|
|
106
|
+
newFieldName: 'author',
|
|
107
|
+
columnName: 'author_id',
|
|
108
|
+
},
|
|
109
|
+
],
|
|
110
|
+
sql: SQL`ALTER TABLE "post" RENAME "user_id" TO "author_id";`,
|
|
111
|
+
noDiff: true,
|
|
112
|
+
})
|
|
113
|
+
|
|
114
|
+
|
|
68
115
|
testMigrations('rename relation with acl', {
|
|
69
116
|
originalSchema: new SchemaBuilder()
|
|
70
117
|
.entity('Post', e => e.column('title').manyHasOne('user', r => r.target('Author').inversedBy('posts')))
|
|
@@ -80,6 +80,9 @@ testMigrations('update a view 1', {
|
|
|
80
80
|
view: {
|
|
81
81
|
sql: "SELECT null as id, 'Jack' AS name",
|
|
82
82
|
},
|
|
83
|
+
eventLog: {
|
|
84
|
+
enabled: true,
|
|
85
|
+
},
|
|
83
86
|
},
|
|
84
87
|
},
|
|
85
88
|
{
|
|
@@ -112,6 +115,9 @@ testMigrations('update a view 1', {
|
|
|
112
115
|
'Author',
|
|
113
116
|
],
|
|
114
117
|
},
|
|
118
|
+
eventLog: {
|
|
119
|
+
enabled: true,
|
|
120
|
+
},
|
|
115
121
|
},
|
|
116
122
|
},
|
|
117
123
|
{
|
|
@@ -144,6 +150,9 @@ testMigrations('update a view 1', {
|
|
|
144
150
|
'Author2',
|
|
145
151
|
],
|
|
146
152
|
},
|
|
153
|
+
eventLog: {
|
|
154
|
+
enabled: true,
|
|
155
|
+
},
|
|
147
156
|
},
|
|
148
157
|
},
|
|
149
158
|
],
|
|
@@ -215,6 +224,9 @@ testMigrations('update a view 2', {
|
|
|
215
224
|
'Author',
|
|
216
225
|
],
|
|
217
226
|
},
|
|
227
|
+
eventLog: {
|
|
228
|
+
enabled: true,
|
|
229
|
+
},
|
|
218
230
|
},
|
|
219
231
|
},
|
|
220
232
|
{
|
|
@@ -247,6 +259,9 @@ testMigrations('update a view 2', {
|
|
|
247
259
|
'Author2',
|
|
248
260
|
],
|
|
249
261
|
},
|
|
262
|
+
eventLog: {
|
|
263
|
+
enabled: true,
|
|
264
|
+
},
|
|
250
265
|
},
|
|
251
266
|
},
|
|
252
267
|
],
|
|
@@ -313,6 +328,9 @@ testMigrations('update a view 3', {
|
|
|
313
328
|
'Author2',
|
|
314
329
|
],
|
|
315
330
|
},
|
|
331
|
+
eventLog: {
|
|
332
|
+
enabled: true,
|
|
333
|
+
},
|
|
316
334
|
},
|
|
317
335
|
},
|
|
318
336
|
],
|
|
@@ -381,6 +399,9 @@ testMigrations('update a view 4', {
|
|
|
381
399
|
view: {
|
|
382
400
|
sql: "SELECT null as id, 'Jack' AS name",
|
|
383
401
|
},
|
|
402
|
+
eventLog: {
|
|
403
|
+
enabled: true,
|
|
404
|
+
},
|
|
384
405
|
},
|
|
385
406
|
},
|
|
386
407
|
{
|
|
@@ -413,6 +434,9 @@ testMigrations('update a view 4', {
|
|
|
413
434
|
'Author',
|
|
414
435
|
],
|
|
415
436
|
},
|
|
437
|
+
eventLog: {
|
|
438
|
+
enabled: true,
|
|
439
|
+
},
|
|
416
440
|
},
|
|
417
441
|
},
|
|
418
442
|
{
|
|
@@ -445,6 +469,9 @@ testMigrations('update a view 4', {
|
|
|
445
469
|
'Author2',
|
|
446
470
|
],
|
|
447
471
|
},
|
|
472
|
+
eventLog: {
|
|
473
|
+
enabled: true,
|
|
474
|
+
},
|
|
448
475
|
},
|
|
449
476
|
},
|
|
450
477
|
],
|
|
@@ -6,8 +6,10 @@ import {
|
|
|
6
6
|
SchemaDiffer,
|
|
7
7
|
SchemaMigrator,
|
|
8
8
|
} from '../../src'
|
|
9
|
-
import { emptySchema } from '@contember/schema-utils'
|
|
9
|
+
import { emptySchema, schemaType } from '@contember/schema-utils'
|
|
10
10
|
;(async () => {
|
|
11
|
+
// eslint-disable-next-line no-console
|
|
12
|
+
console.log(relative(process.cwd(), process.argv[2]))
|
|
11
13
|
const migrationsResolver = new MigrationsResolver(new MigrationFilesManager(relative(process.cwd(), process.argv[2])))
|
|
12
14
|
const modificationHandlerFactory = new ModificationHandlerFactory(ModificationHandlerFactory.defaultFactoryMap)
|
|
13
15
|
const differ = new SchemaDiffer(new SchemaMigrator(modificationHandlerFactory))
|
|
@@ -15,10 +17,13 @@ import { emptySchema } from '@contember/schema-utils'
|
|
|
15
17
|
let schema = emptySchema
|
|
16
18
|
for (const migration of await migrationsResolver.getMigrations()) {
|
|
17
19
|
const nextSchema = migrator.applyModifications(schema, migration.modifications, migration.formatVersion)
|
|
20
|
+
schemaType(nextSchema)
|
|
18
21
|
differ.diffSchemas(schema, nextSchema)
|
|
19
22
|
|
|
20
23
|
schema = nextSchema
|
|
21
24
|
}
|
|
25
|
+
// eslint-disable-next-line no-console
|
|
26
|
+
console.log('OK')
|
|
22
27
|
})().catch(e => {
|
|
23
28
|
// eslint-disable-next-line no-console
|
|
24
29
|
console.error(e)
|
package/tests/src/tests.ts
CHANGED
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import { Migration, ModificationHandlerFactory, SchemaDiffer, SchemaMigrator, VERSION_LATEST } from '../../src'
|
|
2
2
|
import { Acl, Model } from '@contember/schema'
|
|
3
3
|
import { createMigrationBuilder } from '@contember/database-migrations'
|
|
4
|
-
import
|
|
5
|
-
import { suite } from 'uvu'
|
|
4
|
+
import { assert, describe, it } from 'vitest'
|
|
6
5
|
|
|
7
6
|
const modificationFactory = new ModificationHandlerFactory(ModificationHandlerFactory.defaultFactoryMap)
|
|
8
7
|
const schemaMigrator = new SchemaMigrator(modificationFactory)
|
|
@@ -32,13 +31,13 @@ export function testDiffSchemas(
|
|
|
32
31
|
{ model: updatedModel, acl: updatedAcl, validation: {} },
|
|
33
32
|
false,
|
|
34
33
|
)
|
|
35
|
-
assert.
|
|
34
|
+
assert.deepStrictEqual(actualDiff, expectedDiff)
|
|
36
35
|
const schema = schemaMigrator.applyModifications(
|
|
37
36
|
{ model: originalModel, acl: originalAcl, validation: {} },
|
|
38
37
|
actualDiff,
|
|
39
38
|
VERSION_LATEST,
|
|
40
39
|
)
|
|
41
|
-
assert.
|
|
40
|
+
assert.deepStrictEqual(schema, {
|
|
42
41
|
model: updatedModel,
|
|
43
42
|
acl: updatedAcl,
|
|
44
43
|
validation: {},
|
|
@@ -58,7 +57,7 @@ export function testApplyDiff(
|
|
|
58
57
|
VERSION_LATEST,
|
|
59
58
|
)
|
|
60
59
|
|
|
61
|
-
assert.
|
|
60
|
+
assert.deepStrictEqual(actualSchema, {
|
|
62
61
|
model: expectedModel,
|
|
63
62
|
acl: expectedAcl,
|
|
64
63
|
validation: {},
|
|
@@ -77,19 +76,19 @@ export function testGenerateSql(originalSchema: Model.Schema, diff: Migration.Mo
|
|
|
77
76
|
assert.equal(actual, expectedSql)
|
|
78
77
|
}
|
|
79
78
|
|
|
80
|
-
export function testMigrations(title: string,
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
79
|
+
export function testMigrations(title: string, { originalSchema, updatedSchema, diff, noDiff, originalAcl, updatedAcl, sql }: TestContext) {
|
|
80
|
+
describe(title, () => {
|
|
81
|
+
it('diff schemas', () => {
|
|
82
|
+
if (noDiff) {
|
|
83
|
+
return
|
|
84
|
+
}
|
|
85
|
+
testDiffSchemas(originalSchema, updatedSchema, diff, originalAcl, updatedAcl)
|
|
86
|
+
})
|
|
87
|
+
it('apply diff', () => {
|
|
88
|
+
testApplyDiff(originalSchema, diff, updatedSchema, originalAcl, updatedAcl)
|
|
89
|
+
})
|
|
90
|
+
it('generate sql', () => {
|
|
91
|
+
testGenerateSql(originalSchema, diff, sql)
|
|
92
|
+
})
|
|
87
93
|
})
|
|
88
|
-
migrationsSuite('apply diff', ({ originalSchema, diff, updatedSchema }) => {
|
|
89
|
-
testApplyDiff(originalSchema, diff, updatedSchema, ctx.originalAcl, ctx.updatedAcl)
|
|
90
|
-
})
|
|
91
|
-
migrationsSuite('generate sql', ({ originalSchema, diff, sql }) => {
|
|
92
|
-
testGenerateSql(originalSchema, diff, sql)
|
|
93
|
-
})
|
|
94
|
-
migrationsSuite.run()
|
|
95
94
|
}
|