@contember/schema-migrations 1.2.1 → 1.3.0-alpha.13
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/MigrationCreator.js +2 -2
- package/dist/src/MigrationCreator.js.map +1 -1
- package/dist/src/MigrationDescriber.d.ts +4 -4
- package/dist/src/MigrationDescriber.d.ts.map +1 -1
- package/dist/src/MigrationDescriber.js +8 -7
- package/dist/src/MigrationDescriber.js.map +1 -1
- package/dist/src/MigrationFilesManager.js +2 -2
- package/dist/src/MigrationFilesManager.js.map +1 -1
- package/dist/src/MigrationsResolver.js +3 -3
- package/dist/src/MigrationsResolver.js.map +1 -1
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +21 -2
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/SchemaMigrator.d.ts +1 -2
- package/dist/src/SchemaMigrator.d.ts.map +1 -1
- package/dist/src/SchemaMigrator.js +0 -1
- package/dist/src/SchemaMigrator.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/modifications/ModificationHandler.d.ts +9 -5
- 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 +14 -0
- package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
- package/dist/src/modifications/ModificationVersions.d.ts +4 -2
- package/dist/src/modifications/ModificationVersions.d.ts.map +1 -1
- package/dist/src/modifications/ModificationVersions.js +5 -3
- package/dist/src/modifications/ModificationVersions.js.map +1 -1
- package/dist/src/modifications/actions/CreateTargetModification.d.ts +21 -0
- package/dist/src/modifications/actions/CreateTargetModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/CreateTargetModification.js +40 -0
- package/dist/src/modifications/actions/CreateTargetModification.js.map +1 -0
- package/dist/src/modifications/actions/CreateTriggerModification.d.ts +21 -0
- package/dist/src/modifications/actions/CreateTriggerModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/CreateTriggerModification.js +40 -0
- package/dist/src/modifications/actions/CreateTriggerModification.js.map +1 -0
- package/dist/src/modifications/actions/RemoveTargetModification.d.ts +21 -0
- package/dist/src/modifications/actions/RemoveTargetModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/RemoveTargetModification.js +40 -0
- package/dist/src/modifications/actions/RemoveTargetModification.js.map +1 -0
- package/dist/src/modifications/actions/RemoveTriggerModification.d.ts +21 -0
- package/dist/src/modifications/actions/RemoveTriggerModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/RemoveTriggerModification.js +40 -0
- package/dist/src/modifications/actions/RemoveTriggerModification.js.map +1 -0
- package/dist/src/modifications/actions/UpdateTargetModification.d.ts +22 -0
- package/dist/src/modifications/actions/UpdateTargetModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/UpdateTargetModification.js +46 -0
- package/dist/src/modifications/actions/UpdateTargetModification.js.map +1 -0
- package/dist/src/modifications/actions/UpdateTriggerModification.d.ts +21 -0
- package/dist/src/modifications/actions/UpdateTriggerModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/UpdateTriggerModification.js +46 -0
- package/dist/src/modifications/actions/UpdateTriggerModification.js.map +1 -0
- package/dist/src/modifications/actions/index.d.ts +4 -0
- package/dist/src/modifications/actions/index.d.ts.map +1 -0
- package/dist/src/modifications/actions/index.js +20 -0
- package/dist/src/modifications/actions/index.js.map +1 -0
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +3 -3
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +3 -3
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +20 -32
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +11 -5
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +37 -9
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
- package/dist/src/modifications/constraints/utils.d.ts +7 -0
- package/dist/src/modifications/constraints/utils.d.ts.map +1 -0
- package/dist/src/modifications/constraints/utils.js +33 -0
- package/dist/src/modifications/constraints/utils.js.map +1 -0
- package/dist/src/modifications/entities/CreateEntityModification.d.ts +4 -4
- package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.js +18 -14
- package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.d.ts +2 -2
- package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.js +14 -10
- package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts +3 -4
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.js +3 -2
- package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +2 -2
- package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/ToggleEventLogModification.js +3 -3
- package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +4 -5
- package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityNameModification.js +3 -19
- package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityOrderByModification.d.ts +23 -0
- package/dist/src/modifications/entities/UpdateEntityOrderByModification.d.ts.map +1 -0
- package/dist/src/modifications/entities/UpdateEntityOrderByModification.js +63 -0
- package/dist/src/modifications/entities/UpdateEntityOrderByModification.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 +1 -0
- package/dist/src/modifications/entities/index.js.map +1 -1
- package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +4 -5
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.js +18 -27
- package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
- package/dist/src/modifications/indexes/CreateIndexModification.d.ts +5 -5
- package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -1
- package/dist/src/modifications/indexes/CreateIndexModification.js +24 -35
- package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -1
- package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +12 -6
- package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -1
- package/dist/src/modifications/indexes/RemoveIndexModification.js +36 -10
- package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
- package/dist/src/modifications/indexes/utils.d.ts +7 -0
- package/dist/src/modifications/indexes/utils.d.ts.map +1 -0
- package/dist/src/modifications/indexes/utils.js +33 -0
- package/dist/src/modifications/indexes/utils.js.map +1 -0
- 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 +10 -10
- 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 +14 -12
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.d.ts +3 -4
- package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.js +14 -26
- package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +3 -4
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +4 -5
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +2 -2
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +20 -1
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
- package/dist/src/modifications/relations/helpers.d.ts +13 -0
- package/dist/src/modifications/relations/helpers.d.ts.map +1 -0
- package/dist/src/modifications/relations/helpers.js +29 -0
- package/dist/src/modifications/relations/helpers.js.map +1 -0
- package/dist/src/modifications/upgrade/RemoveIndexNamesModification.d.ts +19 -0
- package/dist/src/modifications/upgrade/RemoveIndexNamesModification.d.ts.map +1 -0
- package/dist/src/modifications/upgrade/RemoveIndexNamesModification.js +40 -0
- package/dist/src/modifications/upgrade/RemoveIndexNamesModification.js.map +1 -0
- package/dist/src/modifications/utils/createJunctionTable.d.ts +2 -3
- package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
- package/dist/src/modifications/utils/createJunctionTable.js +4 -6
- package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +2 -4
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.js +5 -20
- package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/src/modifications/utils/stringArrayEquals.d.ts +2 -0
- package/dist/src/modifications/utils/stringArrayEquals.d.ts.map +1 -0
- package/dist/src/modifications/utils/stringArrayEquals.js +9 -0
- package/dist/src/modifications/utils/stringArrayEquals.js.map +1 -0
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/utils/PartialEntity.d.ts +5 -3
- package/dist/src/utils/PartialEntity.d.ts.map +1 -1
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +1 -1
- package/dist/tests/cases/integration/convertOneToManyRelation.test.js +5 -5
- 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/createEntity.test.js +6 -9
- package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasMany.test.js +3 -3
- package/dist/tests/cases/integration/createManyHasOne.test.js +4 -4
- package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasMany.test.js +6 -9
- package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasOne.test.js +6 -6
- package/dist/tests/cases/integration/createRelationInverseSide.test.js +1 -1
- package/dist/tests/cases/integration/createRelationInverseSide.test.js.map +1 -1
- package/dist/tests/cases/integration/createView.test.js +6 -6
- package/dist/tests/cases/integration/removeField.test.js +6 -6
- package/dist/tests/cases/integration/removeField.test.js.map +1 -1
- package/dist/tests/cases/integration/updateColumnDefinition.test.js +4 -4
- package/dist/tests/cases/integration/updateEntityName.test.js +6 -5
- package/dist/tests/cases/integration/updateEntityName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateEntityOrderBy.test.d.ts +2 -0
- package/dist/tests/cases/integration/updateEntityOrderBy.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/updateEntityOrderBy.test.js +57 -0
- package/dist/tests/cases/integration/updateEntityOrderBy.test.js.map +1 -0
- package/dist/tests/cases/integration/updateFieldName.test.js +8 -7
- package/dist/tests/cases/integration/updateFieldName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateRelationOnDelete.test.js +2 -1
- package/dist/tests/cases/integration/updateRelationOnDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/updateView.test.js +18 -18
- package/dist/tests/scripts/checkCreateConsistentMigrations.js +1 -1
- 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 +12 -8
- package/dist/tests/src/tests.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -7
- package/src/MigrationCreator.ts +1 -1
- package/src/MigrationDescriber.ts +11 -9
- package/src/MigrationFilesManager.ts +1 -1
- package/src/MigrationsResolver.ts +1 -1
- package/src/SchemaDiffer.ts +23 -12
- package/src/SchemaMigrator.ts +1 -3
- package/src/index.ts +1 -1
- package/src/modifications/ModificationHandler.ts +10 -5
- package/src/modifications/ModificationHandlerFactory.ts +24 -11
- package/src/modifications/ModificationVersions.ts +4 -2
- package/src/modifications/actions/CreateTargetModification.ts +46 -0
- package/src/modifications/actions/CreateTriggerModification.ts +46 -0
- package/src/modifications/actions/RemoveTargetModification.ts +46 -0
- package/src/modifications/actions/RemoveTriggerModification.ts +46 -0
- package/src/modifications/actions/UpdateTargetModification.ts +51 -0
- package/src/modifications/actions/UpdateTriggerModification.ts +49 -0
- package/src/modifications/actions/index.ts +3 -0
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +1 -2
- package/src/modifications/constraints/CreateUniqueConstraintModification.ts +31 -40
- package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +60 -15
- package/src/modifications/constraints/utils.ts +36 -0
- package/src/modifications/entities/CreateEntityModification.ts +9 -8
- package/src/modifications/entities/CreateViewModification.ts +4 -3
- package/src/modifications/entities/RemoveEntityModification.ts +5 -5
- package/src/modifications/entities/ToggleEventLogModification.ts +4 -3
- package/src/modifications/entities/UpdateEntityNameModification.ts +10 -25
- package/src/modifications/entities/UpdateEntityOrderByModification.ts +68 -0
- package/src/modifications/entities/index.ts +1 -0
- package/src/modifications/fields/RemoveFieldModification.ts +1 -1
- package/src/modifications/fields/UpdateFieldNameModification.ts +33 -39
- package/src/modifications/indexes/CreateIndexModification.ts +35 -41
- package/src/modifications/indexes/RemoveIndexModification.ts +57 -17
- package/src/modifications/indexes/utils.ts +30 -0
- package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +7 -19
- package/src/modifications/relations/ConvertOneToManyRelationModification.ts +21 -22
- package/src/modifications/relations/CreateRelationModification.ts +21 -49
- package/src/modifications/relations/ToggleJunctionEventLogModification.ts +4 -5
- package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +30 -3
- package/src/modifications/relations/helpers.ts +39 -0
- package/src/modifications/upgrade/RemoveIndexNamesModification.ts +46 -0
- package/src/modifications/utils/createJunctionTable.ts +8 -8
- package/src/modifications/utils/schemaUpdateUtils.ts +5 -17
- package/src/modifications/utils/stringArrayEquals.ts +4 -0
- package/src/tsconfig.json +4 -12
- package/src/utils/PartialEntity.ts +7 -1
- package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +1 -1
- package/tests/cases/integration/convertOneToManyRelation.test.ts +5 -5
- package/tests/cases/integration/createAndDropIndex.test.ts +4 -4
- package/tests/cases/integration/createEntity.test.ts +6 -9
- package/tests/cases/integration/createManyHasMany.test.ts +3 -3
- package/tests/cases/integration/createManyHasOne.test.ts +4 -4
- package/tests/cases/integration/createOneHasMany.test.ts +6 -9
- package/tests/cases/integration/createOneHasOne.test.ts +6 -6
- package/tests/cases/integration/createRelationInverseSide.test.ts +1 -1
- package/tests/cases/integration/createView.test.ts +6 -6
- package/tests/cases/integration/removeField.test.ts +6 -6
- package/tests/cases/integration/updateColumnDefinition.test.ts +4 -4
- package/tests/cases/integration/updateEntityName.test.ts +7 -5
- package/tests/cases/integration/updateEntityOrderBy.test.ts +43 -0
- package/tests/cases/integration/updateFieldName.test.ts +9 -7
- package/tests/cases/integration/updateRelationOnDelete.test.ts +2 -1
- package/tests/cases/integration/updateView.test.ts +18 -18
- package/tests/scripts/checkCreateConsistentMigrations.ts +1 -1
- package/tests/src/tests.ts +18 -15
- package/tests/tsconfig.json +2 -6
- package/dist/src/MigrationVersionHelper.d.ts +0 -9
- package/dist/src/MigrationVersionHelper.d.ts.map +0 -1
- package/dist/src/MigrationVersionHelper.js +0 -45
- package/dist/src/MigrationVersionHelper.js.map +0 -1
- package/dist/src/modifications/utils/renameConstraintsHelper.d.ts +0 -8
- package/dist/src/modifications/utils/renameConstraintsHelper.d.ts.map +0 -1
- package/dist/src/modifications/utils/renameConstraintsHelper.js +0 -31
- package/dist/src/modifications/utils/renameConstraintsHelper.js.map +0 -1
- package/dist/src/modifications/utils/schemaMeta.d.ts +0 -8
- package/dist/src/modifications/utils/schemaMeta.d.ts.map +0 -1
- package/dist/src/modifications/utils/schemaMeta.js +0 -13
- package/dist/src/modifications/utils/schemaMeta.js.map +0 -1
- package/dist/tests/cases/integration/takenIndexName.test.d.ts +0 -2
- package/dist/tests/cases/integration/takenIndexName.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/takenIndexName.test.js +0 -307
- package/dist/tests/cases/integration/takenIndexName.test.js.map +0 -1
- package/src/MigrationVersionHelper.ts +0 -46
- package/src/modifications/utils/renameConstraintsHelper.ts +0 -34
- package/src/modifications/utils/schemaMeta.ts +0 -18
- package/tests/cases/integration/takenIndexName.test.ts +0 -314
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
ModificationDescription,
|
|
5
5
|
ModificationDescriptionContext,
|
|
6
6
|
ModificationHandler,
|
|
7
|
+
ModificationHandlerCreateSqlOptions,
|
|
7
8
|
ModificationHandlerFactory,
|
|
8
9
|
ModificationHandlerOptions,
|
|
9
10
|
SchemaUpdateError,
|
|
@@ -14,23 +15,22 @@ import { Schema } from '@contember/schema'
|
|
|
14
15
|
|
|
15
16
|
export interface ModificationDescriptionResult {
|
|
16
17
|
modification: Migration.Modification
|
|
17
|
-
sql: string
|
|
18
18
|
schema: Schema
|
|
19
19
|
description: ModificationDescription
|
|
20
20
|
handler: ModificationHandler<any>
|
|
21
|
+
getSql: (options: ModificationHandlerCreateSqlOptions) => string
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
export class MigrationDescriber {
|
|
24
25
|
constructor(private readonly modificationHandlerFactory: ModificationHandlerFactory) {
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
public
|
|
28
|
+
public describeModification(
|
|
28
29
|
schema: Schema,
|
|
29
30
|
modification: Migration.Modification,
|
|
30
31
|
options: ModificationHandlerOptions,
|
|
31
32
|
modificationDescriptionContext: ModificationDescriptionContext = emptyModificationDescriptionContext,
|
|
32
|
-
):
|
|
33
|
-
const builder = createMigrationBuilder()
|
|
33
|
+
): ModificationDescriptionResult {
|
|
34
34
|
const modificationHandler = this.modificationHandlerFactory.create(
|
|
35
35
|
modification.modification,
|
|
36
36
|
modification,
|
|
@@ -45,29 +45,31 @@ export class MigrationDescriber {
|
|
|
45
45
|
}
|
|
46
46
|
throw new SchemaUpdateError(e.message + '\n for modification: \n' + JSON.stringify(modification))
|
|
47
47
|
}
|
|
48
|
-
await modificationHandler.createSql(builder)
|
|
49
48
|
return {
|
|
50
49
|
modification,
|
|
51
50
|
schema,
|
|
52
|
-
|
|
51
|
+
getSql: options => {
|
|
52
|
+
const builder = createMigrationBuilder()
|
|
53
|
+
modificationHandler.createSql(builder, options)
|
|
54
|
+
return builder.getSql()
|
|
55
|
+
},
|
|
53
56
|
description: modificationHandler.describe(modificationDescriptionContext),
|
|
54
57
|
handler: modificationHandler,
|
|
55
58
|
}
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
public
|
|
61
|
+
public describeModifications(schema: Schema, migration: Migration): ModificationDescriptionResult[] {
|
|
59
62
|
const result = []
|
|
60
63
|
const createdEntities = []
|
|
61
64
|
for (const modification of migration.modifications) {
|
|
62
65
|
if (modification.modification === createEntityModification.id) {
|
|
63
66
|
createdEntities.push(modification.entity.name)
|
|
64
67
|
}
|
|
65
|
-
const description =
|
|
68
|
+
const description = this.describeModification(
|
|
66
69
|
schema,
|
|
67
70
|
modification,
|
|
68
71
|
{
|
|
69
72
|
formatVersion: migration.formatVersion,
|
|
70
|
-
systemSchema,
|
|
71
73
|
},
|
|
72
74
|
{
|
|
73
75
|
createdEntities,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { MigrationFilesManager } from './MigrationFilesManager'
|
|
2
2
|
import { VERSION_INITIAL } from './modifications/ModificationVersions'
|
|
3
|
-
import { MigrationVersionHelper } from '
|
|
3
|
+
import { MigrationVersionHelper } from '@contember/engine-common'
|
|
4
4
|
import { Migration } from './Migration'
|
|
5
5
|
|
|
6
6
|
export class MigrationsResolver {
|
package/src/SchemaDiffer.ts
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
1
|
import { Schema } from '@contember/schema'
|
|
2
|
-
import {
|
|
3
|
-
deepCompare,
|
|
4
|
-
isInverseRelation,
|
|
5
|
-
isOwningRelation,
|
|
6
|
-
isRelation,
|
|
7
|
-
SchemaValidator,
|
|
8
|
-
ValidationError,
|
|
9
|
-
} from '@contember/schema-utils'
|
|
2
|
+
import { compareArraysIgnoreOrder, deepCompare, isInverseRelation, isOwningRelation, isRelation, SchemaValidator, ValidationError } from '@contember/schema-utils'
|
|
10
3
|
import { SchemaMigrator } from './SchemaMigrator'
|
|
11
4
|
import { Migration } from './Migration'
|
|
12
5
|
import { ImplementationException } from './exceptions'
|
|
@@ -34,6 +27,7 @@ import {
|
|
|
34
27
|
UpdateAclSchemaDiffer,
|
|
35
28
|
UpdateColumnDefinitionDiffer,
|
|
36
29
|
UpdateColumnNameDiffer,
|
|
30
|
+
UpdateEntityOrderByDiffer,
|
|
37
31
|
UpdateEntityTableNameDiffer,
|
|
38
32
|
UpdateEnumDiffer,
|
|
39
33
|
UpdateRelationOnDeleteDiffer,
|
|
@@ -43,8 +37,12 @@ import {
|
|
|
43
37
|
} from './modifications'
|
|
44
38
|
import { ChangeViewNonViewDiffer, RemoveChangedFieldDiffer, RemoveChangedViewDiffer } from './modifications/differs'
|
|
45
39
|
import { CreateIndexDiffer, RemoveIndexDiffer } from './modifications/indexes'
|
|
46
|
-
import {
|
|
40
|
+
import { CreateTriggerDiffer, RemoveTriggerDiffer, UpdateTriggerDiffer } from './modifications/actions'
|
|
41
|
+
import { UpdateTargetDiffer } from './modifications/actions/UpdateTargetModification'
|
|
42
|
+
import { CreateTargetDiffer } from './modifications/actions/CreateTargetModification'
|
|
43
|
+
import { RemoveTargetDiffer } from './modifications/actions/RemoveTargetModification'
|
|
47
44
|
import { UpdateSettingsDiffer } from './modifications/settings'
|
|
45
|
+
import { RemoveIndexNamesDiffer } from './modifications/upgrade/RemoveIndexNamesModification'
|
|
48
46
|
|
|
49
47
|
type DiffOptions = { skipRecreateValidation?: boolean; skipInitialSchemaValidation?: boolean }
|
|
50
48
|
|
|
@@ -67,6 +65,7 @@ export class SchemaDiffer {
|
|
|
67
65
|
}
|
|
68
66
|
|
|
69
67
|
const differs: Differ[] = [
|
|
68
|
+
new RemoveIndexNamesDiffer(),
|
|
70
69
|
new UpdateSettingsDiffer(),
|
|
71
70
|
new ConvertOneToManyRelationDiffer(),
|
|
72
71
|
new ConvertOneHasManyToManyHasManyRelationDiffer(),
|
|
@@ -101,6 +100,13 @@ export class SchemaDiffer {
|
|
|
101
100
|
new RemoveEnumDiffer(),
|
|
102
101
|
new UpdateAclSchemaDiffer(),
|
|
103
102
|
new UpdateValidationSchemaDiffer(),
|
|
103
|
+
new UpdateEntityOrderByDiffer(),
|
|
104
|
+
new UpdateTargetDiffer(),
|
|
105
|
+
new CreateTargetDiffer(),
|
|
106
|
+
new UpdateTriggerDiffer(),
|
|
107
|
+
new CreateTriggerDiffer(),
|
|
108
|
+
new RemoveTriggerDiffer(),
|
|
109
|
+
new RemoveTargetDiffer(),
|
|
104
110
|
]
|
|
105
111
|
|
|
106
112
|
const diffs: Migration.Modification[] = []
|
|
@@ -111,10 +117,15 @@ export class SchemaDiffer {
|
|
|
111
117
|
diffs.push(...differDiffs)
|
|
112
118
|
}
|
|
113
119
|
|
|
114
|
-
|
|
115
120
|
if (!skipRecreateValidation) {
|
|
116
|
-
const
|
|
117
|
-
|
|
121
|
+
const errors = deepCompare(updatedSchema, appliedDiffsSchema, [], path => {
|
|
122
|
+
if (path[0] === 'model' && path[1] === 'entities' && (path[3] === 'unique' || path[3] === 'index')) {
|
|
123
|
+
return (a, b) => {
|
|
124
|
+
return compareArraysIgnoreOrder(a, b, path)
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return null
|
|
128
|
+
})
|
|
118
129
|
if (errors.length === 0) {
|
|
119
130
|
return diffs
|
|
120
131
|
}
|
package/src/SchemaMigrator.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { Schema } from '@contember/schema'
|
|
2
2
|
import { ModificationHandlerFactory } from './modifications'
|
|
3
3
|
import { Migration } from './Migration'
|
|
4
|
-
import { SchemaWithMeta } from './modifications/utils/schemaMeta'
|
|
5
4
|
|
|
6
5
|
export class SchemaMigrator {
|
|
7
6
|
constructor(private readonly modificationHandlerFactory: ModificationHandlerFactory) {}
|
|
8
7
|
|
|
9
|
-
public applyModifications(schema: Schema, diff: readonly Migration.Modification[], formatVersion: number):
|
|
8
|
+
public applyModifications(schema: Schema, diff: readonly Migration.Modification[], formatVersion: number): Schema {
|
|
10
9
|
for (const modification of diff) {
|
|
11
10
|
const { modification: name, ...data } = modification
|
|
12
11
|
const modificationHandler = this.modificationHandlerFactory.create(name, data, schema, {
|
|
13
12
|
formatVersion,
|
|
14
|
-
systemSchema: 'system', // not important here
|
|
15
13
|
})
|
|
16
14
|
schema = modificationHandler.getSchemaUpdater()({ schema })
|
|
17
15
|
}
|
package/src/index.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { MigrationBuilder } from '@contember/database-migrations'
|
|
|
2
2
|
import { SchemaUpdater } from './utils/schemaUpdateUtils'
|
|
3
3
|
import { Schema } from '@contember/schema'
|
|
4
4
|
import { Migration } from '../Migration'
|
|
5
|
-
import {
|
|
5
|
+
import { SchemaDatabaseMetadata } from '@contember/schema-utils'
|
|
6
6
|
|
|
7
7
|
export interface ModificationDescription {
|
|
8
8
|
message: string
|
|
@@ -14,20 +14,25 @@ export const emptyModificationDescriptionContext: ModificationDescriptionContext
|
|
|
14
14
|
export type ModificationDescriptionContext = { createdEntities: string[] }
|
|
15
15
|
|
|
16
16
|
export interface ModificationHandler<Data> {
|
|
17
|
-
createSql(builder: MigrationBuilder): void
|
|
17
|
+
createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void
|
|
18
18
|
|
|
19
19
|
getSchemaUpdater(): SchemaUpdater
|
|
20
20
|
|
|
21
21
|
describe(context: ModificationDescriptionContext): ModificationDescription
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
export interface ModificationHandlerCreateSqlOptions {
|
|
25
|
+
systemSchema: string
|
|
26
|
+
databaseMetadata: SchemaDatabaseMetadata
|
|
27
|
+
invalidateDatabaseMetadata: () => void
|
|
28
|
+
}
|
|
29
|
+
|
|
24
30
|
export interface ModificationHandlerOptions {
|
|
25
31
|
formatVersion: number
|
|
26
|
-
systemSchema: string
|
|
27
32
|
}
|
|
28
33
|
|
|
29
34
|
export interface ModificationHandlerConstructor<Data> {
|
|
30
|
-
new(data: Data, schema:
|
|
35
|
+
new(data: Data, schema: Schema, options: ModificationHandlerOptions): ModificationHandler<Data>
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
export interface Differ<Data = { [field: string]: any }> {
|
|
@@ -38,7 +43,7 @@ export interface Differ<Data = { [field: string]: any }> {
|
|
|
38
43
|
export interface ModificationType<Id extends String, Data> {
|
|
39
44
|
id: Id
|
|
40
45
|
createModification: (data: Data) => Migration.Modification<Data>
|
|
41
|
-
createHandler: (data: Data, schema:
|
|
46
|
+
createHandler: (data: Data, schema: Schema, options: ModificationHandlerOptions) => ModificationHandler<Data>
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
export const createModificationType = <Data, Id extends string>({ handler, id }: {
|
|
@@ -4,39 +4,44 @@ import { patchAclSchemaModification, updateAclSchemaModification } from './acl'
|
|
|
4
4
|
import { createColumnModification, updateColumnDefinitionModification, updateColumnNameModification } from './columns'
|
|
5
5
|
import { createUniqueConstraintModification, removeUniqueConstraintModification } from './constraints'
|
|
6
6
|
import {
|
|
7
|
-
createEntityModification,
|
|
8
|
-
|
|
7
|
+
createEntityModification,
|
|
8
|
+
createViewModification,
|
|
9
|
+
removeEntityModification,
|
|
10
|
+
toggleEventLogModification,
|
|
9
11
|
updateEntityNameModification,
|
|
10
12
|
updateEntityTableNameModification,
|
|
11
13
|
} from './entities'
|
|
12
14
|
import { updateViewModification } from './entities/UpdateViewModification'
|
|
13
|
-
import {
|
|
14
|
-
createEnumModification,
|
|
15
|
-
removeEnumModification,
|
|
16
|
-
updateEnumModification,
|
|
17
|
-
} from './enums'
|
|
15
|
+
import { createEnumModification, removeEnumModification, updateEnumModification } from './enums'
|
|
18
16
|
import { removeFieldModification, updateFieldNameModification } from './fields'
|
|
19
17
|
import {
|
|
20
18
|
convertOneHasManyToManyHasManyRelationModification,
|
|
21
19
|
convertOneToManyRelationModification,
|
|
22
20
|
createRelationInverseSideModification,
|
|
23
|
-
createRelationModification,
|
|
21
|
+
createRelationModification,
|
|
22
|
+
disableOrphanRemovalModification,
|
|
24
23
|
enableOrphanRemovalModification,
|
|
25
24
|
makeRelationNotNullModification,
|
|
26
|
-
makeRelationNullableModification,
|
|
25
|
+
makeRelationNullableModification,
|
|
26
|
+
toggleJunctionEventLogModification,
|
|
27
27
|
updateRelationOnDeleteModification,
|
|
28
28
|
updateRelationOrderByModification,
|
|
29
29
|
} from './relations'
|
|
30
30
|
import { patchValidationSchemaModification, updateValidationSchemaModification } from './validation'
|
|
31
31
|
import { createIndexModification, removeIndexModification } from './indexes'
|
|
32
|
-
import { SchemaWithMeta } from './utils/schemaMeta'
|
|
33
32
|
import { updateSettingsModification } from './settings'
|
|
33
|
+
import { createTriggerModification, removeTriggerModification, updateTriggerModification } from './actions'
|
|
34
|
+
import { createTargetModification } from './actions/CreateTargetModification'
|
|
35
|
+
import { removeTargetModification } from './actions/RemoveTargetModification'
|
|
36
|
+
import { updateTargetModification } from './actions/UpdateTargetModification'
|
|
37
|
+
import { updateEntityOrderByModification } from './entities/UpdateEntityOrderByModification'
|
|
38
|
+
import { removeIndexNamesModification } from './upgrade/RemoveIndexNamesModification'
|
|
34
39
|
|
|
35
40
|
|
|
36
41
|
class ModificationHandlerFactory {
|
|
37
42
|
constructor(private readonly map: Record<string, ModificationType<string, any>>) {}
|
|
38
43
|
|
|
39
|
-
public create<D>(name: string, data: D, schema:
|
|
44
|
+
public create<D>(name: string, data: D, schema: Schema, options: ModificationHandlerOptions): ModificationHandler<D> {
|
|
40
45
|
if (!this.map[name]) {
|
|
41
46
|
throw new Error(`Undefined modification handler for ${name}`)
|
|
42
47
|
}
|
|
@@ -48,6 +53,7 @@ namespace ModificationHandlerFactory {
|
|
|
48
53
|
type HandlerMap<D> = { [modificationName: string]: ModificationType<string, D> }
|
|
49
54
|
|
|
50
55
|
const handlers = [
|
|
56
|
+
removeIndexNamesModification,
|
|
51
57
|
updateSettingsModification,
|
|
52
58
|
updateAclSchemaModification,
|
|
53
59
|
patchAclSchemaModification,
|
|
@@ -83,6 +89,13 @@ namespace ModificationHandlerFactory {
|
|
|
83
89
|
toggleEventLogModification,
|
|
84
90
|
toggleJunctionEventLogModification,
|
|
85
91
|
convertOneHasManyToManyHasManyRelationModification,
|
|
92
|
+
updateEntityOrderByModification,
|
|
93
|
+
createTriggerModification,
|
|
94
|
+
updateTriggerModification,
|
|
95
|
+
removeTriggerModification,
|
|
96
|
+
createTargetModification,
|
|
97
|
+
updateTargetModification,
|
|
98
|
+
removeTargetModification,
|
|
86
99
|
]
|
|
87
100
|
|
|
88
101
|
export const defaultFactoryMap: HandlerMap<any> = Object.fromEntries(handlers.map(it => [it.id, it]))
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
export const VERSION_INITIAL = 1
|
|
2
|
-
export const VERSION_LATEST =
|
|
2
|
+
export const VERSION_LATEST = 5
|
|
3
3
|
|
|
4
4
|
export const VERSION_ACL_PATCH = 2
|
|
5
|
-
export const
|
|
5
|
+
export const VERSION_UPDATE_CONSTRAINT_FIELDS = 2
|
|
6
6
|
export const VERSION_REMOVE_RELATION_INVERSE_SIDE = 3
|
|
7
7
|
export const VERSION_REMOVE_REFERENCING_RELATIONS = 3
|
|
8
|
+
export const _REMOVED_VERSION_UPDATE_CONSTRAINT_NAME_ONE_HAS_ONE = 4
|
|
9
|
+
export const VERSION_UPDATE_INDEX_FIELDS = 5
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
import { Actions, Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater } from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
+
|
|
6
|
+
export class CreateTargetModificationHandler implements ModificationHandler<CreateTargetModificationData> {
|
|
7
|
+
constructor(private readonly data: CreateTargetModificationData) {
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public createSql(builder: MigrationBuilder): void {
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
14
|
+
return ({ schema }) => ({
|
|
15
|
+
...schema,
|
|
16
|
+
actions: {
|
|
17
|
+
...schema.actions,
|
|
18
|
+
targets: {
|
|
19
|
+
...schema.actions.targets,
|
|
20
|
+
[this.data.target.name]: this.data.target,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe() {
|
|
27
|
+
return { message: `Create target ${this.data.target.name}` }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface CreateTargetModificationData {
|
|
32
|
+
target: Actions.AnyTarget
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const createTargetModification = createModificationType({
|
|
36
|
+
id: 'createTarget',
|
|
37
|
+
handler: CreateTargetModificationHandler,
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
export class CreateTargetDiffer implements Differ {
|
|
41
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
42
|
+
return Object.entries(updatedSchema.actions.targets)
|
|
43
|
+
.filter(([name]) => !originalSchema.actions.targets[name])
|
|
44
|
+
.map(([, target]) => createTargetModification.createModification({ target }))
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
import { Actions, Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater } from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
+
|
|
6
|
+
export class CreateTriggerModificationHandler implements ModificationHandler<CreateTriggerModificationData> {
|
|
7
|
+
constructor(private readonly data: CreateTriggerModificationData) {
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public createSql(builder: MigrationBuilder): void {
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
14
|
+
return ({ schema }) => ({
|
|
15
|
+
...schema,
|
|
16
|
+
actions: {
|
|
17
|
+
...schema.actions,
|
|
18
|
+
triggers: {
|
|
19
|
+
...schema.actions.triggers,
|
|
20
|
+
[this.data.trigger.name]: this.data.trigger,
|
|
21
|
+
},
|
|
22
|
+
},
|
|
23
|
+
})
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe() {
|
|
27
|
+
return { message: `Create trigger ${this.data.trigger.name}` }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface CreateTriggerModificationData {
|
|
32
|
+
trigger: Actions.AnyTrigger
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const createTriggerModification = createModificationType({
|
|
36
|
+
id: 'createTrigger',
|
|
37
|
+
handler: CreateTriggerModificationHandler,
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
export class CreateTriggerDiffer implements Differ {
|
|
41
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
42
|
+
return Object.entries(updatedSchema.actions.triggers)
|
|
43
|
+
.filter(([name]) => !originalSchema.actions.triggers[name])
|
|
44
|
+
.map(([, trigger]) => createTriggerModification.createModification({ trigger }))
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
import { Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater } from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
+
|
|
6
|
+
export class RemoveTargetModificationHandler implements ModificationHandler<RemoveTargetModificationData> {
|
|
7
|
+
constructor(private readonly data: RemoveTargetModificationData) {
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public createSql(builder: MigrationBuilder): void {
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
14
|
+
return ({ schema }) => {
|
|
15
|
+
const { [this.data.name]: _, ...targets } = schema.actions.targets
|
|
16
|
+
return ({
|
|
17
|
+
...schema,
|
|
18
|
+
actions: {
|
|
19
|
+
...schema.actions,
|
|
20
|
+
targets,
|
|
21
|
+
},
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe() {
|
|
27
|
+
return { message: `Remove target ${this.data.name}` }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface RemoveTargetModificationData {
|
|
32
|
+
name: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const removeTargetModification = createModificationType({
|
|
36
|
+
id: 'removeTarget',
|
|
37
|
+
handler: RemoveTargetModificationHandler,
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
export class RemoveTargetDiffer implements Differ {
|
|
41
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
42
|
+
return Object.entries(originalSchema.actions.targets)
|
|
43
|
+
.filter(([name]) => !updatedSchema.actions.targets[name])
|
|
44
|
+
.map(([name]) => removeTargetModification.createModification({ name }))
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
import { Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater } from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
+
|
|
6
|
+
export class RemoveTriggerModificationHandler implements ModificationHandler<RemoveTriggerModificationData> {
|
|
7
|
+
constructor(private readonly data: RemoveTriggerModificationData) {
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
public createSql(builder: MigrationBuilder): void {
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
14
|
+
return ({ schema }) => {
|
|
15
|
+
const { [this.data.name]: _, ...triggers } = schema.actions.triggers
|
|
16
|
+
return ({
|
|
17
|
+
...schema,
|
|
18
|
+
actions: {
|
|
19
|
+
...schema.actions,
|
|
20
|
+
triggers,
|
|
21
|
+
},
|
|
22
|
+
})
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
describe() {
|
|
27
|
+
return { message: `Remove trigger ${this.data.name}` }
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
export interface RemoveTriggerModificationData {
|
|
32
|
+
name: string
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export const removeTriggerModification = createModificationType({
|
|
36
|
+
id: 'removeTrigger',
|
|
37
|
+
handler: RemoveTriggerModificationHandler,
|
|
38
|
+
})
|
|
39
|
+
|
|
40
|
+
export class RemoveTriggerDiffer implements Differ {
|
|
41
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
42
|
+
return Object.entries(originalSchema.actions.triggers)
|
|
43
|
+
.filter(([name]) => !updatedSchema.actions.triggers[name])
|
|
44
|
+
.map(([name]) => removeTriggerModification.createModification({ name }))
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
|
|
2
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
3
|
+
import { Actions, Schema } from '@contember/schema'
|
|
4
|
+
import { SchemaUpdater } from '../utils/schemaUpdateUtils'
|
|
5
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
6
|
+
import deepEqual from 'fast-deep-equal'
|
|
7
|
+
|
|
8
|
+
export class UpdateTargetModificationHandler implements ModificationHandler<UpdateTargetModificationData> {
|
|
9
|
+
constructor(private readonly data: UpdateTargetModificationData) {
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
public createSql(builder: MigrationBuilder): void {
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
16
|
+
return ({ schema }) => {
|
|
17
|
+
return ({
|
|
18
|
+
...schema,
|
|
19
|
+
actions: {
|
|
20
|
+
...schema.actions,
|
|
21
|
+
targets: {
|
|
22
|
+
...schema.actions.targets,
|
|
23
|
+
[this.data.name]: this.data.target,
|
|
24
|
+
},
|
|
25
|
+
},
|
|
26
|
+
})
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
describe() {
|
|
31
|
+
return { message: `Update target ${this.data.name}` }
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface UpdateTargetModificationData {
|
|
36
|
+
name: string
|
|
37
|
+
target: Actions.AnyTarget
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
export const updateTargetModification = createModificationType({
|
|
41
|
+
id: 'updateTarget',
|
|
42
|
+
handler: UpdateTargetModificationHandler,
|
|
43
|
+
})
|
|
44
|
+
|
|
45
|
+
export class UpdateTargetDiffer implements Differ {
|
|
46
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
47
|
+
return Object.entries(updatedSchema.actions.targets)
|
|
48
|
+
.filter(([name, target]) => originalSchema.actions.targets[name] && !deepEqual(target, originalSchema.actions.targets[name]))
|
|
49
|
+
.map(([name, target]) => updateTargetModification.createModification({ name, target }))
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
import { Actions, Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater } from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
+
import deepEqual from 'fast-deep-equal'
|
|
6
|
+
|
|
7
|
+
export class UpdateTriggerModificationHandler implements ModificationHandler<UpdateTriggerModificationData> {
|
|
8
|
+
constructor(private readonly data: UpdateTriggerModificationData) {
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public createSql(builder: MigrationBuilder): void {
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
15
|
+
return ({ schema }) => {
|
|
16
|
+
return ({
|
|
17
|
+
...schema,
|
|
18
|
+
actions: {
|
|
19
|
+
...schema.actions,
|
|
20
|
+
triggers: {
|
|
21
|
+
...schema.actions.triggers,
|
|
22
|
+
[this.data.trigger.name]: this.data.trigger,
|
|
23
|
+
},
|
|
24
|
+
},
|
|
25
|
+
})
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe() {
|
|
30
|
+
return { message: `Update trigger ${this.data.trigger.name}` }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface UpdateTriggerModificationData {
|
|
35
|
+
trigger: Actions.AnyTrigger
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const updateTriggerModification = createModificationType({
|
|
39
|
+
id: 'updateTrigger',
|
|
40
|
+
handler: UpdateTriggerModificationHandler,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
export class UpdateTriggerDiffer implements Differ {
|
|
44
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
45
|
+
return Object.entries(updatedSchema.actions.triggers)
|
|
46
|
+
.filter(([name, trigger]) => originalSchema.actions.triggers[name] && !deepEqual(trigger, originalSchema.actions.triggers[name]))
|
|
47
|
+
.map(([, trigger]) => updateTriggerModification.createModification({ trigger }))
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -4,9 +4,8 @@ import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/
|
|
|
4
4
|
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import deepEqual from 'fast-deep-equal'
|
|
6
6
|
import { updateColumns } from '../utils/diffUtils'
|
|
7
|
-
import { wrapIdentifier } from '
|
|
7
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
8
8
|
import { getColumnSqlType } from '../utils/columnUtils'
|
|
9
|
-
import { getEntityDependantViews } from '../utils/viewDependencies'
|
|
10
9
|
|
|
11
10
|
export class UpdateColumnDefinitionModificationHandler implements ModificationHandler<UpdateColumnDefinitionModificationData> {
|
|
12
11
|
constructor(private readonly data: UpdateColumnDefinitionModificationData, private readonly schema: Schema) {}
|