@contember/schema-migrations 2.1.0-beta.2 → 2.2.0-alpha.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/development/index.cjs +3 -0
- package/dist/development/index.cjs.map +1 -1
- package/dist/development/index.js +3 -0
- package/dist/development/index.js.map +1 -1
- package/dist/development/src/MigrationDescriber.cjs.map +1 -1
- package/dist/development/src/MigrationDescriber.js.map +1 -1
- package/dist/development/src/SchemaDiffer.cjs +27 -12
- package/dist/development/src/SchemaDiffer.cjs.map +1 -1
- package/dist/development/src/SchemaDiffer.js +27 -12
- package/dist/development/src/SchemaDiffer.js.map +1 -1
- package/dist/development/src/SchemaMigrator.cjs.map +1 -1
- package/dist/development/src/SchemaMigrator.js.map +1 -1
- package/dist/development/src/modifications/ModificationHandler.cjs.map +1 -1
- package/dist/development/src/modifications/ModificationHandler.js.map +1 -1
- package/dist/development/src/modifications/ModificationHandlerFactory.cjs +2 -0
- package/dist/development/src/modifications/ModificationHandlerFactory.cjs.map +1 -1
- package/dist/development/src/modifications/ModificationHandlerFactory.js +2 -0
- package/dist/development/src/modifications/ModificationHandlerFactory.js.map +1 -1
- package/dist/development/src/modifications/NoopModification.cjs.map +1 -1
- package/dist/development/src/modifications/NoopModification.js.map +1 -1
- package/dist/development/src/modifications/acl/PatchAclSchemaModification.cjs.map +1 -1
- package/dist/development/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
- package/dist/development/src/modifications/acl/UpdateAclSchemaModification.cjs.map +1 -1
- package/dist/development/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
- package/dist/development/src/modifications/actions/CreateTargetModification.cjs.map +1 -1
- package/dist/development/src/modifications/actions/CreateTargetModification.js.map +1 -1
- package/dist/development/src/modifications/actions/CreateTriggerModification.cjs.map +1 -1
- package/dist/development/src/modifications/actions/CreateTriggerModification.js.map +1 -1
- package/dist/development/src/modifications/actions/PatchTriggerModification.cjs.map +1 -1
- package/dist/development/src/modifications/actions/PatchTriggerModification.js.map +1 -1
- package/dist/development/src/modifications/actions/RemoveTargetModification.cjs.map +1 -1
- package/dist/development/src/modifications/actions/RemoveTargetModification.js.map +1 -1
- package/dist/development/src/modifications/actions/RemoveTriggerModification.cjs.map +1 -1
- package/dist/development/src/modifications/actions/RemoveTriggerModification.js.map +1 -1
- package/dist/development/src/modifications/actions/UpdateTargetModification.cjs.map +1 -1
- package/dist/development/src/modifications/actions/UpdateTargetModification.js.map +1 -1
- package/dist/development/src/modifications/actions/UpdateTriggerModification.cjs.map +1 -1
- package/dist/development/src/modifications/actions/UpdateTriggerModification.js.map +1 -1
- package/dist/development/src/modifications/columns/CreateColumnModification.cjs.map +1 -1
- package/dist/development/src/modifications/columns/CreateColumnModification.js.map +1 -1
- package/dist/development/src/modifications/columns/UpdateColumnDefinitionModification.cjs.map +1 -1
- package/dist/development/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/development/src/modifications/columns/UpdateColumnNameModification.cjs.map +1 -1
- package/dist/development/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
- package/dist/development/src/modifications/columns/columnUtils.cjs.map +1 -1
- package/dist/development/src/modifications/columns/columnUtils.js.map +1 -1
- package/dist/development/src/modifications/constraints/CreateUniqueConstraintModification.cjs.map +1 -1
- package/dist/development/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
- package/dist/development/src/modifications/constraints/RemoveUniqueConstraintModification.cjs.map +1 -1
- package/dist/development/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
- package/dist/development/src/modifications/differs/RemoveChangedFieldDiffer.cjs.map +1 -1
- package/dist/development/src/modifications/differs/RemoveChangedFieldDiffer.js.map +1 -1
- package/dist/development/src/modifications/differs/RemoveViewDiffer.cjs +4 -1
- package/dist/development/src/modifications/differs/RemoveViewDiffer.cjs.map +1 -1
- package/dist/development/src/modifications/differs/RemoveViewDiffer.js +5 -2
- package/dist/development/src/modifications/differs/RemoveViewDiffer.js.map +1 -1
- package/dist/development/src/modifications/differs/UpdateViewDiffer.cjs +45 -0
- package/dist/development/src/modifications/differs/UpdateViewDiffer.cjs.map +1 -0
- package/dist/development/src/modifications/differs/UpdateViewDiffer.js +45 -0
- package/dist/development/src/modifications/differs/UpdateViewDiffer.js.map +1 -0
- package/dist/development/src/modifications/entities/CreateEntityModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/development/src/modifications/entities/CreateViewModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/development/src/modifications/entities/RemoveEntityModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/RemoveEntityModification.js.map +1 -1
- package/dist/development/src/modifications/entities/ToggleEventLogModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
- package/dist/development/src/modifications/entities/UpdateEntityNameModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
- package/dist/development/src/modifications/entities/UpdateEntityOrderByModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/UpdateEntityOrderByModification.js.map +1 -1
- package/dist/development/src/modifications/entities/UpdateEntityTableNameModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/UpdateEntityTableNameModification.js.map +1 -1
- package/dist/development/src/modifications/entities/UpdateViewModification.cjs.map +1 -1
- package/dist/development/src/modifications/entities/UpdateViewModification.js.map +1 -1
- package/dist/development/src/modifications/enums/CreateEnumModification.cjs.map +1 -1
- package/dist/development/src/modifications/enums/CreateEnumModification.js.map +1 -1
- package/dist/development/src/modifications/enums/RemoveEnumModification.cjs.map +1 -1
- package/dist/development/src/modifications/enums/RemoveEnumModification.js.map +1 -1
- package/dist/development/src/modifications/enums/UpdateEnumModification.cjs.map +1 -1
- package/dist/development/src/modifications/enums/UpdateEnumModification.js.map +1 -1
- package/dist/development/src/modifications/enums/enumUtils.cjs.map +1 -1
- package/dist/development/src/modifications/enums/enumUtils.js.map +1 -1
- package/dist/development/src/modifications/fields/RemoveFieldModification.cjs.map +1 -1
- package/dist/development/src/modifications/fields/RemoveFieldModification.js.map +1 -1
- package/dist/development/src/modifications/fields/UpdateFieldNameModification.cjs +10 -4
- package/dist/development/src/modifications/fields/UpdateFieldNameModification.cjs.map +1 -1
- package/dist/development/src/modifications/fields/UpdateFieldNameModification.js +10 -4
- package/dist/development/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
- package/dist/development/src/modifications/indexes/CreateIndexModification.cjs +23 -7
- package/dist/development/src/modifications/indexes/CreateIndexModification.cjs.map +1 -1
- package/dist/development/src/modifications/indexes/CreateIndexModification.js +23 -7
- package/dist/development/src/modifications/indexes/CreateIndexModification.js.map +1 -1
- package/dist/development/src/modifications/indexes/RemoveIndexModification.cjs +52 -17
- package/dist/development/src/modifications/indexes/RemoveIndexModification.cjs.map +1 -1
- package/dist/development/src/modifications/indexes/RemoveIndexModification.js +52 -17
- package/dist/development/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
- package/dist/development/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.cjs +140 -0
- package/dist/development/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.cjs.map +1 -0
- package/dist/development/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.js +140 -0
- package/dist/development/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.js.map +1 -0
- package/dist/development/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
- package/dist/development/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.js.map +1 -1
- package/dist/development/src/modifications/relations/ConvertOneToManyRelationModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
- package/dist/development/src/modifications/relations/CreateRelationInverseSideModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
- package/dist/development/src/modifications/relations/CreateRelationModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/CreateRelationModification.js.map +1 -1
- package/dist/development/src/modifications/relations/DisableOrphanRemovalModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
- package/dist/development/src/modifications/relations/EnableOrphanRemovalModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
- package/dist/development/src/modifications/relations/MakeRelationNotNullModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/MakeRelationNotNullModification.js.map +1 -1
- package/dist/development/src/modifications/relations/MakeRelationNullableModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/MakeRelationNullableModification.js.map +1 -1
- package/dist/development/src/modifications/relations/ToggleJunctionEventLogModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -1
- package/dist/development/src/modifications/relations/UpdateRelationOnDeleteModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
- package/dist/development/src/modifications/relations/UpdateRelationOrderByModification.cjs.map +1 -1
- package/dist/development/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
- package/dist/development/src/modifications/relations/helpers.cjs.map +1 -1
- package/dist/development/src/modifications/relations/helpers.js.map +1 -1
- package/dist/development/src/modifications/settings/UpdateSettingsModification.cjs.map +1 -1
- package/dist/development/src/modifications/settings/UpdateSettingsModification.js.map +1 -1
- package/dist/development/src/modifications/upgrade/RemoveIndexNamesModification.cjs.map +1 -1
- package/dist/development/src/modifications/upgrade/RemoveIndexNamesModification.js.map +1 -1
- package/dist/development/src/modifications/utils/createJunctionTable.cjs.map +1 -1
- package/dist/development/src/modifications/utils/createJunctionTable.js.map +1 -1
- package/dist/development/src/modifications/utils/diffUtils.cjs.map +1 -1
- package/dist/development/src/modifications/utils/diffUtils.js.map +1 -1
- package/dist/development/src/modifications/utils/schemaUpdateUtils.cjs.map +1 -1
- package/dist/development/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/development/src/modifications/utils/viewDependencies.cjs +15 -1
- package/dist/development/src/modifications/utils/viewDependencies.cjs.map +1 -1
- package/dist/development/src/modifications/utils/viewDependencies.js +16 -2
- package/dist/development/src/modifications/utils/viewDependencies.js.map +1 -1
- package/dist/development/src/modifications/validation/PatchValidationSchemaModification.cjs.map +1 -1
- package/dist/development/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
- package/dist/development/src/modifications/validation/UpdateValidationSchemaModification.cjs.map +1 -1
- package/dist/development/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
- package/dist/production/index.cjs +3 -0
- package/dist/production/index.cjs.map +1 -1
- package/dist/production/index.js +3 -0
- package/dist/production/index.js.map +1 -1
- package/dist/production/src/MigrationDescriber.cjs.map +1 -1
- package/dist/production/src/MigrationDescriber.js.map +1 -1
- package/dist/production/src/SchemaDiffer.cjs +27 -12
- package/dist/production/src/SchemaDiffer.cjs.map +1 -1
- package/dist/production/src/SchemaDiffer.js +27 -12
- package/dist/production/src/SchemaDiffer.js.map +1 -1
- package/dist/production/src/SchemaMigrator.cjs.map +1 -1
- package/dist/production/src/SchemaMigrator.js.map +1 -1
- package/dist/production/src/modifications/ModificationHandler.cjs.map +1 -1
- package/dist/production/src/modifications/ModificationHandler.js.map +1 -1
- package/dist/production/src/modifications/ModificationHandlerFactory.cjs +2 -0
- package/dist/production/src/modifications/ModificationHandlerFactory.cjs.map +1 -1
- package/dist/production/src/modifications/ModificationHandlerFactory.js +2 -0
- package/dist/production/src/modifications/ModificationHandlerFactory.js.map +1 -1
- package/dist/production/src/modifications/NoopModification.cjs.map +1 -1
- package/dist/production/src/modifications/NoopModification.js.map +1 -1
- package/dist/production/src/modifications/acl/PatchAclSchemaModification.cjs.map +1 -1
- package/dist/production/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
- package/dist/production/src/modifications/acl/UpdateAclSchemaModification.cjs.map +1 -1
- package/dist/production/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
- package/dist/production/src/modifications/actions/CreateTargetModification.cjs.map +1 -1
- package/dist/production/src/modifications/actions/CreateTargetModification.js.map +1 -1
- package/dist/production/src/modifications/actions/CreateTriggerModification.cjs.map +1 -1
- package/dist/production/src/modifications/actions/CreateTriggerModification.js.map +1 -1
- package/dist/production/src/modifications/actions/PatchTriggerModification.cjs.map +1 -1
- package/dist/production/src/modifications/actions/PatchTriggerModification.js.map +1 -1
- package/dist/production/src/modifications/actions/RemoveTargetModification.cjs.map +1 -1
- package/dist/production/src/modifications/actions/RemoveTargetModification.js.map +1 -1
- package/dist/production/src/modifications/actions/RemoveTriggerModification.cjs.map +1 -1
- package/dist/production/src/modifications/actions/RemoveTriggerModification.js.map +1 -1
- package/dist/production/src/modifications/actions/UpdateTargetModification.cjs.map +1 -1
- package/dist/production/src/modifications/actions/UpdateTargetModification.js.map +1 -1
- package/dist/production/src/modifications/actions/UpdateTriggerModification.cjs.map +1 -1
- package/dist/production/src/modifications/actions/UpdateTriggerModification.js.map +1 -1
- package/dist/production/src/modifications/columns/CreateColumnModification.cjs.map +1 -1
- package/dist/production/src/modifications/columns/CreateColumnModification.js.map +1 -1
- package/dist/production/src/modifications/columns/UpdateColumnDefinitionModification.cjs.map +1 -1
- package/dist/production/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/production/src/modifications/columns/UpdateColumnNameModification.cjs.map +1 -1
- package/dist/production/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
- package/dist/production/src/modifications/columns/columnUtils.cjs.map +1 -1
- package/dist/production/src/modifications/columns/columnUtils.js.map +1 -1
- package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.cjs.map +1 -1
- package/dist/production/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
- package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.cjs.map +1 -1
- package/dist/production/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
- package/dist/production/src/modifications/differs/RemoveChangedFieldDiffer.cjs.map +1 -1
- package/dist/production/src/modifications/differs/RemoveChangedFieldDiffer.js.map +1 -1
- package/dist/production/src/modifications/differs/RemoveViewDiffer.cjs +4 -1
- package/dist/production/src/modifications/differs/RemoveViewDiffer.cjs.map +1 -1
- package/dist/production/src/modifications/differs/RemoveViewDiffer.js +5 -2
- package/dist/production/src/modifications/differs/RemoveViewDiffer.js.map +1 -1
- package/dist/production/src/modifications/differs/UpdateViewDiffer.cjs +45 -0
- package/dist/production/src/modifications/differs/UpdateViewDiffer.cjs.map +1 -0
- package/dist/production/src/modifications/differs/UpdateViewDiffer.js +45 -0
- package/dist/production/src/modifications/differs/UpdateViewDiffer.js.map +1 -0
- package/dist/production/src/modifications/entities/CreateEntityModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/production/src/modifications/entities/CreateViewModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/production/src/modifications/entities/RemoveEntityModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/RemoveEntityModification.js.map +1 -1
- package/dist/production/src/modifications/entities/ToggleEventLogModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
- package/dist/production/src/modifications/entities/UpdateEntityNameModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
- package/dist/production/src/modifications/entities/UpdateEntityOrderByModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/UpdateEntityOrderByModification.js.map +1 -1
- package/dist/production/src/modifications/entities/UpdateEntityTableNameModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/UpdateEntityTableNameModification.js.map +1 -1
- package/dist/production/src/modifications/entities/UpdateViewModification.cjs.map +1 -1
- package/dist/production/src/modifications/entities/UpdateViewModification.js.map +1 -1
- package/dist/production/src/modifications/enums/CreateEnumModification.cjs.map +1 -1
- package/dist/production/src/modifications/enums/CreateEnumModification.js.map +1 -1
- package/dist/production/src/modifications/enums/RemoveEnumModification.cjs.map +1 -1
- package/dist/production/src/modifications/enums/RemoveEnumModification.js.map +1 -1
- package/dist/production/src/modifications/enums/UpdateEnumModification.cjs.map +1 -1
- package/dist/production/src/modifications/enums/UpdateEnumModification.js.map +1 -1
- package/dist/production/src/modifications/enums/enumUtils.cjs.map +1 -1
- package/dist/production/src/modifications/enums/enumUtils.js.map +1 -1
- package/dist/production/src/modifications/fields/RemoveFieldModification.cjs.map +1 -1
- package/dist/production/src/modifications/fields/RemoveFieldModification.js.map +1 -1
- package/dist/production/src/modifications/fields/UpdateFieldNameModification.cjs +10 -4
- package/dist/production/src/modifications/fields/UpdateFieldNameModification.cjs.map +1 -1
- package/dist/production/src/modifications/fields/UpdateFieldNameModification.js +10 -4
- package/dist/production/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
- package/dist/production/src/modifications/indexes/CreateIndexModification.cjs +23 -7
- package/dist/production/src/modifications/indexes/CreateIndexModification.cjs.map +1 -1
- package/dist/production/src/modifications/indexes/CreateIndexModification.js +23 -7
- package/dist/production/src/modifications/indexes/CreateIndexModification.js.map +1 -1
- package/dist/production/src/modifications/indexes/RemoveIndexModification.cjs +52 -17
- package/dist/production/src/modifications/indexes/RemoveIndexModification.cjs.map +1 -1
- package/dist/production/src/modifications/indexes/RemoveIndexModification.js +52 -17
- package/dist/production/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
- package/dist/production/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.cjs +140 -0
- package/dist/production/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.cjs.map +1 -0
- package/dist/production/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.js +140 -0
- package/dist/production/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.js.map +1 -0
- package/dist/production/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
- package/dist/production/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.js.map +1 -1
- package/dist/production/src/modifications/relations/ConvertOneToManyRelationModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
- package/dist/production/src/modifications/relations/CreateRelationInverseSideModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
- package/dist/production/src/modifications/relations/CreateRelationModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/CreateRelationModification.js.map +1 -1
- package/dist/production/src/modifications/relations/DisableOrphanRemovalModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
- package/dist/production/src/modifications/relations/EnableOrphanRemovalModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
- package/dist/production/src/modifications/relations/MakeRelationNotNullModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/MakeRelationNotNullModification.js.map +1 -1
- package/dist/production/src/modifications/relations/MakeRelationNullableModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/MakeRelationNullableModification.js.map +1 -1
- package/dist/production/src/modifications/relations/ToggleJunctionEventLogModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -1
- package/dist/production/src/modifications/relations/UpdateRelationOnDeleteModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
- package/dist/production/src/modifications/relations/UpdateRelationOrderByModification.cjs.map +1 -1
- package/dist/production/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
- package/dist/production/src/modifications/relations/helpers.cjs.map +1 -1
- package/dist/production/src/modifications/relations/helpers.js.map +1 -1
- package/dist/production/src/modifications/settings/UpdateSettingsModification.cjs.map +1 -1
- package/dist/production/src/modifications/settings/UpdateSettingsModification.js.map +1 -1
- package/dist/production/src/modifications/upgrade/RemoveIndexNamesModification.cjs.map +1 -1
- package/dist/production/src/modifications/upgrade/RemoveIndexNamesModification.js.map +1 -1
- package/dist/production/src/modifications/utils/createJunctionTable.cjs.map +1 -1
- package/dist/production/src/modifications/utils/createJunctionTable.js.map +1 -1
- package/dist/production/src/modifications/utils/diffUtils.cjs.map +1 -1
- package/dist/production/src/modifications/utils/diffUtils.js.map +1 -1
- package/dist/production/src/modifications/utils/schemaUpdateUtils.cjs.map +1 -1
- package/dist/production/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/production/src/modifications/utils/viewDependencies.cjs +15 -1
- package/dist/production/src/modifications/utils/viewDependencies.cjs.map +1 -1
- package/dist/production/src/modifications/utils/viewDependencies.js +16 -2
- package/dist/production/src/modifications/utils/viewDependencies.js.map +1 -1
- package/dist/production/src/modifications/validation/PatchValidationSchemaModification.cjs.map +1 -1
- package/dist/production/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
- package/dist/production/src/modifications/validation/UpdateValidationSchemaModification.cjs.map +1 -1
- package/dist/production/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
- package/dist/tests/cases/integration/convertManyHasManyToJoiningEntity.test.d.ts +2 -0
- package/dist/tests/cases/integration/convertManyHasManyToJoiningEntity.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/skipNonModelDiffers.test.d.ts +2 -0
- package/dist/tests/cases/integration/skipNonModelDiffers.test.d.ts.map +1 -0
- package/dist/tests/src/tests.d.ts +4 -3
- package/dist/tests/src/tests.d.ts.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/dist/types/MigrationDescriber.d.ts +2 -2
- package/dist/types/MigrationDescriber.d.ts.map +1 -1
- package/dist/types/SchemaDiffer.d.ts +12 -5
- package/dist/types/SchemaDiffer.d.ts.map +1 -1
- package/dist/types/SchemaMigrator.d.ts +2 -2
- package/dist/types/SchemaMigrator.d.ts.map +1 -1
- package/dist/types/index.d.ts +6 -6
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/modifications/ModificationHandler.d.ts +2 -2
- package/dist/types/modifications/ModificationHandler.d.ts.map +1 -1
- package/dist/types/modifications/ModificationHandlerFactory.d.ts +1 -1
- package/dist/types/modifications/ModificationHandlerFactory.d.ts.map +1 -1
- package/dist/types/modifications/NoopModification.d.ts +2 -2
- package/dist/types/modifications/NoopModification.d.ts.map +1 -1
- package/dist/types/modifications/acl/PatchAclSchemaModification.d.ts +3 -3
- package/dist/types/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
- package/dist/types/modifications/acl/UpdateAclSchemaModification.d.ts +4 -4
- package/dist/types/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
- package/dist/types/modifications/acl/index.d.ts +2 -2
- package/dist/types/modifications/acl/index.d.ts.map +1 -1
- package/dist/types/modifications/actions/CreateTargetModification.d.ts +4 -4
- package/dist/types/modifications/actions/CreateTargetModification.d.ts.map +1 -1
- package/dist/types/modifications/actions/CreateTriggerModification.d.ts +4 -4
- package/dist/types/modifications/actions/CreateTriggerModification.d.ts.map +1 -1
- package/dist/types/modifications/actions/PatchTriggerModification.d.ts +3 -3
- package/dist/types/modifications/actions/PatchTriggerModification.d.ts.map +1 -1
- package/dist/types/modifications/actions/RemoveTargetModification.d.ts +4 -4
- package/dist/types/modifications/actions/RemoveTargetModification.d.ts.map +1 -1
- package/dist/types/modifications/actions/RemoveTriggerModification.d.ts +4 -4
- package/dist/types/modifications/actions/RemoveTriggerModification.d.ts.map +1 -1
- package/dist/types/modifications/actions/UpdateTargetModification.d.ts +4 -4
- package/dist/types/modifications/actions/UpdateTargetModification.d.ts.map +1 -1
- package/dist/types/modifications/actions/UpdateTriggerModification.d.ts +4 -4
- package/dist/types/modifications/actions/UpdateTriggerModification.d.ts.map +1 -1
- package/dist/types/modifications/actions/index.d.ts +4 -4
- package/dist/types/modifications/actions/index.d.ts.map +1 -1
- package/dist/types/modifications/columns/CreateColumnModification.d.ts +4 -4
- package/dist/types/modifications/columns/CreateColumnModification.d.ts.map +1 -1
- package/dist/types/modifications/columns/UpdateColumnDefinitionModification.d.ts +4 -4
- package/dist/types/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/types/modifications/columns/UpdateColumnNameModification.d.ts +4 -4
- package/dist/types/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
- package/dist/types/modifications/columns/index.d.ts +3 -3
- package/dist/types/modifications/columns/index.d.ts.map +1 -1
- package/dist/types/modifications/constraints/CreateUniqueConstraintModification.d.ts +4 -4
- package/dist/types/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
- package/dist/types/modifications/constraints/RemoveUniqueConstraintModification.d.ts +4 -4
- package/dist/types/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
- package/dist/types/modifications/constraints/index.d.ts +3 -3
- package/dist/types/modifications/constraints/index.d.ts.map +1 -1
- package/dist/types/modifications/differs/RemoveChangedFieldDiffer.d.ts +2 -2
- package/dist/types/modifications/differs/RemoveChangedFieldDiffer.d.ts.map +1 -1
- package/dist/types/modifications/differs/RemoveViewDiffer.d.ts +14 -3
- package/dist/types/modifications/differs/RemoveViewDiffer.d.ts.map +1 -1
- package/dist/types/modifications/differs/UpdateViewDiffer.d.ts +19 -0
- package/dist/types/modifications/differs/UpdateViewDiffer.d.ts.map +1 -0
- package/dist/types/modifications/differs/index.d.ts +3 -2
- package/dist/types/modifications/differs/index.d.ts.map +1 -1
- package/dist/types/modifications/entities/CreateEntityModification.d.ts +4 -4
- package/dist/types/modifications/entities/CreateEntityModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/CreateViewModification.d.ts +4 -4
- package/dist/types/modifications/entities/CreateViewModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/RemoveEntityModification.d.ts +4 -4
- package/dist/types/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/ToggleEventLogModification.d.ts +4 -4
- package/dist/types/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/UpdateEntityNameModification.d.ts +3 -3
- package/dist/types/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/UpdateEntityOrderByModification.d.ts +4 -4
- package/dist/types/modifications/entities/UpdateEntityOrderByModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/UpdateEntityTableNameModification.d.ts +4 -4
- package/dist/types/modifications/entities/UpdateEntityTableNameModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/UpdateViewModification.d.ts +3 -3
- package/dist/types/modifications/entities/UpdateViewModification.d.ts.map +1 -1
- package/dist/types/modifications/entities/index.d.ts +7 -7
- package/dist/types/modifications/entities/index.d.ts.map +1 -1
- package/dist/types/modifications/enums/CreateEnumModification.d.ts +4 -4
- package/dist/types/modifications/enums/CreateEnumModification.d.ts.map +1 -1
- package/dist/types/modifications/enums/RemoveEnumModification.d.ts +4 -4
- package/dist/types/modifications/enums/RemoveEnumModification.d.ts.map +1 -1
- package/dist/types/modifications/enums/UpdateEnumModification.d.ts +4 -4
- package/dist/types/modifications/enums/UpdateEnumModification.d.ts.map +1 -1
- package/dist/types/modifications/enums/index.d.ts +3 -3
- package/dist/types/modifications/enums/index.d.ts.map +1 -1
- package/dist/types/modifications/fields/RemoveFieldModification.d.ts +4 -4
- package/dist/types/modifications/fields/RemoveFieldModification.d.ts.map +1 -1
- package/dist/types/modifications/fields/UpdateFieldNameModification.d.ts +3 -3
- package/dist/types/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
- package/dist/types/modifications/fields/index.d.ts +2 -2
- package/dist/types/modifications/fields/index.d.ts.map +1 -1
- package/dist/types/modifications/index.d.ts +13 -13
- package/dist/types/modifications/index.d.ts.map +1 -1
- package/dist/types/modifications/indexes/CreateIndexModification.d.ts +4 -4
- package/dist/types/modifications/indexes/CreateIndexModification.d.ts.map +1 -1
- package/dist/types/modifications/indexes/RemoveIndexModification.d.ts +18 -6
- package/dist/types/modifications/indexes/RemoveIndexModification.d.ts.map +1 -1
- package/dist/types/modifications/indexes/index.d.ts +2 -2
- package/dist/types/modifications/indexes/index.d.ts.map +1 -1
- package/dist/types/modifications/relations/ConvertManyHasManyToJoiningEntityModification.d.ts +52 -0
- package/dist/types/modifications/relations/ConvertManyHasManyToJoiningEntityModification.d.ts.map +1 -0
- package/dist/types/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +5 -5
- package/dist/types/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.d.ts +4 -4
- package/dist/types/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/ConvertOneToManyRelationModification.d.ts +4 -4
- package/dist/types/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/CreateRelationInverseSideModification.d.ts +4 -4
- package/dist/types/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/CreateRelationModification.d.ts +5 -5
- package/dist/types/modifications/relations/CreateRelationModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/DisableOrphanRemovalModification.d.ts +4 -4
- package/dist/types/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/EnableOrphanRemovalModification.d.ts +4 -4
- package/dist/types/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/MakeRelationNotNullModification.d.ts +4 -4
- package/dist/types/modifications/relations/MakeRelationNotNullModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/MakeRelationNullableModification.d.ts +4 -4
- package/dist/types/modifications/relations/MakeRelationNullableModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/ToggleJunctionEventLogModification.d.ts +4 -4
- package/dist/types/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/UpdateRelationOnDeleteModification.d.ts +4 -4
- package/dist/types/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/UpdateRelationOrderByModification.d.ts +4 -4
- package/dist/types/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
- package/dist/types/modifications/relations/index.d.ts +12 -11
- package/dist/types/modifications/relations/index.d.ts.map +1 -1
- package/dist/types/modifications/settings/UpdateSettingsModification.d.ts +4 -4
- package/dist/types/modifications/settings/UpdateSettingsModification.d.ts.map +1 -1
- package/dist/types/modifications/settings/index.d.ts +1 -1
- package/dist/types/modifications/settings/index.d.ts.map +1 -1
- package/dist/types/modifications/upgrade/RemoveIndexNamesModification.d.ts +3 -3
- package/dist/types/modifications/upgrade/RemoveIndexNamesModification.d.ts.map +1 -1
- package/dist/types/modifications/utils/diffUtils.d.ts +1 -1
- package/dist/types/modifications/utils/diffUtils.d.ts.map +1 -1
- package/dist/types/modifications/utils/viewDependencies.d.ts +11 -1
- package/dist/types/modifications/utils/viewDependencies.d.ts.map +1 -1
- package/dist/types/modifications/validation/PatchValidationSchemaModification.d.ts +3 -3
- package/dist/types/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
- package/dist/types/modifications/validation/UpdateValidationSchemaModification.d.ts +4 -4
- package/dist/types/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
- package/dist/types/modifications/validation/index.d.ts +2 -2
- package/dist/types/modifications/validation/index.d.ts.map +1 -1
- package/dist/types/tsconfig.tsbuildinfo +1 -1
- package/package.json +7 -7
- package/src/MigrationDescriber.ts +2 -2
- package/src/SchemaDiffer.ts +52 -25
- package/src/SchemaMigrator.ts +2 -2
- package/src/index.ts +6 -6
- package/src/modifications/ModificationHandler.ts +2 -2
- package/src/modifications/ModificationHandlerFactory.ts +21 -19
- package/src/modifications/NoopModification.ts +2 -2
- package/src/modifications/acl/PatchAclSchemaModification.ts +3 -3
- package/src/modifications/acl/UpdateAclSchemaModification.ts +3 -3
- package/src/modifications/acl/index.ts +2 -2
- package/src/modifications/actions/CreateTargetModification.ts +2 -2
- package/src/modifications/actions/CreateTriggerModification.ts +2 -2
- package/src/modifications/actions/PatchTriggerModification.ts +3 -3
- package/src/modifications/actions/RemoveTargetModification.ts +2 -2
- package/src/modifications/actions/RemoveTriggerModification.ts +2 -2
- package/src/modifications/actions/UpdateTargetModification.ts +2 -2
- package/src/modifications/actions/UpdateTriggerModification.ts +3 -3
- package/src/modifications/actions/index.ts +4 -4
- package/src/modifications/columns/CreateColumnModification.ts +5 -5
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +6 -6
- package/src/modifications/columns/UpdateColumnNameModification.ts +3 -3
- package/src/modifications/columns/columnUtils.ts +1 -1
- package/src/modifications/columns/index.ts +3 -3
- package/src/modifications/constraints/CreateUniqueConstraintModification.ts +4 -4
- package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +4 -4
- package/src/modifications/constraints/index.ts +3 -3
- package/src/modifications/differs/RemoveChangedFieldDiffer.ts +3 -3
- package/src/modifications/differs/RemoveViewDiffer.ts +17 -5
- package/src/modifications/differs/UpdateViewDiffer.ts +58 -0
- package/src/modifications/differs/index.ts +3 -2
- package/src/modifications/entities/CreateEntityModification.ts +5 -5
- package/src/modifications/entities/CreateViewModification.ts +3 -3
- package/src/modifications/entities/RemoveEntityModification.ts +4 -4
- package/src/modifications/entities/ToggleEventLogModification.ts +3 -3
- package/src/modifications/entities/UpdateEntityNameModification.ts +12 -7
- package/src/modifications/entities/UpdateEntityOrderByModification.ts +2 -2
- package/src/modifications/entities/UpdateEntityTableNameModification.ts +2 -2
- package/src/modifications/entities/UpdateViewModification.ts +2 -2
- package/src/modifications/entities/index.ts +7 -7
- package/src/modifications/enums/CreateEnumModification.ts +3 -3
- package/src/modifications/enums/RemoveEnumModification.ts +2 -2
- package/src/modifications/enums/UpdateEnumModification.ts +4 -4
- package/src/modifications/enums/enumUtils.ts +1 -1
- package/src/modifications/enums/index.ts +3 -3
- package/src/modifications/fields/RemoveFieldModification.ts +3 -3
- package/src/modifications/fields/UpdateFieldNameModification.ts +26 -10
- package/src/modifications/fields/index.ts +2 -2
- package/src/modifications/index.ts +13 -13
- package/src/modifications/indexes/CreateIndexModification.ts +47 -11
- package/src/modifications/indexes/RemoveIndexModification.ts +92 -23
- package/src/modifications/indexes/index.ts +2 -2
- package/src/modifications/relations/ConvertManyHasManyToJoiningEntityModification.ts +218 -0
- package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +7 -7
- package/src/modifications/relations/ConvertOneHasManyToOneHasOneRelationModification.ts +6 -6
- package/src/modifications/relations/ConvertOneToManyRelationModification.ts +6 -6
- package/src/modifications/relations/CreateRelationInverseSideModification.ts +3 -3
- package/src/modifications/relations/CreateRelationModification.ts +9 -9
- package/src/modifications/relations/DisableOrphanRemovalModification.ts +3 -3
- package/src/modifications/relations/EnableOrphanRemovalModification.ts +3 -3
- package/src/modifications/relations/MakeRelationNotNullModification.ts +4 -4
- package/src/modifications/relations/MakeRelationNullableModification.ts +4 -4
- package/src/modifications/relations/ToggleJunctionEventLogModification.ts +5 -5
- package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +5 -5
- package/src/modifications/relations/UpdateRelationOrderByModification.ts +3 -3
- package/src/modifications/relations/helpers.ts +1 -1
- package/src/modifications/relations/index.ts +12 -11
- package/src/modifications/settings/UpdateSettingsModification.ts +2 -2
- package/src/modifications/settings/index.ts +1 -1
- package/src/modifications/upgrade/RemoveIndexNamesModification.ts +2 -2
- package/src/modifications/utils/createJunctionTable.ts +3 -3
- package/src/modifications/utils/diffUtils.ts +2 -2
- package/src/modifications/utils/schemaUpdateUtils.ts +3 -3
- package/src/modifications/utils/viewDependencies.ts +26 -2
- package/src/modifications/validation/PatchValidationSchemaModification.ts +3 -3
- package/src/modifications/validation/UpdateValidationSchemaModification.ts +3 -3
- package/src/modifications/validation/index.ts +2 -2
- package/tests/cases/integration/convertManyHasManyToJoiningEntity.test.ts +339 -0
- package/tests/cases/integration/convertManyHasOneToOneHasOneRelation.test.ts +2 -2
- package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +2 -2
- package/tests/cases/integration/convertOneToManyRelation.test.ts +2 -2
- package/tests/cases/integration/createAndDropIndex.test.ts +482 -3
- package/tests/cases/integration/createColumn.test.ts +29 -2
- package/tests/cases/integration/createEntity.test.ts +2 -2
- package/tests/cases/integration/createEnum.test.ts +2 -2
- package/tests/cases/integration/createManyHasMany.test.ts +2 -2
- package/tests/cases/integration/createManyHasOne.test.ts +2 -2
- package/tests/cases/integration/createOneHasMany.test.ts +2 -2
- package/tests/cases/integration/createOneHasOne.test.ts +2 -2
- package/tests/cases/integration/createRelationInverseSide.test.ts +2 -2
- package/tests/cases/integration/createUnique.test.ts +3 -3
- package/tests/cases/integration/disableOrphanRemoval.test.ts +2 -2
- package/tests/cases/integration/enableOrphanRemoval.test.ts +2 -2
- package/tests/cases/integration/makeColumnNotNull.test.ts +2 -2
- package/tests/cases/integration/makeRelationNotNull.test.ts +2 -2
- package/tests/cases/integration/makeRelationNullable.test.ts +2 -2
- package/tests/cases/integration/patchAclSchema.test.ts +2 -2
- package/tests/cases/integration/patchTrigger.test.ts +1 -1
- package/tests/cases/integration/removeEntity.test.ts +2 -2
- package/tests/cases/integration/removeEnum.test.ts +2 -2
- package/tests/cases/integration/removeField.test.ts +3 -3
- package/tests/cases/integration/skipNonModelDiffers.test.ts +97 -0
- package/tests/cases/integration/toggleEventLog.test.ts +2 -2
- package/tests/cases/integration/toggleJunctionEventLog.test.ts +2 -2
- package/tests/cases/integration/updateColumnDefinition.test.ts +3 -3
- package/tests/cases/integration/updateEntityName.test.ts +2 -2
- package/tests/cases/integration/updateEntityOrderBy.test.ts +2 -2
- package/tests/cases/integration/updateEnum.test.ts +2 -2
- package/tests/cases/integration/updateFieldName.test.ts +38 -3
- package/tests/cases/integration/updateRelationOnDelete.test.ts +2 -2
- package/tests/cases/integration/updateRelationOrderBy.test.ts +2 -2
- package/tests/cases/integration/updateView.test.ts +221 -233
- package/tests/src/tests.ts +6 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateEnumModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/enums/UpdateEnumModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'\nimport deepEqual from 'fast-deep-equal'\nimport { createCheck, getConstraintName } from './enumUtils'\nimport { getColumnSqlType } from '../utils/columnUtils'\n\nexport class UpdateEnumModificationHandler implements ModificationHandler<UpdateEnumModificationData> {\n\tconstructor(private readonly data: UpdateEnumModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tif (!this.requiresNewDomain()) {\n\t\t\tbuilder.sql(`\n\t\t\t\tALTER DOMAIN \"${this.data.enumName}\"\n\t\t\t\tDROP CONSTRAINT ${getConstraintName(this.data.enumName)}`)\n\t\t\tbuilder.sql(`\n\t\t\t\tALTER DOMAIN \"${this.data.enumName}\"\n\t\t\t\tADD CONSTRAINT ${getConstraintName(this.data.enumName)} CHECK (${createCheck(this.data.values)})`)\n\t\t} else {\n\t\t\t/**\n\t\t\t * Because postgres does not support altering domain constrains\n\t\t\t * when used in composite types (like arrays) we need to:\n\t\t\t * - create a new domain with the new constraint\n\t\t\t * - update all the columns using the old domain to use the new domain\n\t\t\t * - drop the old domain and rename the new domain to the old name\n\t\t\t */\n\t\t\tconst oldName = `${this.data.enumName}__old`\n\t\t\tbuilder.renameDomain(this.data.enumName, oldName)\n\n\t\t\tbuilder.createDomain(this.data.enumName, 'text', {\n\t\t\t\tcheck: createCheck(this.data.values),\n\t\t\t\tconstraintName: getConstraintName(this.data.enumName),\n\t\t\t})\n\t\t\tfor (const entity of Object.values(this.schema.model.entities)) {\n\t\t\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\t\t\tif (field.type === Model.ColumnType.Enum && field.columnType === this.data.enumName) {\n\t\t\t\t\t\tbuilder.alterColumn(entity.tableName, field.columnName, {\n\t\t\t\t\t\t\ttype: getColumnSqlType(field),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbuilder.dropDomain(oldName)\n\t\t}\n\t}\n\n\tprivate requiresNewDomain(): boolean {\n\t\treturn Object.values(this.schema.model.entities).some(it => {\n\t\t\treturn Object.values(it.fields).some(field => {\n\t\t\t\treturn field.type === Model.ColumnType.Enum && field.columnType === this.data.enumName && field.list\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tenums: {\n\t\t\t\t...model.enums,\n\t\t\t\t[this.data.enumName]: this.data.values,\n\t\t\t},\n\t\t}))\n\t}\n\n\tdescribe() {\n\t\tconst currentValues = this.schema.model.enums[this.data.enumName]\n\t\tconst missingValues = currentValues.filter(it => !this.data.values.includes(it))\n\t\tconst failureWarning = missingValues.length > 0\n\t\t\t? `Removing values (${missingValues.join(', ')}) from enum, this may fail in runtime`\n\t\t\t: undefined\n\t\treturn { message: `Update enum ${this.data.enumName}`, failureWarning }\n\t}\n}\n\nexport interface UpdateEnumModificationData {\n\tenumName: string\n\tvalues: readonly string[]\n}\n\nexport const updateEnumModification = createModificationType({\n\tid: 'updateEnum',\n\thandler: UpdateEnumModificationHandler,\n})\n\nexport class UpdateEnumDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.entries(updatedSchema.model.enums)\n\t\t\t.filter(\n\t\t\t\t([name]) =>\n\t\t\t\t\toriginalSchema.model.enums[name]\n\t\t\t\t\t&& !deepEqual(updatedSchema.model.enums[name], originalSchema.model.enums[name]),\n\t\t\t)\n\t\t\t.map(([enumName, values]) => updateEnumModification.createModification({ enumName, values }))\n\t}\n}\n"],"names":["schema","getConstraintName","createCheck","Model","getColumnSqlType","updateModel","createModificationType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UpdateEnumModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/enums/UpdateEnumModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils.js'\nimport { createModificationType, Differ, ModificationHandler } from '../ModificationHandler.js'\nimport deepEqual from 'fast-deep-equal'\nimport { createCheck, getConstraintName } from './enumUtils.js'\nimport { getColumnSqlType } from '../utils/columnUtils.js'\n\nexport class UpdateEnumModificationHandler implements ModificationHandler<UpdateEnumModificationData> {\n\tconstructor(private readonly data: UpdateEnumModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tif (!this.requiresNewDomain()) {\n\t\t\tbuilder.sql(`\n\t\t\t\tALTER DOMAIN \"${this.data.enumName}\"\n\t\t\t\tDROP CONSTRAINT ${getConstraintName(this.data.enumName)}`)\n\t\t\tbuilder.sql(`\n\t\t\t\tALTER DOMAIN \"${this.data.enumName}\"\n\t\t\t\tADD CONSTRAINT ${getConstraintName(this.data.enumName)} CHECK (${createCheck(this.data.values)})`)\n\t\t} else {\n\t\t\t/**\n\t\t\t * Because postgres does not support altering domain constrains\n\t\t\t * when used in composite types (like arrays) we need to:\n\t\t\t * - create a new domain with the new constraint\n\t\t\t * - update all the columns using the old domain to use the new domain\n\t\t\t * - drop the old domain and rename the new domain to the old name\n\t\t\t */\n\t\t\tconst oldName = `${this.data.enumName}__old`\n\t\t\tbuilder.renameDomain(this.data.enumName, oldName)\n\n\t\t\tbuilder.createDomain(this.data.enumName, 'text', {\n\t\t\t\tcheck: createCheck(this.data.values),\n\t\t\t\tconstraintName: getConstraintName(this.data.enumName),\n\t\t\t})\n\t\t\tfor (const entity of Object.values(this.schema.model.entities)) {\n\t\t\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\t\t\tif (field.type === Model.ColumnType.Enum && field.columnType === this.data.enumName) {\n\t\t\t\t\t\tbuilder.alterColumn(entity.tableName, field.columnName, {\n\t\t\t\t\t\t\ttype: getColumnSqlType(field),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbuilder.dropDomain(oldName)\n\t\t}\n\t}\n\n\tprivate requiresNewDomain(): boolean {\n\t\treturn Object.values(this.schema.model.entities).some(it => {\n\t\t\treturn Object.values(it.fields).some(field => {\n\t\t\t\treturn field.type === Model.ColumnType.Enum && field.columnType === this.data.enumName && field.list\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tenums: {\n\t\t\t\t...model.enums,\n\t\t\t\t[this.data.enumName]: this.data.values,\n\t\t\t},\n\t\t}))\n\t}\n\n\tdescribe() {\n\t\tconst currentValues = this.schema.model.enums[this.data.enumName]\n\t\tconst missingValues = currentValues.filter(it => !this.data.values.includes(it))\n\t\tconst failureWarning = missingValues.length > 0\n\t\t\t? `Removing values (${missingValues.join(', ')}) from enum, this may fail in runtime`\n\t\t\t: undefined\n\t\treturn { message: `Update enum ${this.data.enumName}`, failureWarning }\n\t}\n}\n\nexport interface UpdateEnumModificationData {\n\tenumName: string\n\tvalues: readonly string[]\n}\n\nexport const updateEnumModification = createModificationType({\n\tid: 'updateEnum',\n\thandler: UpdateEnumModificationHandler,\n})\n\nexport class UpdateEnumDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.entries(updatedSchema.model.enums)\n\t\t\t.filter(\n\t\t\t\t([name]) =>\n\t\t\t\t\toriginalSchema.model.enums[name]\n\t\t\t\t\t&& !deepEqual(updatedSchema.model.enums[name], originalSchema.model.enums[name]),\n\t\t\t)\n\t\t\t.map(([enumName, values]) => updateEnumModification.createModification({ enumName, values }))\n\t}\n}\n"],"names":["schema","getConstraintName","createCheck","Model","getColumnSqlType","updateModel","createModificationType"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateEnumModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/enums/UpdateEnumModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'\nimport deepEqual from 'fast-deep-equal'\nimport { createCheck, getConstraintName } from './enumUtils'\nimport { getColumnSqlType } from '../utils/columnUtils'\n\nexport class UpdateEnumModificationHandler implements ModificationHandler<UpdateEnumModificationData> {\n\tconstructor(private readonly data: UpdateEnumModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tif (!this.requiresNewDomain()) {\n\t\t\tbuilder.sql(`\n\t\t\t\tALTER DOMAIN \"${this.data.enumName}\"\n\t\t\t\tDROP CONSTRAINT ${getConstraintName(this.data.enumName)}`)\n\t\t\tbuilder.sql(`\n\t\t\t\tALTER DOMAIN \"${this.data.enumName}\"\n\t\t\t\tADD CONSTRAINT ${getConstraintName(this.data.enumName)} CHECK (${createCheck(this.data.values)})`)\n\t\t} else {\n\t\t\t/**\n\t\t\t * Because postgres does not support altering domain constrains\n\t\t\t * when used in composite types (like arrays) we need to:\n\t\t\t * - create a new domain with the new constraint\n\t\t\t * - update all the columns using the old domain to use the new domain\n\t\t\t * - drop the old domain and rename the new domain to the old name\n\t\t\t */\n\t\t\tconst oldName = `${this.data.enumName}__old`\n\t\t\tbuilder.renameDomain(this.data.enumName, oldName)\n\n\t\t\tbuilder.createDomain(this.data.enumName, 'text', {\n\t\t\t\tcheck: createCheck(this.data.values),\n\t\t\t\tconstraintName: getConstraintName(this.data.enumName),\n\t\t\t})\n\t\t\tfor (const entity of Object.values(this.schema.model.entities)) {\n\t\t\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\t\t\tif (field.type === Model.ColumnType.Enum && field.columnType === this.data.enumName) {\n\t\t\t\t\t\tbuilder.alterColumn(entity.tableName, field.columnName, {\n\t\t\t\t\t\t\ttype: getColumnSqlType(field),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbuilder.dropDomain(oldName)\n\t\t}\n\t}\n\n\tprivate requiresNewDomain(): boolean {\n\t\treturn Object.values(this.schema.model.entities).some(it => {\n\t\t\treturn Object.values(it.fields).some(field => {\n\t\t\t\treturn field.type === Model.ColumnType.Enum && field.columnType === this.data.enumName && field.list\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tenums: {\n\t\t\t\t...model.enums,\n\t\t\t\t[this.data.enumName]: this.data.values,\n\t\t\t},\n\t\t}))\n\t}\n\n\tdescribe() {\n\t\tconst currentValues = this.schema.model.enums[this.data.enumName]\n\t\tconst missingValues = currentValues.filter(it => !this.data.values.includes(it))\n\t\tconst failureWarning = missingValues.length > 0\n\t\t\t? `Removing values (${missingValues.join(', ')}) from enum, this may fail in runtime`\n\t\t\t: undefined\n\t\treturn { message: `Update enum ${this.data.enumName}`, failureWarning }\n\t}\n}\n\nexport interface UpdateEnumModificationData {\n\tenumName: string\n\tvalues: readonly string[]\n}\n\nexport const updateEnumModification = createModificationType({\n\tid: 'updateEnum',\n\thandler: UpdateEnumModificationHandler,\n})\n\nexport class UpdateEnumDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.entries(updatedSchema.model.enums)\n\t\t\t.filter(\n\t\t\t\t([name]) =>\n\t\t\t\t\toriginalSchema.model.enums[name]\n\t\t\t\t\t&& !deepEqual(updatedSchema.model.enums[name], originalSchema.model.enums[name]),\n\t\t\t)\n\t\t\t.map(([enumName, values]) => updateEnumModification.createModification({ enumName, values }))\n\t}\n}\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,8BAAyF;AAAA,EACrG,YAA6B,MAAmD,QAAgB;AAAnE,SAAA,OAAA;AAAmD,SAAA,SAAA;AAAA,EAAiB;AAAA,EAE1F,UAAU,SAAiC;AACjD,QAAI,CAAC,KAAK,qBAAqB;AAC9B,cAAQ,IAAI;AAAA,oBACK,KAAK,KAAK,QAAQ;AAAA,sBAChB,kBAAkB,KAAK,KAAK,QAAQ,CAAC,EAAE;AAC1D,cAAQ,IAAI;AAAA,oBACK,KAAK,KAAK,QAAQ;AAAA,qBACjB,kBAAkB,KAAK,KAAK,QAAQ,CAAC,WAAW,YAAY,KAAK,KAAK,MAAM,CAAC,GAAG;AAAA,IACnG,OAAO;AAQN,YAAM,UAAU,GAAG,KAAK,KAAK,QAAQ;AACrC,cAAQ,aAAa,KAAK,KAAK,UAAU,OAAO;AAEhD,cAAQ,aAAa,KAAK,KAAK,UAAU,QAAQ;AAAA,QAChD,OAAO,YAAY,KAAK,KAAK,MAAM;AAAA,QACnC,gBAAgB,kBAAkB,KAAK,KAAK,QAAQ;AAAA,MAAA,CACpD;AACD,iBAAW,UAAU,OAAO,OAAO,KAAK,OAAO,MAAM,QAAQ,GAAG;AAC/D,mBAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,cAAI,MAAM,SAAS,MAAM,WAAW,QAAQ,MAAM,eAAe,KAAK,KAAK,UAAU;AACpF,oBAAQ,YAAY,OAAO,WAAW,MAAM,YAAY;AAAA,cACvD,MAAM,iBAAiB,KAAK;AAAA,YAAA,CAC5B;AAAA,UACF;AAAA,QACD;AAAA,MACD;AAEA,cAAQ,WAAW,OAAO;AAAA,IAC3B;AAAA,EACD;AAAA,EAEQ,oBAA6B;AACpC,WAAO,OAAO,OAAO,KAAK,OAAO,MAAM,QAAQ,EAAE,KAAK,CAAA,OAAM;AAC3D,aAAO,OAAO,OAAO,GAAG,MAAM,EAAE,KAAK,CAAA,UAAS;AAC7C,eAAO,MAAM,SAAS,MAAM,WAAW,QAAQ,MAAM,eAAe,KAAK,KAAK,YAAY,MAAM;AAAA,MACjG,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AAAA,EAEO,mBAAkC;AACxC,WAAO,YAAY,CAAC,EAAE,aAAa;AAAA,MAClC,GAAG;AAAA,MACH,OAAO;AAAA,QACN,GAAG,MAAM;AAAA,QACT,CAAC,KAAK,KAAK,QAAQ,GAAG,KAAK,KAAK;AAAA,MAAA;AAAA,IACjC,EACC;AAAA,EACH;AAAA,EAEA,WAAW;AACV,UAAM,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,KAAK,QAAQ;AAChE,UAAM,gBAAgB,cAAc,OAAO,CAAA,OAAM,CAAC,KAAK,KAAK,OAAO,SAAS,EAAE,CAAC;AAC/E,UAAM,iBAAiB,cAAc,SAAS,IAC3C,oBAAoB,cAAc,KAAK,IAAI,CAAC,0CAC5C;AACH,WAAO,EAAE,SAAS,eAAe,KAAK,KAAK,QAAQ,IAAI,eAAA;AAAA,EACxD;AACD;AAOO,MAAM,yBAAyB,uBAAuB;AAAA,EAC5D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,iBAAmC;AAAA,EAC/C,WAAW,gBAAwB,eAAuB;AACzD,WAAO,OAAO,QAAQ,cAAc,MAAM,KAAK,EAC7C;AAAA,MACA,CAAC,CAAC,IAAI,MACL,eAAe,MAAM,MAAM,IAAI,KAC5B,CAAC,UAAU,cAAc,MAAM,MAAM,IAAI,GAAG,eAAe,MAAM,MAAM,IAAI,CAAC;AAAA,IAAA,EAEhF,IAAI,CAAC,CAAC,UAAU,MAAM,MAAM,uBAAuB,mBAAmB,EAAE,UAAU,OAAA,CAAQ,CAAC;AAAA,EAC9F;AACD;"}
|
|
1
|
+
{"version":3,"file":"UpdateEnumModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/enums/UpdateEnumModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils.js'\nimport { createModificationType, Differ, ModificationHandler } from '../ModificationHandler.js'\nimport deepEqual from 'fast-deep-equal'\nimport { createCheck, getConstraintName } from './enumUtils.js'\nimport { getColumnSqlType } from '../utils/columnUtils.js'\n\nexport class UpdateEnumModificationHandler implements ModificationHandler<UpdateEnumModificationData> {\n\tconstructor(private readonly data: UpdateEnumModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tif (!this.requiresNewDomain()) {\n\t\t\tbuilder.sql(`\n\t\t\t\tALTER DOMAIN \"${this.data.enumName}\"\n\t\t\t\tDROP CONSTRAINT ${getConstraintName(this.data.enumName)}`)\n\t\t\tbuilder.sql(`\n\t\t\t\tALTER DOMAIN \"${this.data.enumName}\"\n\t\t\t\tADD CONSTRAINT ${getConstraintName(this.data.enumName)} CHECK (${createCheck(this.data.values)})`)\n\t\t} else {\n\t\t\t/**\n\t\t\t * Because postgres does not support altering domain constrains\n\t\t\t * when used in composite types (like arrays) we need to:\n\t\t\t * - create a new domain with the new constraint\n\t\t\t * - update all the columns using the old domain to use the new domain\n\t\t\t * - drop the old domain and rename the new domain to the old name\n\t\t\t */\n\t\t\tconst oldName = `${this.data.enumName}__old`\n\t\t\tbuilder.renameDomain(this.data.enumName, oldName)\n\n\t\t\tbuilder.createDomain(this.data.enumName, 'text', {\n\t\t\t\tcheck: createCheck(this.data.values),\n\t\t\t\tconstraintName: getConstraintName(this.data.enumName),\n\t\t\t})\n\t\t\tfor (const entity of Object.values(this.schema.model.entities)) {\n\t\t\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\t\t\tif (field.type === Model.ColumnType.Enum && field.columnType === this.data.enumName) {\n\t\t\t\t\t\tbuilder.alterColumn(entity.tableName, field.columnName, {\n\t\t\t\t\t\t\ttype: getColumnSqlType(field),\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tbuilder.dropDomain(oldName)\n\t\t}\n\t}\n\n\tprivate requiresNewDomain(): boolean {\n\t\treturn Object.values(this.schema.model.entities).some(it => {\n\t\t\treturn Object.values(it.fields).some(field => {\n\t\t\t\treturn field.type === Model.ColumnType.Enum && field.columnType === this.data.enumName && field.list\n\t\t\t})\n\t\t})\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(({ model }) => ({\n\t\t\t...model,\n\t\t\tenums: {\n\t\t\t\t...model.enums,\n\t\t\t\t[this.data.enumName]: this.data.values,\n\t\t\t},\n\t\t}))\n\t}\n\n\tdescribe() {\n\t\tconst currentValues = this.schema.model.enums[this.data.enumName]\n\t\tconst missingValues = currentValues.filter(it => !this.data.values.includes(it))\n\t\tconst failureWarning = missingValues.length > 0\n\t\t\t? `Removing values (${missingValues.join(', ')}) from enum, this may fail in runtime`\n\t\t\t: undefined\n\t\treturn { message: `Update enum ${this.data.enumName}`, failureWarning }\n\t}\n}\n\nexport interface UpdateEnumModificationData {\n\tenumName: string\n\tvalues: readonly string[]\n}\n\nexport const updateEnumModification = createModificationType({\n\tid: 'updateEnum',\n\thandler: UpdateEnumModificationHandler,\n})\n\nexport class UpdateEnumDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.entries(updatedSchema.model.enums)\n\t\t\t.filter(\n\t\t\t\t([name]) =>\n\t\t\t\t\toriginalSchema.model.enums[name]\n\t\t\t\t\t&& !deepEqual(updatedSchema.model.enums[name], originalSchema.model.enums[name]),\n\t\t\t)\n\t\t\t.map(([enumName, values]) => updateEnumModification.createModification({ enumName, values }))\n\t}\n}\n"],"names":[],"mappings":";;;;;;AAQO,MAAM,8BAAyF;AAAA,EACrG,YAA6B,MAAmD,QAAgB;AAAnE,SAAA,OAAA;AAAmD,SAAA,SAAA;AAAA,EAAiB;AAAA,EAE1F,UAAU,SAAiC;AACjD,QAAI,CAAC,KAAK,qBAAqB;AAC9B,cAAQ,IAAI;AAAA,oBACK,KAAK,KAAK,QAAQ;AAAA,sBAChB,kBAAkB,KAAK,KAAK,QAAQ,CAAC,EAAE;AAC1D,cAAQ,IAAI;AAAA,oBACK,KAAK,KAAK,QAAQ;AAAA,qBACjB,kBAAkB,KAAK,KAAK,QAAQ,CAAC,WAAW,YAAY,KAAK,KAAK,MAAM,CAAC,GAAG;AAAA,IACnG,OAAO;AAQN,YAAM,UAAU,GAAG,KAAK,KAAK,QAAQ;AACrC,cAAQ,aAAa,KAAK,KAAK,UAAU,OAAO;AAEhD,cAAQ,aAAa,KAAK,KAAK,UAAU,QAAQ;AAAA,QAChD,OAAO,YAAY,KAAK,KAAK,MAAM;AAAA,QACnC,gBAAgB,kBAAkB,KAAK,KAAK,QAAQ;AAAA,MAAA,CACpD;AACD,iBAAW,UAAU,OAAO,OAAO,KAAK,OAAO,MAAM,QAAQ,GAAG;AAC/D,mBAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,cAAI,MAAM,SAAS,MAAM,WAAW,QAAQ,MAAM,eAAe,KAAK,KAAK,UAAU;AACpF,oBAAQ,YAAY,OAAO,WAAW,MAAM,YAAY;AAAA,cACvD,MAAM,iBAAiB,KAAK;AAAA,YAAA,CAC5B;AAAA,UACF;AAAA,QACD;AAAA,MACD;AAEA,cAAQ,WAAW,OAAO;AAAA,IAC3B;AAAA,EACD;AAAA,EAEQ,oBAA6B;AACpC,WAAO,OAAO,OAAO,KAAK,OAAO,MAAM,QAAQ,EAAE,KAAK,CAAA,OAAM;AAC3D,aAAO,OAAO,OAAO,GAAG,MAAM,EAAE,KAAK,CAAA,UAAS;AAC7C,eAAO,MAAM,SAAS,MAAM,WAAW,QAAQ,MAAM,eAAe,KAAK,KAAK,YAAY,MAAM;AAAA,MACjG,CAAC;AAAA,IACF,CAAC;AAAA,EACF;AAAA,EAEO,mBAAkC;AACxC,WAAO,YAAY,CAAC,EAAE,aAAa;AAAA,MAClC,GAAG;AAAA,MACH,OAAO;AAAA,QACN,GAAG,MAAM;AAAA,QACT,CAAC,KAAK,KAAK,QAAQ,GAAG,KAAK,KAAK;AAAA,MAAA;AAAA,IACjC,EACC;AAAA,EACH;AAAA,EAEA,WAAW;AACV,UAAM,gBAAgB,KAAK,OAAO,MAAM,MAAM,KAAK,KAAK,QAAQ;AAChE,UAAM,gBAAgB,cAAc,OAAO,CAAA,OAAM,CAAC,KAAK,KAAK,OAAO,SAAS,EAAE,CAAC;AAC/E,UAAM,iBAAiB,cAAc,SAAS,IAC3C,oBAAoB,cAAc,KAAK,IAAI,CAAC,0CAC5C;AACH,WAAO,EAAE,SAAS,eAAe,KAAK,KAAK,QAAQ,IAAI,eAAA;AAAA,EACxD;AACD;AAOO,MAAM,yBAAyB,uBAAuB;AAAA,EAC5D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,iBAAmC;AAAA,EAC/C,WAAW,gBAAwB,eAAuB;AACzD,WAAO,OAAO,QAAQ,cAAc,MAAM,KAAK,EAC7C;AAAA,MACA,CAAC,CAAC,IAAI,MACL,eAAe,MAAM,MAAM,IAAI,KAC5B,CAAC,UAAU,cAAc,MAAM,MAAM,IAAI,GAAG,eAAe,MAAM,MAAM,IAAI,CAAC;AAAA,IAAA,EAEhF,IAAI,CAAC,CAAC,UAAU,MAAM,MAAM,uBAAuB,mBAAmB,EAAE,UAAU,OAAA,CAAQ,CAAC;AAAA,EAC9F;AACD;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enumUtils.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/enums/enumUtils.ts"],"sourcesContent":["import { escapeSqlString } from '../../utils/escapeSqlString'\n\nexport const createCheck = (values: readonly string[]) => {\n\tconst joinedValues = values.map(it => `'${escapeSqlString(it)}'`).join(',')\n\treturn `VALUE IN(${joinedValues})`\n}\n\nexport const getConstraintName = (enumName: string) => `${enumName}_check`.toLowerCase()\n"],"names":["escapeSqlString"],"mappings":";;;AAEO,MAAM,cAAc,CAAC,WAA8B;AACzD,QAAM,eAAe,OAAO,IAAI,CAAA,OAAM,IAAIA,gBAAAA,gBAAgB,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG;AAC1E,SAAO,YAAY,YAAY;AAChC;AAEO,MAAM,oBAAoB,CAAC,aAAqB,GAAG,QAAQ,SAAS,YAAA;;;"}
|
|
1
|
+
{"version":3,"file":"enumUtils.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/enums/enumUtils.ts"],"sourcesContent":["import { escapeSqlString } from '../../utils/escapeSqlString.js'\n\nexport const createCheck = (values: readonly string[]) => {\n\tconst joinedValues = values.map(it => `'${escapeSqlString(it)}'`).join(',')\n\treturn `VALUE IN(${joinedValues})`\n}\n\nexport const getConstraintName = (enumName: string) => `${enumName}_check`.toLowerCase()\n"],"names":["escapeSqlString"],"mappings":";;;AAEO,MAAM,cAAc,CAAC,WAA8B;AACzD,QAAM,eAAe,OAAO,IAAI,CAAA,OAAM,IAAIA,gBAAAA,gBAAgB,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG;AAC1E,SAAO,YAAY,YAAY;AAChC;AAEO,MAAM,oBAAoB,CAAC,aAAqB,GAAG,QAAQ,SAAS,YAAA;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enumUtils.js","sources":["../../../../../../packages/schema-migrations/src/modifications/enums/enumUtils.ts"],"sourcesContent":["import { escapeSqlString } from '../../utils/escapeSqlString'\n\nexport const createCheck = (values: readonly string[]) => {\n\tconst joinedValues = values.map(it => `'${escapeSqlString(it)}'`).join(',')\n\treturn `VALUE IN(${joinedValues})`\n}\n\nexport const getConstraintName = (enumName: string) => `${enumName}_check`.toLowerCase()\n"],"names":[],"mappings":";AAEO,MAAM,cAAc,CAAC,WAA8B;AACzD,QAAM,eAAe,OAAO,IAAI,CAAA,OAAM,IAAI,gBAAgB,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG;AAC1E,SAAO,YAAY,YAAY;AAChC;AAEO,MAAM,oBAAoB,CAAC,aAAqB,GAAG,QAAQ,SAAS,YAAA;"}
|
|
1
|
+
{"version":3,"file":"enumUtils.js","sources":["../../../../../../packages/schema-migrations/src/modifications/enums/enumUtils.ts"],"sourcesContent":["import { escapeSqlString } from '../../utils/escapeSqlString.js'\n\nexport const createCheck = (values: readonly string[]) => {\n\tconst joinedValues = values.map(it => `'${escapeSqlString(it)}'`).join(',')\n\treturn `VALUE IN(${joinedValues})`\n}\n\nexport const getConstraintName = (enumName: string) => `${enumName}_check`.toLowerCase()\n"],"names":[],"mappings":";AAEO,MAAM,cAAc,CAAC,WAA8B;AACzD,QAAM,eAAe,OAAO,IAAI,CAAA,OAAM,IAAI,gBAAgB,EAAE,CAAC,GAAG,EAAE,KAAK,GAAG;AAC1E,SAAO,YAAY,YAAY;AAChC;AAEO,MAAM,oBAAoB,CAAC,aAAqB,GAAG,QAAQ,SAAS,YAAA;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoveFieldModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/fields/RemoveFieldModification.ts"],"sourcesContent":["import { acceptFieldVisitor, isInverseRelation, isRelation } from '@contember/schema-utils'\nimport { MigrationBuilder } from '@contember/database-migrations'\nimport { Schema } from '@contember/schema'\nimport { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'\nimport { isDefined } from '../../utils/isDefined'\n\nexport class RemoveFieldModificationHandler implements ModificationHandler<RemoveFieldModificationData> {\n\tconstructor(\n\t\tprivate readonly data: RemoveFieldModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tacceptFieldVisitor(this.schema.model, this.data.entityName, this.data.fieldName, {\n\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, column.columnName)\n\t\t\t},\n\t\t\tvisitManyHasOne: ({ entity, relation }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, relation.joiningColumn.columnName)\n\t\t\t},\n\t\t\tvisitOneHasMany: () => {},\n\t\t\tvisitOneHasOneOwning: ({ entity, relation }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, relation.joiningColumn.columnName)\n\t\t\t},\n\t\t\tvisitOneHasOneInverse: () => {},\n\t\t\tvisitManyHasManyOwning: ({ relation }) => {\n\t\t\t\tbuilder.dropTable(relation.joiningTable.tableName)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: () => {},\n\t\t})\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn removeField(this.data.entityName, this.data.fieldName, this.options.formatVersion)\n\t}\n\n\tdescribe() {\n\t\treturn { message: `Remove field ${this.data.entityName}.${this.data.fieldName}`, isDestructive: true }\n\t}\n}\n\nexport interface RemoveFieldModificationData {\n\tentityName: string\n\tfieldName: string\n}\n\nexport const removeFieldModification = createModificationType({\n\tid: 'removeField',\n\thandler: RemoveFieldModificationHandler,\n})\n\nexport class RemoveFieldDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities)\n\t\t\t.filter(({ name }) => originalSchema.model.entities[name])\n\t\t\t.flatMap(entity => {\n\t\t\t\tconst originalEntity = originalSchema.model.entities[entity.name]\n\n\t\t\t\treturn Object.values(originalEntity.fields)\n\t\t\t\t\t.filter(field => !entity.fields[field.name])\n\t\t\t\t\t.map(field => {\n\t\t\t\t\t\tif (isRelation(field) && isInverseRelation(field)) {\n\t\t\t\t\t\t\tconst target = updatedSchema.model.entities[field.target]\n\t\t\t\t\t\t\tif (!target || !target.fields[field.ownedBy]) {\n\t\t\t\t\t\t\t\treturn undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn removeFieldModification.createModification({\n\t\t\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\t\t\tfieldName: field.name,\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.filter(isDefined)\n\t\t\t})\n\t}\n}\n"],"names":["acceptFieldVisitor","entity","removeField","createModificationType","isRelation","isInverseRelation","isDefined"],"mappings":";;;;;;AAOO,MAAM,+BAA2F;AAAA,EACvG,YACkB,MACA,QACA,SAChB;AAHgB,SAAA,OAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AAAA,EACf;AAAA,EAEI,UAAU,SAAiC;AACjD,UAAM,SAAS,KAAK,OAAO,MAAM,SAAS,KAAK,KAAK,UAAU;AAC9D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AACAA,mCAAmB,KAAK,OAAO,OAAO,KAAK,KAAK,YAAY,KAAK,KAAK,WAAW;AAAA,MAChF,aAAa,CAAC,EAAE,QAAAC,SAAQ,aAAa;AACpC,gBAAQ,WAAWA,QAAO,WAAW,OAAO,UAAU;AAAA,MACvD;AAAA,MACA,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC1C,gBAAQ,WAAWA,QAAO,WAAW,SAAS,cAAc,UAAU;AAAA,MACvE;AAAA,MACA,iBAAiB,MAAM;AAAA,MAAC;AAAA,MACxB,sBAAsB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC/C,gBAAQ,WAAWA,QAAO,WAAW,SAAS,cAAc,UAAU;AAAA,MACvE;AAAA,MACA,uBAAuB,MAAM;AAAA,MAAC;AAAA,MAC9B,wBAAwB,CAAC,EAAE,eAAe;AACzC,gBAAQ,UAAU,SAAS,aAAa,SAAS;AAAA,MAClD;AAAA,MACA,yBAAyB,MAAM;AAAA,MAAC;AAAA,IAAA,CAChC;AAAA,EACF;AAAA,EAEO,mBAAkC;AACxC,WAAOC,8BAAY,KAAK,KAAK,YAAY,KAAK,KAAK,WAAW,KAAK,QAAQ,aAAa;AAAA,EACzF;AAAA,EAEA,WAAW;AACV,WAAO,EAAE,SAAS,gBAAgB,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,IAAI,eAAe,KAAA;AAAA,EACjG;AACD;AAOO,MAAM,0BAA0BC,oBAAAA,uBAAuB;AAAA,EAC7D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,kBAAoC;AAAA,EAChD,WAAW,gBAAwB,eAAuB;AACzD,WAAO,OAAO,OAAO,cAAc,MAAM,QAAQ,EAC/C,OAAO,CAAC,EAAE,KAAA,MAAW,eAAe,MAAM,SAAS,IAAI,CAAC,EACxD,QAAQ,CAAA,WAAU;AAClB,YAAM,iBAAiB,eAAe,MAAM,SAAS,OAAO,IAAI;AAEhE,aAAO,OAAO,OAAO,eAAe,MAAM,EACxC,OAAO,CAAA,UAAS,CAAC,OAAO,OAAO,MAAM,IAAI,CAAC,EAC1C,IAAI,CAAA,UAAS;AACb,YAAIC,YAAAA,WAAW,KAAK,KAAKC,YAAAA,kBAAkB,KAAK,GAAG;AAClD,gBAAM,SAAS,cAAc,MAAM,SAAS,MAAM,MAAM;AACxD,cAAI,CAAC,UAAU,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AAC7C,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO,wBAAwB,mBAAmB;AAAA,UACjD,YAAY,OAAO;AAAA,UACnB,WAAW,MAAM;AAAA,QAAA,CACjB;AAAA,MACF,CAAC,EACA,OAAOC,mBAAS;AAAA,IACnB,CAAC;AAAA,EACH;AACD;;;;"}
|
|
1
|
+
{"version":3,"file":"RemoveFieldModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/fields/RemoveFieldModification.ts"],"sourcesContent":["import { acceptFieldVisitor, isInverseRelation, isRelation } from '@contember/schema-utils'\nimport { MigrationBuilder } from '@contember/database-migrations'\nimport { Schema } from '@contember/schema'\nimport { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils.js'\nimport { createModificationType, Differ, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler.js'\nimport { isDefined } from '../../utils/isDefined.js'\n\nexport class RemoveFieldModificationHandler implements ModificationHandler<RemoveFieldModificationData> {\n\tconstructor(\n\t\tprivate readonly data: RemoveFieldModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tacceptFieldVisitor(this.schema.model, this.data.entityName, this.data.fieldName, {\n\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, column.columnName)\n\t\t\t},\n\t\t\tvisitManyHasOne: ({ entity, relation }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, relation.joiningColumn.columnName)\n\t\t\t},\n\t\t\tvisitOneHasMany: () => {},\n\t\t\tvisitOneHasOneOwning: ({ entity, relation }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, relation.joiningColumn.columnName)\n\t\t\t},\n\t\t\tvisitOneHasOneInverse: () => {},\n\t\t\tvisitManyHasManyOwning: ({ relation }) => {\n\t\t\t\tbuilder.dropTable(relation.joiningTable.tableName)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: () => {},\n\t\t})\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn removeField(this.data.entityName, this.data.fieldName, this.options.formatVersion)\n\t}\n\n\tdescribe() {\n\t\treturn { message: `Remove field ${this.data.entityName}.${this.data.fieldName}`, isDestructive: true }\n\t}\n}\n\nexport interface RemoveFieldModificationData {\n\tentityName: string\n\tfieldName: string\n}\n\nexport const removeFieldModification = createModificationType({\n\tid: 'removeField',\n\thandler: RemoveFieldModificationHandler,\n})\n\nexport class RemoveFieldDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities)\n\t\t\t.filter(({ name }) => originalSchema.model.entities[name])\n\t\t\t.flatMap(entity => {\n\t\t\t\tconst originalEntity = originalSchema.model.entities[entity.name]\n\n\t\t\t\treturn Object.values(originalEntity.fields)\n\t\t\t\t\t.filter(field => !entity.fields[field.name])\n\t\t\t\t\t.map(field => {\n\t\t\t\t\t\tif (isRelation(field) && isInverseRelation(field)) {\n\t\t\t\t\t\t\tconst target = updatedSchema.model.entities[field.target]\n\t\t\t\t\t\t\tif (!target || !target.fields[field.ownedBy]) {\n\t\t\t\t\t\t\t\treturn undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn removeFieldModification.createModification({\n\t\t\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\t\t\tfieldName: field.name,\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.filter(isDefined)\n\t\t\t})\n\t}\n}\n"],"names":["acceptFieldVisitor","entity","removeField","createModificationType","isRelation","isInverseRelation","isDefined"],"mappings":";;;;;;AAOO,MAAM,+BAA2F;AAAA,EACvG,YACkB,MACA,QACA,SAChB;AAHgB,SAAA,OAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AAAA,EACf;AAAA,EAEI,UAAU,SAAiC;AACjD,UAAM,SAAS,KAAK,OAAO,MAAM,SAAS,KAAK,KAAK,UAAU;AAC9D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AACAA,mCAAmB,KAAK,OAAO,OAAO,KAAK,KAAK,YAAY,KAAK,KAAK,WAAW;AAAA,MAChF,aAAa,CAAC,EAAE,QAAAC,SAAQ,aAAa;AACpC,gBAAQ,WAAWA,QAAO,WAAW,OAAO,UAAU;AAAA,MACvD;AAAA,MACA,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC1C,gBAAQ,WAAWA,QAAO,WAAW,SAAS,cAAc,UAAU;AAAA,MACvE;AAAA,MACA,iBAAiB,MAAM;AAAA,MAAC;AAAA,MACxB,sBAAsB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC/C,gBAAQ,WAAWA,QAAO,WAAW,SAAS,cAAc,UAAU;AAAA,MACvE;AAAA,MACA,uBAAuB,MAAM;AAAA,MAAC;AAAA,MAC9B,wBAAwB,CAAC,EAAE,eAAe;AACzC,gBAAQ,UAAU,SAAS,aAAa,SAAS;AAAA,MAClD;AAAA,MACA,yBAAyB,MAAM;AAAA,MAAC;AAAA,IAAA,CAChC;AAAA,EACF;AAAA,EAEO,mBAAkC;AACxC,WAAOC,8BAAY,KAAK,KAAK,YAAY,KAAK,KAAK,WAAW,KAAK,QAAQ,aAAa;AAAA,EACzF;AAAA,EAEA,WAAW;AACV,WAAO,EAAE,SAAS,gBAAgB,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,IAAI,eAAe,KAAA;AAAA,EACjG;AACD;AAOO,MAAM,0BAA0BC,oBAAAA,uBAAuB;AAAA,EAC7D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,kBAAoC;AAAA,EAChD,WAAW,gBAAwB,eAAuB;AACzD,WAAO,OAAO,OAAO,cAAc,MAAM,QAAQ,EAC/C,OAAO,CAAC,EAAE,KAAA,MAAW,eAAe,MAAM,SAAS,IAAI,CAAC,EACxD,QAAQ,CAAA,WAAU;AAClB,YAAM,iBAAiB,eAAe,MAAM,SAAS,OAAO,IAAI;AAEhE,aAAO,OAAO,OAAO,eAAe,MAAM,EACxC,OAAO,CAAA,UAAS,CAAC,OAAO,OAAO,MAAM,IAAI,CAAC,EAC1C,IAAI,CAAA,UAAS;AACb,YAAIC,YAAAA,WAAW,KAAK,KAAKC,YAAAA,kBAAkB,KAAK,GAAG;AAClD,gBAAM,SAAS,cAAc,MAAM,SAAS,MAAM,MAAM;AACxD,cAAI,CAAC,UAAU,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AAC7C,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO,wBAAwB,mBAAmB;AAAA,UACjD,YAAY,OAAO;AAAA,UACnB,WAAW,MAAM;AAAA,QAAA,CACjB;AAAA,MACF,CAAC,EACA,OAAOC,mBAAS;AAAA,IACnB,CAAC;AAAA,EACH;AACD;;;;"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RemoveFieldModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/fields/RemoveFieldModification.ts"],"sourcesContent":["import { acceptFieldVisitor, isInverseRelation, isRelation } from '@contember/schema-utils'\nimport { MigrationBuilder } from '@contember/database-migrations'\nimport { Schema } from '@contember/schema'\nimport { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'\nimport { isDefined } from '../../utils/isDefined'\n\nexport class RemoveFieldModificationHandler implements ModificationHandler<RemoveFieldModificationData> {\n\tconstructor(\n\t\tprivate readonly data: RemoveFieldModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tacceptFieldVisitor(this.schema.model, this.data.entityName, this.data.fieldName, {\n\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, column.columnName)\n\t\t\t},\n\t\t\tvisitManyHasOne: ({ entity, relation }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, relation.joiningColumn.columnName)\n\t\t\t},\n\t\t\tvisitOneHasMany: () => {},\n\t\t\tvisitOneHasOneOwning: ({ entity, relation }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, relation.joiningColumn.columnName)\n\t\t\t},\n\t\t\tvisitOneHasOneInverse: () => {},\n\t\t\tvisitManyHasManyOwning: ({ relation }) => {\n\t\t\t\tbuilder.dropTable(relation.joiningTable.tableName)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: () => {},\n\t\t})\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn removeField(this.data.entityName, this.data.fieldName, this.options.formatVersion)\n\t}\n\n\tdescribe() {\n\t\treturn { message: `Remove field ${this.data.entityName}.${this.data.fieldName}`, isDestructive: true }\n\t}\n}\n\nexport interface RemoveFieldModificationData {\n\tentityName: string\n\tfieldName: string\n}\n\nexport const removeFieldModification = createModificationType({\n\tid: 'removeField',\n\thandler: RemoveFieldModificationHandler,\n})\n\nexport class RemoveFieldDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities)\n\t\t\t.filter(({ name }) => originalSchema.model.entities[name])\n\t\t\t.flatMap(entity => {\n\t\t\t\tconst originalEntity = originalSchema.model.entities[entity.name]\n\n\t\t\t\treturn Object.values(originalEntity.fields)\n\t\t\t\t\t.filter(field => !entity.fields[field.name])\n\t\t\t\t\t.map(field => {\n\t\t\t\t\t\tif (isRelation(field) && isInverseRelation(field)) {\n\t\t\t\t\t\t\tconst target = updatedSchema.model.entities[field.target]\n\t\t\t\t\t\t\tif (!target || !target.fields[field.ownedBy]) {\n\t\t\t\t\t\t\t\treturn undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn removeFieldModification.createModification({\n\t\t\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\t\t\tfieldName: field.name,\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.filter(isDefined)\n\t\t\t})\n\t}\n}\n"],"names":["entity"],"mappings":";;;;AAOO,MAAM,+BAA2F;AAAA,EACvG,YACkB,MACA,QACA,SAChB;AAHgB,SAAA,OAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AAAA,EACf;AAAA,EAEI,UAAU,SAAiC;AACjD,UAAM,SAAS,KAAK,OAAO,MAAM,SAAS,KAAK,KAAK,UAAU;AAC9D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AACA,uBAAmB,KAAK,OAAO,OAAO,KAAK,KAAK,YAAY,KAAK,KAAK,WAAW;AAAA,MAChF,aAAa,CAAC,EAAE,QAAAA,SAAQ,aAAa;AACpC,gBAAQ,WAAWA,QAAO,WAAW,OAAO,UAAU;AAAA,MACvD;AAAA,MACA,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC1C,gBAAQ,WAAWA,QAAO,WAAW,SAAS,cAAc,UAAU;AAAA,MACvE;AAAA,MACA,iBAAiB,MAAM;AAAA,MAAC;AAAA,MACxB,sBAAsB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC/C,gBAAQ,WAAWA,QAAO,WAAW,SAAS,cAAc,UAAU;AAAA,MACvE;AAAA,MACA,uBAAuB,MAAM;AAAA,MAAC;AAAA,MAC9B,wBAAwB,CAAC,EAAE,eAAe;AACzC,gBAAQ,UAAU,SAAS,aAAa,SAAS;AAAA,MAClD;AAAA,MACA,yBAAyB,MAAM;AAAA,MAAC;AAAA,IAAA,CAChC;AAAA,EACF;AAAA,EAEO,mBAAkC;AACxC,WAAO,YAAY,KAAK,KAAK,YAAY,KAAK,KAAK,WAAW,KAAK,QAAQ,aAAa;AAAA,EACzF;AAAA,EAEA,WAAW;AACV,WAAO,EAAE,SAAS,gBAAgB,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,IAAI,eAAe,KAAA;AAAA,EACjG;AACD;AAOO,MAAM,0BAA0B,uBAAuB;AAAA,EAC7D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,kBAAoC;AAAA,EAChD,WAAW,gBAAwB,eAAuB;AACzD,WAAO,OAAO,OAAO,cAAc,MAAM,QAAQ,EAC/C,OAAO,CAAC,EAAE,KAAA,MAAW,eAAe,MAAM,SAAS,IAAI,CAAC,EACxD,QAAQ,CAAA,WAAU;AAClB,YAAM,iBAAiB,eAAe,MAAM,SAAS,OAAO,IAAI;AAEhE,aAAO,OAAO,OAAO,eAAe,MAAM,EACxC,OAAO,CAAA,UAAS,CAAC,OAAO,OAAO,MAAM,IAAI,CAAC,EAC1C,IAAI,CAAA,UAAS;AACb,YAAI,WAAW,KAAK,KAAK,kBAAkB,KAAK,GAAG;AAClD,gBAAM,SAAS,cAAc,MAAM,SAAS,MAAM,MAAM;AACxD,cAAI,CAAC,UAAU,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AAC7C,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO,wBAAwB,mBAAmB;AAAA,UACjD,YAAY,OAAO;AAAA,UACnB,WAAW,MAAM;AAAA,QAAA,CACjB;AAAA,MACF,CAAC,EACA,OAAO,SAAS;AAAA,IACnB,CAAC;AAAA,EACH;AACD;"}
|
|
1
|
+
{"version":3,"file":"RemoveFieldModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/fields/RemoveFieldModification.ts"],"sourcesContent":["import { acceptFieldVisitor, isInverseRelation, isRelation } from '@contember/schema-utils'\nimport { MigrationBuilder } from '@contember/database-migrations'\nimport { Schema } from '@contember/schema'\nimport { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils.js'\nimport { createModificationType, Differ, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler.js'\nimport { isDefined } from '../../utils/isDefined.js'\n\nexport class RemoveFieldModificationHandler implements ModificationHandler<RemoveFieldModificationData> {\n\tconstructor(\n\t\tprivate readonly data: RemoveFieldModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {}\n\n\tpublic createSql(builder: MigrationBuilder): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tacceptFieldVisitor(this.schema.model, this.data.entityName, this.data.fieldName, {\n\t\t\tvisitColumn: ({ entity, column }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, column.columnName)\n\t\t\t},\n\t\t\tvisitManyHasOne: ({ entity, relation }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, relation.joiningColumn.columnName)\n\t\t\t},\n\t\t\tvisitOneHasMany: () => {},\n\t\t\tvisitOneHasOneOwning: ({ entity, relation }) => {\n\t\t\t\tbuilder.dropColumn(entity.tableName, relation.joiningColumn.columnName)\n\t\t\t},\n\t\t\tvisitOneHasOneInverse: () => {},\n\t\t\tvisitManyHasManyOwning: ({ relation }) => {\n\t\t\t\tbuilder.dropTable(relation.joiningTable.tableName)\n\t\t\t},\n\t\t\tvisitManyHasManyInverse: () => {},\n\t\t})\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn removeField(this.data.entityName, this.data.fieldName, this.options.formatVersion)\n\t}\n\n\tdescribe() {\n\t\treturn { message: `Remove field ${this.data.entityName}.${this.data.fieldName}`, isDestructive: true }\n\t}\n}\n\nexport interface RemoveFieldModificationData {\n\tentityName: string\n\tfieldName: string\n}\n\nexport const removeFieldModification = createModificationType({\n\tid: 'removeField',\n\thandler: RemoveFieldModificationHandler,\n})\n\nexport class RemoveFieldDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities)\n\t\t\t.filter(({ name }) => originalSchema.model.entities[name])\n\t\t\t.flatMap(entity => {\n\t\t\t\tconst originalEntity = originalSchema.model.entities[entity.name]\n\n\t\t\t\treturn Object.values(originalEntity.fields)\n\t\t\t\t\t.filter(field => !entity.fields[field.name])\n\t\t\t\t\t.map(field => {\n\t\t\t\t\t\tif (isRelation(field) && isInverseRelation(field)) {\n\t\t\t\t\t\t\tconst target = updatedSchema.model.entities[field.target]\n\t\t\t\t\t\t\tif (!target || !target.fields[field.ownedBy]) {\n\t\t\t\t\t\t\t\treturn undefined\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn removeFieldModification.createModification({\n\t\t\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\t\t\tfieldName: field.name,\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t\t.filter(isDefined)\n\t\t\t})\n\t}\n}\n"],"names":["entity"],"mappings":";;;;AAOO,MAAM,+BAA2F;AAAA,EACvG,YACkB,MACA,QACA,SAChB;AAHgB,SAAA,OAAA;AACA,SAAA,SAAA;AACA,SAAA,UAAA;AAAA,EACf;AAAA,EAEI,UAAU,SAAiC;AACjD,UAAM,SAAS,KAAK,OAAO,MAAM,SAAS,KAAK,KAAK,UAAU;AAC9D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AACA,uBAAmB,KAAK,OAAO,OAAO,KAAK,KAAK,YAAY,KAAK,KAAK,WAAW;AAAA,MAChF,aAAa,CAAC,EAAE,QAAAA,SAAQ,aAAa;AACpC,gBAAQ,WAAWA,QAAO,WAAW,OAAO,UAAU;AAAA,MACvD;AAAA,MACA,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC1C,gBAAQ,WAAWA,QAAO,WAAW,SAAS,cAAc,UAAU;AAAA,MACvE;AAAA,MACA,iBAAiB,MAAM;AAAA,MAAC;AAAA,MACxB,sBAAsB,CAAC,EAAE,QAAAA,SAAQ,eAAe;AAC/C,gBAAQ,WAAWA,QAAO,WAAW,SAAS,cAAc,UAAU;AAAA,MACvE;AAAA,MACA,uBAAuB,MAAM;AAAA,MAAC;AAAA,MAC9B,wBAAwB,CAAC,EAAE,eAAe;AACzC,gBAAQ,UAAU,SAAS,aAAa,SAAS;AAAA,MAClD;AAAA,MACA,yBAAyB,MAAM;AAAA,MAAC;AAAA,IAAA,CAChC;AAAA,EACF;AAAA,EAEO,mBAAkC;AACxC,WAAO,YAAY,KAAK,KAAK,YAAY,KAAK,KAAK,WAAW,KAAK,QAAQ,aAAa;AAAA,EACzF;AAAA,EAEA,WAAW;AACV,WAAO,EAAE,SAAS,gBAAgB,KAAK,KAAK,UAAU,IAAI,KAAK,KAAK,SAAS,IAAI,eAAe,KAAA;AAAA,EACjG;AACD;AAOO,MAAM,0BAA0B,uBAAuB;AAAA,EAC7D,IAAI;AAAA,EACJ,SAAS;AACV,CAAC;AAEM,MAAM,kBAAoC;AAAA,EAChD,WAAW,gBAAwB,eAAuB;AACzD,WAAO,OAAO,OAAO,cAAc,MAAM,QAAQ,EAC/C,OAAO,CAAC,EAAE,KAAA,MAAW,eAAe,MAAM,SAAS,IAAI,CAAC,EACxD,QAAQ,CAAA,WAAU;AAClB,YAAM,iBAAiB,eAAe,MAAM,SAAS,OAAO,IAAI;AAEhE,aAAO,OAAO,OAAO,eAAe,MAAM,EACxC,OAAO,CAAA,UAAS,CAAC,OAAO,OAAO,MAAM,IAAI,CAAC,EAC1C,IAAI,CAAA,UAAS;AACb,YAAI,WAAW,KAAK,KAAK,kBAAkB,KAAK,GAAG;AAClD,gBAAM,SAAS,cAAc,MAAM,SAAS,MAAM,MAAM;AACxD,cAAI,CAAC,UAAU,CAAC,OAAO,OAAO,MAAM,OAAO,GAAG;AAC7C,mBAAO;AAAA,UACR;AAAA,QACD;AACA,eAAO,wBAAwB,mBAAmB;AAAA,UACjD,YAAY,OAAO;AAAA,UACnB,WAAW,MAAM;AAAA,QAAA,CACjB;AAAA,MACF,CAAC,EACA,OAAO,SAAS;AAAA,IACnB,CAAC;AAAA,EACH;AACD;"}
|
|
@@ -51,10 +51,16 @@ class UpdateFieldNameModificationHandler {
|
|
|
51
51
|
const updateIndexFields = this.options.formatVersion >= ModificationVersions.VERSION_UPDATE_INDEX_FIELDS ? schemaUpdateUtils.updateEntity(this.data.entityName, ({ entity }) => {
|
|
52
52
|
return {
|
|
53
53
|
...entity,
|
|
54
|
-
indexes: entity.indexes.map((
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
54
|
+
indexes: entity.indexes.map((index) => {
|
|
55
|
+
const columnOptions = index.columnOptions && this.data.fieldName in index.columnOptions ? Object.fromEntries(
|
|
56
|
+
Object.entries(index.columnOptions).map(([field, options]) => [field === this.data.fieldName ? this.data.newFieldName : field, options])
|
|
57
|
+
) : index.columnOptions;
|
|
58
|
+
return {
|
|
59
|
+
...index,
|
|
60
|
+
fields: index.fields.map(valueUtils.changeValue(this.data.fieldName, this.data.newFieldName)),
|
|
61
|
+
...columnOptions !== void 0 ? { columnOptions } : {}
|
|
62
|
+
};
|
|
63
|
+
})
|
|
58
64
|
};
|
|
59
65
|
}) : void 0;
|
|
60
66
|
const updateRelationReferences = schemaUpdateUtils.updateEveryEntity(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateFieldNameModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/fields/UpdateFieldNameModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Input, Model, Schema, Value } from '@contember/schema'\nimport {\n\tSchemaUpdater,\n\tupdateAcl,\n\tupdateAclEveryEntity,\n\tupdateAclEveryPredicate,\n\tupdateAclEveryRole,\n\tupdateAclFieldPermissions,\n\tupdateEntity,\n\tupdateEveryEntity,\n\tupdateEveryField,\n\tupdateModel,\n\tupdateSchema,\n} from '../utils/schemaUpdateUtils'\nimport { createModificationType, ModificationHandler, ModificationHandlerCreateSqlOptions, ModificationHandlerOptions } from '../ModificationHandler'\nimport { acceptFieldVisitor, PredicateDefinitionProcessor } from '@contember/schema-utils'\nimport { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_FIELDS, VERSION_UPDATE_INDEX_FIELDS } from '../ModificationVersions'\nimport { changeValue } from '../utils/valueUtils'\nimport { updateColumnNameModification } from '../columns'\nimport { NoopModification } from '../NoopModification'\n\nexport class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {\n\tprivate renameColumnSubModification: ModificationHandler<any> = new NoopModification()\n\n\tconstructor(\n\t\tprivate readonly data: UpdateFieldNameModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {\n\t\tif (this.data.columnName) {\n\t\t\tthis.renameColumnSubModification = updateColumnNameModification.createHandler(\n\t\t\t\t{\n\t\t\t\t\tentityName: this.data.entityName,\n\t\t\t\t\tcolumnName: this.data.columnName,\n\t\t\t\t\tfieldName: this.data.fieldName,\n\t\t\t\t},\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tthis.renameColumnSubModification.createSql(builder, options)\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\tconst updateConstraintFields = this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_FIELDS\n\t\t\t? updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tunique: entity.unique.map(unique => ({\n\t\t\t\t\t\t...unique,\n\t\t\t\t\t\tfields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),\n\t\t\t\t\t})),\n\t\t\t\t}\n\t\t\t})\n\t\t\t: undefined\n\t\tconst updateIndexFields = this.options.formatVersion >= VERSION_UPDATE_INDEX_FIELDS\n\t\t\t? updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tindexes: entity.indexes.map(unique => ({\n\t\t\t\t\t\t...unique,\n\t\t\t\t\t\tfields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),\n\t\t\t\t\t})),\n\t\t\t\t}\n\t\t\t})\n\t\t\t: undefined\n\t\tconst updateRelationReferences = updateEveryEntity(\n\t\t\tupdateEveryField(({ field, entity }) => {\n\t\t\t\tconst isUpdatedRelation = (entity: Model.Entity, relation: Model.AnyRelation | null) => {\n\t\t\t\t\treturn entity.name === this.data.entityName && relation && relation.name === this.data.fieldName\n\t\t\t\t}\n\n\t\t\t\treturn acceptFieldVisitor<Model.AnyField>(this.schema.model, entity, field, {\n\t\t\t\t\tvisitColumn: ({ column }) => column,\n\t\t\t\t\tvisitManyHasOne: ({ targetEntity, relation, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasMany: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasOneOwning: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasOneInverse: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitManyHasManyOwning: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitManyHasManyInverse: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}),\n\t\t)\n\t\tconst updateFieldName = updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\tconst { [this.data.fieldName]: updated, ...fields } = entity.fields\n\t\t\treturn {\n\t\t\t\t...entity,\n\t\t\t\tfields: {\n\t\t\t\t\t...fields,\n\t\t\t\t\t[this.data.newFieldName]: { ...updated, name: this.data.newFieldName },\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\t\tconst updateAclOp = this.options.formatVersion >= VERSION_ACL_PATCH\n\t\t\t? updateAcl(\n\t\t\t\tupdateAclEveryRole(\n\t\t\t\t\tupdateAclEveryEntity(\n\t\t\t\t\t\tupdateAclFieldPermissions((permissions, entityName) => {\n\t\t\t\t\t\t\tif (entityName !== this.data.entityName) {\n\t\t\t\t\t\t\t\treturn permissions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!permissions[this.data.fieldName]) {\n\t\t\t\t\t\t\t\treturn permissions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst { [this.data.fieldName]: field, ...other } = permissions\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t[this.data.newFieldName]: field,\n\t\t\t\t\t\t\t\t...other,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tupdateAclEveryPredicate(({ predicate, entityName, schema }) => {\n\t\t\t\t\t\t\tconst processor = new PredicateDefinitionProcessor(schema.model)\n\t\t\t\t\t\t\tconst currentEntity = schema.model.entities[entityName]\n\t\t\t\t\t\t\treturn processor.process<Input.Condition<Value.FieldValue<never>> | string, never>(\n\t\t\t\t\t\t\t\tcurrentEntity,\n\t\t\t\t\t\t\t\tpredicate,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\thandleColumn: ctx =>\n\t\t\t\t\t\t\t\t\t\tctx.entity.name === this.data.entityName && ctx.column.name === this.data.fieldName\n\t\t\t\t\t\t\t\t\t\t\t? [this.data.newFieldName, ctx.value]\n\t\t\t\t\t\t\t\t\t\t\t: ctx.value,\n\t\t\t\t\t\t\t\t\thandleRelation: ctx =>\n\t\t\t\t\t\t\t\t\t\tctx.entity.name === this.data.entityName && ctx.relation.name === this.data.fieldName\n\t\t\t\t\t\t\t\t\t\t\t? [this.data.newFieldName, ctx.value]\n\t\t\t\t\t\t\t\t\t\t\t: ctx.value,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t)\n\t\t\t: undefined\n\t\treturn updateSchema(\n\t\t\tupdateAclOp,\n\t\t\tthis.renameColumnSubModification.getSchemaUpdater(),\n\t\t\tupdateModel(\n\t\t\t\tupdateConstraintFields,\n\t\t\t\tupdateIndexFields,\n\t\t\t\tupdateRelationReferences,\n\t\t\t\tupdateFieldName,\n\t\t\t),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\treturn { message: `Change field name ${this.data.entityName}.${this.data.fieldName} to ${this.data.newFieldName}` }\n\t}\n}\n\nexport interface UpdateFieldNameModificationData {\n\tentityName: string\n\tfieldName: string\n\tnewFieldName: string\n\tcolumnName?: string\n}\n\nexport const updateFieldNameModification = createModificationType({\n\tid: 'updateFieldName',\n\thandler: UpdateFieldNameModificationHandler,\n})\n"],"names":["NoopModification","updateColumnNameModification","VERSION_UPDATE_CONSTRAINT_FIELDS","updateEntity","changeValue","VERSION_UPDATE_INDEX_FIELDS","updateEveryEntity","updateEveryField","entity","acceptFieldVisitor","VERSION_ACL_PATCH","updateAcl","updateAclEveryRole","updateAclEveryEntity","updateAclFieldPermissions","updateAclEveryPredicate","PredicateDefinitionProcessor","updateSchema","updateModel","createModificationType"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UpdateFieldNameModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/fields/UpdateFieldNameModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Input, Model, Schema, Value } from '@contember/schema'\nimport {\n\tSchemaUpdater,\n\tupdateAcl,\n\tupdateAclEveryEntity,\n\tupdateAclEveryPredicate,\n\tupdateAclEveryRole,\n\tupdateAclFieldPermissions,\n\tupdateEntity,\n\tupdateEveryEntity,\n\tupdateEveryField,\n\tupdateModel,\n\tupdateSchema,\n} from '../utils/schemaUpdateUtils.js'\nimport {\n\tcreateModificationType,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n\tModificationHandlerOptions,\n} from '../ModificationHandler.js'\nimport { acceptFieldVisitor, PredicateDefinitionProcessor } from '@contember/schema-utils'\nimport { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_FIELDS, VERSION_UPDATE_INDEX_FIELDS } from '../ModificationVersions.js'\nimport { changeValue } from '../utils/valueUtils.js'\nimport { updateColumnNameModification } from '../columns/index.js'\nimport { NoopModification } from '../NoopModification.js'\n\nexport class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {\n\tprivate renameColumnSubModification: ModificationHandler<any> = new NoopModification()\n\n\tconstructor(\n\t\tprivate readonly data: UpdateFieldNameModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {\n\t\tif (this.data.columnName) {\n\t\t\tthis.renameColumnSubModification = updateColumnNameModification.createHandler(\n\t\t\t\t{\n\t\t\t\t\tentityName: this.data.entityName,\n\t\t\t\t\tcolumnName: this.data.columnName,\n\t\t\t\t\tfieldName: this.data.fieldName,\n\t\t\t\t},\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tthis.renameColumnSubModification.createSql(builder, options)\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\tconst updateConstraintFields = this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_FIELDS\n\t\t\t? updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tunique: entity.unique.map(unique => ({\n\t\t\t\t\t\t...unique,\n\t\t\t\t\t\tfields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),\n\t\t\t\t\t})),\n\t\t\t\t}\n\t\t\t})\n\t\t\t: undefined\n\t\tconst updateIndexFields = this.options.formatVersion >= VERSION_UPDATE_INDEX_FIELDS\n\t\t\t? updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tindexes: entity.indexes.map(index => {\n\t\t\t\t\t\t// columnOptions is keyed by field name, so a rename must move its entry too —\n\t\t\t\t\t\t// otherwise the options are dropped on regenerate and the (now stale-keyed) entry\n\t\t\t\t\t\t// fails model validation (\"Column options reference field <old>, not a key column\").\n\t\t\t\t\t\tconst columnOptions = index.columnOptions && this.data.fieldName in index.columnOptions\n\t\t\t\t\t\t\t? Object.fromEntries(\n\t\t\t\t\t\t\t\tObject.entries(index.columnOptions).map(([field, options]) => [field === this.data.fieldName ? this.data.newFieldName : field, options]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: index.columnOptions\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...index,\n\t\t\t\t\t\t\tfields: index.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),\n\t\t\t\t\t\t\t...(columnOptions !== undefined ? { columnOptions } : {}),\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t}\n\t\t\t})\n\t\t\t: undefined\n\t\tconst updateRelationReferences = updateEveryEntity(\n\t\t\tupdateEveryField(({ field, entity }) => {\n\t\t\t\tconst isUpdatedRelation = (entity: Model.Entity, relation: Model.AnyRelation | null) => {\n\t\t\t\t\treturn entity.name === this.data.entityName && relation && relation.name === this.data.fieldName\n\t\t\t\t}\n\n\t\t\t\treturn acceptFieldVisitor<Model.AnyField>(this.schema.model, entity, field, {\n\t\t\t\t\tvisitColumn: ({ column }) => column,\n\t\t\t\t\tvisitManyHasOne: ({ targetEntity, relation, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasMany: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasOneOwning: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasOneInverse: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitManyHasManyOwning: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitManyHasManyInverse: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}),\n\t\t)\n\t\tconst updateFieldName = updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\tconst { [this.data.fieldName]: updated, ...fields } = entity.fields\n\t\t\treturn {\n\t\t\t\t...entity,\n\t\t\t\tfields: {\n\t\t\t\t\t...fields,\n\t\t\t\t\t[this.data.newFieldName]: { ...updated, name: this.data.newFieldName },\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\t\tconst updateAclOp = this.options.formatVersion >= VERSION_ACL_PATCH\n\t\t\t? updateAcl(\n\t\t\t\tupdateAclEveryRole(\n\t\t\t\t\tupdateAclEveryEntity(\n\t\t\t\t\t\tupdateAclFieldPermissions((permissions, entityName) => {\n\t\t\t\t\t\t\tif (entityName !== this.data.entityName) {\n\t\t\t\t\t\t\t\treturn permissions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!permissions[this.data.fieldName]) {\n\t\t\t\t\t\t\t\treturn permissions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst { [this.data.fieldName]: field, ...other } = permissions\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t[this.data.newFieldName]: field,\n\t\t\t\t\t\t\t\t...other,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tupdateAclEveryPredicate(({ predicate, entityName, schema }) => {\n\t\t\t\t\t\t\tconst processor = new PredicateDefinitionProcessor(schema.model)\n\t\t\t\t\t\t\tconst currentEntity = schema.model.entities[entityName]\n\t\t\t\t\t\t\treturn processor.process<Input.Condition<Value.FieldValue<never>> | string, never>(\n\t\t\t\t\t\t\t\tcurrentEntity,\n\t\t\t\t\t\t\t\tpredicate,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\thandleColumn: ctx =>\n\t\t\t\t\t\t\t\t\t\tctx.entity.name === this.data.entityName && ctx.column.name === this.data.fieldName\n\t\t\t\t\t\t\t\t\t\t\t? [this.data.newFieldName, ctx.value]\n\t\t\t\t\t\t\t\t\t\t\t: ctx.value,\n\t\t\t\t\t\t\t\t\thandleRelation: ctx =>\n\t\t\t\t\t\t\t\t\t\tctx.entity.name === this.data.entityName && ctx.relation.name === this.data.fieldName\n\t\t\t\t\t\t\t\t\t\t\t? [this.data.newFieldName, ctx.value]\n\t\t\t\t\t\t\t\t\t\t\t: ctx.value,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t)\n\t\t\t: undefined\n\t\treturn updateSchema(\n\t\t\tupdateAclOp,\n\t\t\tthis.renameColumnSubModification.getSchemaUpdater(),\n\t\t\tupdateModel(\n\t\t\t\tupdateConstraintFields,\n\t\t\t\tupdateIndexFields,\n\t\t\t\tupdateRelationReferences,\n\t\t\t\tupdateFieldName,\n\t\t\t),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\treturn { message: `Change field name ${this.data.entityName}.${this.data.fieldName} to ${this.data.newFieldName}` }\n\t}\n}\n\nexport interface UpdateFieldNameModificationData {\n\tentityName: string\n\tfieldName: string\n\tnewFieldName: string\n\tcolumnName?: string\n}\n\nexport const updateFieldNameModification = createModificationType({\n\tid: 'updateFieldName',\n\thandler: UpdateFieldNameModificationHandler,\n})\n"],"names":["NoopModification","updateColumnNameModification","VERSION_UPDATE_CONSTRAINT_FIELDS","updateEntity","changeValue","VERSION_UPDATE_INDEX_FIELDS","updateEveryEntity","updateEveryField","entity","acceptFieldVisitor","VERSION_ACL_PATCH","updateAcl","updateAclEveryRole","updateAclEveryEntity","updateAclFieldPermissions","updateAclEveryPredicate","PredicateDefinitionProcessor","updateSchema","updateModel","createModificationType"],"mappings":"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"}
|
|
@@ -49,10 +49,16 @@ class UpdateFieldNameModificationHandler {
|
|
|
49
49
|
const updateIndexFields = this.options.formatVersion >= VERSION_UPDATE_INDEX_FIELDS ? updateEntity(this.data.entityName, ({ entity }) => {
|
|
50
50
|
return {
|
|
51
51
|
...entity,
|
|
52
|
-
indexes: entity.indexes.map((
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
52
|
+
indexes: entity.indexes.map((index) => {
|
|
53
|
+
const columnOptions = index.columnOptions && this.data.fieldName in index.columnOptions ? Object.fromEntries(
|
|
54
|
+
Object.entries(index.columnOptions).map(([field, options]) => [field === this.data.fieldName ? this.data.newFieldName : field, options])
|
|
55
|
+
) : index.columnOptions;
|
|
56
|
+
return {
|
|
57
|
+
...index,
|
|
58
|
+
fields: index.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),
|
|
59
|
+
...columnOptions !== void 0 ? { columnOptions } : {}
|
|
60
|
+
};
|
|
61
|
+
})
|
|
56
62
|
};
|
|
57
63
|
}) : void 0;
|
|
58
64
|
const updateRelationReferences = updateEveryEntity(
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"UpdateFieldNameModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/fields/UpdateFieldNameModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Input, Model, Schema, Value } from '@contember/schema'\nimport {\n\tSchemaUpdater,\n\tupdateAcl,\n\tupdateAclEveryEntity,\n\tupdateAclEveryPredicate,\n\tupdateAclEveryRole,\n\tupdateAclFieldPermissions,\n\tupdateEntity,\n\tupdateEveryEntity,\n\tupdateEveryField,\n\tupdateModel,\n\tupdateSchema,\n} from '../utils/schemaUpdateUtils'\nimport { createModificationType, ModificationHandler, ModificationHandlerCreateSqlOptions, ModificationHandlerOptions } from '../ModificationHandler'\nimport { acceptFieldVisitor, PredicateDefinitionProcessor } from '@contember/schema-utils'\nimport { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_FIELDS, VERSION_UPDATE_INDEX_FIELDS } from '../ModificationVersions'\nimport { changeValue } from '../utils/valueUtils'\nimport { updateColumnNameModification } from '../columns'\nimport { NoopModification } from '../NoopModification'\n\nexport class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {\n\tprivate renameColumnSubModification: ModificationHandler<any> = new NoopModification()\n\n\tconstructor(\n\t\tprivate readonly data: UpdateFieldNameModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {\n\t\tif (this.data.columnName) {\n\t\t\tthis.renameColumnSubModification = updateColumnNameModification.createHandler(\n\t\t\t\t{\n\t\t\t\t\tentityName: this.data.entityName,\n\t\t\t\t\tcolumnName: this.data.columnName,\n\t\t\t\t\tfieldName: this.data.fieldName,\n\t\t\t\t},\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tthis.renameColumnSubModification.createSql(builder, options)\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\tconst updateConstraintFields = this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_FIELDS\n\t\t\t? updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tunique: entity.unique.map(unique => ({\n\t\t\t\t\t\t...unique,\n\t\t\t\t\t\tfields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),\n\t\t\t\t\t})),\n\t\t\t\t}\n\t\t\t})\n\t\t\t: undefined\n\t\tconst updateIndexFields = this.options.formatVersion >= VERSION_UPDATE_INDEX_FIELDS\n\t\t\t? updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tindexes: entity.indexes.map(unique => ({\n\t\t\t\t\t\t...unique,\n\t\t\t\t\t\tfields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),\n\t\t\t\t\t})),\n\t\t\t\t}\n\t\t\t})\n\t\t\t: undefined\n\t\tconst updateRelationReferences = updateEveryEntity(\n\t\t\tupdateEveryField(({ field, entity }) => {\n\t\t\t\tconst isUpdatedRelation = (entity: Model.Entity, relation: Model.AnyRelation | null) => {\n\t\t\t\t\treturn entity.name === this.data.entityName && relation && relation.name === this.data.fieldName\n\t\t\t\t}\n\n\t\t\t\treturn acceptFieldVisitor<Model.AnyField>(this.schema.model, entity, field, {\n\t\t\t\t\tvisitColumn: ({ column }) => column,\n\t\t\t\t\tvisitManyHasOne: ({ targetEntity, relation, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasMany: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasOneOwning: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasOneInverse: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitManyHasManyOwning: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitManyHasManyInverse: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}),\n\t\t)\n\t\tconst updateFieldName = updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\tconst { [this.data.fieldName]: updated, ...fields } = entity.fields\n\t\t\treturn {\n\t\t\t\t...entity,\n\t\t\t\tfields: {\n\t\t\t\t\t...fields,\n\t\t\t\t\t[this.data.newFieldName]: { ...updated, name: this.data.newFieldName },\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\t\tconst updateAclOp = this.options.formatVersion >= VERSION_ACL_PATCH\n\t\t\t? updateAcl(\n\t\t\t\tupdateAclEveryRole(\n\t\t\t\t\tupdateAclEveryEntity(\n\t\t\t\t\t\tupdateAclFieldPermissions((permissions, entityName) => {\n\t\t\t\t\t\t\tif (entityName !== this.data.entityName) {\n\t\t\t\t\t\t\t\treturn permissions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!permissions[this.data.fieldName]) {\n\t\t\t\t\t\t\t\treturn permissions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst { [this.data.fieldName]: field, ...other } = permissions\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t[this.data.newFieldName]: field,\n\t\t\t\t\t\t\t\t...other,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tupdateAclEveryPredicate(({ predicate, entityName, schema }) => {\n\t\t\t\t\t\t\tconst processor = new PredicateDefinitionProcessor(schema.model)\n\t\t\t\t\t\t\tconst currentEntity = schema.model.entities[entityName]\n\t\t\t\t\t\t\treturn processor.process<Input.Condition<Value.FieldValue<never>> | string, never>(\n\t\t\t\t\t\t\t\tcurrentEntity,\n\t\t\t\t\t\t\t\tpredicate,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\thandleColumn: ctx =>\n\t\t\t\t\t\t\t\t\t\tctx.entity.name === this.data.entityName && ctx.column.name === this.data.fieldName\n\t\t\t\t\t\t\t\t\t\t\t? [this.data.newFieldName, ctx.value]\n\t\t\t\t\t\t\t\t\t\t\t: ctx.value,\n\t\t\t\t\t\t\t\t\thandleRelation: ctx =>\n\t\t\t\t\t\t\t\t\t\tctx.entity.name === this.data.entityName && ctx.relation.name === this.data.fieldName\n\t\t\t\t\t\t\t\t\t\t\t? [this.data.newFieldName, ctx.value]\n\t\t\t\t\t\t\t\t\t\t\t: ctx.value,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t)\n\t\t\t: undefined\n\t\treturn updateSchema(\n\t\t\tupdateAclOp,\n\t\t\tthis.renameColumnSubModification.getSchemaUpdater(),\n\t\t\tupdateModel(\n\t\t\t\tupdateConstraintFields,\n\t\t\t\tupdateIndexFields,\n\t\t\t\tupdateRelationReferences,\n\t\t\t\tupdateFieldName,\n\t\t\t),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\treturn { message: `Change field name ${this.data.entityName}.${this.data.fieldName} to ${this.data.newFieldName}` }\n\t}\n}\n\nexport interface UpdateFieldNameModificationData {\n\tentityName: string\n\tfieldName: string\n\tnewFieldName: string\n\tcolumnName?: string\n}\n\nexport const updateFieldNameModification = createModificationType({\n\tid: 'updateFieldName',\n\thandler: UpdateFieldNameModificationHandler,\n})\n"],"names":["entity"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"UpdateFieldNameModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/fields/UpdateFieldNameModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Input, Model, Schema, Value } from '@contember/schema'\nimport {\n\tSchemaUpdater,\n\tupdateAcl,\n\tupdateAclEveryEntity,\n\tupdateAclEveryPredicate,\n\tupdateAclEveryRole,\n\tupdateAclFieldPermissions,\n\tupdateEntity,\n\tupdateEveryEntity,\n\tupdateEveryField,\n\tupdateModel,\n\tupdateSchema,\n} from '../utils/schemaUpdateUtils.js'\nimport {\n\tcreateModificationType,\n\tModificationHandler,\n\tModificationHandlerCreateSqlOptions,\n\tModificationHandlerOptions,\n} from '../ModificationHandler.js'\nimport { acceptFieldVisitor, PredicateDefinitionProcessor } from '@contember/schema-utils'\nimport { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_FIELDS, VERSION_UPDATE_INDEX_FIELDS } from '../ModificationVersions.js'\nimport { changeValue } from '../utils/valueUtils.js'\nimport { updateColumnNameModification } from '../columns/index.js'\nimport { NoopModification } from '../NoopModification.js'\n\nexport class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {\n\tprivate renameColumnSubModification: ModificationHandler<any> = new NoopModification()\n\n\tconstructor(\n\t\tprivate readonly data: UpdateFieldNameModificationData,\n\t\tprivate readonly schema: Schema,\n\t\tprivate readonly options: ModificationHandlerOptions,\n\t) {\n\t\tif (this.data.columnName) {\n\t\t\tthis.renameColumnSubModification = updateColumnNameModification.createHandler(\n\t\t\t\t{\n\t\t\t\t\tentityName: this.data.entityName,\n\t\t\t\t\tcolumnName: this.data.columnName,\n\t\t\t\t\tfieldName: this.data.fieldName,\n\t\t\t\t},\n\t\t\t\tthis.schema,\n\t\t\t\tthis.options,\n\t\t\t)\n\t\t}\n\t}\n\n\tpublic createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view) {\n\t\t\treturn\n\t\t}\n\t\tthis.renameColumnSubModification.createSql(builder, options)\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\tconst updateConstraintFields = this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_FIELDS\n\t\t\t? updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tunique: entity.unique.map(unique => ({\n\t\t\t\t\t\t...unique,\n\t\t\t\t\t\tfields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),\n\t\t\t\t\t})),\n\t\t\t\t}\n\t\t\t})\n\t\t\t: undefined\n\t\tconst updateIndexFields = this.options.formatVersion >= VERSION_UPDATE_INDEX_FIELDS\n\t\t\t? updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\t\treturn {\n\t\t\t\t\t...entity,\n\t\t\t\t\tindexes: entity.indexes.map(index => {\n\t\t\t\t\t\t// columnOptions is keyed by field name, so a rename must move its entry too —\n\t\t\t\t\t\t// otherwise the options are dropped on regenerate and the (now stale-keyed) entry\n\t\t\t\t\t\t// fails model validation (\"Column options reference field <old>, not a key column\").\n\t\t\t\t\t\tconst columnOptions = index.columnOptions && this.data.fieldName in index.columnOptions\n\t\t\t\t\t\t\t? Object.fromEntries(\n\t\t\t\t\t\t\t\tObject.entries(index.columnOptions).map(([field, options]) => [field === this.data.fieldName ? this.data.newFieldName : field, options]),\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t: index.columnOptions\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t...index,\n\t\t\t\t\t\t\tfields: index.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),\n\t\t\t\t\t\t\t...(columnOptions !== undefined ? { columnOptions } : {}),\n\t\t\t\t\t\t}\n\t\t\t\t\t}),\n\t\t\t\t}\n\t\t\t})\n\t\t\t: undefined\n\t\tconst updateRelationReferences = updateEveryEntity(\n\t\t\tupdateEveryField(({ field, entity }) => {\n\t\t\t\tconst isUpdatedRelation = (entity: Model.Entity, relation: Model.AnyRelation | null) => {\n\t\t\t\t\treturn entity.name === this.data.entityName && relation && relation.name === this.data.fieldName\n\t\t\t\t}\n\n\t\t\t\treturn acceptFieldVisitor<Model.AnyField>(this.schema.model, entity, field, {\n\t\t\t\t\tvisitColumn: ({ column }) => column,\n\t\t\t\t\tvisitManyHasOne: ({ targetEntity, relation, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasMany: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasOneOwning: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitOneHasOneInverse: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitManyHasManyOwning: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, inversedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t\tvisitManyHasManyInverse: ({ relation, targetEntity, targetRelation }) => {\n\t\t\t\t\t\treturn isUpdatedRelation(targetEntity, targetRelation)\n\t\t\t\t\t\t\t? { ...relation, ownedBy: this.data.newFieldName }\n\t\t\t\t\t\t\t: relation\n\t\t\t\t\t},\n\t\t\t\t})\n\t\t\t}),\n\t\t)\n\t\tconst updateFieldName = updateEntity(this.data.entityName, ({ entity }) => {\n\t\t\tconst { [this.data.fieldName]: updated, ...fields } = entity.fields\n\t\t\treturn {\n\t\t\t\t...entity,\n\t\t\t\tfields: {\n\t\t\t\t\t...fields,\n\t\t\t\t\t[this.data.newFieldName]: { ...updated, name: this.data.newFieldName },\n\t\t\t\t},\n\t\t\t}\n\t\t})\n\t\tconst updateAclOp = this.options.formatVersion >= VERSION_ACL_PATCH\n\t\t\t? updateAcl(\n\t\t\t\tupdateAclEveryRole(\n\t\t\t\t\tupdateAclEveryEntity(\n\t\t\t\t\t\tupdateAclFieldPermissions((permissions, entityName) => {\n\t\t\t\t\t\t\tif (entityName !== this.data.entityName) {\n\t\t\t\t\t\t\t\treturn permissions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (!permissions[this.data.fieldName]) {\n\t\t\t\t\t\t\t\treturn permissions\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst { [this.data.fieldName]: field, ...other } = permissions\n\t\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\t\t[this.data.newFieldName]: field,\n\t\t\t\t\t\t\t\t...other,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}),\n\t\t\t\t\t\tupdateAclEveryPredicate(({ predicate, entityName, schema }) => {\n\t\t\t\t\t\t\tconst processor = new PredicateDefinitionProcessor(schema.model)\n\t\t\t\t\t\t\tconst currentEntity = schema.model.entities[entityName]\n\t\t\t\t\t\t\treturn processor.process<Input.Condition<Value.FieldValue<never>> | string, never>(\n\t\t\t\t\t\t\t\tcurrentEntity,\n\t\t\t\t\t\t\t\tpredicate,\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\thandleColumn: ctx =>\n\t\t\t\t\t\t\t\t\t\tctx.entity.name === this.data.entityName && ctx.column.name === this.data.fieldName\n\t\t\t\t\t\t\t\t\t\t\t? [this.data.newFieldName, ctx.value]\n\t\t\t\t\t\t\t\t\t\t\t: ctx.value,\n\t\t\t\t\t\t\t\t\thandleRelation: ctx =>\n\t\t\t\t\t\t\t\t\t\tctx.entity.name === this.data.entityName && ctx.relation.name === this.data.fieldName\n\t\t\t\t\t\t\t\t\t\t\t? [this.data.newFieldName, ctx.value]\n\t\t\t\t\t\t\t\t\t\t\t: ctx.value,\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}),\n\t\t\t\t\t),\n\t\t\t\t),\n\t\t\t)\n\t\t\t: undefined\n\t\treturn updateSchema(\n\t\t\tupdateAclOp,\n\t\t\tthis.renameColumnSubModification.getSchemaUpdater(),\n\t\t\tupdateModel(\n\t\t\t\tupdateConstraintFields,\n\t\t\t\tupdateIndexFields,\n\t\t\t\tupdateRelationReferences,\n\t\t\t\tupdateFieldName,\n\t\t\t),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\treturn { message: `Change field name ${this.data.entityName}.${this.data.fieldName} to ${this.data.newFieldName}` }\n\t}\n}\n\nexport interface UpdateFieldNameModificationData {\n\tentityName: string\n\tfieldName: string\n\tnewFieldName: string\n\tcolumnName?: string\n}\n\nexport const updateFieldNameModification = createModificationType({\n\tid: 'updateFieldName',\n\thandler: UpdateFieldNameModificationHandler,\n})\n"],"names":["entity"],"mappings":"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"}
|
|
@@ -15,16 +15,25 @@ class CreateIndexModificationHandler {
|
|
|
15
15
|
if (entity.view && !entity.view.materialized) {
|
|
16
16
|
return;
|
|
17
17
|
}
|
|
18
|
-
const
|
|
18
|
+
const index = this.data.index;
|
|
19
19
|
const columns = utils.getIndexColumns({
|
|
20
|
-
fields,
|
|
20
|
+
fields: index.fields,
|
|
21
21
|
entity,
|
|
22
22
|
model: this.schema.model
|
|
23
23
|
});
|
|
24
24
|
const tableNameId = dbHelpers.wrapIdentifier(entity.tableName);
|
|
25
|
-
const columnNameIds =
|
|
26
|
-
|
|
27
|
-
|
|
25
|
+
const columnNameIds = index.fields.map((field, i) => {
|
|
26
|
+
const options = index.columnOptions?.[field];
|
|
27
|
+
const opClass = options?.opClass ?? index.opClass;
|
|
28
|
+
const opClassSuffix = opClass ? ` ${opClass}` : "";
|
|
29
|
+
const orderSuffix = options?.order === "desc" ? " DESC" : "";
|
|
30
|
+
const nullsSuffix = options?.nulls === "first" ? " NULLS FIRST" : options?.nulls === "last" ? " NULLS LAST" : "";
|
|
31
|
+
return dbHelpers.wrapIdentifier(columns[i]) + opClassSuffix + orderSuffix + nullsSuffix;
|
|
32
|
+
});
|
|
33
|
+
const methodClause = index.method ? ` USING ${index.method}` : "";
|
|
34
|
+
const includeClause = index.include?.length ? ` INCLUDE (${utils.getIndexColumns({ fields: index.include, entity, model: this.schema.model }).map(dbHelpers.wrapIdentifier).join(", ")})` : "";
|
|
35
|
+
const whereClause = index.where ? ` WHERE (${index.where})` : "";
|
|
36
|
+
builder.sql(`CREATE INDEX ON ${tableNameId}${methodClause} (${columnNameIds.join(", ")})${includeClause}${whereClause}`);
|
|
28
37
|
invalidateDatabaseMetadata();
|
|
29
38
|
}
|
|
30
39
|
getSchemaUpdater() {
|
|
@@ -39,9 +48,16 @@ class CreateIndexModificationHandler {
|
|
|
39
48
|
);
|
|
40
49
|
}
|
|
41
50
|
describe() {
|
|
42
|
-
const
|
|
51
|
+
const index = this.data.index;
|
|
52
|
+
const methodText = index.method ? ` using ${index.method}` : "";
|
|
53
|
+
const includeText = index.include?.length ? ` include (${index.include.join(", ")})` : "";
|
|
54
|
+
const whereText = index.where ? ` where ${index.where}` : "";
|
|
55
|
+
const columnOptionsText = index.columnOptions && Object.keys(index.columnOptions).length > 0 ? ` options (${Object.entries(index.columnOptions).map(([field, opts]) => {
|
|
56
|
+
const parts = [opts.order, opts.nulls ? `nulls ${opts.nulls}` : "", opts.opClass ? `opclass ${opts.opClass}` : ""].filter(Boolean);
|
|
57
|
+
return `${field}: ${parts.join(" ")}`;
|
|
58
|
+
}).join(", ")})` : "";
|
|
43
59
|
return {
|
|
44
|
-
message: `Create index(${
|
|
60
|
+
message: `Create index(${index.fields.join(", ")})${methodText}${includeText}${whereText}${columnOptionsText} on entity ${this.data.entityName}`
|
|
45
61
|
};
|
|
46
62
|
}
|
|
47
63
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateIndexModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/indexes/CreateIndexModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler, ModificationHandlerCreateSqlOptions } from '../ModificationHandler'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\nimport { getIndexColumns } from './utils'\nimport deepEqual from 'fast-deep-equal'\n\nexport class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {\n\tconstructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view && !entity.view.materialized) {\n\t\t\treturn\n\t\t}\n\t\tconst
|
|
1
|
+
{"version":3,"file":"CreateIndexModification.cjs","sources":["../../../../../../packages/schema-migrations/src/modifications/indexes/CreateIndexModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils.js'\nimport { createModificationType, Differ, ModificationHandler, ModificationHandlerCreateSqlOptions } from '../ModificationHandler.js'\nimport { wrapIdentifier } from '../../utils/dbHelpers.js'\nimport { getIndexColumns } from './utils.js'\nimport deepEqual from 'fast-deep-equal'\n\nexport class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {\n\tconstructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view && !entity.view.materialized) {\n\t\t\treturn\n\t\t}\n\t\tconst index = this.data.index\n\t\tconst columns = getIndexColumns({\n\t\t\tfields: index.fields,\n\t\t\tentity,\n\t\t\tmodel: this.schema.model,\n\t\t})\n\n\t\tconst tableNameId = wrapIdentifier(entity.tableName)\n\t\t// Each key column may carry its own operator class (falling back to the global opClass),\n\t\t// sort direction (ASC is the default and omitted) and NULLS placement. Postgres expects\n\t\t// the parts in this order: column [opclass] [ASC|DESC] [NULLS {FIRST|LAST}].\n\t\t// The opclass is emitted verbatim (validated to an identifier shape in ModelValidator). Migrations\n\t\t// run with search_path set to the stage schema, so the value must already carry any needed schema\n\t\t// qualifier: an extension's class as \"public.gin_trgm_ops\", a built-in one (in pg_catalog) as\n\t\t// plain \"text_pattern_ops\".\n\t\tconst columnNameIds = index.fields.map((field, i) => {\n\t\t\tconst options = index.columnOptions?.[field]\n\t\t\tconst opClass = options?.opClass ?? index.opClass\n\t\t\tconst opClassSuffix = opClass ? ` ${opClass}` : ''\n\t\t\tconst orderSuffix = options?.order === 'desc' ? ' DESC' : ''\n\t\t\tconst nullsSuffix = options?.nulls === 'first' ? ' NULLS FIRST' : options?.nulls === 'last' ? ' NULLS LAST' : ''\n\t\t\treturn wrapIdentifier(columns[i]) + opClassSuffix + orderSuffix + nullsSuffix\n\t\t})\n\t\tconst methodClause = index.method ? ` USING ${index.method}` : ''\n\n\t\tconst includeClause = index.include?.length\n\t\t\t? ` INCLUDE (${getIndexColumns({ fields: index.include, entity, model: this.schema.model }).map(wrapIdentifier).join(', ')})`\n\t\t\t: ''\n\t\t// `where` is a raw, developer-authored SQL predicate. Its trust boundary is identical to\n\t\t// @c.View's raw body — committed to a migration and gated by code review, not end-user input.\n\t\t// Its shape is validated in ModelValidator (non-empty, no statement terminator); here we only\n\t\t// wrap it in parentheses so it stays a self-contained boolean expression.\n\t\tconst whereClause = index.where ? ` WHERE (${index.where})` : ''\n\n\t\tbuilder.sql(`CREATE INDEX ON ${tableNameId}${methodClause} (${columnNameIds.join(', ')})${includeClause}${whereClause}`)\n\n\t\tinvalidateDatabaseMetadata()\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(\n\t\t\tupdateEntity(this.data.entityName, ({ entity }) => ({\n\t\t\t\t...entity,\n\t\t\t\tindexes: [\n\t\t\t\t\t...entity.indexes,\n\t\t\t\t\tthis.data.index,\n\t\t\t\t],\n\t\t\t})),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\tconst index = this.data.index\n\t\tconst methodText = index.method ? ` using ${index.method}` : ''\n\t\tconst includeText = index.include?.length ? ` include (${index.include.join(', ')})` : ''\n\t\tconst whereText = index.where ? ` where ${index.where}` : ''\n\t\t// columnOptions is part of index identity, so surface it in the description too — otherwise two\n\t\t// indexes on the same columns differing only by sort order / NULLS / opClass render identically.\n\t\tconst columnOptionsText = index.columnOptions && Object.keys(index.columnOptions).length > 0\n\t\t\t? ` options (${\n\t\t\t\tObject.entries(index.columnOptions).map(([field, opts]) => {\n\t\t\t\t\tconst parts = [opts.order, opts.nulls ? `nulls ${opts.nulls}` : '', opts.opClass ? `opclass ${opts.opClass}` : ''].filter(Boolean)\n\t\t\t\t\treturn `${field}: ${parts.join(' ')}`\n\t\t\t\t}).join(', ')\n\t\t\t})`\n\t\t\t: ''\n\t\treturn {\n\t\t\tmessage: `Create index(${index.fields.join(', ')})${methodText}${includeText}${whereText}${columnOptionsText} on entity ${this.data.entityName}`,\n\t\t}\n\t}\n}\n\nexport const createIndexModification = createModificationType({\n\tid: 'createIndex',\n\thandler: CreateIndexModificationHandler,\n})\n\nexport interface CreateIndexModificationData {\n\tentityName: string\n\tindex: Model.Index\n}\n\nexport class CreateIndexDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities).flatMap(entity =>\n\t\t\tentity.indexes\n\t\t\t\t.filter(it => !originalSchema.model.entities[entity.name].indexes.find(idx => deepEqual(idx, it)))\n\t\t\t\t.map(index =>\n\t\t\t\t\tcreateIndexModification.createModification({\n\t\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t)\n\t}\n}\n"],"names":["getIndexColumns","wrapIdentifier","updateModel","updateEntity","createModificationType"],"mappings":"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"}
|
|
@@ -13,16 +13,25 @@ class CreateIndexModificationHandler {
|
|
|
13
13
|
if (entity.view && !entity.view.materialized) {
|
|
14
14
|
return;
|
|
15
15
|
}
|
|
16
|
-
const
|
|
16
|
+
const index = this.data.index;
|
|
17
17
|
const columns = getIndexColumns({
|
|
18
|
-
fields,
|
|
18
|
+
fields: index.fields,
|
|
19
19
|
entity,
|
|
20
20
|
model: this.schema.model
|
|
21
21
|
});
|
|
22
22
|
const tableNameId = wrapIdentifier(entity.tableName);
|
|
23
|
-
const columnNameIds =
|
|
24
|
-
|
|
25
|
-
|
|
23
|
+
const columnNameIds = index.fields.map((field, i) => {
|
|
24
|
+
const options = index.columnOptions?.[field];
|
|
25
|
+
const opClass = options?.opClass ?? index.opClass;
|
|
26
|
+
const opClassSuffix = opClass ? ` ${opClass}` : "";
|
|
27
|
+
const orderSuffix = options?.order === "desc" ? " DESC" : "";
|
|
28
|
+
const nullsSuffix = options?.nulls === "first" ? " NULLS FIRST" : options?.nulls === "last" ? " NULLS LAST" : "";
|
|
29
|
+
return wrapIdentifier(columns[i]) + opClassSuffix + orderSuffix + nullsSuffix;
|
|
30
|
+
});
|
|
31
|
+
const methodClause = index.method ? ` USING ${index.method}` : "";
|
|
32
|
+
const includeClause = index.include?.length ? ` INCLUDE (${getIndexColumns({ fields: index.include, entity, model: this.schema.model }).map(wrapIdentifier).join(", ")})` : "";
|
|
33
|
+
const whereClause = index.where ? ` WHERE (${index.where})` : "";
|
|
34
|
+
builder.sql(`CREATE INDEX ON ${tableNameId}${methodClause} (${columnNameIds.join(", ")})${includeClause}${whereClause}`);
|
|
26
35
|
invalidateDatabaseMetadata();
|
|
27
36
|
}
|
|
28
37
|
getSchemaUpdater() {
|
|
@@ -37,9 +46,16 @@ class CreateIndexModificationHandler {
|
|
|
37
46
|
);
|
|
38
47
|
}
|
|
39
48
|
describe() {
|
|
40
|
-
const
|
|
49
|
+
const index = this.data.index;
|
|
50
|
+
const methodText = index.method ? ` using ${index.method}` : "";
|
|
51
|
+
const includeText = index.include?.length ? ` include (${index.include.join(", ")})` : "";
|
|
52
|
+
const whereText = index.where ? ` where ${index.where}` : "";
|
|
53
|
+
const columnOptionsText = index.columnOptions && Object.keys(index.columnOptions).length > 0 ? ` options (${Object.entries(index.columnOptions).map(([field, opts]) => {
|
|
54
|
+
const parts = [opts.order, opts.nulls ? `nulls ${opts.nulls}` : "", opts.opClass ? `opclass ${opts.opClass}` : ""].filter(Boolean);
|
|
55
|
+
return `${field}: ${parts.join(" ")}`;
|
|
56
|
+
}).join(", ")})` : "";
|
|
41
57
|
return {
|
|
42
|
-
message: `Create index(${
|
|
58
|
+
message: `Create index(${index.fields.join(", ")})${methodText}${includeText}${whereText}${columnOptionsText} on entity ${this.data.entityName}`
|
|
43
59
|
};
|
|
44
60
|
}
|
|
45
61
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CreateIndexModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/indexes/CreateIndexModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'\nimport { createModificationType, Differ, ModificationHandler, ModificationHandlerCreateSqlOptions } from '../ModificationHandler'\nimport { wrapIdentifier } from '../../utils/dbHelpers'\nimport { getIndexColumns } from './utils'\nimport deepEqual from 'fast-deep-equal'\n\nexport class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {\n\tconstructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view && !entity.view.materialized) {\n\t\t\treturn\n\t\t}\n\t\tconst
|
|
1
|
+
{"version":3,"file":"CreateIndexModification.js","sources":["../../../../../../packages/schema-migrations/src/modifications/indexes/CreateIndexModification.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { Model, Schema } from '@contember/schema'\nimport { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils.js'\nimport { createModificationType, Differ, ModificationHandler, ModificationHandlerCreateSqlOptions } from '../ModificationHandler.js'\nimport { wrapIdentifier } from '../../utils/dbHelpers.js'\nimport { getIndexColumns } from './utils.js'\nimport deepEqual from 'fast-deep-equal'\n\nexport class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {\n\tconstructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}\n\n\tpublic createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {\n\t\tconst entity = this.schema.model.entities[this.data.entityName]\n\t\tif (entity.view && !entity.view.materialized) {\n\t\t\treturn\n\t\t}\n\t\tconst index = this.data.index\n\t\tconst columns = getIndexColumns({\n\t\t\tfields: index.fields,\n\t\t\tentity,\n\t\t\tmodel: this.schema.model,\n\t\t})\n\n\t\tconst tableNameId = wrapIdentifier(entity.tableName)\n\t\t// Each key column may carry its own operator class (falling back to the global opClass),\n\t\t// sort direction (ASC is the default and omitted) and NULLS placement. Postgres expects\n\t\t// the parts in this order: column [opclass] [ASC|DESC] [NULLS {FIRST|LAST}].\n\t\t// The opclass is emitted verbatim (validated to an identifier shape in ModelValidator). Migrations\n\t\t// run with search_path set to the stage schema, so the value must already carry any needed schema\n\t\t// qualifier: an extension's class as \"public.gin_trgm_ops\", a built-in one (in pg_catalog) as\n\t\t// plain \"text_pattern_ops\".\n\t\tconst columnNameIds = index.fields.map((field, i) => {\n\t\t\tconst options = index.columnOptions?.[field]\n\t\t\tconst opClass = options?.opClass ?? index.opClass\n\t\t\tconst opClassSuffix = opClass ? ` ${opClass}` : ''\n\t\t\tconst orderSuffix = options?.order === 'desc' ? ' DESC' : ''\n\t\t\tconst nullsSuffix = options?.nulls === 'first' ? ' NULLS FIRST' : options?.nulls === 'last' ? ' NULLS LAST' : ''\n\t\t\treturn wrapIdentifier(columns[i]) + opClassSuffix + orderSuffix + nullsSuffix\n\t\t})\n\t\tconst methodClause = index.method ? ` USING ${index.method}` : ''\n\n\t\tconst includeClause = index.include?.length\n\t\t\t? ` INCLUDE (${getIndexColumns({ fields: index.include, entity, model: this.schema.model }).map(wrapIdentifier).join(', ')})`\n\t\t\t: ''\n\t\t// `where` is a raw, developer-authored SQL predicate. Its trust boundary is identical to\n\t\t// @c.View's raw body — committed to a migration and gated by code review, not end-user input.\n\t\t// Its shape is validated in ModelValidator (non-empty, no statement terminator); here we only\n\t\t// wrap it in parentheses so it stays a self-contained boolean expression.\n\t\tconst whereClause = index.where ? ` WHERE (${index.where})` : ''\n\n\t\tbuilder.sql(`CREATE INDEX ON ${tableNameId}${methodClause} (${columnNameIds.join(', ')})${includeClause}${whereClause}`)\n\n\t\tinvalidateDatabaseMetadata()\n\t}\n\n\tpublic getSchemaUpdater(): SchemaUpdater {\n\t\treturn updateModel(\n\t\t\tupdateEntity(this.data.entityName, ({ entity }) => ({\n\t\t\t\t...entity,\n\t\t\t\tindexes: [\n\t\t\t\t\t...entity.indexes,\n\t\t\t\t\tthis.data.index,\n\t\t\t\t],\n\t\t\t})),\n\t\t)\n\t}\n\n\tdescribe() {\n\t\tconst index = this.data.index\n\t\tconst methodText = index.method ? ` using ${index.method}` : ''\n\t\tconst includeText = index.include?.length ? ` include (${index.include.join(', ')})` : ''\n\t\tconst whereText = index.where ? ` where ${index.where}` : ''\n\t\t// columnOptions is part of index identity, so surface it in the description too — otherwise two\n\t\t// indexes on the same columns differing only by sort order / NULLS / opClass render identically.\n\t\tconst columnOptionsText = index.columnOptions && Object.keys(index.columnOptions).length > 0\n\t\t\t? ` options (${\n\t\t\t\tObject.entries(index.columnOptions).map(([field, opts]) => {\n\t\t\t\t\tconst parts = [opts.order, opts.nulls ? `nulls ${opts.nulls}` : '', opts.opClass ? `opclass ${opts.opClass}` : ''].filter(Boolean)\n\t\t\t\t\treturn `${field}: ${parts.join(' ')}`\n\t\t\t\t}).join(', ')\n\t\t\t})`\n\t\t\t: ''\n\t\treturn {\n\t\t\tmessage: `Create index(${index.fields.join(', ')})${methodText}${includeText}${whereText}${columnOptionsText} on entity ${this.data.entityName}`,\n\t\t}\n\t}\n}\n\nexport const createIndexModification = createModificationType({\n\tid: 'createIndex',\n\thandler: CreateIndexModificationHandler,\n})\n\nexport interface CreateIndexModificationData {\n\tentityName: string\n\tindex: Model.Index\n}\n\nexport class CreateIndexDiffer implements Differ {\n\tcreateDiff(originalSchema: Schema, updatedSchema: Schema) {\n\t\treturn Object.values(updatedSchema.model.entities).flatMap(entity =>\n\t\t\tentity.indexes\n\t\t\t\t.filter(it => !originalSchema.model.entities[entity.name].indexes.find(idx => deepEqual(idx, it)))\n\t\t\t\t.map(index =>\n\t\t\t\t\tcreateIndexModification.createModification({\n\t\t\t\t\t\tentityName: entity.name,\n\t\t\t\t\t\tindex,\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t)\n\t}\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -5,6 +5,7 @@ const ModificationHandler = require("../ModificationHandler.cjs");
|
|
|
5
5
|
const deepEqual = require("fast-deep-equal");
|
|
6
6
|
const utils = require("./utils.cjs");
|
|
7
7
|
const dbHelpers = require("../../utils/dbHelpers.cjs");
|
|
8
|
+
const indexIdentityEquals = (a, b) => deepEqual(a.fields, b.fields) && (a.where ?? void 0) === (b.where ?? void 0) && deepEqual(a.include ?? void 0, b.include ?? void 0) && deepEqual(a.columnOptions ?? void 0, b.columnOptions ?? void 0) && (a.method ?? void 0) === (b.method ?? void 0) && (a.opClass ?? void 0) === (b.opClass ?? void 0);
|
|
8
9
|
class RemoveIndexModificationHandler {
|
|
9
10
|
constructor(data, schema) {
|
|
10
11
|
this.data = data;
|
|
@@ -15,23 +16,27 @@ class RemoveIndexModificationHandler {
|
|
|
15
16
|
if (entity.view && !entity.view.materialized) {
|
|
16
17
|
return;
|
|
17
18
|
}
|
|
18
|
-
const
|
|
19
|
-
const columns =
|
|
20
|
-
entity,
|
|
21
|
-
fields,
|
|
22
|
-
|
|
23
|
-
});
|
|
19
|
+
const index = this.getIndex();
|
|
20
|
+
const columns = [
|
|
21
|
+
...utils.getIndexColumns({ entity, fields: index.fields, model: this.schema.model }),
|
|
22
|
+
...index.include ? utils.getIndexColumns({ entity, fields: index.include, model: this.schema.model }) : []
|
|
23
|
+
];
|
|
24
24
|
const indexNames = databaseMetadata.indexes.filter({ tableName: entity.tableName, columnNames: columns, unique: false }).getNames();
|
|
25
|
+
if (indexNames.length > 1) {
|
|
26
|
+
throw new Error(
|
|
27
|
+
`Cannot unambiguously drop index on entity ${this.data.entityName} (${index.fields.join(", ")}): ${indexNames.length} indexes match these columns and the database metadata does not expose the predicate (where), per-column options (sort order / NULLS / operator class), column order, index method or index-level operator class that distinguish them. Drop the obsolete index manually.`
|
|
28
|
+
);
|
|
29
|
+
}
|
|
25
30
|
for (const name of indexNames) {
|
|
26
31
|
builder.sql(`DROP INDEX ${dbHelpers.wrapIdentifier(name)}`);
|
|
27
32
|
}
|
|
28
33
|
invalidateDatabaseMetadata();
|
|
29
34
|
}
|
|
30
35
|
getSchemaUpdater() {
|
|
31
|
-
const
|
|
36
|
+
const index = this.getIndex();
|
|
32
37
|
return schemaUpdateUtils.updateModel(
|
|
33
38
|
schemaUpdateUtils.updateEntity(this.data.entityName, ({ entity }) => {
|
|
34
|
-
const indexes = entity.indexes.filter((it) => !
|
|
39
|
+
const indexes = entity.indexes.filter((it) => !indexIdentityEquals(it, index));
|
|
35
40
|
return {
|
|
36
41
|
...entity,
|
|
37
42
|
indexes
|
|
@@ -40,16 +45,37 @@ class RemoveIndexModificationHandler {
|
|
|
40
45
|
);
|
|
41
46
|
}
|
|
42
47
|
describe() {
|
|
43
|
-
const
|
|
44
|
-
return { message: `Remove index (${fields.join(", ")}) on entity ${this.data.entityName}` };
|
|
48
|
+
const index = this.getIndex();
|
|
49
|
+
return { message: `Remove index (${index.fields.join(", ")}) on entity ${this.data.entityName}` };
|
|
45
50
|
}
|
|
46
|
-
|
|
47
|
-
const
|
|
48
|
-
const
|
|
49
|
-
if (
|
|
50
|
-
|
|
51
|
+
getIndex() {
|
|
52
|
+
const { entityName } = this.data;
|
|
53
|
+
const entity = this.schema.model.entities[entityName];
|
|
54
|
+
if ("indexName" in this.data && this.data.indexName !== void 0) {
|
|
55
|
+
const index = entity.indexes.find((it) => it.name === this.data.indexName);
|
|
56
|
+
if (!index) {
|
|
57
|
+
throw new Error(`Index named "${this.data.indexName}" not found on entity ${entityName}`);
|
|
58
|
+
}
|
|
59
|
+
return {
|
|
60
|
+
fields: index.fields,
|
|
61
|
+
where: index.where,
|
|
62
|
+
include: index.include,
|
|
63
|
+
columnOptions: index.columnOptions,
|
|
64
|
+
method: index.method,
|
|
65
|
+
opClass: index.opClass
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
if (!this.data.fields) {
|
|
69
|
+
throw new Error(`removeIndex modification on entity ${entityName} requires either "indexName" or "fields"`);
|
|
51
70
|
}
|
|
52
|
-
return
|
|
71
|
+
return {
|
|
72
|
+
fields: this.data.fields,
|
|
73
|
+
where: this.data.where,
|
|
74
|
+
include: this.data.include,
|
|
75
|
+
columnOptions: this.data.columnOptions,
|
|
76
|
+
method: this.data.method,
|
|
77
|
+
opClass: this.data.opClass
|
|
78
|
+
};
|
|
53
79
|
}
|
|
54
80
|
}
|
|
55
81
|
const removeIndexModification = ModificationHandler.createModificationType({
|
|
@@ -70,7 +96,16 @@ class RemoveIndexDiffer {
|
|
|
70
96
|
).map(
|
|
71
97
|
(index) => removeIndexModification.createModification({
|
|
72
98
|
entityName: entity.name,
|
|
73
|
-
fields: index.fields
|
|
99
|
+
fields: index.fields,
|
|
100
|
+
// keep every identity-bearing option (WHERE/INCLUDE/columnOptions/method/opClass) in the
|
|
101
|
+
// modification so indexes that share the same key columns but differ by any of them are
|
|
102
|
+
// removed individually; omit the keys when absent to keep legacy migration JSON
|
|
103
|
+
// byte-for-byte identical.
|
|
104
|
+
...index.where !== void 0 ? { where: index.where } : {},
|
|
105
|
+
...index.include !== void 0 ? { include: index.include } : {},
|
|
106
|
+
...index.columnOptions !== void 0 ? { columnOptions: index.columnOptions } : {},
|
|
107
|
+
...index.method !== void 0 ? { method: index.method } : {},
|
|
108
|
+
...index.opClass !== void 0 ? { opClass: index.opClass } : {}
|
|
74
109
|
})
|
|
75
110
|
)
|
|
76
111
|
);
|