@contember/schema-migrations 1.1.1 → 1.2.0-alpha.10
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 +70 -67
- 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 +73 -70
- 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 +65 -61
- 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/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/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 +18 -16
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +27 -25
- package/src/modifications/columns/UpdateColumnNameModification.ts +23 -16
- package/src/modifications/constraints/CreateUniqueConstraintModification.ts +21 -15
- 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 +19 -11
- 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 +16 -13
- package/src/modifications/fields/UpdateFieldNameModification.ts +9 -10
- 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 +32 -24
- 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/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/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
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import { createCheck, getConstraintName } from './enumUtils'
|
|
6
6
|
|
|
7
|
-
export
|
|
8
|
-
static id = 'createEnum'
|
|
7
|
+
export class CreateEnumModificationHandler implements ModificationHandler<CreateEnumModificationData> {
|
|
9
8
|
constructor(private readonly data: CreateEnumModificationData, private readonly schema: Schema) {}
|
|
10
9
|
|
|
11
10
|
public createSql(builder: MigrationBuilder): void {
|
|
@@ -28,19 +27,25 @@ export const CreateEnumModification: ModificationHandlerStatic<CreateEnumModific
|
|
|
28
27
|
describe() {
|
|
29
28
|
return { message: `Add enum ${this.data.enumName}` }
|
|
30
29
|
}
|
|
31
|
-
|
|
32
|
-
static createModification(data: CreateEnumModificationData) {
|
|
33
|
-
return { modification: this.id, ...data }
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
static createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
37
|
-
return Object.entries(updatedSchema.model.enums)
|
|
38
|
-
.filter(([name]) => !originalSchema.model.enums[name])
|
|
39
|
-
.map(([enumName, values]) => CreateEnumModification.createModification({ enumName, values }))
|
|
40
|
-
}
|
|
41
30
|
}
|
|
42
31
|
|
|
43
32
|
export interface CreateEnumModificationData {
|
|
44
33
|
enumName: string
|
|
45
34
|
values: readonly string[]
|
|
46
35
|
}
|
|
36
|
+
|
|
37
|
+
export const createEnumModification = createModificationType({
|
|
38
|
+
id: 'createEnum',
|
|
39
|
+
handler: CreateEnumModificationHandler,
|
|
40
|
+
})
|
|
41
|
+
|
|
42
|
+
export class CreateEnumDiffer implements Differ {
|
|
43
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
44
|
+
return Object.entries(updatedSchema.model.enums)
|
|
45
|
+
.filter(([name]) => !originalSchema.model.enums[name])
|
|
46
|
+
.map(([enumName, values]) => createEnumModification.createModification({
|
|
47
|
+
enumName,
|
|
48
|
+
values,
|
|
49
|
+
}))
|
|
50
|
+
}
|
|
51
|
+
}
|
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
|
|
6
|
-
export
|
|
7
|
-
static id = 'removeEnum'
|
|
6
|
+
export class RemoveEnumModificationHandler implements ModificationHandler<RemoveEnumModificationData> {
|
|
8
7
|
constructor(private readonly data: RemoveEnumModificationData, private readonly schema: Schema) {}
|
|
9
8
|
|
|
10
9
|
public createSql(builder: MigrationBuilder): void {
|
|
@@ -24,18 +23,21 @@ export const RemoveEnumModification: ModificationHandlerStatic<RemoveEnumModific
|
|
|
24
23
|
describe() {
|
|
25
24
|
return { message: `Remove ${this.data.enumName}` }
|
|
26
25
|
}
|
|
26
|
+
}
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
export interface RemoveEnumModificationData {
|
|
29
|
+
enumName: string
|
|
30
|
+
}
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
export const removeEnumModification = createModificationType({
|
|
33
|
+
id: 'removeEnum',
|
|
34
|
+
handler: RemoveEnumModificationHandler,
|
|
35
|
+
})
|
|
36
|
+
|
|
37
|
+
export class RemoveEnumDiffer implements Differ {
|
|
38
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
33
39
|
return Object.entries(originalSchema.model.enums)
|
|
34
40
|
.filter(([name]) => !updatedSchema.model.enums[name])
|
|
35
|
-
.map(([enumName, values]) =>
|
|
41
|
+
.map(([enumName, values]) => removeEnumModification.createModification({ enumName }))
|
|
36
42
|
}
|
|
37
43
|
}
|
|
38
|
-
|
|
39
|
-
export interface RemoveEnumModificationData {
|
|
40
|
-
enumName: string
|
|
41
|
-
}
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import deepEqual from 'fast-deep-equal'
|
|
6
6
|
import { createCheck, getConstraintName } from './enumUtils'
|
|
7
7
|
|
|
8
|
-
export
|
|
9
|
-
static id = 'updateEnum'
|
|
8
|
+
export class UpdateEnumModificationHandler implements ModificationHandler<UpdateEnumModificationData> {
|
|
10
9
|
constructor(private readonly data: UpdateEnumModificationData, private readonly schema: Schema) {}
|
|
11
10
|
|
|
12
11
|
public createSql(builder: MigrationBuilder): void {
|
|
@@ -37,23 +36,26 @@ export const UpdateEnumModification: ModificationHandlerStatic<UpdateEnumModific
|
|
|
37
36
|
: undefined
|
|
38
37
|
return { message: `Update enum ${this.data.enumName}`, failureWarning }
|
|
39
38
|
}
|
|
39
|
+
}
|
|
40
40
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
41
|
+
export interface UpdateEnumModificationData {
|
|
42
|
+
enumName: string
|
|
43
|
+
values: readonly string[]
|
|
44
|
+
}
|
|
44
45
|
|
|
45
|
-
|
|
46
|
+
export const updateEnumModification = createModificationType({
|
|
47
|
+
id: 'updateEnum',
|
|
48
|
+
handler: UpdateEnumModificationHandler,
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
export class UpdateEnumDiffer implements Differ {
|
|
52
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
46
53
|
return Object.entries(updatedSchema.model.enums)
|
|
47
54
|
.filter(
|
|
48
55
|
([name]) =>
|
|
49
56
|
originalSchema.model.enums[name] &&
|
|
50
57
|
!deepEqual(updatedSchema.model.enums[name], originalSchema.model.enums[name]),
|
|
51
58
|
)
|
|
52
|
-
.map(([enumName, values]) =>
|
|
59
|
+
.map(([enumName, values]) => updateEnumModification.createModification({ enumName, values }))
|
|
53
60
|
}
|
|
54
61
|
}
|
|
55
|
-
|
|
56
|
-
export interface UpdateEnumModificationData {
|
|
57
|
-
enumName: string
|
|
58
|
-
values: readonly string[]
|
|
59
|
-
}
|
|
@@ -2,11 +2,10 @@ import { acceptFieldVisitor, isInverseRelation, isRelation, NamingHelper } from
|
|
|
2
2
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
3
3
|
import { Schema } from '@contember/schema'
|
|
4
4
|
import { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils'
|
|
5
|
-
import {
|
|
5
|
+
import { createModificationType, Differ, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'
|
|
6
6
|
import { isDefined } from '../../utils/isDefined'
|
|
7
7
|
|
|
8
|
-
export
|
|
9
|
-
static id = 'removeField'
|
|
8
|
+
export class RemoveFieldModificationHandler implements ModificationHandler<RemoveFieldModificationData> {
|
|
10
9
|
|
|
11
10
|
constructor(
|
|
12
11
|
private readonly data: RemoveFieldModificationData,
|
|
@@ -47,11 +46,20 @@ export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModif
|
|
|
47
46
|
return { message: `Remove field ${this.data.entityName}.${this.data.fieldName}`, isDestructive: true }
|
|
48
47
|
}
|
|
49
48
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
export interface RemoveFieldModificationData {
|
|
52
|
+
entityName: string
|
|
53
|
+
fieldName: string
|
|
54
|
+
}
|
|
53
55
|
|
|
54
|
-
|
|
56
|
+
export const removeFieldModification = createModificationType({
|
|
57
|
+
id: 'removeField',
|
|
58
|
+
handler: RemoveFieldModificationHandler,
|
|
59
|
+
})
|
|
60
|
+
|
|
61
|
+
export class RemoveFieldDiffer implements Differ {
|
|
62
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
55
63
|
return Object.values(updatedSchema.model.entities)
|
|
56
64
|
.filter(({ name }) => originalSchema.model.entities[name])
|
|
57
65
|
.flatMap(entity => {
|
|
@@ -66,7 +74,7 @@ export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModif
|
|
|
66
74
|
return undefined
|
|
67
75
|
}
|
|
68
76
|
}
|
|
69
|
-
return
|
|
77
|
+
return removeFieldModification.createModification({
|
|
70
78
|
entityName: entity.name,
|
|
71
79
|
fieldName: field.name,
|
|
72
80
|
})
|
|
@@ -75,8 +83,3 @@ export const RemoveFieldModification: ModificationHandlerStatic<RemoveFieldModif
|
|
|
75
83
|
})
|
|
76
84
|
}
|
|
77
85
|
}
|
|
78
|
-
|
|
79
|
-
export interface RemoveFieldModificationData {
|
|
80
|
-
entityName: string
|
|
81
|
-
fieldName: string
|
|
82
|
-
}
|
|
@@ -13,17 +13,15 @@ import {
|
|
|
13
13
|
updateModel,
|
|
14
14
|
updateSchema,
|
|
15
15
|
} from '../utils/schemaUpdateUtils'
|
|
16
|
-
import { ModificationHandler, ModificationHandlerOptions
|
|
16
|
+
import { createModificationType, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'
|
|
17
17
|
import { acceptFieldVisitor, NamingHelper, PredicateDefinitionProcessor } from '@contember/schema-utils'
|
|
18
18
|
import { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_NAME } from '../ModificationVersions'
|
|
19
19
|
import { renameConstraintSchemaUpdater, renameConstraintsSqlBuilder } from '../utils/renameConstraintsHelper'
|
|
20
20
|
import { changeValue } from '../utils/valueUtils'
|
|
21
|
-
import {
|
|
21
|
+
import { updateColumnNameModification } from '../columns'
|
|
22
22
|
import { NoopModification } from '../NoopModification'
|
|
23
23
|
|
|
24
|
-
export
|
|
25
|
-
static id = 'updateFieldName'
|
|
26
|
-
|
|
24
|
+
export class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {
|
|
27
25
|
private renameColumnSubModification: ModificationHandler<any> = new NoopModification()
|
|
28
26
|
|
|
29
27
|
constructor(
|
|
@@ -32,7 +30,7 @@ export const UpdateFieldNameModification: ModificationHandlerStatic<UpdateFieldN
|
|
|
32
30
|
private readonly options: ModificationHandlerOptions,
|
|
33
31
|
) {
|
|
34
32
|
if (this.data.columnName) {
|
|
35
|
-
this.renameColumnSubModification =
|
|
33
|
+
this.renameColumnSubModification = updateColumnNameModification.createHandler({
|
|
36
34
|
entityName: this.data.entityName,
|
|
37
35
|
columnName: this.data.columnName,
|
|
38
36
|
fieldName: this.data.fieldName,
|
|
@@ -192,10 +190,6 @@ export const UpdateFieldNameModification: ModificationHandlerStatic<UpdateFieldN
|
|
|
192
190
|
describe() {
|
|
193
191
|
return { message: `Change field name ${this.data.entityName}.${this.data.fieldName} to ${this.data.newFieldName}` }
|
|
194
192
|
}
|
|
195
|
-
|
|
196
|
-
static createModification(data: UpdateFieldNameModificationData) {
|
|
197
|
-
return { modification: this.id, ...data }
|
|
198
|
-
}
|
|
199
193
|
}
|
|
200
194
|
|
|
201
195
|
export interface UpdateFieldNameModificationData {
|
|
@@ -204,3 +198,8 @@ export interface UpdateFieldNameModificationData {
|
|
|
204
198
|
newFieldName: string
|
|
205
199
|
columnName?: string
|
|
206
200
|
}
|
|
201
|
+
|
|
202
|
+
export const updateFieldNameModification = createModificationType({
|
|
203
|
+
id: 'updateFieldName',
|
|
204
|
+
handler: UpdateFieldNameModificationHandler,
|
|
205
|
+
})
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export * from './acl'
|
|
2
|
+
export * from './columns'
|
|
3
|
+
export * from './constraints'
|
|
4
|
+
export * from './entities'
|
|
5
|
+
export * from './enums'
|
|
6
|
+
export * from './fields'
|
|
7
|
+
export * from './relations'
|
|
8
|
+
export * from './validation'
|
|
9
|
+
export * from './ModificationHandlerFactory'
|
|
10
|
+
export * from './ModificationVersions'
|
|
11
|
+
export * from './ModificationHandler'
|
|
12
|
+
export { SchemaUpdateError } from './exceptions'
|
|
13
|
+
export * from './utils/sqlUpdateUtils'
|
|
@@ -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
|
-
}
|