@contember/schema-migrations 1.2.0-alpha.1 → 1.2.0-alpha.12
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/MigrationDescriber.d.ts +1 -2
- package/dist/src/MigrationDescriber.d.ts.map +1 -1
- package/dist/src/MigrationDescriber.js +5 -7
- package/dist/src/MigrationDescriber.js.map +1 -1
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +36 -46
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/SchemaMigrator.d.ts +1 -1
- package/dist/src/SchemaMigrator.d.ts.map +1 -1
- package/dist/src/index.d.ts +1 -5
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -11
- package/dist/src/index.js.map +1 -1
- package/dist/src/modifications/ModificationHandler.d.ts +11 -6
- package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
- package/dist/src/modifications/ModificationHandler.js +9 -1
- package/dist/src/modifications/ModificationHandler.js.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.d.ts +6 -5
- package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.js +42 -37
- package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
- package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts +13 -2
- package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
- package/dist/src/modifications/acl/PatchAclSchemaModification.js +28 -28
- package/dist/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
- package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts +17 -3
- package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
- package/dist/src/modifications/acl/UpdateAclSchemaModification.js +33 -30
- package/dist/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
- package/dist/src/modifications/columns/CreateColumnModification.d.ts +23 -3
- package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/CreateColumnModification.js +72 -69
- package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +21 -3
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +72 -71
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts +20 -2
- package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnNameModification.js +97 -94
- package/dist/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +21 -3
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +72 -66
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +18 -2
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +45 -42
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
- package/dist/src/modifications/differs/ChangeViewNonViewDiffer.js +1 -1
- package/dist/src/modifications/differs/RemoveChangedFieldDiffer.js +1 -1
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.d.ts +21 -6
- package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.js +66 -62
- package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.d.ts +23 -6
- package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.js +59 -55
- package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts +21 -2
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.js +73 -70
- package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +19 -2
- package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/ToggleEventLogModification.js +57 -54
- package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +18 -2
- package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityNameModification.js +78 -78
- package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts +18 -2
- package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityTableNameModification.js +40 -34
- package/dist/src/modifications/entities/UpdateEntityTableNameModification.js.map +1 -1
- package/dist/src/modifications/entities/UpdateViewModification.d.ts +15 -3
- package/dist/src/modifications/entities/UpdateViewModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/UpdateViewModification.js +28 -28
- package/dist/src/modifications/entities/UpdateViewModification.js.map +1 -1
- package/dist/src/modifications/enums/CreateEnumModification.d.ts +18 -2
- package/dist/src/modifications/enums/CreateEnumModification.d.ts.map +1 -1
- package/dist/src/modifications/enums/CreateEnumModification.js +42 -36
- package/dist/src/modifications/enums/CreateEnumModification.js.map +1 -1
- package/dist/src/modifications/enums/RemoveEnumModification.d.ts +18 -2
- package/dist/src/modifications/enums/RemoveEnumModification.d.ts.map +1 -1
- package/dist/src/modifications/enums/RemoveEnumModification.js +36 -33
- package/dist/src/modifications/enums/RemoveEnumModification.js.map +1 -1
- package/dist/src/modifications/enums/UpdateEnumModification.d.ts +19 -2
- package/dist/src/modifications/enums/UpdateEnumModification.d.ts.map +1 -1
- package/dist/src/modifications/enums/UpdateEnumModification.js +43 -40
- package/dist/src/modifications/enums/UpdateEnumModification.js.map +1 -1
- package/dist/src/modifications/fields/RemoveFieldModification.d.ts +20 -2
- package/dist/src/modifications/fields/RemoveFieldModification.d.ts.map +1 -1
- package/dist/src/modifications/fields/RemoveFieldModification.js +67 -64
- package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +18 -2
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.js +132 -132
- package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
- package/dist/src/modifications/index.d.ts +14 -0
- package/dist/src/modifications/index.d.ts.map +1 -0
- package/dist/src/modifications/index.js +32 -0
- package/dist/src/modifications/index.js.map +1 -0
- package/dist/src/modifications/indexes/CreateIndexModification.d.ts +23 -0
- package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -0
- package/dist/src/modifications/indexes/CreateIndexModification.js +75 -0
- package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -0
- package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +23 -0
- package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -0
- package/dist/src/modifications/indexes/RemoveIndexModification.js +56 -0
- package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -0
- package/dist/src/modifications/indexes/index.d.ts +3 -0
- package/dist/src/modifications/indexes/index.d.ts.map +1 -0
- package/dist/src/modifications/indexes/index.js +19 -0
- package/dist/src/modifications/indexes/index.js.map +1 -0
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +23 -3
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +68 -65
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +23 -2
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +73 -70
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +20 -3
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.js +36 -33
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.d.ts +25 -3
- package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.js +88 -85
- package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +20 -2
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.js +42 -39
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts +20 -2
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.js +45 -42
- package/dist/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
- package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts +21 -2
- package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/MakeRelationNotNullModification.js +55 -52
- package/dist/src/modifications/relations/MakeRelationNotNullModification.js.map +1 -1
- package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts +20 -2
- package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/MakeRelationNullableModification.js +54 -51
- package/dist/src/modifications/relations/MakeRelationNullableModification.js.map +1 -1
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +27 -0
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -0
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +84 -0
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -0
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +20 -3
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +42 -39
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +20 -3
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.js +43 -40
- package/dist/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
- package/dist/src/modifications/relations/index.d.ts +1 -1
- package/dist/src/modifications/relations/index.d.ts.map +1 -1
- package/dist/src/modifications/relations/index.js +1 -1
- package/dist/src/modifications/relations/index.js.map +1 -1
- package/dist/src/modifications/utils/columnUtils.d.ts +3 -0
- package/dist/src/modifications/utils/columnUtils.d.ts.map +1 -0
- package/dist/src/modifications/utils/columnUtils.js +9 -0
- package/dist/src/modifications/utils/columnUtils.js.map +1 -0
- package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts +13 -2
- package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
- package/dist/src/modifications/validation/PatchValidationSchemaModification.js +28 -28
- package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
- package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts +17 -3
- package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
- package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +33 -30
- package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/utils/PartialEntity.d.ts +5 -0
- package/dist/src/utils/PartialEntity.d.ts.map +1 -0
- package/dist/src/utils/PartialEntity.js +3 -0
- package/dist/src/utils/PartialEntity.js.map +1 -0
- package/dist/tests/cases/integration/createAndDropIndex.test.d.ts +2 -0
- package/dist/tests/cases/integration/createAndDropIndex.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/createAndDropIndex.test.js +57 -0
- package/dist/tests/cases/integration/createAndDropIndex.test.js.map +1 -0
- package/dist/tests/cases/integration/createColumn.test.js +36 -0
- package/dist/tests/cases/integration/createColumn.test.js.map +1 -1
- package/dist/tests/cases/integration/createEntity.test.js +2 -0
- package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasMany.test.js +1 -0
- package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasOne.test.js +1 -0
- package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasMany.test.js +1 -0
- package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasOne.test.js +2 -0
- package/dist/tests/cases/integration/createOneHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/createView.test.js +1 -0
- package/dist/tests/cases/integration/createView.test.js.map +1 -1
- package/dist/tests/cases/integration/updateView.test.js +9 -0
- package/dist/tests/cases/integration/updateView.test.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/MigrationDescriber.ts +8 -8
- package/src/SchemaDiffer.ts +65 -76
- package/src/SchemaMigrator.ts +1 -1
- package/src/index.ts +1 -5
- package/src/modifications/ModificationHandler.ts +20 -8
- package/src/modifications/ModificationHandlerFactory.ts +65 -61
- package/src/modifications/acl/PatchAclSchemaModification.ts +7 -8
- package/src/modifications/acl/UpdateAclSchemaModification.ts +16 -15
- package/src/modifications/columns/CreateColumnModification.ts +21 -18
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +44 -42
- package/src/modifications/columns/UpdateColumnNameModification.ts +60 -53
- package/src/modifications/constraints/CreateUniqueConstraintModification.ts +23 -17
- package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +18 -14
- package/src/modifications/differs/ChangeViewNonViewDiffer.ts +2 -2
- package/src/modifications/differs/RemoveChangedFieldDiffer.ts +2 -2
- package/src/modifications/differs/RemoveChangedViewDiffer.ts +2 -2
- package/src/modifications/entities/CreateEntityModification.ts +21 -12
- package/src/modifications/entities/CreateViewModification.ts +13 -11
- package/src/modifications/entities/RemoveEntityModification.ts +22 -15
- package/src/modifications/entities/ToggleEventLogModification.ts +20 -13
- package/src/modifications/entities/UpdateEntityNameModification.ts +9 -9
- package/src/modifications/entities/UpdateEntityTableNameModification.ts +18 -13
- package/src/modifications/entities/UpdateViewModification.ts +7 -7
- package/src/modifications/enums/CreateEnumModification.ts +18 -13
- package/src/modifications/enums/RemoveEnumModification.ts +14 -12
- package/src/modifications/enums/UpdateEnumModification.ts +15 -13
- package/src/modifications/fields/RemoveFieldModification.ts +20 -17
- package/src/modifications/fields/UpdateFieldNameModification.ts +16 -17
- package/src/modifications/index.ts +13 -0
- package/src/modifications/indexes/CreateIndexModification.ts +83 -0
- package/src/modifications/indexes/RemoveIndexModification.ts +68 -0
- package/src/modifications/indexes/index.ts +2 -0
- package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +35 -25
- package/src/modifications/relations/ConvertOneToManyRelationModification.ts +31 -24
- package/src/modifications/relations/CreateRelationInverseSideModification.ts +15 -13
- package/src/modifications/relations/CreateRelationModification.ts +35 -27
- package/src/modifications/relations/DisableOrphanRemovalModification.ts +15 -12
- package/src/modifications/relations/EnableOrphanRemovalModification.ts +16 -13
- package/src/modifications/relations/MakeRelationNotNullModification.ts +16 -14
- package/src/modifications/relations/MakeRelationNullableModification.ts +17 -13
- package/src/modifications/relations/{ToggleManyHasManyEventLogModification.ts → ToggleJunctionEventLogModification.ts} +21 -14
- package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +16 -14
- package/src/modifications/relations/UpdateRelationOrderByModification.ts +17 -14
- package/src/modifications/relations/index.ts +1 -1
- package/src/modifications/utils/columnUtils.ts +5 -0
- package/src/modifications/validation/PatchValidationSchemaModification.ts +7 -7
- package/src/modifications/validation/UpdateValidationSchemaModification.ts +17 -14
- package/src/utils/PartialEntity.ts +5 -0
- package/tests/cases/integration/createAndDropIndex.test.ts +44 -0
- package/tests/cases/integration/createColumn.test.ts +33 -0
- package/tests/cases/integration/createEntity.test.ts +2 -0
- package/tests/cases/integration/createManyHasMany.test.ts +1 -0
- package/tests/cases/integration/createManyHasOne.test.ts +1 -0
- package/tests/cases/integration/createOneHasMany.test.ts +1 -0
- package/tests/cases/integration/createOneHasOne.test.ts +2 -0
- package/tests/cases/integration/createView.test.ts +1 -0
- package/tests/cases/integration/updateView.test.ts +9 -0
- package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts +0 -8
- package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts.map +0 -1
- package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js +0 -81
- package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js.map +0 -1
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
import { Model, Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
+
import { acceptFieldVisitor } from '@contember/schema-utils'
|
|
6
|
+
|
|
7
|
+
export class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {
|
|
8
|
+
constructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}
|
|
9
|
+
|
|
10
|
+
public createSql(builder: MigrationBuilder): void {
|
|
11
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
12
|
+
if (entity.view) {
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
const fields = this.data.index.fields
|
|
16
|
+
const columns = fields.map(fieldName => {
|
|
17
|
+
return acceptFieldVisitor(this.schema.model, entity, fieldName, {
|
|
18
|
+
visitColumn: ({ column }) => {
|
|
19
|
+
return column.columnName
|
|
20
|
+
},
|
|
21
|
+
visitManyHasOne: ({ relation }) => {
|
|
22
|
+
return relation.joiningColumn.columnName
|
|
23
|
+
},
|
|
24
|
+
visitOneHasOneOwning: ({ relation }) => {
|
|
25
|
+
return relation.joiningColumn.columnName
|
|
26
|
+
},
|
|
27
|
+
visitOneHasMany: () => {
|
|
28
|
+
throw new Error(`Cannot create index on 1:m relation in ${entity.name}.${fieldName}`)
|
|
29
|
+
},
|
|
30
|
+
visitOneHasOneInverse: () => {
|
|
31
|
+
throw new Error(`Cannot create index on 1:1 inverse relation in ${entity.name}.${fieldName}`)
|
|
32
|
+
},
|
|
33
|
+
visitManyHasManyOwning: () => {
|
|
34
|
+
throw new Error(`Cannot create index on m:m relation in ${entity.name}.${fieldName}`)
|
|
35
|
+
},
|
|
36
|
+
visitManyHasManyInverse: () => {
|
|
37
|
+
throw new Error(`Cannot create index on m:m inverse relation in ${entity.name}.${fieldName}`)
|
|
38
|
+
},
|
|
39
|
+
})
|
|
40
|
+
})
|
|
41
|
+
builder.addIndex(entity.tableName, [...columns], {
|
|
42
|
+
name: this.data.index.name,
|
|
43
|
+
})
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
47
|
+
return updateModel(
|
|
48
|
+
updateEntity(this.data.entityName, ({ entity }) => ({
|
|
49
|
+
...entity,
|
|
50
|
+
indexes: {
|
|
51
|
+
...entity.indexes,
|
|
52
|
+
[this.data.index.name]: this.data.index,
|
|
53
|
+
},
|
|
54
|
+
})),
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
describe() {
|
|
59
|
+
return {
|
|
60
|
+
message: `Create index(${this.data.index.fields.join(', ')}) on entity ${this.data.entityName}`,
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export const createIndexModification = createModificationType({
|
|
66
|
+
id: 'createIndex',
|
|
67
|
+
handler: CreateIndexModificationHandler,
|
|
68
|
+
})
|
|
69
|
+
|
|
70
|
+
export class CreateIndexDiffer implements Differ {
|
|
71
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
72
|
+
return Object.values(updatedSchema.model.entities).flatMap(entity =>
|
|
73
|
+
Object.values(entity.indexes)
|
|
74
|
+
.filter(it => !originalSchema.model.entities[entity.name].indexes[it.name])
|
|
75
|
+
.map(index => createIndexModification.createModification({ entityName: entity.name, index })),
|
|
76
|
+
)
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
export interface CreateIndexModificationData {
|
|
81
|
+
entityName: string
|
|
82
|
+
index: Model.Index
|
|
83
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
import { Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
+
import deepEqual from 'fast-deep-equal'
|
|
6
|
+
|
|
7
|
+
export class RemoveIndexModificationHandler implements ModificationHandler<RemoveIndexModificationData> {
|
|
8
|
+
constructor(private readonly data: RemoveIndexModificationData, private readonly schema: Schema) {}
|
|
9
|
+
|
|
10
|
+
public createSql(builder: MigrationBuilder): void {
|
|
11
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
12
|
+
if (entity.view) {
|
|
13
|
+
return
|
|
14
|
+
}
|
|
15
|
+
builder.dropIndex(entity.tableName, [], {
|
|
16
|
+
name: this.data.indexName,
|
|
17
|
+
})
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
21
|
+
return updateModel(
|
|
22
|
+
updateEntity(this.data.entityName, ({ entity }) => {
|
|
23
|
+
const { [this.data.indexName]: removed, ...indexes } = entity.indexes
|
|
24
|
+
return {
|
|
25
|
+
...entity,
|
|
26
|
+
indexes,
|
|
27
|
+
}
|
|
28
|
+
}),
|
|
29
|
+
)
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
describe() {
|
|
33
|
+
const fields = this.schema.model.entities[this.data.entityName].indexes[this.data.indexName].fields
|
|
34
|
+
return { message: `Remove index (${fields.join(', ')}) on entity ${this.data.entityName}` }
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export const removeIndexModification = createModificationType({
|
|
39
|
+
id: 'removeIndex',
|
|
40
|
+
handler: RemoveIndexModificationHandler,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
export class RemoveIndexDiffer implements Differ {
|
|
45
|
+
|
|
46
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
47
|
+
return Object.values(originalSchema.model.entities).flatMap(entity =>
|
|
48
|
+
Object.values(entity.indexes)
|
|
49
|
+
.filter(
|
|
50
|
+
it =>
|
|
51
|
+
updatedSchema.model.entities[entity.name] &&
|
|
52
|
+
(!updatedSchema.model.entities[entity.name].indexes[it.name] ||
|
|
53
|
+
!deepEqual(it.fields, updatedSchema.model.entities[entity.name].indexes[it.name].fields)),
|
|
54
|
+
)
|
|
55
|
+
.map(index =>
|
|
56
|
+
removeIndexModification.createModification({
|
|
57
|
+
entityName: entity.name,
|
|
58
|
+
indexName: index.name,
|
|
59
|
+
}),
|
|
60
|
+
),
|
|
61
|
+
)
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export interface RemoveIndexModificationData {
|
|
66
|
+
entityName: string
|
|
67
|
+
indexName: string
|
|
68
|
+
}
|
|
@@ -1,16 +1,20 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
3
|
import { addField, SchemaUpdater, updateEntity, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
createModificationType,
|
|
6
|
+
Differ,
|
|
7
|
+
ModificationHandler,
|
|
8
|
+
ModificationHandlerOptions,
|
|
9
|
+
} from '../ModificationHandler'
|
|
5
10
|
import { isInverseRelation, isOwningRelation } from '@contember/schema-utils'
|
|
6
11
|
import { updateRelations } from '../utils/diffUtils'
|
|
7
|
-
import { UpdateFieldNameModification } from '../fields'
|
|
8
12
|
import { createJunctionTableSql } from '../utils/createJunctionTable'
|
|
9
13
|
import { wrapIdentifier } from '@contember/database'
|
|
10
14
|
import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
|
|
15
|
+
import { updateFieldNameModification } from '../fields'
|
|
11
16
|
|
|
12
|
-
export
|
|
13
|
-
static id = 'convertOneHasManyToManyHasManyRelation'
|
|
17
|
+
export class ConvertOneHasManyToManyHasManyRelationModificationHandler implements ModificationHandler<ConvertOneHasManyToManyHasManyRelationModificationData> {
|
|
14
18
|
private subModification: ModificationHandler<any>
|
|
15
19
|
|
|
16
20
|
constructor(
|
|
@@ -18,7 +22,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
18
22
|
private readonly schema: Schema,
|
|
19
23
|
private readonly options: ModificationHandlerOptions,
|
|
20
24
|
) {
|
|
21
|
-
this.subModification =
|
|
25
|
+
this.subModification = updateFieldNameModification.createHandler(
|
|
22
26
|
{
|
|
23
27
|
entityName: this.data.entityName,
|
|
24
28
|
fieldName: this.data.fieldName,
|
|
@@ -63,11 +67,33 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
63
67
|
}
|
|
64
68
|
}
|
|
65
69
|
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
private getRelation(): { entity: Model.Entity; relation: Model.ManyHasOneRelation } {
|
|
74
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
75
|
+
const relation = entity.fields[this.data.fieldName]
|
|
76
|
+
if (relation.type !== Model.RelationType.ManyHasOne) {
|
|
77
|
+
throw new Error()
|
|
78
|
+
}
|
|
79
|
+
return { entity, relation }
|
|
68
80
|
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export const convertOneHasManyToManyHasManyRelationModification = createModificationType({
|
|
84
|
+
id: 'convertOneHasManyToManyHasManyRelation',
|
|
85
|
+
handler: ConvertOneHasManyToManyHasManyRelationModificationHandler,
|
|
86
|
+
})
|
|
69
87
|
|
|
70
|
-
|
|
88
|
+
export interface ConvertOneHasManyToManyHasManyRelationModificationData {
|
|
89
|
+
entityName: string
|
|
90
|
+
fieldName: string
|
|
91
|
+
owningSide: PartialManyHasManyRelation
|
|
92
|
+
inverseSide?: Model.ManyHasManyInverseRelation
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export class ConvertOneHasManyToManyHasManyRelationDiffer implements Differ {
|
|
96
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
71
97
|
return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
|
|
72
98
|
if (
|
|
73
99
|
isInverseRelation(originalRelation) &&
|
|
@@ -81,7 +107,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
81
107
|
if (owningSide.type !== Model.RelationType.ManyHasMany || !isOwningRelation(owningSide)) {
|
|
82
108
|
throw new Error()
|
|
83
109
|
}
|
|
84
|
-
return
|
|
110
|
+
return convertOneHasManyToManyHasManyRelationModification.createModification({
|
|
85
111
|
entityName: updatedRelation.target,
|
|
86
112
|
fieldName: owningOldName,
|
|
87
113
|
owningSide,
|
|
@@ -91,20 +117,4 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
91
117
|
return undefined
|
|
92
118
|
})
|
|
93
119
|
}
|
|
94
|
-
|
|
95
|
-
private getRelation(): { entity: Model.Entity; relation: Model.ManyHasOneRelation } {
|
|
96
|
-
const entity = this.schema.model.entities[this.data.entityName]
|
|
97
|
-
const relation = entity.fields[this.data.fieldName]
|
|
98
|
-
if (relation.type !== Model.RelationType.ManyHasOne) {
|
|
99
|
-
throw new Error()
|
|
100
|
-
}
|
|
101
|
-
return { entity, relation }
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
export interface ConvertOneHasManyToManyHasManyRelationModificationData {
|
|
106
|
-
entityName: string
|
|
107
|
-
fieldName: string
|
|
108
|
-
owningSide: PartialManyHasManyRelation
|
|
109
|
-
inverseSide?: Model.ManyHasManyInverseRelation
|
|
110
120
|
}
|
|
@@ -1,14 +1,18 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateEntity, updateField, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
createModificationType,
|
|
6
|
+
Differ,
|
|
7
|
+
ModificationHandler,
|
|
8
|
+
ModificationHandlerOptions,
|
|
9
|
+
} from '../ModificationHandler'
|
|
5
10
|
import { isOwningRelation, NamingHelper } from '@contember/schema-utils'
|
|
6
11
|
import { updateRelations } from '../utils/diffUtils'
|
|
7
|
-
import { UpdateFieldNameModification } from '../fields'
|
|
8
12
|
import { NoopModification } from '../NoopModification'
|
|
13
|
+
import { updateFieldNameModification } from '../fields'
|
|
9
14
|
|
|
10
|
-
export
|
|
11
|
-
static id = 'convertOneToManyRelation'
|
|
15
|
+
export class ConvertOneToManyRelationModificationHandler implements ModificationHandler<ConvertOneToManyRelationModificationData> {
|
|
12
16
|
private subModification: ModificationHandler<any>
|
|
13
17
|
|
|
14
18
|
constructor(
|
|
@@ -18,7 +22,7 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
18
22
|
) {
|
|
19
23
|
const { relation } = this.getRelation()
|
|
20
24
|
this.subModification = data.newInverseSideFieldName && relation.inversedBy ?
|
|
21
|
-
|
|
25
|
+
updateFieldNameModification.createHandler(
|
|
22
26
|
{
|
|
23
27
|
entityName: relation.target,
|
|
24
28
|
fieldName: relation.inversedBy,
|
|
@@ -77,11 +81,29 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
77
81
|
}
|
|
78
82
|
}
|
|
79
83
|
|
|
80
|
-
|
|
81
|
-
|
|
84
|
+
private getRelation() {
|
|
85
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
86
|
+
const relation = entity.fields[this.data.fieldName]
|
|
87
|
+
if (relation.type !== Model.RelationType.OneHasOne || !isOwningRelation(relation)) {
|
|
88
|
+
throw new Error()
|
|
89
|
+
}
|
|
90
|
+
return { entity, relation }
|
|
82
91
|
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
export interface ConvertOneToManyRelationModificationData {
|
|
95
|
+
entityName: string
|
|
96
|
+
fieldName: string
|
|
97
|
+
newInverseSideFieldName?: string
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
export const convertOneToManyRelationModification = createModificationType({
|
|
101
|
+
id: 'convertOneToManyRelation',
|
|
102
|
+
handler: ConvertOneToManyRelationModificationHandler,
|
|
103
|
+
})
|
|
83
104
|
|
|
84
|
-
|
|
105
|
+
export class ConvertOneToManyRelationDiffer implements Differ {
|
|
106
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
85
107
|
return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
|
|
86
108
|
if (
|
|
87
109
|
isOwningRelation(originalRelation) &&
|
|
@@ -90,7 +112,7 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
90
112
|
updatedRelation.type === Model.RelationType.ManyHasOne
|
|
91
113
|
) {
|
|
92
114
|
const isInverseSideRenamed = originalRelation.inversedBy && updatedRelation.inversedBy && originalRelation.inversedBy !== updatedRelation.inversedBy
|
|
93
|
-
return
|
|
115
|
+
return convertOneToManyRelationModification.createModification({
|
|
94
116
|
entityName: updatedEntity.name,
|
|
95
117
|
fieldName: updatedRelation.name,
|
|
96
118
|
...(isInverseSideRenamed ? {
|
|
@@ -101,19 +123,4 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
101
123
|
return undefined
|
|
102
124
|
})
|
|
103
125
|
}
|
|
104
|
-
|
|
105
|
-
private getRelation() {
|
|
106
|
-
const entity = this.schema.model.entities[this.data.entityName]
|
|
107
|
-
const relation = entity.fields[this.data.fieldName]
|
|
108
|
-
if (relation.type !== Model.RelationType.OneHasOne || !isOwningRelation(relation)) {
|
|
109
|
-
throw new Error()
|
|
110
|
-
}
|
|
111
|
-
return { entity, relation }
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
export interface ConvertOneToManyRelationModificationData {
|
|
116
|
-
entityName: string
|
|
117
|
-
fieldName: string
|
|
118
|
-
newInverseSideFieldName?: string
|
|
119
126
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
3
|
import { addField, SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import { createFields } from '../utils/diffUtils'
|
|
6
6
|
import { isInverseRelation, isRelation } from '@contember/schema-utils'
|
|
7
7
|
|
|
8
|
-
export
|
|
9
|
-
static id = 'createRelationInverseSide'
|
|
8
|
+
export class CreateRelationInverseSideModificationHandler implements ModificationHandler<CreateRelationInverseSideModificationData> {
|
|
10
9
|
constructor(private readonly data: CreateRelationInverseSideModificationData, private readonly schema: Schema) {}
|
|
11
10
|
|
|
12
11
|
public createSql(builder: MigrationBuilder): void {}
|
|
@@ -27,25 +26,28 @@ export const CreateRelationInverseSideModification: ModificationHandlerStatic<Cr
|
|
|
27
26
|
describe() {
|
|
28
27
|
return { message: `Add relation ${this.data.entityName}.${this.data.relation.name}` }
|
|
29
28
|
}
|
|
29
|
+
}
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
export interface CreateRelationInverseSideModificationData {
|
|
32
|
+
entityName: string
|
|
33
|
+
relation: Model.AnyRelation & Model.InverseRelation
|
|
34
|
+
}
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
export const createRelationInverseSideModification = createModificationType({
|
|
37
|
+
id: 'createRelationInverseSide',
|
|
38
|
+
handler: CreateRelationInverseSideModificationHandler,
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
export class CreateRelationInverseSideDiffer implements Differ {
|
|
42
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
36
43
|
return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
|
|
37
44
|
if (!isRelation(newField) || !isInverseRelation(newField)) {
|
|
38
45
|
return undefined
|
|
39
46
|
}
|
|
40
|
-
return
|
|
47
|
+
return createRelationInverseSideModification.createModification({
|
|
41
48
|
entityName: updatedEntity.name,
|
|
42
49
|
relation: newField,
|
|
43
50
|
})
|
|
44
51
|
})
|
|
45
52
|
}
|
|
46
53
|
}
|
|
47
|
-
|
|
48
|
-
export interface CreateRelationInverseSideModificationData {
|
|
49
|
-
entityName: string
|
|
50
|
-
relation: Model.AnyRelation & Model.InverseRelation
|
|
51
|
-
}
|
|
@@ -8,7 +8,12 @@ import {
|
|
|
8
8
|
} from '@contember/schema-utils'
|
|
9
9
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
10
10
|
import { addField, SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
createModificationType,
|
|
13
|
+
Differ,
|
|
14
|
+
ModificationHandler,
|
|
15
|
+
ModificationHandlerOptions,
|
|
16
|
+
} from '../ModificationHandler'
|
|
12
17
|
import { isIt } from '../../utils/isIt'
|
|
13
18
|
import { createFields } from '../utils/diffUtils'
|
|
14
19
|
import { getPrimaryColumnType } from '../utils/getPrimaryColumnType'
|
|
@@ -16,8 +21,7 @@ import { createJunctionTableSql } from '../utils/createJunctionTable'
|
|
|
16
21
|
import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
|
|
17
22
|
|
|
18
23
|
|
|
19
|
-
export
|
|
20
|
-
static id = 'createRelation'
|
|
24
|
+
export class CreateRelationModificationHandler implements ModificationHandler<CreateRelationModificationData> {
|
|
21
25
|
|
|
22
26
|
constructor(
|
|
23
27
|
private readonly data: CreateRelationModificationData,
|
|
@@ -55,18 +59,18 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
|
|
|
55
59
|
})
|
|
56
60
|
}
|
|
57
61
|
acceptRelationTypeVisitor(this.schema.model, entity, this.getNormalizedOwningSide(), {
|
|
58
|
-
visitManyHasOne: ({
|
|
62
|
+
visitManyHasOne: ({ relation }) => {
|
|
59
63
|
createOwningSide(relation)
|
|
60
64
|
builder.addIndex(entity.tableName, relation.joiningColumn.columnName)
|
|
61
65
|
},
|
|
62
66
|
visitOneHasMany: () => {},
|
|
63
|
-
visitOneHasOneOwning: ({
|
|
67
|
+
visitOneHasOneOwning: ({ relation }) => {
|
|
64
68
|
createOwningSide(relation)
|
|
65
69
|
const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
|
|
66
70
|
builder.addConstraint(entity.tableName, uniqueConstraintName, { unique: [relation.joiningColumn.columnName] })
|
|
67
71
|
},
|
|
68
72
|
visitOneHasOneInverse: () => {},
|
|
69
|
-
visitManyHasManyOwning: ({
|
|
73
|
+
visitManyHasManyOwning: ({ relation }) => {
|
|
70
74
|
createJunctionTableSql(builder, this.options.systemSchema, entity, targetEntity, relation)
|
|
71
75
|
},
|
|
72
76
|
visitManyHasManyInverse: () => {},
|
|
@@ -91,11 +95,32 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
|
|
|
91
95
|
return { message: `Add relation ${this.data.entityName}.${this.data.owningSide.name}`, failureWarning }
|
|
92
96
|
}
|
|
93
97
|
|
|
94
|
-
|
|
95
|
-
|
|
98
|
+
|
|
99
|
+
private getNormalizedOwningSide(): Model.AnyOwningRelation {
|
|
100
|
+
if (this.data.owningSide.type === Model.RelationType.ManyHasMany) {
|
|
101
|
+
return normalizeManyHasManyRelation(this.data.owningSide)
|
|
102
|
+
}
|
|
103
|
+
return this.data.owningSide
|
|
96
104
|
}
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
export type CreateRelationModificationData = {
|
|
109
|
+
entityName: string
|
|
110
|
+
owningSide:
|
|
111
|
+
| Model.ManyHasOneRelation
|
|
112
|
+
| Model.OneHasOneOwningRelation
|
|
113
|
+
| PartialManyHasManyRelation
|
|
114
|
+
inverseSide?: Model.AnyInverseRelation
|
|
115
|
+
}
|
|
97
116
|
|
|
98
|
-
|
|
117
|
+
export const createRelationModification = createModificationType({
|
|
118
|
+
id: 'createRelation',
|
|
119
|
+
handler: CreateRelationModificationHandler,
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
export class CreateRelationDiffer implements Differ {
|
|
123
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
99
124
|
return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
|
|
100
125
|
if (!isRelation(newField) || !isOwningRelation(newField)) {
|
|
101
126
|
return undefined
|
|
@@ -106,28 +131,11 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
|
|
|
106
131
|
if (inverseSide && !(isRelation(inverseSide) && isInverseRelation(inverseSide))) {
|
|
107
132
|
throw new Error()
|
|
108
133
|
}
|
|
109
|
-
return
|
|
134
|
+
return createRelationModification.createModification({
|
|
110
135
|
entityName: updatedEntity.name,
|
|
111
136
|
owningSide: newField,
|
|
112
137
|
...(inverseSide ? { inverseSide } : {}),
|
|
113
138
|
})
|
|
114
139
|
})
|
|
115
140
|
}
|
|
116
|
-
|
|
117
|
-
private getNormalizedOwningSide(): Model.AnyOwningRelation {
|
|
118
|
-
if (this.data.owningSide.type === Model.RelationType.ManyHasMany) {
|
|
119
|
-
return normalizeManyHasManyRelation(this.data.owningSide)
|
|
120
|
-
}
|
|
121
|
-
return this.data.owningSide
|
|
122
|
-
}
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
export type CreateRelationModificationData = {
|
|
127
|
-
entityName: string
|
|
128
|
-
owningSide:
|
|
129
|
-
| Model.ManyHasOneRelation
|
|
130
|
-
| Model.OneHasOneOwningRelation
|
|
131
|
-
| PartialManyHasManyRelation
|
|
132
|
-
inverseSide?: Model.AnyInverseRelation
|
|
133
141
|
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import { isOwningRelation } from '@contember/schema-utils'
|
|
6
6
|
import { updateRelations } from '../utils/diffUtils'
|
|
7
7
|
|
|
8
|
-
export
|
|
9
|
-
static id = 'disableOrphanRemoval'
|
|
8
|
+
export class DisableOrphanRemovalModificationHandler implements ModificationHandler<DisableOrphanRemovalModificationData> {
|
|
10
9
|
|
|
11
10
|
constructor(private readonly data: DisableOrphanRemovalModificationData, private readonly schema: Schema) {}
|
|
12
11
|
|
|
@@ -27,12 +26,20 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
|
|
|
27
26
|
message: `Disable orphan removal on ${this.data.entityName}.${this.data.fieldName}`,
|
|
28
27
|
}
|
|
29
28
|
}
|
|
29
|
+
}
|
|
30
30
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
export interface DisableOrphanRemovalModificationData {
|
|
32
|
+
entityName: string
|
|
33
|
+
fieldName: string
|
|
34
|
+
}
|
|
34
35
|
|
|
35
|
-
|
|
36
|
+
export const disableOrphanRemovalModification = createModificationType({
|
|
37
|
+
id: 'disableOrphanRemoval',
|
|
38
|
+
handler: DisableOrphanRemovalModificationHandler,
|
|
39
|
+
})
|
|
40
|
+
|
|
41
|
+
export class DisableOrphanRemovalDiffer implements Differ {
|
|
42
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
36
43
|
return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
|
|
37
44
|
if (
|
|
38
45
|
isOwningRelation(originalRelation) &&
|
|
@@ -42,7 +49,7 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
|
|
|
42
49
|
originalRelation.orphanRemoval &&
|
|
43
50
|
!updatedRelation.orphanRemoval
|
|
44
51
|
) {
|
|
45
|
-
return
|
|
52
|
+
return disableOrphanRemovalModification.createModification({
|
|
46
53
|
entityName: updatedEntity.name,
|
|
47
54
|
fieldName: updatedRelation.name,
|
|
48
55
|
})
|
|
@@ -51,7 +58,3 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
|
|
|
51
58
|
})
|
|
52
59
|
}
|
|
53
60
|
}
|
|
54
|
-
export interface DisableOrphanRemovalModificationData {
|
|
55
|
-
entityName: string
|
|
56
|
-
fieldName: string
|
|
57
|
-
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import { isOwningRelation } from '@contember/schema-utils'
|
|
6
6
|
import { updateRelations } from '../utils/diffUtils'
|
|
7
7
|
|
|
8
|
-
export
|
|
9
|
-
static id = 'enableOrphanRemoval'
|
|
8
|
+
export class EnableOrphanRemovalModificationHandler implements ModificationHandler<EnableOrphanRemovalModificationData> {
|
|
10
9
|
constructor(private readonly data: EnableOrphanRemovalModificationData, private readonly schema: Schema) {}
|
|
11
10
|
|
|
12
11
|
public createSql(builder: MigrationBuilder): void {}
|
|
@@ -30,11 +29,20 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
|
|
|
30
29
|
}
|
|
31
30
|
}
|
|
32
31
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface EnableOrphanRemovalModificationData {
|
|
35
|
+
entityName: string
|
|
36
|
+
fieldName: string
|
|
37
|
+
}
|
|
36
38
|
|
|
37
|
-
|
|
39
|
+
export const enableOrphanRemovalModification = createModificationType({
|
|
40
|
+
id: 'enableOrphanRemoval',
|
|
41
|
+
handler: EnableOrphanRemovalModificationHandler,
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
export class EnableOrphanRemovalDiffer implements Differ {
|
|
45
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
38
46
|
return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
|
|
39
47
|
if (
|
|
40
48
|
isOwningRelation(originalRelation) &&
|
|
@@ -44,7 +52,7 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
|
|
|
44
52
|
!originalRelation.orphanRemoval &&
|
|
45
53
|
updatedRelation.orphanRemoval
|
|
46
54
|
) {
|
|
47
|
-
return
|
|
55
|
+
return enableOrphanRemovalModification.createModification({
|
|
48
56
|
entityName: updatedEntity.name,
|
|
49
57
|
fieldName: updatedRelation.name,
|
|
50
58
|
})
|
|
@@ -53,8 +61,3 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
|
|
|
53
61
|
})
|
|
54
62
|
}
|
|
55
63
|
}
|
|
56
|
-
|
|
57
|
-
export interface EnableOrphanRemovalModificationData {
|
|
58
|
-
entityName: string
|
|
59
|
-
fieldName: string
|
|
60
|
-
}
|