@contember/schema-migrations 1.2.0-alpha.8 → 1.2.0-beta.1
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/Migration.d.ts +2 -0
- package/dist/src/Migration.d.ts.map +1 -1
- package/dist/src/Migration.js +2 -2
- package/dist/src/Migration.js.map +1 -1
- package/dist/src/MigrationCreator.d.ts +3 -1
- package/dist/src/MigrationCreator.d.ts.map +1 -1
- package/dist/src/MigrationCreator.js +2 -2
- package/dist/src/MigrationCreator.js.map +1 -1
- 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/MigrationFilesManager.d.ts.map +1 -1
- package/dist/src/MigrationFilesManager.js +10 -19
- package/dist/src/MigrationFilesManager.js.map +1 -1
- package/dist/src/MigrationsResolver.d.ts.map +1 -1
- package/dist/src/MigrationsResolver.js +1 -0
- package/dist/src/MigrationsResolver.js.map +1 -1
- package/dist/src/SchemaDiffer.d.ts +6 -1
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +46 -54
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/SchemaMigrator.d.ts +3 -2
- package/dist/src/SchemaMigrator.d.ts.map +1 -1
- package/dist/src/SchemaMigrator.js.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 +16 -8
- 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 +8 -7
- package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.js +43 -39
- 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 +21 -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 +20 -4
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +78 -71
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts +18 -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.d.ts +1 -3
- package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts.map +1 -1
- package/dist/src/modifications/differs/RemoveChangedFieldDiffer.js +1 -1
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts +1 -2
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts.map +1 -1
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +7 -20
- package/dist/src/modifications/differs/RemoveChangedViewDiffer.js.map +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.d.ts +19 -2
- package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.js +66 -63
- package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.d.ts +21 -2
- package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.js +59 -56
- package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts +22 -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 +18 -3
- package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -1
- package/dist/src/modifications/indexes/CreateIndexModification.js +68 -65
- package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -1
- package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +18 -2
- package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -1
- package/dist/src/modifications/indexes/RemoveIndexModification.js +47 -44
- package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +22 -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 +22 -2
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +81 -70
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +18 -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 +24 -3
- package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.js +99 -85
- package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +18 -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 +18 -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 +19 -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 +18 -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 +25 -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 +18 -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 +18 -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/settings/UpdateSettingsModification.d.ts +28 -0
- package/dist/src/modifications/settings/UpdateSettingsModification.d.ts.map +1 -0
- package/dist/src/modifications/settings/UpdateSettingsModification.js +64 -0
- package/dist/src/modifications/settings/UpdateSettingsModification.js.map +1 -0
- package/dist/src/modifications/settings/index.d.ts +2 -0
- package/dist/src/modifications/settings/index.d.ts.map +1 -0
- package/dist/src/modifications/settings/index.js +18 -0
- package/dist/src/modifications/settings/index.js.map +1 -0
- 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/utils/createJunctionTable.d.ts +2 -1
- package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
- package/dist/src/modifications/utils/createJunctionTable.js +7 -5
- package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
- package/dist/src/modifications/utils/diffUtils.d.ts +14 -12
- package/dist/src/modifications/utils/diffUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/diffUtils.js.map +1 -1
- package/dist/src/modifications/utils/schemaMeta.d.ts +8 -0
- package/dist/src/modifications/utils/schemaMeta.d.ts.map +1 -0
- package/dist/src/modifications/utils/schemaMeta.js +13 -0
- package/dist/src/modifications/utils/schemaMeta.js.map +1 -0
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +4 -2
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.js +24 -2
- package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/src/modifications/utils/viewDependencies.d.ts +4 -2
- package/dist/src/modifications/utils/viewDependencies.d.ts.map +1 -1
- package/dist/src/modifications/utils/viewDependencies.js +29 -6
- package/dist/src/modifications/utils/viewDependencies.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/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +3 -2
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js.map +1 -1
- 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/createManyHasMany.test.js +3 -2
- package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createView.test.js +80 -0
- package/dist/tests/cases/integration/createView.test.js.map +1 -1
- package/dist/tests/cases/integration/removeField.test.js +72 -0
- package/dist/tests/cases/integration/removeField.test.js.map +1 -1
- package/dist/tests/cases/integration/takenIndexName.test.d.ts +2 -0
- package/dist/tests/cases/integration/takenIndexName.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/takenIndexName.test.js +307 -0
- package/dist/tests/cases/integration/takenIndexName.test.js.map +1 -0
- package/dist/tests/cases/integration/updateColumnDefinition.test.js +160 -0
- package/dist/tests/cases/integration/updateColumnDefinition.test.js.map +1 -1
- package/dist/tests/scripts/checkCreateConsistentMigrations.js +5 -4
- package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
- package/dist/tests/src/tests.d.ts.map +1 -1
- package/dist/tests/src/tests.js +15 -5
- package/dist/tests/src/tests.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +6 -6
- package/src/Migration.ts +3 -1
- package/src/MigrationCreator.ts +2 -1
- package/src/MigrationDescriber.ts +8 -8
- package/src/MigrationFilesManager.ts +10 -20
- package/src/MigrationsResolver.ts +1 -0
- package/src/SchemaDiffer.ts +82 -85
- package/src/SchemaMigrator.ts +3 -2
- package/src/index.ts +1 -5
- package/src/modifications/ModificationHandler.ts +22 -9
- package/src/modifications/ModificationHandlerFactory.ts +69 -65
- 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 +58 -47
- 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 +9 -22
- package/src/modifications/entities/CreateEntityModification.ts +18 -9
- package/src/modifications/entities/CreateViewModification.ts +10 -8
- package/src/modifications/entities/RemoveEntityModification.ts +24 -16
- package/src/modifications/entities/ToggleEventLogModification.ts +20 -13
- package/src/modifications/entities/UpdateEntityNameModification.ts +11 -10
- 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 +18 -18
- package/src/modifications/index.ts +13 -0
- package/src/modifications/indexes/CreateIndexModification.ts +13 -12
- package/src/modifications/indexes/RemoveIndexModification.ts +12 -8
- package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +48 -29
- package/src/modifications/relations/ConvertOneToManyRelationModification.ts +50 -27
- package/src/modifications/relations/CreateRelationInverseSideModification.ts +15 -13
- package/src/modifications/relations/CreateRelationModification.ts +65 -35
- 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/settings/UpdateSettingsModification.ts +87 -0
- package/src/modifications/settings/index.ts +1 -0
- package/src/modifications/utils/columnUtils.ts +5 -0
- package/src/modifications/utils/createJunctionTable.ts +7 -5
- package/src/modifications/utils/diffUtils.ts +12 -12
- package/src/modifications/utils/schemaMeta.ts +18 -0
- package/src/modifications/utils/schemaUpdateUtils.ts +22 -2
- package/src/modifications/utils/viewDependencies.ts +28 -5
- package/src/modifications/validation/PatchValidationSchemaModification.ts +7 -7
- package/src/modifications/validation/UpdateValidationSchemaModification.ts +17 -14
- package/src/tsconfig.json +2 -2
- package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +3 -2
- package/tests/cases/integration/createColumn.test.ts +33 -0
- package/tests/cases/integration/createManyHasMany.test.ts +3 -2
- package/tests/cases/integration/createView.test.ts +70 -0
- package/tests/cases/integration/removeField.test.ts +58 -0
- package/tests/cases/integration/takenIndexName.test.ts +314 -0
- package/tests/cases/integration/updateColumnDefinition.test.ts +138 -1
- package/tests/scripts/checkCreateConsistentMigrations.ts +3 -2
- package/tests/src/tests.ts +21 -11
- 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,12 +1,10 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import { acceptFieldVisitor } from '@contember/schema-utils'
|
|
6
6
|
|
|
7
|
-
export
|
|
8
|
-
static id = 'createIndex'
|
|
9
|
-
|
|
7
|
+
export class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {
|
|
10
8
|
constructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}
|
|
11
9
|
|
|
12
10
|
public createSql(builder: MigrationBuilder): void {
|
|
@@ -17,13 +15,13 @@ export const CreateIndexModification: ModificationHandlerStatic<CreateIndexModif
|
|
|
17
15
|
const fields = this.data.index.fields
|
|
18
16
|
const columns = fields.map(fieldName => {
|
|
19
17
|
return acceptFieldVisitor(this.schema.model, entity, fieldName, {
|
|
20
|
-
visitColumn: ({
|
|
18
|
+
visitColumn: ({ column }) => {
|
|
21
19
|
return column.columnName
|
|
22
20
|
},
|
|
23
|
-
visitManyHasOne: ({
|
|
21
|
+
visitManyHasOne: ({ relation }) => {
|
|
24
22
|
return relation.joiningColumn.columnName
|
|
25
23
|
},
|
|
26
|
-
visitOneHasOneOwning: ({
|
|
24
|
+
visitOneHasOneOwning: ({ relation }) => {
|
|
27
25
|
return relation.joiningColumn.columnName
|
|
28
26
|
},
|
|
29
27
|
visitOneHasMany: () => {
|
|
@@ -62,16 +60,19 @@ export const CreateIndexModification: ModificationHandlerStatic<CreateIndexModif
|
|
|
62
60
|
message: `Create index(${this.data.index.fields.join(', ')}) on entity ${this.data.entityName}`,
|
|
63
61
|
}
|
|
64
62
|
}
|
|
63
|
+
}
|
|
65
64
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
export const createIndexModification = createModificationType({
|
|
66
|
+
id: 'createIndex',
|
|
67
|
+
handler: CreateIndexModificationHandler,
|
|
68
|
+
})
|
|
69
69
|
|
|
70
|
-
|
|
70
|
+
export class CreateIndexDiffer implements Differ {
|
|
71
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
71
72
|
return Object.values(updatedSchema.model.entities).flatMap(entity =>
|
|
72
73
|
Object.values(entity.indexes)
|
|
73
74
|
.filter(it => !originalSchema.model.entities[entity.name].indexes[it.name])
|
|
74
|
-
.map(index =>
|
|
75
|
+
.map(index => createIndexModification.createModification({ entityName: entity.name, index })),
|
|
75
76
|
)
|
|
76
77
|
}
|
|
77
78
|
}
|
|
@@ -1,11 +1,10 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import deepEqual from 'fast-deep-equal'
|
|
6
6
|
|
|
7
|
-
export
|
|
8
|
-
static id = 'removeIndex'
|
|
7
|
+
export class RemoveIndexModificationHandler implements ModificationHandler<RemoveIndexModificationData> {
|
|
9
8
|
constructor(private readonly data: RemoveIndexModificationData, private readonly schema: Schema) {}
|
|
10
9
|
|
|
11
10
|
public createSql(builder: MigrationBuilder): void {
|
|
@@ -34,12 +33,17 @@ export const RemoveIndexModification: ModificationHandlerStatic<RemoveIndexModif
|
|
|
34
33
|
const fields = this.schema.model.entities[this.data.entityName].indexes[this.data.indexName].fields
|
|
35
34
|
return { message: `Remove index (${fields.join(', ')}) on entity ${this.data.entityName}` }
|
|
36
35
|
}
|
|
36
|
+
}
|
|
37
37
|
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
38
|
+
export const removeIndexModification = createModificationType({
|
|
39
|
+
id: 'removeIndex',
|
|
40
|
+
handler: RemoveIndexModificationHandler,
|
|
41
|
+
})
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
export class RemoveIndexDiffer implements Differ {
|
|
41
45
|
|
|
42
|
-
|
|
46
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
43
47
|
return Object.values(originalSchema.model.entities).flatMap(entity =>
|
|
44
48
|
Object.values(entity.indexes)
|
|
45
49
|
.filter(
|
|
@@ -49,7 +53,7 @@ export const RemoveIndexModification: ModificationHandlerStatic<RemoveIndexModif
|
|
|
49
53
|
!deepEqual(it.fields, updatedSchema.model.entities[entity.name].indexes[it.name].fields)),
|
|
50
54
|
)
|
|
51
55
|
.map(index =>
|
|
52
|
-
|
|
56
|
+
removeIndexModification.createModification({
|
|
53
57
|
entityName: entity.name,
|
|
54
58
|
indexName: index.name,
|
|
55
59
|
}),
|
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
3
|
+
import {
|
|
4
|
+
addField,
|
|
5
|
+
addTakenIndexName,
|
|
6
|
+
SchemaUpdater,
|
|
7
|
+
updateEntity,
|
|
8
|
+
updateModel,
|
|
9
|
+
updateSchema,
|
|
10
|
+
} from '../utils/schemaUpdateUtils'
|
|
11
|
+
import {
|
|
12
|
+
createModificationType,
|
|
13
|
+
Differ,
|
|
14
|
+
ModificationHandler,
|
|
15
|
+
ModificationHandlerOptions,
|
|
16
|
+
} from '../ModificationHandler'
|
|
17
|
+
import { isInverseRelation, isOwningRelation, NamingHelper } from '@contember/schema-utils'
|
|
6
18
|
import { updateRelations } from '../utils/diffUtils'
|
|
7
|
-
import { UpdateFieldNameModification } from '../fields'
|
|
8
19
|
import { createJunctionTableSql } from '../utils/createJunctionTable'
|
|
9
20
|
import { wrapIdentifier } from '@contember/database'
|
|
10
21
|
import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
|
|
22
|
+
import { updateFieldNameModification } from '../fields'
|
|
23
|
+
import { SchemaWithMeta } from '../utils/schemaMeta'
|
|
11
24
|
|
|
12
|
-
export
|
|
13
|
-
static id = 'convertOneHasManyToManyHasManyRelation'
|
|
25
|
+
export class ConvertOneHasManyToManyHasManyRelationModificationHandler implements ModificationHandler<ConvertOneHasManyToManyHasManyRelationModificationData> {
|
|
14
26
|
private subModification: ModificationHandler<any>
|
|
15
27
|
|
|
16
28
|
constructor(
|
|
17
29
|
private readonly data: ConvertOneHasManyToManyHasManyRelationModificationData,
|
|
18
|
-
private readonly schema:
|
|
30
|
+
private readonly schema: SchemaWithMeta,
|
|
19
31
|
private readonly options: ModificationHandlerOptions,
|
|
20
32
|
) {
|
|
21
|
-
this.subModification =
|
|
33
|
+
this.subModification = updateFieldNameModification.createHandler(
|
|
22
34
|
{
|
|
23
35
|
entityName: this.data.entityName,
|
|
24
36
|
fieldName: this.data.fieldName,
|
|
@@ -34,7 +46,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
34
46
|
const { relation: oldRelation } = this.getRelation()
|
|
35
47
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
36
48
|
|
|
37
|
-
createJunctionTableSql(builder, this.options.systemSchema, entity, targetEntity, normalizeManyHasManyRelation(this.data.owningSide))
|
|
49
|
+
createJunctionTableSql(builder, this.options.systemSchema, this.schema, entity, targetEntity, normalizeManyHasManyRelation(this.data.owningSide))
|
|
38
50
|
const joiningTable = this.data.owningSide.joiningTable
|
|
39
51
|
builder.sql(`
|
|
40
52
|
INSERT INTO ${wrapIdentifier(joiningTable.tableName)} (
|
|
@@ -54,6 +66,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
54
66
|
this.subModification.getSchemaUpdater(),
|
|
55
67
|
updateModel(updateEntity(entityName, addField(normalizeManyHasManyRelation(this.data.owningSide)))),
|
|
56
68
|
this.data.inverseSide ? updateModel(updateEntity(this.data.owningSide.target, addField(this.data.inverseSide))) : undefined,
|
|
69
|
+
addTakenIndexName(NamingHelper.createJunctionTablePrimaryConstraintName(this.data.owningSide.joiningTable.tableName)),
|
|
57
70
|
)
|
|
58
71
|
}
|
|
59
72
|
|
|
@@ -63,11 +76,33 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
63
76
|
}
|
|
64
77
|
}
|
|
65
78
|
|
|
66
|
-
|
|
67
|
-
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
private getRelation(): { entity: Model.Entity; relation: Model.ManyHasOneRelation } {
|
|
83
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
84
|
+
const relation = entity.fields[this.data.fieldName]
|
|
85
|
+
if (relation.type !== Model.RelationType.ManyHasOne) {
|
|
86
|
+
throw new Error()
|
|
87
|
+
}
|
|
88
|
+
return { entity, relation }
|
|
68
89
|
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
export const convertOneHasManyToManyHasManyRelationModification = createModificationType({
|
|
93
|
+
id: 'convertOneHasManyToManyHasManyRelation',
|
|
94
|
+
handler: ConvertOneHasManyToManyHasManyRelationModificationHandler,
|
|
95
|
+
})
|
|
69
96
|
|
|
70
|
-
|
|
97
|
+
export interface ConvertOneHasManyToManyHasManyRelationModificationData {
|
|
98
|
+
entityName: string
|
|
99
|
+
fieldName: string
|
|
100
|
+
owningSide: PartialManyHasManyRelation
|
|
101
|
+
inverseSide?: Model.ManyHasManyInverseRelation
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export class ConvertOneHasManyToManyHasManyRelationDiffer implements Differ {
|
|
105
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
71
106
|
return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
|
|
72
107
|
if (
|
|
73
108
|
isInverseRelation(originalRelation) &&
|
|
@@ -81,7 +116,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
81
116
|
if (owningSide.type !== Model.RelationType.ManyHasMany || !isOwningRelation(owningSide)) {
|
|
82
117
|
throw new Error()
|
|
83
118
|
}
|
|
84
|
-
return
|
|
119
|
+
return convertOneHasManyToManyHasManyRelationModification.createModification({
|
|
85
120
|
entityName: updatedRelation.target,
|
|
86
121
|
fieldName: owningOldName,
|
|
87
122
|
owningSide,
|
|
@@ -91,20 +126,4 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
|
|
|
91
126
|
return undefined
|
|
92
127
|
})
|
|
93
128
|
}
|
|
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
129
|
}
|
|
@@ -1,24 +1,36 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import {
|
|
4
|
+
addTakenIndexName,
|
|
5
|
+
SchemaUpdater,
|
|
6
|
+
updateEntity,
|
|
7
|
+
updateField,
|
|
8
|
+
updateModel,
|
|
9
|
+
updateSchema,
|
|
10
|
+
} from '../utils/schemaUpdateUtils'
|
|
11
|
+
import {
|
|
12
|
+
createModificationType,
|
|
13
|
+
Differ,
|
|
14
|
+
ModificationHandler,
|
|
15
|
+
ModificationHandlerOptions,
|
|
16
|
+
} from '../ModificationHandler'
|
|
5
17
|
import { isOwningRelation, NamingHelper } from '@contember/schema-utils'
|
|
6
18
|
import { updateRelations } from '../utils/diffUtils'
|
|
7
|
-
import { UpdateFieldNameModification } from '../fields'
|
|
8
19
|
import { NoopModification } from '../NoopModification'
|
|
20
|
+
import { updateFieldNameModification } from '../fields'
|
|
21
|
+
import { resolveIndexName, SchemaWithMeta } from '../utils/schemaMeta'
|
|
9
22
|
|
|
10
|
-
export
|
|
11
|
-
static id = 'convertOneToManyRelation'
|
|
23
|
+
export class ConvertOneToManyRelationModificationHandler implements ModificationHandler<ConvertOneToManyRelationModificationData> {
|
|
12
24
|
private subModification: ModificationHandler<any>
|
|
13
25
|
|
|
14
26
|
constructor(
|
|
15
27
|
private readonly data: ConvertOneToManyRelationModificationData,
|
|
16
|
-
private readonly schema:
|
|
28
|
+
private readonly schema: SchemaWithMeta,
|
|
17
29
|
private readonly options: ModificationHandlerOptions,
|
|
18
30
|
) {
|
|
19
31
|
const { relation } = this.getRelation()
|
|
20
32
|
this.subModification = data.newInverseSideFieldName && relation.inversedBy ?
|
|
21
|
-
|
|
33
|
+
updateFieldNameModification.createHandler(
|
|
22
34
|
{
|
|
23
35
|
entityName: relation.target,
|
|
24
36
|
fieldName: relation.inversedBy,
|
|
@@ -32,7 +44,12 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
32
44
|
|
|
33
45
|
public createSql(builder: MigrationBuilder): void {
|
|
34
46
|
const { entity, relation } = this.getRelation()
|
|
35
|
-
|
|
47
|
+
const columnName = relation.joiningColumn.columnName
|
|
48
|
+
const proposedIndexName = NamingHelper.createForeignKeyIndexName(entity.tableName, columnName)
|
|
49
|
+
const indexName = resolveIndexName(this.schema, proposedIndexName)
|
|
50
|
+
builder.addIndex(entity.tableName, columnName, {
|
|
51
|
+
name: indexName,
|
|
52
|
+
})
|
|
36
53
|
const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
|
|
37
54
|
builder.dropConstraint(entity.tableName, uniqueConstraintName)
|
|
38
55
|
this.subModification.createSql(builder)
|
|
@@ -41,6 +58,8 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
41
58
|
public getSchemaUpdater(): SchemaUpdater {
|
|
42
59
|
const { relation } = this.getRelation()
|
|
43
60
|
const { entityName, fieldName } = this.data
|
|
61
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
62
|
+
const field = entity.fields[fieldName] as Model.OneHasOneOwningRelation
|
|
44
63
|
return updateSchema(
|
|
45
64
|
updateModel(
|
|
46
65
|
updateEntity(
|
|
@@ -68,6 +87,7 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
68
87
|
),
|
|
69
88
|
),
|
|
70
89
|
) : undefined,
|
|
90
|
+
addTakenIndexName(NamingHelper.createForeignKeyIndexName(entity.tableName, field.joiningColumn.columnName)),
|
|
71
91
|
)
|
|
72
92
|
}
|
|
73
93
|
|
|
@@ -77,11 +97,29 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
77
97
|
}
|
|
78
98
|
}
|
|
79
99
|
|
|
80
|
-
|
|
81
|
-
|
|
100
|
+
private getRelation() {
|
|
101
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
102
|
+
const relation = entity.fields[this.data.fieldName]
|
|
103
|
+
if (relation.type !== Model.RelationType.OneHasOne || !isOwningRelation(relation)) {
|
|
104
|
+
throw new Error()
|
|
105
|
+
}
|
|
106
|
+
return { entity, relation }
|
|
82
107
|
}
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export interface ConvertOneToManyRelationModificationData {
|
|
111
|
+
entityName: string
|
|
112
|
+
fieldName: string
|
|
113
|
+
newInverseSideFieldName?: string
|
|
114
|
+
}
|
|
83
115
|
|
|
84
|
-
|
|
116
|
+
export const convertOneToManyRelationModification = createModificationType({
|
|
117
|
+
id: 'convertOneToManyRelation',
|
|
118
|
+
handler: ConvertOneToManyRelationModificationHandler,
|
|
119
|
+
})
|
|
120
|
+
|
|
121
|
+
export class ConvertOneToManyRelationDiffer implements Differ {
|
|
122
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
85
123
|
return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
|
|
86
124
|
if (
|
|
87
125
|
isOwningRelation(originalRelation) &&
|
|
@@ -90,7 +128,7 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
90
128
|
updatedRelation.type === Model.RelationType.ManyHasOne
|
|
91
129
|
) {
|
|
92
130
|
const isInverseSideRenamed = originalRelation.inversedBy && updatedRelation.inversedBy && originalRelation.inversedBy !== updatedRelation.inversedBy
|
|
93
|
-
return
|
|
131
|
+
return convertOneToManyRelationModification.createModification({
|
|
94
132
|
entityName: updatedEntity.name,
|
|
95
133
|
fieldName: updatedRelation.name,
|
|
96
134
|
...(isInverseSideRenamed ? {
|
|
@@ -101,19 +139,4 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
|
|
|
101
139
|
return undefined
|
|
102
140
|
})
|
|
103
141
|
}
|
|
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
142
|
}
|
|
@@ -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
|
-
}
|
|
@@ -7,21 +7,33 @@ import {
|
|
|
7
7
|
NamingHelper,
|
|
8
8
|
} from '@contember/schema-utils'
|
|
9
9
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
10
|
-
import {
|
|
11
|
-
|
|
10
|
+
import {
|
|
11
|
+
addField,
|
|
12
|
+
addTakenIndexName,
|
|
13
|
+
SchemaUpdater,
|
|
14
|
+
updateEntity,
|
|
15
|
+
updateModel,
|
|
16
|
+
updateSchema,
|
|
17
|
+
} from '../utils/schemaUpdateUtils'
|
|
18
|
+
import {
|
|
19
|
+
createModificationType,
|
|
20
|
+
Differ,
|
|
21
|
+
ModificationHandler,
|
|
22
|
+
ModificationHandlerOptions,
|
|
23
|
+
} from '../ModificationHandler'
|
|
12
24
|
import { isIt } from '../../utils/isIt'
|
|
13
25
|
import { createFields } from '../utils/diffUtils'
|
|
14
26
|
import { getPrimaryColumnType } from '../utils/getPrimaryColumnType'
|
|
15
27
|
import { createJunctionTableSql } from '../utils/createJunctionTable'
|
|
16
28
|
import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
|
|
29
|
+
import { resolveIndexName, SchemaWithMeta } from '../utils/schemaMeta'
|
|
17
30
|
|
|
18
31
|
|
|
19
|
-
export
|
|
20
|
-
static id = 'createRelation'
|
|
32
|
+
export class CreateRelationModificationHandler implements ModificationHandler<CreateRelationModificationData> {
|
|
21
33
|
|
|
22
34
|
constructor(
|
|
23
35
|
private readonly data: CreateRelationModificationData,
|
|
24
|
-
private readonly schema:
|
|
36
|
+
private readonly schema: SchemaWithMeta,
|
|
25
37
|
private readonly options: ModificationHandlerOptions,
|
|
26
38
|
) {}
|
|
27
39
|
|
|
@@ -55,29 +67,43 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
|
|
|
55
67
|
})
|
|
56
68
|
}
|
|
57
69
|
acceptRelationTypeVisitor(this.schema.model, entity, this.getNormalizedOwningSide(), {
|
|
58
|
-
visitManyHasOne: ({
|
|
70
|
+
visitManyHasOne: ({ relation }) => {
|
|
59
71
|
createOwningSide(relation)
|
|
60
|
-
|
|
72
|
+
const columnName = relation.joiningColumn.columnName
|
|
73
|
+
const proposedIndexName = NamingHelper.createForeignKeyIndexName(entity.tableName, columnName)
|
|
74
|
+
const indexName = resolveIndexName(this.schema, proposedIndexName)
|
|
75
|
+
builder.addIndex(entity.tableName, columnName, {
|
|
76
|
+
name: indexName,
|
|
77
|
+
})
|
|
61
78
|
},
|
|
62
79
|
visitOneHasMany: () => {},
|
|
63
|
-
visitOneHasOneOwning: ({
|
|
80
|
+
visitOneHasOneOwning: ({ relation }) => {
|
|
64
81
|
createOwningSide(relation)
|
|
65
82
|
const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
|
|
66
83
|
builder.addConstraint(entity.tableName, uniqueConstraintName, { unique: [relation.joiningColumn.columnName] })
|
|
67
84
|
},
|
|
68
85
|
visitOneHasOneInverse: () => {},
|
|
69
|
-
visitManyHasManyOwning: ({
|
|
70
|
-
createJunctionTableSql(builder, this.options.systemSchema,
|
|
86
|
+
visitManyHasManyOwning: ({ relation }) => {
|
|
87
|
+
createJunctionTableSql(builder, this.options.systemSchema, this.schema, entity, targetEntity, relation)
|
|
71
88
|
},
|
|
72
89
|
visitManyHasManyInverse: () => {},
|
|
73
90
|
})
|
|
74
91
|
}
|
|
75
92
|
|
|
76
93
|
public getSchemaUpdater(): SchemaUpdater {
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
94
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
95
|
+
return updateSchema(
|
|
96
|
+
updateModel(
|
|
97
|
+
updateEntity(this.data.entityName, addField(this.getNormalizedOwningSide())),
|
|
98
|
+
this.data.inverseSide !== undefined
|
|
99
|
+
? updateEntity(this.data.owningSide.target, addField(this.data.inverseSide))
|
|
100
|
+
: undefined,
|
|
101
|
+
),
|
|
102
|
+
this.data.owningSide.type === Model.RelationType.ManyHasOne
|
|
103
|
+
? addTakenIndexName(NamingHelper.createForeignKeyIndexName(entity.tableName, this.data.owningSide.joiningColumn.columnName))
|
|
104
|
+
: undefined,
|
|
105
|
+
this.data.owningSide.type === Model.RelationType.ManyHasMany && isOwningRelation(this.data.owningSide)
|
|
106
|
+
? addTakenIndexName(NamingHelper.createJunctionTablePrimaryConstraintName(this.data.owningSide.joiningTable.tableName))
|
|
81
107
|
: undefined,
|
|
82
108
|
)
|
|
83
109
|
}
|
|
@@ -91,11 +117,32 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
|
|
|
91
117
|
return { message: `Add relation ${this.data.entityName}.${this.data.owningSide.name}`, failureWarning }
|
|
92
118
|
}
|
|
93
119
|
|
|
94
|
-
|
|
95
|
-
|
|
120
|
+
|
|
121
|
+
private getNormalizedOwningSide(): Model.AnyOwningRelation {
|
|
122
|
+
if (this.data.owningSide.type === Model.RelationType.ManyHasMany) {
|
|
123
|
+
return normalizeManyHasManyRelation(this.data.owningSide)
|
|
124
|
+
}
|
|
125
|
+
return this.data.owningSide
|
|
96
126
|
}
|
|
127
|
+
}
|
|
128
|
+
|
|
97
129
|
|
|
98
|
-
|
|
130
|
+
export type CreateRelationModificationData = {
|
|
131
|
+
entityName: string
|
|
132
|
+
owningSide:
|
|
133
|
+
| Model.ManyHasOneRelation
|
|
134
|
+
| Model.OneHasOneOwningRelation
|
|
135
|
+
| PartialManyHasManyRelation
|
|
136
|
+
inverseSide?: Model.AnyInverseRelation
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
export const createRelationModification = createModificationType({
|
|
140
|
+
id: 'createRelation',
|
|
141
|
+
handler: CreateRelationModificationHandler,
|
|
142
|
+
})
|
|
143
|
+
|
|
144
|
+
export class CreateRelationDiffer implements Differ {
|
|
145
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
99
146
|
return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
|
|
100
147
|
if (!isRelation(newField) || !isOwningRelation(newField)) {
|
|
101
148
|
return undefined
|
|
@@ -106,28 +153,11 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
|
|
|
106
153
|
if (inverseSide && !(isRelation(inverseSide) && isInverseRelation(inverseSide))) {
|
|
107
154
|
throw new Error()
|
|
108
155
|
}
|
|
109
|
-
return
|
|
156
|
+
return createRelationModification.createModification({
|
|
110
157
|
entityName: updatedEntity.name,
|
|
111
158
|
owningSide: newField,
|
|
112
159
|
...(inverseSide ? { inverseSide } : {}),
|
|
113
160
|
})
|
|
114
161
|
})
|
|
115
162
|
}
|
|
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
163
|
}
|
|
@@ -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
|
-
}
|