@contember/schema-migrations 2.1.0-beta.2 → 2.2.0-alpha.2
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
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import { Differ } from '../ModificationHandler.js'
|
|
2
|
+
import { Model, Schema } from '@contember/schema'
|
|
3
|
+
import deepEqual from 'fast-deep-equal'
|
|
4
|
+
import { Migration } from '../../Migration.js'
|
|
5
|
+
import { isReplaceableViewChange } from '../utils/viewDependencies.js'
|
|
6
|
+
import { updateViewModification } from '../entities/UpdateViewModification.js'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Update a view in-place via `CREATE OR REPLACE VIEW` when only its definition
|
|
10
|
+
* (sql/dependencies/idSource) changed and its output columns stayed the same.
|
|
11
|
+
*
|
|
12
|
+
* This avoids dropping & recreating the whole dependant-view cascade (and the
|
|
13
|
+
* associated ACL / inverse-relation churn) that {@link RemoveViewDiffer} would
|
|
14
|
+
* otherwise produce. Views that had to be recreated structurally are already
|
|
15
|
+
* up to date in the running schema by the time this differ runs, so they are
|
|
16
|
+
* naturally skipped here.
|
|
17
|
+
*/
|
|
18
|
+
export class UpdateViewDiffer implements Differ {
|
|
19
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
20
|
+
const candidates = Object.values(updatedSchema.model.entities).filter(updated => {
|
|
21
|
+
const original = originalSchema.model.entities[updated.name]
|
|
22
|
+
if (!original?.view || !updated.view) {
|
|
23
|
+
return false
|
|
24
|
+
}
|
|
25
|
+
if (deepEqual(original.view, updated.view)) {
|
|
26
|
+
return false // view unchanged
|
|
27
|
+
}
|
|
28
|
+
return isReplaceableViewChange(original, updated)
|
|
29
|
+
})
|
|
30
|
+
|
|
31
|
+
// emit dependencies before dependants so a (future) appended column is available to dependants
|
|
32
|
+
const candidateNames = new Set(candidates.map(it => it.name))
|
|
33
|
+
const visited = new Set<string>()
|
|
34
|
+
const ordered: Model.Entity[] = []
|
|
35
|
+
const visit = (entity: Model.Entity) => {
|
|
36
|
+
if (visited.has(entity.name)) {
|
|
37
|
+
return
|
|
38
|
+
}
|
|
39
|
+
visited.add(entity.name)
|
|
40
|
+
for (const dependency of entity.view?.dependencies ?? []) {
|
|
41
|
+
if (candidateNames.has(dependency)) {
|
|
42
|
+
visit(updatedSchema.model.entities[dependency])
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
ordered.push(entity)
|
|
46
|
+
}
|
|
47
|
+
for (const candidate of candidates) {
|
|
48
|
+
visit(candidate)
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return ordered.map((entity): Migration.Modification =>
|
|
52
|
+
updateViewModification.createModification({
|
|
53
|
+
entityName: entity.name,
|
|
54
|
+
view: entity.view!,
|
|
55
|
+
})
|
|
56
|
+
)
|
|
57
|
+
}
|
|
58
|
+
}
|
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
export * from './RemoveChangedFieldDiffer'
|
|
2
|
-
export * from './RemoveViewDiffer'
|
|
1
|
+
export * from './RemoveChangedFieldDiffer.js'
|
|
2
|
+
export * from './RemoveViewDiffer.js'
|
|
3
|
+
export * from './UpdateViewDiffer.js'
|
|
@@ -1,17 +1,17 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
3
|
+
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
4
|
import {
|
|
5
5
|
createModificationType,
|
|
6
6
|
Differ,
|
|
7
7
|
ModificationHandler,
|
|
8
8
|
ModificationHandlerCreateSqlOptions,
|
|
9
9
|
ModificationHandlerOptions,
|
|
10
|
-
} from '../ModificationHandler'
|
|
11
|
-
import { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils'
|
|
10
|
+
} from '../ModificationHandler.js'
|
|
11
|
+
import { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils.js'
|
|
12
12
|
import { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'
|
|
13
|
-
import { getColumnSqlType } from '../utils/columnUtils'
|
|
14
|
-
import { VERSION_CORRECT_PRIMARY_COLUMN_NAME } from '../ModificationVersions'
|
|
13
|
+
import { getColumnSqlType } from '../utils/columnUtils.js'
|
|
14
|
+
import { VERSION_CORRECT_PRIMARY_COLUMN_NAME } from '../ModificationVersions.js'
|
|
15
15
|
|
|
16
16
|
export class CreateEntityModificationHandler implements ModificationHandler<CreateEntityModificationData> {
|
|
17
17
|
constructor(
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
-
import { Migration } from '../../Migration'
|
|
3
|
+
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler.js'
|
|
5
|
+
import { Migration } from '../../Migration.js'
|
|
6
6
|
import { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'
|
|
7
7
|
|
|
8
8
|
export class CreateViewModificationHandler implements ModificationHandler<CreateViewModificationData> {
|
|
@@ -10,17 +10,17 @@ import {
|
|
|
10
10
|
updateAclEveryRole,
|
|
11
11
|
updateModel,
|
|
12
12
|
updateSchema,
|
|
13
|
-
} from '../utils/schemaUpdateUtils'
|
|
13
|
+
} from '../utils/schemaUpdateUtils.js'
|
|
14
14
|
import {
|
|
15
15
|
createModificationType,
|
|
16
16
|
Differ,
|
|
17
17
|
ModificationHandler,
|
|
18
18
|
ModificationHandlerCreateSqlOptions,
|
|
19
19
|
ModificationHandlerOptions,
|
|
20
|
-
} from '../ModificationHandler'
|
|
21
|
-
import { VERSION_ACL_PATCH, VERSION_REMOVE_REFERENCING_RELATIONS } from '../ModificationVersions'
|
|
20
|
+
} from '../ModificationHandler.js'
|
|
21
|
+
import { VERSION_ACL_PATCH, VERSION_REMOVE_REFERENCING_RELATIONS } from '../ModificationVersions.js'
|
|
22
22
|
import { acceptEveryFieldVisitor, isInverseRelation, isRelation, PredicateDefinitionProcessor } from '@contember/schema-utils'
|
|
23
|
-
import { removeFieldModification } from '../fields'
|
|
23
|
+
import { removeFieldModification } from '../fields/index.js'
|
|
24
24
|
|
|
25
25
|
export class RemoveEntityModificationHandler implements ModificationHandler<RemoveEntityModificationData> {
|
|
26
26
|
constructor(
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
4
|
import {
|
|
5
5
|
createModificationType,
|
|
6
6
|
Differ,
|
|
7
7
|
ModificationHandler,
|
|
8
8
|
ModificationHandlerCreateSqlOptions,
|
|
9
9
|
ModificationHandlerOptions,
|
|
10
|
-
} from '../ModificationHandler'
|
|
11
|
-
import { createEventTrigger, createEventTrxTrigger, dropEventTrigger, dropEventTrxTrigger } from '../utils/sqlUpdateUtils'
|
|
10
|
+
} from '../ModificationHandler.js'
|
|
11
|
+
import { createEventTrigger, createEventTrxTrigger, dropEventTrigger, dropEventTrxTrigger } from '../utils/sqlUpdateUtils.js'
|
|
12
12
|
|
|
13
13
|
export class ToggleEventLogModificationHandler implements ModificationHandler<ToggleEventLogModificationData> {
|
|
14
14
|
constructor(
|
|
@@ -9,13 +9,18 @@ import {
|
|
|
9
9
|
updateEveryField,
|
|
10
10
|
updateModel,
|
|
11
11
|
updateSchema,
|
|
12
|
-
} from '../utils/schemaUpdateUtils'
|
|
13
|
-
import {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
12
|
+
} from '../utils/schemaUpdateUtils.js'
|
|
13
|
+
import {
|
|
14
|
+
createModificationType,
|
|
15
|
+
ModificationHandler,
|
|
16
|
+
ModificationHandlerCreateSqlOptions,
|
|
17
|
+
ModificationHandlerOptions,
|
|
18
|
+
} from '../ModificationHandler.js'
|
|
19
|
+
import { isIt } from '../../utils/isIt.js'
|
|
20
|
+
import { VERSION_ACL_PATCH } from '../ModificationVersions.js'
|
|
21
|
+
import { NoopModification } from '../NoopModification.js'
|
|
22
|
+
import { changeValue } from '../utils/valueUtils.js'
|
|
23
|
+
import { updateEntityTableNameModification } from './UpdateEntityTableNameModification.js'
|
|
19
24
|
|
|
20
25
|
export class UpdateEntityNameModificationHandler implements ModificationHandler<UpdateEntityNameModificationData> {
|
|
21
26
|
private subModification: ModificationHandler<any>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler.js'
|
|
5
5
|
import deepEqual from 'fast-deep-equal'
|
|
6
6
|
|
|
7
7
|
export class UpdateEntityOrderByModificationHandler implements ModificationHandler<UpdateEntityOrderByModificationData> {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler.js'
|
|
5
5
|
|
|
6
6
|
export class UpdateEntityTableNameModificationHandler implements ModificationHandler<UpdateEntityTableNameModificationData> {
|
|
7
7
|
constructor(private readonly data: UpdateEntityTableNameModificationData, private readonly schema: Schema) {}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import { createModificationType, ModificationHandler } from '../ModificationHandler'
|
|
4
|
-
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
3
|
+
import { createModificationType, ModificationHandler } from '../ModificationHandler.js'
|
|
4
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
5
5
|
|
|
6
6
|
export class UpdateViewModificationHandler implements ModificationHandler<UpdateViewModificationData> {
|
|
7
7
|
constructor(private readonly data: UpdateViewModificationData, private readonly schema: Schema) {}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
export * from './CreateEntityModification'
|
|
2
|
-
export * from './CreateViewModification'
|
|
3
|
-
export * from './RemoveEntityModification'
|
|
4
|
-
export * from './ToggleEventLogModification'
|
|
5
|
-
export * from './UpdateEntityNameModification'
|
|
6
|
-
export * from './UpdateEntityTableNameModification'
|
|
7
|
-
export * from './UpdateEntityOrderByModification'
|
|
1
|
+
export * from './CreateEntityModification.js'
|
|
2
|
+
export * from './CreateViewModification.js'
|
|
3
|
+
export * from './RemoveEntityModification.js'
|
|
4
|
+
export * from './ToggleEventLogModification.js'
|
|
5
|
+
export * from './UpdateEntityNameModification.js'
|
|
6
|
+
export * from './UpdateEntityTableNameModification.js'
|
|
7
|
+
export * from './UpdateEntityOrderByModification.js'
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
-
import { createCheck, getConstraintName } from './enumUtils'
|
|
3
|
+
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler.js'
|
|
5
|
+
import { createCheck, getConstraintName } from './enumUtils.js'
|
|
6
6
|
|
|
7
7
|
export class CreateEnumModificationHandler implements ModificationHandler<CreateEnumModificationData> {
|
|
8
8
|
constructor(private readonly data: CreateEnumModificationData, private readonly schema: Schema) {}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
3
|
+
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler.js'
|
|
5
5
|
|
|
6
6
|
export class RemoveEnumModificationHandler implements ModificationHandler<RemoveEnumModificationData> {
|
|
7
7
|
constructor(private readonly data: RemoveEnumModificationData, private readonly schema: Schema) {}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
3
|
+
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler.js'
|
|
5
5
|
import deepEqual from 'fast-deep-equal'
|
|
6
|
-
import { createCheck, getConstraintName } from './enumUtils'
|
|
7
|
-
import { getColumnSqlType } from '../utils/columnUtils'
|
|
6
|
+
import { createCheck, getConstraintName } from './enumUtils.js'
|
|
7
|
+
import { getColumnSqlType } from '../utils/columnUtils.js'
|
|
8
8
|
|
|
9
9
|
export class UpdateEnumModificationHandler implements ModificationHandler<UpdateEnumModificationData> {
|
|
10
10
|
constructor(private readonly data: UpdateEnumModificationData, private readonly schema: Schema) {}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
export * from './CreateEnumModification'
|
|
2
|
-
export * from './RemoveEnumModification'
|
|
3
|
-
export * from './UpdateEnumModification'
|
|
1
|
+
export * from './CreateEnumModification.js'
|
|
2
|
+
export * from './RemoveEnumModification.js'
|
|
3
|
+
export * from './UpdateEnumModification.js'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { acceptFieldVisitor, isInverseRelation, isRelation } from '@contember/schema-utils'
|
|
2
2
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
3
3
|
import { Schema } from '@contember/schema'
|
|
4
|
-
import { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils'
|
|
5
|
-
import { createModificationType, Differ, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'
|
|
6
|
-
import { isDefined } from '../../utils/isDefined'
|
|
4
|
+
import { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils.js'
|
|
5
|
+
import { createModificationType, Differ, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler.js'
|
|
6
|
+
import { isDefined } from '../../utils/isDefined.js'
|
|
7
7
|
|
|
8
8
|
export class RemoveFieldModificationHandler implements ModificationHandler<RemoveFieldModificationData> {
|
|
9
9
|
constructor(
|
|
@@ -12,13 +12,18 @@ import {
|
|
|
12
12
|
updateEveryField,
|
|
13
13
|
updateModel,
|
|
14
14
|
updateSchema,
|
|
15
|
-
} from '../utils/schemaUpdateUtils'
|
|
16
|
-
import {
|
|
15
|
+
} from '../utils/schemaUpdateUtils.js'
|
|
16
|
+
import {
|
|
17
|
+
createModificationType,
|
|
18
|
+
ModificationHandler,
|
|
19
|
+
ModificationHandlerCreateSqlOptions,
|
|
20
|
+
ModificationHandlerOptions,
|
|
21
|
+
} from '../ModificationHandler.js'
|
|
17
22
|
import { acceptFieldVisitor, PredicateDefinitionProcessor } from '@contember/schema-utils'
|
|
18
|
-
import { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_FIELDS, VERSION_UPDATE_INDEX_FIELDS } from '../ModificationVersions'
|
|
19
|
-
import { changeValue } from '../utils/valueUtils'
|
|
20
|
-
import { updateColumnNameModification } from '../columns'
|
|
21
|
-
import { NoopModification } from '../NoopModification'
|
|
23
|
+
import { VERSION_ACL_PATCH, VERSION_UPDATE_CONSTRAINT_FIELDS, VERSION_UPDATE_INDEX_FIELDS } from '../ModificationVersions.js'
|
|
24
|
+
import { changeValue } from '../utils/valueUtils.js'
|
|
25
|
+
import { updateColumnNameModification } from '../columns/index.js'
|
|
26
|
+
import { NoopModification } from '../NoopModification.js'
|
|
22
27
|
|
|
23
28
|
export class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {
|
|
24
29
|
private renameColumnSubModification: ModificationHandler<any> = new NoopModification()
|
|
@@ -65,10 +70,21 @@ export class UpdateFieldNameModificationHandler implements ModificationHandler<U
|
|
|
65
70
|
? updateEntity(this.data.entityName, ({ entity }) => {
|
|
66
71
|
return {
|
|
67
72
|
...entity,
|
|
68
|
-
indexes: entity.indexes.map(
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
73
|
+
indexes: entity.indexes.map(index => {
|
|
74
|
+
// columnOptions is keyed by field name, so a rename must move its entry too —
|
|
75
|
+
// otherwise the options are dropped on regenerate and the (now stale-keyed) entry
|
|
76
|
+
// fails model validation ("Column options reference field <old>, not a key column").
|
|
77
|
+
const columnOptions = index.columnOptions && this.data.fieldName in index.columnOptions
|
|
78
|
+
? Object.fromEntries(
|
|
79
|
+
Object.entries(index.columnOptions).map(([field, options]) => [field === this.data.fieldName ? this.data.newFieldName : field, options]),
|
|
80
|
+
)
|
|
81
|
+
: index.columnOptions
|
|
82
|
+
return {
|
|
83
|
+
...index,
|
|
84
|
+
fields: index.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),
|
|
85
|
+
...(columnOptions !== undefined ? { columnOptions } : {}),
|
|
86
|
+
}
|
|
87
|
+
}),
|
|
72
88
|
}
|
|
73
89
|
})
|
|
74
90
|
: undefined
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export * from './RemoveFieldModification'
|
|
2
|
-
export * from './UpdateFieldNameModification'
|
|
1
|
+
export * from './RemoveFieldModification.js'
|
|
2
|
+
export * from './UpdateFieldNameModification.js'
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
export * from './acl'
|
|
2
|
-
export * from './columns'
|
|
3
|
-
export * from './constraints'
|
|
4
|
-
export * from './entities'
|
|
5
|
-
export * from './enums'
|
|
6
|
-
export * from './fields'
|
|
7
|
-
export * from './relations'
|
|
8
|
-
export * from './validation'
|
|
9
|
-
export * from './ModificationHandlerFactory'
|
|
10
|
-
export * from './ModificationVersions'
|
|
11
|
-
export * from './ModificationHandler'
|
|
12
|
-
export { SchemaUpdateError } from './exceptions'
|
|
13
|
-
export * from './utils/sqlUpdateUtils'
|
|
1
|
+
export * from './acl/index.js'
|
|
2
|
+
export * from './columns/index.js'
|
|
3
|
+
export * from './constraints/index.js'
|
|
4
|
+
export * from './entities/index.js'
|
|
5
|
+
export * from './enums/index.js'
|
|
6
|
+
export * from './fields/index.js'
|
|
7
|
+
export * from './relations/index.js'
|
|
8
|
+
export * from './validation/index.js'
|
|
9
|
+
export * from './ModificationHandlerFactory.js'
|
|
10
|
+
export * from './ModificationVersions.js'
|
|
11
|
+
export * from './ModificationHandler.js'
|
|
12
|
+
export { SchemaUpdateError } from './exceptions.js'
|
|
13
|
+
export * from './utils/sqlUpdateUtils.js'
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import { createModificationType, Differ, ModificationHandler, ModificationHandlerCreateSqlOptions } from '../ModificationHandler'
|
|
5
|
-
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
6
|
-
import { getIndexColumns } from './utils'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler, ModificationHandlerCreateSqlOptions } from '../ModificationHandler.js'
|
|
5
|
+
import { wrapIdentifier } from '../../utils/dbHelpers.js'
|
|
6
|
+
import { getIndexColumns } from './utils.js'
|
|
7
7
|
import deepEqual from 'fast-deep-equal'
|
|
8
8
|
|
|
9
9
|
export class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {
|
|
@@ -14,18 +14,41 @@ export class CreateIndexModificationHandler implements ModificationHandler<Creat
|
|
|
14
14
|
if (entity.view && !entity.view.materialized) {
|
|
15
15
|
return
|
|
16
16
|
}
|
|
17
|
-
const
|
|
17
|
+
const index = this.data.index
|
|
18
18
|
const columns = getIndexColumns({
|
|
19
|
-
fields,
|
|
19
|
+
fields: index.fields,
|
|
20
20
|
entity,
|
|
21
21
|
model: this.schema.model,
|
|
22
22
|
})
|
|
23
23
|
|
|
24
24
|
const tableNameId = wrapIdentifier(entity.tableName)
|
|
25
|
-
|
|
26
|
-
|
|
25
|
+
// Each key column may carry its own operator class (falling back to the global opClass),
|
|
26
|
+
// sort direction (ASC is the default and omitted) and NULLS placement. Postgres expects
|
|
27
|
+
// the parts in this order: column [opclass] [ASC|DESC] [NULLS {FIRST|LAST}].
|
|
28
|
+
// The opclass is emitted verbatim (validated to an identifier shape in ModelValidator). Migrations
|
|
29
|
+
// run with search_path set to the stage schema, so the value must already carry any needed schema
|
|
30
|
+
// qualifier: an extension's class as "public.gin_trgm_ops", a built-in one (in pg_catalog) as
|
|
31
|
+
// plain "text_pattern_ops".
|
|
32
|
+
const columnNameIds = index.fields.map((field, i) => {
|
|
33
|
+
const options = index.columnOptions?.[field]
|
|
34
|
+
const opClass = options?.opClass ?? index.opClass
|
|
35
|
+
const opClassSuffix = opClass ? ` ${opClass}` : ''
|
|
36
|
+
const orderSuffix = options?.order === 'desc' ? ' DESC' : ''
|
|
37
|
+
const nullsSuffix = options?.nulls === 'first' ? ' NULLS FIRST' : options?.nulls === 'last' ? ' NULLS LAST' : ''
|
|
38
|
+
return wrapIdentifier(columns[i]) + opClassSuffix + orderSuffix + nullsSuffix
|
|
39
|
+
})
|
|
40
|
+
const methodClause = index.method ? ` USING ${index.method}` : ''
|
|
41
|
+
|
|
42
|
+
const includeClause = index.include?.length
|
|
43
|
+
? ` INCLUDE (${getIndexColumns({ fields: index.include, entity, model: this.schema.model }).map(wrapIdentifier).join(', ')})`
|
|
44
|
+
: ''
|
|
45
|
+
// `where` is a raw, developer-authored SQL predicate. Its trust boundary is identical to
|
|
46
|
+
// @c.View's raw body — committed to a migration and gated by code review, not end-user input.
|
|
47
|
+
// Its shape is validated in ModelValidator (non-empty, no statement terminator); here we only
|
|
48
|
+
// wrap it in parentheses so it stays a self-contained boolean expression.
|
|
49
|
+
const whereClause = index.where ? ` WHERE (${index.where})` : ''
|
|
27
50
|
|
|
28
|
-
builder.sql(`CREATE INDEX ON ${tableNameId}${methodClause} (${columnNameIds.join(', ')})`)
|
|
51
|
+
builder.sql(`CREATE INDEX ON ${tableNameId}${methodClause} (${columnNameIds.join(', ')})${includeClause}${whereClause}`)
|
|
29
52
|
|
|
30
53
|
invalidateDatabaseMetadata()
|
|
31
54
|
}
|
|
@@ -43,9 +66,22 @@ export class CreateIndexModificationHandler implements ModificationHandler<Creat
|
|
|
43
66
|
}
|
|
44
67
|
|
|
45
68
|
describe() {
|
|
46
|
-
const
|
|
69
|
+
const index = this.data.index
|
|
70
|
+
const methodText = index.method ? ` using ${index.method}` : ''
|
|
71
|
+
const includeText = index.include?.length ? ` include (${index.include.join(', ')})` : ''
|
|
72
|
+
const whereText = index.where ? ` where ${index.where}` : ''
|
|
73
|
+
// columnOptions is part of index identity, so surface it in the description too — otherwise two
|
|
74
|
+
// indexes on the same columns differing only by sort order / NULLS / opClass render identically.
|
|
75
|
+
const columnOptionsText = index.columnOptions && Object.keys(index.columnOptions).length > 0
|
|
76
|
+
? ` options (${
|
|
77
|
+
Object.entries(index.columnOptions).map(([field, opts]) => {
|
|
78
|
+
const parts = [opts.order, opts.nulls ? `nulls ${opts.nulls}` : '', opts.opClass ? `opclass ${opts.opClass}` : ''].filter(Boolean)
|
|
79
|
+
return `${field}: ${parts.join(' ')}`
|
|
80
|
+
}).join(', ')
|
|
81
|
+
})`
|
|
82
|
+
: ''
|
|
47
83
|
return {
|
|
48
|
-
message: `Create index(${
|
|
84
|
+
message: `Create index(${index.fields.join(', ')})${methodText}${includeText}${whereText}${columnOptionsText} on entity ${this.data.entityName}`,
|
|
49
85
|
}
|
|
50
86
|
}
|
|
51
87
|
}
|
|
@@ -1,10 +1,19 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
-
import { Schema } from '@contember/schema'
|
|
3
|
-
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import { createModificationType, Differ, ModificationHandler, ModificationHandlerCreateSqlOptions } from '../ModificationHandler'
|
|
2
|
+
import { Model, Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils.js'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler, ModificationHandlerCreateSqlOptions } from '../ModificationHandler.js'
|
|
5
5
|
import deepEqual from 'fast-deep-equal'
|
|
6
|
-
import { getIndexColumns } from './utils'
|
|
7
|
-
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
6
|
+
import { getIndexColumns } from './utils.js'
|
|
7
|
+
import { wrapIdentifier } from '../../utils/dbHelpers.js'
|
|
8
|
+
|
|
9
|
+
type IndexIdentity = Pick<Model.Index, 'fields' | 'where' | 'include' | 'columnOptions' | 'method' | 'opClass'>
|
|
10
|
+
const indexIdentityEquals = (a: IndexIdentity, b: IndexIdentity) =>
|
|
11
|
+
deepEqual(a.fields, b.fields)
|
|
12
|
+
&& (a.where ?? undefined) === (b.where ?? undefined)
|
|
13
|
+
&& deepEqual(a.include ?? undefined, b.include ?? undefined)
|
|
14
|
+
&& deepEqual(a.columnOptions ?? undefined, b.columnOptions ?? undefined)
|
|
15
|
+
&& (a.method ?? undefined) === (b.method ?? undefined)
|
|
16
|
+
&& (a.opClass ?? undefined) === (b.opClass ?? undefined)
|
|
8
17
|
|
|
9
18
|
export class RemoveIndexModificationHandler implements ModificationHandler<RemoveIndexModificationData> {
|
|
10
19
|
constructor(private readonly data: RemoveIndexModificationData, private readonly schema: Schema) {}
|
|
@@ -14,16 +23,38 @@ export class RemoveIndexModificationHandler implements ModificationHandler<Remov
|
|
|
14
23
|
if (entity.view && !entity.view.materialized) {
|
|
15
24
|
return
|
|
16
25
|
}
|
|
17
|
-
const
|
|
26
|
+
const index = this.getIndex()
|
|
18
27
|
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
28
|
+
// The DB-metadata layer (DatabaseMetadataResolver) exposes only table + columns (as an unordered
|
|
29
|
+
// set) + uniqueness, so the physical DROP is matched by table + columns. Postgres' pg_index.indkey
|
|
30
|
+
// includes the INCLUDE columns alongside the key columns, so a covering index's metadata lists both —
|
|
31
|
+
// we match the same combined set here. Everything else that distinguishes two indexes on the same
|
|
32
|
+
// column set — the partial WHERE predicate, per-column options (sort order / NULLS / operator class),
|
|
33
|
+
// key-column ORDER (the set comparison is order-insensitive), the index method, and the index-level
|
|
34
|
+
// operator class — is invisible to the metadata, so such siblings are indistinguishable here. We
|
|
35
|
+
// detect that ambiguity below and fail loudly rather than DROP a sibling the schema still expects to
|
|
36
|
+
// keep. Schema-level identity (see getSchemaUpdater) IS fully aware of these discriminators, so the
|
|
37
|
+
// diff itself never conflates them.
|
|
38
|
+
const columns = [
|
|
39
|
+
...getIndexColumns({ entity, fields: index.fields, model: this.schema.model }),
|
|
40
|
+
...(index.include ? getIndexColumns({ entity, fields: index.include, model: this.schema.model }) : []),
|
|
41
|
+
]
|
|
24
42
|
|
|
25
43
|
const indexNames = databaseMetadata.indexes.filter({ tableName: entity.tableName, columnNames: columns, unique: false }).getNames()
|
|
26
44
|
|
|
45
|
+
// If more than one physical index matches these columns we cannot tell which one this modification
|
|
46
|
+
// targets (the metadata hides the predicate / per-column options / column order / index method /
|
|
47
|
+
// index-level operator class that distinguish them). Dropping every match would silently take out an
|
|
48
|
+
// index the schema still expects — refuse instead, so the obsolete one can be dropped by hand.
|
|
49
|
+
if (indexNames.length > 1) {
|
|
50
|
+
throw new Error(
|
|
51
|
+
`Cannot unambiguously drop index on entity ${this.data.entityName} (${index.fields.join(', ')}): `
|
|
52
|
+
+ `${indexNames.length} indexes match these columns and the database metadata does not expose the predicate (where), `
|
|
53
|
+
+ `per-column options (sort order / NULLS / operator class), column order, index method or index-level operator class that distinguish them. `
|
|
54
|
+
+ `Drop the obsolete index manually.`,
|
|
55
|
+
)
|
|
56
|
+
}
|
|
57
|
+
|
|
27
58
|
for (const name of indexNames) {
|
|
28
59
|
builder.sql(`DROP INDEX ${wrapIdentifier(name)}`)
|
|
29
60
|
}
|
|
@@ -31,10 +62,10 @@ export class RemoveIndexModificationHandler implements ModificationHandler<Remov
|
|
|
31
62
|
}
|
|
32
63
|
|
|
33
64
|
public getSchemaUpdater(): SchemaUpdater {
|
|
34
|
-
const
|
|
65
|
+
const index = this.getIndex()
|
|
35
66
|
return updateModel(
|
|
36
67
|
updateEntity(this.data.entityName, ({ entity }) => {
|
|
37
|
-
const indexes = entity.indexes.filter(it => !
|
|
68
|
+
const indexes = entity.indexes.filter(it => !indexIdentityEquals(it, index))
|
|
38
69
|
return {
|
|
39
70
|
...entity,
|
|
40
71
|
indexes,
|
|
@@ -44,19 +75,38 @@ export class RemoveIndexModificationHandler implements ModificationHandler<Remov
|
|
|
44
75
|
}
|
|
45
76
|
|
|
46
77
|
describe() {
|
|
47
|
-
const
|
|
48
|
-
return { message: `Remove index (${fields.join(', ')}) on entity ${this.data.entityName}` }
|
|
78
|
+
const index = this.getIndex()
|
|
79
|
+
return { message: `Remove index (${index.fields.join(', ')}) on entity ${this.data.entityName}` }
|
|
49
80
|
}
|
|
50
81
|
|
|
51
|
-
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
82
|
+
private getIndex(): IndexIdentity {
|
|
83
|
+
const { entityName } = this.data
|
|
84
|
+
const entity = this.schema.model.entities[entityName]
|
|
85
|
+
if ('indexName' in this.data && this.data.indexName !== undefined) {
|
|
86
|
+
const index = entity.indexes.find(it => it.name === this.data.indexName)
|
|
87
|
+
if (!index) {
|
|
88
|
+
throw new Error(`Index named "${this.data.indexName}" not found on entity ${entityName}`)
|
|
89
|
+
}
|
|
90
|
+
return {
|
|
91
|
+
fields: index.fields,
|
|
92
|
+
where: index.where,
|
|
93
|
+
include: index.include,
|
|
94
|
+
columnOptions: index.columnOptions,
|
|
95
|
+
method: index.method,
|
|
96
|
+
opClass: index.opClass,
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (!this.data.fields) {
|
|
100
|
+
throw new Error(`removeIndex modification on entity ${entityName} requires either "indexName" or "fields"`)
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
fields: this.data.fields,
|
|
104
|
+
where: this.data.where,
|
|
105
|
+
include: this.data.include,
|
|
106
|
+
columnOptions: this.data.columnOptions,
|
|
107
|
+
method: this.data.method,
|
|
108
|
+
opClass: this.data.opClass,
|
|
58
109
|
}
|
|
59
|
-
return fields
|
|
60
110
|
}
|
|
61
111
|
}
|
|
62
112
|
|
|
@@ -70,10 +120,20 @@ export type RemoveIndexModificationData =
|
|
|
70
120
|
entityName: string
|
|
71
121
|
indexName: string
|
|
72
122
|
fields?: never
|
|
123
|
+
where?: never
|
|
124
|
+
include?: never
|
|
125
|
+
columnOptions?: never
|
|
126
|
+
method?: never
|
|
127
|
+
opClass?: never
|
|
73
128
|
}
|
|
74
129
|
| {
|
|
75
130
|
entityName: string
|
|
76
131
|
fields: readonly string[]
|
|
132
|
+
where?: string
|
|
133
|
+
include?: readonly string[]
|
|
134
|
+
columnOptions?: { readonly [field: string]: Model.IndexColumnOptions }
|
|
135
|
+
method?: Model.IndexMethod
|
|
136
|
+
opClass?: string
|
|
77
137
|
indexName?: never
|
|
78
138
|
}
|
|
79
139
|
|
|
@@ -94,6 +154,15 @@ export class RemoveIndexDiffer implements Differ {
|
|
|
94
154
|
removeIndexModification.createModification({
|
|
95
155
|
entityName: entity.name,
|
|
96
156
|
fields: index.fields,
|
|
157
|
+
// keep every identity-bearing option (WHERE/INCLUDE/columnOptions/method/opClass) in the
|
|
158
|
+
// modification so indexes that share the same key columns but differ by any of them are
|
|
159
|
+
// removed individually; omit the keys when absent to keep legacy migration JSON
|
|
160
|
+
// byte-for-byte identical.
|
|
161
|
+
...(index.where !== undefined ? { where: index.where } : {}),
|
|
162
|
+
...(index.include !== undefined ? { include: index.include } : {}),
|
|
163
|
+
...(index.columnOptions !== undefined ? { columnOptions: index.columnOptions } : {}),
|
|
164
|
+
...(index.method !== undefined ? { method: index.method } : {}),
|
|
165
|
+
...(index.opClass !== undefined ? { opClass: index.opClass } : {}),
|
|
97
166
|
})
|
|
98
167
|
)
|
|
99
168
|
)
|