@contember/schema-migrations 1.2.1 → 1.3.0-alpha.13
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/MigrationCreator.js +2 -2
- package/dist/src/MigrationCreator.js.map +1 -1
- package/dist/src/MigrationDescriber.d.ts +4 -4
- package/dist/src/MigrationDescriber.d.ts.map +1 -1
- package/dist/src/MigrationDescriber.js +8 -7
- package/dist/src/MigrationDescriber.js.map +1 -1
- package/dist/src/MigrationFilesManager.js +2 -2
- package/dist/src/MigrationFilesManager.js.map +1 -1
- package/dist/src/MigrationsResolver.js +3 -3
- package/dist/src/MigrationsResolver.js.map +1 -1
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +21 -2
- package/dist/src/SchemaDiffer.js.map +1 -1
- package/dist/src/SchemaMigrator.d.ts +1 -2
- package/dist/src/SchemaMigrator.d.ts.map +1 -1
- package/dist/src/SchemaMigrator.js +0 -1
- package/dist/src/SchemaMigrator.js.map +1 -1
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/modifications/ModificationHandler.d.ts +9 -5
- package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
- package/dist/src/modifications/ModificationHandler.js.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.d.ts +2 -2
- package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
- package/dist/src/modifications/ModificationHandlerFactory.js +14 -0
- package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
- package/dist/src/modifications/ModificationVersions.d.ts +4 -2
- package/dist/src/modifications/ModificationVersions.d.ts.map +1 -1
- package/dist/src/modifications/ModificationVersions.js +5 -3
- package/dist/src/modifications/ModificationVersions.js.map +1 -1
- package/dist/src/modifications/actions/CreateTargetModification.d.ts +21 -0
- package/dist/src/modifications/actions/CreateTargetModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/CreateTargetModification.js +40 -0
- package/dist/src/modifications/actions/CreateTargetModification.js.map +1 -0
- package/dist/src/modifications/actions/CreateTriggerModification.d.ts +21 -0
- package/dist/src/modifications/actions/CreateTriggerModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/CreateTriggerModification.js +40 -0
- package/dist/src/modifications/actions/CreateTriggerModification.js.map +1 -0
- package/dist/src/modifications/actions/RemoveTargetModification.d.ts +21 -0
- package/dist/src/modifications/actions/RemoveTargetModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/RemoveTargetModification.js +40 -0
- package/dist/src/modifications/actions/RemoveTargetModification.js.map +1 -0
- package/dist/src/modifications/actions/RemoveTriggerModification.d.ts +21 -0
- package/dist/src/modifications/actions/RemoveTriggerModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/RemoveTriggerModification.js +40 -0
- package/dist/src/modifications/actions/RemoveTriggerModification.js.map +1 -0
- package/dist/src/modifications/actions/UpdateTargetModification.d.ts +22 -0
- package/dist/src/modifications/actions/UpdateTargetModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/UpdateTargetModification.js +46 -0
- package/dist/src/modifications/actions/UpdateTargetModification.js.map +1 -0
- package/dist/src/modifications/actions/UpdateTriggerModification.d.ts +21 -0
- package/dist/src/modifications/actions/UpdateTriggerModification.d.ts.map +1 -0
- package/dist/src/modifications/actions/UpdateTriggerModification.js +46 -0
- package/dist/src/modifications/actions/UpdateTriggerModification.js.map +1 -0
- package/dist/src/modifications/actions/index.d.ts +4 -0
- package/dist/src/modifications/actions/index.d.ts.map +1 -0
- package/dist/src/modifications/actions/index.js +20 -0
- package/dist/src/modifications/actions/index.js.map +1 -0
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +3 -3
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +3 -3
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +20 -32
- package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +11 -5
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +37 -9
- package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
- package/dist/src/modifications/constraints/utils.d.ts +7 -0
- package/dist/src/modifications/constraints/utils.d.ts.map +1 -0
- package/dist/src/modifications/constraints/utils.js +33 -0
- package/dist/src/modifications/constraints/utils.js.map +1 -0
- package/dist/src/modifications/entities/CreateEntityModification.d.ts +4 -4
- package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateEntityModification.js +18 -14
- package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.d.ts +2 -2
- package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/CreateViewModification.js +14 -10
- package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts +3 -4
- package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/RemoveEntityModification.js +3 -2
- package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
- package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +2 -2
- package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/ToggleEventLogModification.js +3 -3
- package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +4 -5
- package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityNameModification.js +3 -19
- package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
- package/dist/src/modifications/entities/UpdateEntityOrderByModification.d.ts +23 -0
- package/dist/src/modifications/entities/UpdateEntityOrderByModification.d.ts.map +1 -0
- package/dist/src/modifications/entities/UpdateEntityOrderByModification.js +63 -0
- package/dist/src/modifications/entities/UpdateEntityOrderByModification.js.map +1 -0
- package/dist/src/modifications/entities/index.d.ts +1 -0
- package/dist/src/modifications/entities/index.d.ts.map +1 -1
- package/dist/src/modifications/entities/index.js +1 -0
- package/dist/src/modifications/entities/index.js.map +1 -1
- package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +4 -5
- package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
- package/dist/src/modifications/fields/UpdateFieldNameModification.js +18 -27
- package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
- package/dist/src/modifications/indexes/CreateIndexModification.d.ts +5 -5
- package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -1
- package/dist/src/modifications/indexes/CreateIndexModification.js +24 -35
- package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -1
- package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +12 -6
- package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -1
- package/dist/src/modifications/indexes/RemoveIndexModification.js +36 -10
- package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
- package/dist/src/modifications/indexes/utils.d.ts +7 -0
- package/dist/src/modifications/indexes/utils.d.ts.map +1 -0
- package/dist/src/modifications/indexes/utils.js +33 -0
- package/dist/src/modifications/indexes/utils.js.map +1 -0
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +3 -4
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +10 -10
- package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +3 -4
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +14 -12
- package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.d.ts +3 -4
- package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.js +14 -26
- package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +3 -4
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +4 -5
- package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +2 -2
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +20 -1
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
- package/dist/src/modifications/relations/helpers.d.ts +13 -0
- package/dist/src/modifications/relations/helpers.d.ts.map +1 -0
- package/dist/src/modifications/relations/helpers.js +29 -0
- package/dist/src/modifications/relations/helpers.js.map +1 -0
- package/dist/src/modifications/upgrade/RemoveIndexNamesModification.d.ts +19 -0
- package/dist/src/modifications/upgrade/RemoveIndexNamesModification.d.ts.map +1 -0
- package/dist/src/modifications/upgrade/RemoveIndexNamesModification.js +40 -0
- package/dist/src/modifications/upgrade/RemoveIndexNamesModification.js.map +1 -0
- package/dist/src/modifications/utils/createJunctionTable.d.ts +2 -3
- package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
- package/dist/src/modifications/utils/createJunctionTable.js +4 -6
- package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +2 -4
- package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
- package/dist/src/modifications/utils/schemaUpdateUtils.js +5 -20
- package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
- package/dist/src/modifications/utils/stringArrayEquals.d.ts +2 -0
- package/dist/src/modifications/utils/stringArrayEquals.d.ts.map +1 -0
- package/dist/src/modifications/utils/stringArrayEquals.js +9 -0
- package/dist/src/modifications/utils/stringArrayEquals.js.map +1 -0
- package/dist/src/tsconfig.tsbuildinfo +1 -1
- package/dist/src/utils/PartialEntity.d.ts +5 -3
- package/dist/src/utils/PartialEntity.d.ts.map +1 -1
- package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +1 -1
- package/dist/tests/cases/integration/convertOneToManyRelation.test.js +5 -5
- package/dist/tests/cases/integration/convertOneToManyRelation.test.js.map +1 -1
- package/dist/tests/cases/integration/createAndDropIndex.test.js +4 -4
- package/dist/tests/cases/integration/createAndDropIndex.test.js.map +1 -1
- package/dist/tests/cases/integration/createEntity.test.js +6 -9
- package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
- package/dist/tests/cases/integration/createManyHasMany.test.js +3 -3
- package/dist/tests/cases/integration/createManyHasOne.test.js +4 -4
- package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasMany.test.js +6 -9
- package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
- package/dist/tests/cases/integration/createOneHasOne.test.js +6 -6
- package/dist/tests/cases/integration/createRelationInverseSide.test.js +1 -1
- package/dist/tests/cases/integration/createRelationInverseSide.test.js.map +1 -1
- package/dist/tests/cases/integration/createView.test.js +6 -6
- package/dist/tests/cases/integration/removeField.test.js +6 -6
- package/dist/tests/cases/integration/removeField.test.js.map +1 -1
- package/dist/tests/cases/integration/updateColumnDefinition.test.js +4 -4
- package/dist/tests/cases/integration/updateEntityName.test.js +6 -5
- package/dist/tests/cases/integration/updateEntityName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateEntityOrderBy.test.d.ts +2 -0
- package/dist/tests/cases/integration/updateEntityOrderBy.test.d.ts.map +1 -0
- package/dist/tests/cases/integration/updateEntityOrderBy.test.js +57 -0
- package/dist/tests/cases/integration/updateEntityOrderBy.test.js.map +1 -0
- package/dist/tests/cases/integration/updateFieldName.test.js +8 -7
- package/dist/tests/cases/integration/updateFieldName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateRelationOnDelete.test.js +2 -1
- package/dist/tests/cases/integration/updateRelationOnDelete.test.js.map +1 -1
- package/dist/tests/cases/integration/updateView.test.js +18 -18
- package/dist/tests/scripts/checkCreateConsistentMigrations.js +1 -1
- package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
- package/dist/tests/src/tests.d.ts.map +1 -1
- package/dist/tests/src/tests.js +12 -8
- package/dist/tests/src/tests.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +11 -7
- package/src/MigrationCreator.ts +1 -1
- package/src/MigrationDescriber.ts +11 -9
- package/src/MigrationFilesManager.ts +1 -1
- package/src/MigrationsResolver.ts +1 -1
- package/src/SchemaDiffer.ts +23 -12
- package/src/SchemaMigrator.ts +1 -3
- package/src/index.ts +1 -1
- package/src/modifications/ModificationHandler.ts +10 -5
- package/src/modifications/ModificationHandlerFactory.ts +24 -11
- package/src/modifications/ModificationVersions.ts +4 -2
- package/src/modifications/actions/CreateTargetModification.ts +46 -0
- package/src/modifications/actions/CreateTriggerModification.ts +46 -0
- package/src/modifications/actions/RemoveTargetModification.ts +46 -0
- package/src/modifications/actions/RemoveTriggerModification.ts +46 -0
- package/src/modifications/actions/UpdateTargetModification.ts +51 -0
- package/src/modifications/actions/UpdateTriggerModification.ts +49 -0
- package/src/modifications/actions/index.ts +3 -0
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +1 -2
- package/src/modifications/constraints/CreateUniqueConstraintModification.ts +31 -40
- package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +60 -15
- package/src/modifications/constraints/utils.ts +36 -0
- package/src/modifications/entities/CreateEntityModification.ts +9 -8
- package/src/modifications/entities/CreateViewModification.ts +4 -3
- package/src/modifications/entities/RemoveEntityModification.ts +5 -5
- package/src/modifications/entities/ToggleEventLogModification.ts +4 -3
- package/src/modifications/entities/UpdateEntityNameModification.ts +10 -25
- package/src/modifications/entities/UpdateEntityOrderByModification.ts +68 -0
- package/src/modifications/entities/index.ts +1 -0
- package/src/modifications/fields/RemoveFieldModification.ts +1 -1
- package/src/modifications/fields/UpdateFieldNameModification.ts +33 -39
- package/src/modifications/indexes/CreateIndexModification.ts +35 -41
- package/src/modifications/indexes/RemoveIndexModification.ts +57 -17
- package/src/modifications/indexes/utils.ts +30 -0
- package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +7 -19
- package/src/modifications/relations/ConvertOneToManyRelationModification.ts +21 -22
- package/src/modifications/relations/CreateRelationModification.ts +21 -49
- package/src/modifications/relations/ToggleJunctionEventLogModification.ts +4 -5
- package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +30 -3
- package/src/modifications/relations/helpers.ts +39 -0
- package/src/modifications/upgrade/RemoveIndexNamesModification.ts +46 -0
- package/src/modifications/utils/createJunctionTable.ts +8 -8
- package/src/modifications/utils/schemaUpdateUtils.ts +5 -17
- package/src/modifications/utils/stringArrayEquals.ts +4 -0
- package/src/tsconfig.json +4 -12
- package/src/utils/PartialEntity.ts +7 -1
- package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +1 -1
- package/tests/cases/integration/convertOneToManyRelation.test.ts +5 -5
- package/tests/cases/integration/createAndDropIndex.test.ts +4 -4
- package/tests/cases/integration/createEntity.test.ts +6 -9
- package/tests/cases/integration/createManyHasMany.test.ts +3 -3
- package/tests/cases/integration/createManyHasOne.test.ts +4 -4
- package/tests/cases/integration/createOneHasMany.test.ts +6 -9
- package/tests/cases/integration/createOneHasOne.test.ts +6 -6
- package/tests/cases/integration/createRelationInverseSide.test.ts +1 -1
- package/tests/cases/integration/createView.test.ts +6 -6
- package/tests/cases/integration/removeField.test.ts +6 -6
- package/tests/cases/integration/updateColumnDefinition.test.ts +4 -4
- package/tests/cases/integration/updateEntityName.test.ts +7 -5
- package/tests/cases/integration/updateEntityOrderBy.test.ts +43 -0
- package/tests/cases/integration/updateFieldName.test.ts +9 -7
- package/tests/cases/integration/updateRelationOnDelete.test.ts +2 -1
- package/tests/cases/integration/updateView.test.ts +18 -18
- package/tests/scripts/checkCreateConsistentMigrations.ts +1 -1
- package/tests/src/tests.ts +18 -15
- package/tests/tsconfig.json +2 -6
- package/dist/src/MigrationVersionHelper.d.ts +0 -9
- package/dist/src/MigrationVersionHelper.d.ts.map +0 -1
- package/dist/src/MigrationVersionHelper.js +0 -45
- package/dist/src/MigrationVersionHelper.js.map +0 -1
- package/dist/src/modifications/utils/renameConstraintsHelper.d.ts +0 -8
- package/dist/src/modifications/utils/renameConstraintsHelper.d.ts.map +0 -1
- package/dist/src/modifications/utils/renameConstraintsHelper.js +0 -31
- package/dist/src/modifications/utils/renameConstraintsHelper.js.map +0 -1
- package/dist/src/modifications/utils/schemaMeta.d.ts +0 -8
- package/dist/src/modifications/utils/schemaMeta.d.ts.map +0 -1
- package/dist/src/modifications/utils/schemaMeta.js +0 -13
- package/dist/src/modifications/utils/schemaMeta.js.map +0 -1
- package/dist/tests/cases/integration/takenIndexName.test.d.ts +0 -2
- package/dist/tests/cases/integration/takenIndexName.test.d.ts.map +0 -1
- package/dist/tests/cases/integration/takenIndexName.test.js +0 -307
- package/dist/tests/cases/integration/takenIndexName.test.js.map +0 -1
- package/src/MigrationVersionHelper.ts +0 -46
- package/src/modifications/utils/renameConstraintsHelper.ts +0 -34
- package/src/modifications/utils/schemaMeta.ts +0 -18
- package/tests/cases/integration/takenIndexName.test.ts +0 -314
|
@@ -1,57 +1,48 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
5
|
-
|
|
4
|
+
import {
|
|
5
|
+
createModificationType,
|
|
6
|
+
Differ,
|
|
7
|
+
ModificationHandler,
|
|
8
|
+
ModificationHandlerCreateSqlOptions,
|
|
9
|
+
} from '../ModificationHandler'
|
|
10
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
11
|
+
import { getUniqueConstraintColumns } from './utils'
|
|
12
|
+
import deepEqual from 'fast-deep-equal'
|
|
6
13
|
|
|
7
14
|
export class CreateUniqueConstraintModificationHandler implements ModificationHandler<CreateUniqueConstraintModificationData> {
|
|
8
15
|
constructor(private readonly data: CreateUniqueConstraintModificationData, private readonly schema: Schema) {
|
|
9
16
|
}
|
|
10
17
|
|
|
11
|
-
public createSql(builder: MigrationBuilder): void {
|
|
18
|
+
public createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {
|
|
12
19
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
13
20
|
if (entity.view) {
|
|
14
21
|
return
|
|
15
22
|
}
|
|
16
23
|
const fields = this.data.unique.fields
|
|
17
|
-
const columns =
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
},
|
|
22
|
-
visitManyHasOne: ({ relation }) => {
|
|
23
|
-
return relation.joiningColumn.columnName
|
|
24
|
-
},
|
|
25
|
-
visitOneHasMany: () => {
|
|
26
|
-
throw new Error(`Cannot create unique key on 1:m relation in ${entity.name}.${fieldName}`)
|
|
27
|
-
},
|
|
28
|
-
visitOneHasOneOwning: () => {
|
|
29
|
-
throw new Error(
|
|
30
|
-
`Cannot create unique key on 1:1 relation, this relation has unique key by default in ${entity.name}.${fieldName}`,
|
|
31
|
-
)
|
|
32
|
-
},
|
|
33
|
-
visitOneHasOneInverse: () => {
|
|
34
|
-
throw new Error(`Cannot create unique key on 1:1 inverse relation in ${entity.name}.${fieldName}`)
|
|
35
|
-
},
|
|
36
|
-
visitManyHasManyOwning: () => {
|
|
37
|
-
throw new Error(`Cannot create unique key on m:m relation in ${entity.name}.${fieldName}`)
|
|
38
|
-
},
|
|
39
|
-
visitManyHasManyInverse: () => {
|
|
40
|
-
throw new Error(`Cannot create unique key on m:m inverse relation in ${entity.name}.${fieldName}`)
|
|
41
|
-
},
|
|
42
|
-
})
|
|
24
|
+
const columns = getUniqueConstraintColumns({
|
|
25
|
+
entity,
|
|
26
|
+
model: this.schema.model,
|
|
27
|
+
fields,
|
|
43
28
|
})
|
|
44
|
-
|
|
29
|
+
|
|
30
|
+
const tableNameId = wrapIdentifier(entity.tableName)
|
|
31
|
+
const columnNameIds = columns.map(wrapIdentifier)
|
|
32
|
+
|
|
33
|
+
builder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameIds.join(', ')})`)
|
|
34
|
+
|
|
35
|
+
invalidateDatabaseMetadata()
|
|
45
36
|
}
|
|
46
37
|
|
|
47
38
|
public getSchemaUpdater(): SchemaUpdater {
|
|
48
39
|
return updateModel(
|
|
49
40
|
updateEntity(this.data.entityName, ({ entity }) => ({
|
|
50
41
|
...entity,
|
|
51
|
-
unique:
|
|
42
|
+
unique: [
|
|
52
43
|
...entity.unique,
|
|
53
|
-
|
|
54
|
-
|
|
44
|
+
this.data.unique,
|
|
45
|
+
],
|
|
55
46
|
})),
|
|
56
47
|
)
|
|
57
48
|
}
|
|
@@ -67,21 +58,21 @@ export class CreateUniqueConstraintModificationHandler implements ModificationHa
|
|
|
67
58
|
|
|
68
59
|
}
|
|
69
60
|
|
|
70
|
-
export interface CreateUniqueConstraintModificationData {
|
|
71
|
-
entityName: string
|
|
72
|
-
unique: Model.UniqueConstraint
|
|
73
|
-
}
|
|
74
|
-
|
|
75
61
|
export const createUniqueConstraintModification = createModificationType({
|
|
76
62
|
id: 'createUniqueConstraint',
|
|
77
63
|
handler: CreateUniqueConstraintModificationHandler,
|
|
78
64
|
})
|
|
79
65
|
|
|
66
|
+
export interface CreateUniqueConstraintModificationData {
|
|
67
|
+
entityName: string
|
|
68
|
+
unique: Model.UniqueConstraint
|
|
69
|
+
}
|
|
70
|
+
|
|
80
71
|
export class CreateUniqueConstraintDiffer implements Differ {
|
|
81
72
|
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
82
73
|
return Object.values(updatedSchema.model.entities).flatMap(entity =>
|
|
83
|
-
|
|
84
|
-
.filter(it => !originalSchema.model.entities[entity.name].unique
|
|
74
|
+
entity.unique
|
|
75
|
+
.filter(it => !originalSchema.model.entities[entity.name].unique.find(uniq => deepEqual(uniq.fields, it.fields)))
|
|
85
76
|
.map(unique => createUniqueConstraintModification.createModification({
|
|
86
77
|
entityName: entity.name,
|
|
87
78
|
unique,
|
|
@@ -1,25 +1,48 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
createModificationType,
|
|
6
|
+
Differ,
|
|
7
|
+
ModificationHandler,
|
|
8
|
+
ModificationHandlerCreateSqlOptions,
|
|
9
|
+
} from '../ModificationHandler'
|
|
5
10
|
import deepEqual from 'fast-deep-equal'
|
|
11
|
+
import { getUniqueConstraintColumns } from './utils'
|
|
12
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
6
13
|
|
|
7
14
|
export class RemoveUniqueConstraintModificationHandler implements ModificationHandler<RemoveUniqueConstraintModificationData> {
|
|
8
15
|
constructor(private readonly data: RemoveUniqueConstraintModificationData, private readonly schema: Schema) {
|
|
9
16
|
}
|
|
10
17
|
|
|
11
|
-
public createSql(builder: MigrationBuilder): void {
|
|
18
|
+
public createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {
|
|
12
19
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
13
20
|
if (entity.view) {
|
|
14
21
|
return
|
|
15
22
|
}
|
|
16
|
-
|
|
23
|
+
|
|
24
|
+
const fields = this.getFields()
|
|
25
|
+
|
|
26
|
+
const columns = getUniqueConstraintColumns({
|
|
27
|
+
entity,
|
|
28
|
+
fields: fields,
|
|
29
|
+
model: this.schema.model,
|
|
30
|
+
})
|
|
31
|
+
|
|
32
|
+
const constraintNames = databaseMetadata.getUniqueConstraintNames({ tableName: entity.tableName, columnNames: columns })
|
|
33
|
+
|
|
34
|
+
for (const name of constraintNames) {
|
|
35
|
+
builder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
invalidateDatabaseMetadata()
|
|
17
39
|
}
|
|
18
40
|
|
|
19
41
|
public getSchemaUpdater(): SchemaUpdater {
|
|
42
|
+
const fields = this.getFields()
|
|
20
43
|
return updateModel(
|
|
21
44
|
updateEntity(this.data.entityName, ({ entity }) => {
|
|
22
|
-
const
|
|
45
|
+
const unique = entity.unique.filter(it => !deepEqual(it.fields, fields))
|
|
23
46
|
return {
|
|
24
47
|
...entity,
|
|
25
48
|
unique,
|
|
@@ -29,14 +52,21 @@ export class RemoveUniqueConstraintModificationHandler implements ModificationHa
|
|
|
29
52
|
}
|
|
30
53
|
|
|
31
54
|
describe() {
|
|
32
|
-
const fields = this.
|
|
55
|
+
const fields = this.getFields()
|
|
33
56
|
return { message: `Remove unique constraint (${fields.join(', ')}) on entity ${this.data.entityName}` }
|
|
34
57
|
}
|
|
35
|
-
}
|
|
36
58
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
59
|
+
getFields() {
|
|
60
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
61
|
+
const fields = 'constraintName' in this.data
|
|
62
|
+
? entity.unique.find(it => it.name === this.data.constraintName)?.fields
|
|
63
|
+
: this.data.fields
|
|
64
|
+
|
|
65
|
+
if (!fields) {
|
|
66
|
+
throw new Error()
|
|
67
|
+
}
|
|
68
|
+
return fields
|
|
69
|
+
}
|
|
40
70
|
}
|
|
41
71
|
|
|
42
72
|
export const removeUniqueConstraintModification = createModificationType({
|
|
@@ -44,21 +74,36 @@ export const removeUniqueConstraintModification = createModificationType({
|
|
|
44
74
|
handler: RemoveUniqueConstraintModificationHandler,
|
|
45
75
|
})
|
|
46
76
|
|
|
77
|
+
export type RemoveUniqueConstraintModificationData =
|
|
78
|
+
| {
|
|
79
|
+
entityName: string
|
|
80
|
+
constraintName: string
|
|
81
|
+
fields?: never
|
|
82
|
+
}
|
|
83
|
+
| {
|
|
84
|
+
entityName: string
|
|
85
|
+
fields: readonly string[]
|
|
86
|
+
constraintName?: never
|
|
87
|
+
}
|
|
88
|
+
|
|
47
89
|
|
|
48
90
|
export class RemoveUniqueConstraintDiffer implements Differ {
|
|
49
91
|
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
50
92
|
return Object.values(originalSchema.model.entities).flatMap(entity =>
|
|
51
|
-
|
|
93
|
+
entity.unique
|
|
52
94
|
.filter(
|
|
53
|
-
it =>
|
|
54
|
-
updatedSchema.model.entities[entity.name]
|
|
55
|
-
(!
|
|
56
|
-
|
|
95
|
+
it => {
|
|
96
|
+
const updatedEntity = updatedSchema.model.entities[entity.name]
|
|
97
|
+
if (!updatedEntity) {
|
|
98
|
+
return false
|
|
99
|
+
}
|
|
100
|
+
return !updatedEntity.unique.find(uniq => deepEqual(uniq.fields, it.fields))
|
|
101
|
+
},
|
|
57
102
|
)
|
|
58
103
|
.map(unique =>
|
|
59
104
|
removeUniqueConstraintModification.createModification({
|
|
60
105
|
entityName: entity.name,
|
|
61
|
-
|
|
106
|
+
fields: unique.fields,
|
|
62
107
|
}),
|
|
63
108
|
),
|
|
64
109
|
)
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { acceptFieldVisitor } from '@contember/schema-utils'
|
|
2
|
+
import { Model } from '@contember/schema'
|
|
3
|
+
|
|
4
|
+
export const getUniqueConstraintColumns = ({ entity, fields, model }: {
|
|
5
|
+
fields: readonly string[]
|
|
6
|
+
model: Model.Schema
|
|
7
|
+
entity: Model.Entity
|
|
8
|
+
}) => {
|
|
9
|
+
return fields.map(fieldName => {
|
|
10
|
+
return acceptFieldVisitor(model, entity, fieldName, {
|
|
11
|
+
visitColumn: ({ column }) => {
|
|
12
|
+
return column.columnName
|
|
13
|
+
},
|
|
14
|
+
visitManyHasOne: ({ relation }) => {
|
|
15
|
+
return relation.joiningColumn.columnName
|
|
16
|
+
},
|
|
17
|
+
visitOneHasMany: () => {
|
|
18
|
+
throw new Error(`Cannot create unique key on 1:m relation in ${entity.name}.${fieldName}`)
|
|
19
|
+
},
|
|
20
|
+
visitOneHasOneOwning: () => {
|
|
21
|
+
throw new Error(
|
|
22
|
+
`Cannot create unique key on 1:1 relation, this relation has unique key by default in ${entity.name}.${fieldName}`,
|
|
23
|
+
)
|
|
24
|
+
},
|
|
25
|
+
visitOneHasOneInverse: () => {
|
|
26
|
+
throw new Error(`Cannot create unique key on 1:1 inverse relation in ${entity.name}.${fieldName}`)
|
|
27
|
+
},
|
|
28
|
+
visitManyHasManyOwning: () => {
|
|
29
|
+
throw new Error(`Cannot create unique key on m:m relation in ${entity.name}.${fieldName}`)
|
|
30
|
+
},
|
|
31
|
+
visitManyHasManyInverse: () => {
|
|
32
|
+
throw new Error(`Cannot create unique key on m:m inverse relation in ${entity.name}.${fieldName}`)
|
|
33
|
+
},
|
|
34
|
+
})
|
|
35
|
+
})
|
|
36
|
+
}
|
|
@@ -4,11 +4,11 @@ import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
|
4
4
|
import {
|
|
5
5
|
createModificationType,
|
|
6
6
|
Differ,
|
|
7
|
-
ModificationHandler,
|
|
7
|
+
ModificationHandler, ModificationHandlerCreateSqlOptions,
|
|
8
8
|
ModificationHandlerOptions,
|
|
9
9
|
} from '../ModificationHandler'
|
|
10
10
|
import { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils'
|
|
11
|
-
import {
|
|
11
|
+
import { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'
|
|
12
12
|
import { getColumnSqlType } from '../utils/columnUtils'
|
|
13
13
|
|
|
14
14
|
export class CreateEntityModificationHandler implements ModificationHandler<CreateEntityModificationData> {
|
|
@@ -18,7 +18,7 @@ export class CreateEntityModificationHandler implements ModificationHandler<Crea
|
|
|
18
18
|
private readonly options: ModificationHandlerOptions,
|
|
19
19
|
) {}
|
|
20
20
|
|
|
21
|
-
public createSql(builder: MigrationBuilder): void {
|
|
21
|
+
public createSql(builder: MigrationBuilder, { systemSchema }: ModificationHandlerCreateSqlOptions): void {
|
|
22
22
|
const entity = this.data.entity
|
|
23
23
|
if (entity.view) {
|
|
24
24
|
// BC
|
|
@@ -37,8 +37,8 @@ export class CreateEntityModificationHandler implements ModificationHandler<Crea
|
|
|
37
37
|
})
|
|
38
38
|
|
|
39
39
|
if (entity.eventLog?.enabled !== false) {
|
|
40
|
-
createEventTrigger(builder,
|
|
41
|
-
createEventTrxTrigger(builder,
|
|
40
|
+
createEventTrigger(builder, systemSchema, entity.tableName, [entity.primaryColumn])
|
|
41
|
+
createEventTrxTrigger(builder, systemSchema, entity.tableName)
|
|
42
42
|
}
|
|
43
43
|
}
|
|
44
44
|
|
|
@@ -49,8 +49,9 @@ export class CreateEntityModificationHandler implements ModificationHandler<Crea
|
|
|
49
49
|
...model.entities,
|
|
50
50
|
[this.data.entity.name]: {
|
|
51
51
|
eventLog: { enabled: true },
|
|
52
|
-
indexes: {},
|
|
53
52
|
...this.data.entity,
|
|
53
|
+
unique: Object.values(this.data.entity.unique),
|
|
54
|
+
indexes: Object.values(this.data.entity.indexes ?? []),
|
|
54
55
|
},
|
|
55
56
|
},
|
|
56
57
|
}))
|
|
@@ -80,7 +81,7 @@ export class CreateEntityDiffer implements Differ {
|
|
|
80
81
|
fields: {
|
|
81
82
|
[entity.primary]: entity.fields[entity.primary],
|
|
82
83
|
},
|
|
83
|
-
unique:
|
|
84
|
+
unique: [],
|
|
84
85
|
},
|
|
85
86
|
}),
|
|
86
87
|
)
|
|
@@ -88,5 +89,5 @@ export class CreateEntityDiffer implements Differ {
|
|
|
88
89
|
}
|
|
89
90
|
|
|
90
91
|
export interface CreateEntityModificationData {
|
|
91
|
-
entity:
|
|
92
|
+
entity: PossibleEntityShapeInMigrations
|
|
92
93
|
}
|
|
@@ -3,7 +3,7 @@ import { Model, Schema } from '@contember/schema'
|
|
|
3
3
|
import { SchemaUpdater, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
4
|
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import { Migration } from '../../Migration'
|
|
6
|
-
import {
|
|
6
|
+
import { PossibleEntityShapeInMigrations } from '../../utils/PartialEntity.js'
|
|
7
7
|
|
|
8
8
|
export class CreateViewModificationHandler implements ModificationHandler<CreateViewModificationData> {
|
|
9
9
|
constructor(private readonly data: CreateViewModificationData, private readonly schema: Schema) {}
|
|
@@ -22,9 +22,10 @@ export class CreateViewModificationHandler implements ModificationHandler<Create
|
|
|
22
22
|
entities: {
|
|
23
23
|
...model.entities,
|
|
24
24
|
[this.data.entity.name]: {
|
|
25
|
-
indexes: {},
|
|
26
25
|
eventLog: { enabled: true }, // not relevant here...
|
|
27
26
|
...this.data.entity,
|
|
27
|
+
unique: Object.values(this.data.entity.unique),
|
|
28
|
+
indexes: Object.values(this.data.entity.indexes ?? []),
|
|
28
29
|
},
|
|
29
30
|
},
|
|
30
31
|
}))
|
|
@@ -68,5 +69,5 @@ export class CreateViewDiffer implements Differ {
|
|
|
68
69
|
}
|
|
69
70
|
|
|
70
71
|
export interface CreateViewModificationData {
|
|
71
|
-
entity:
|
|
72
|
+
entity: PossibleEntityShapeInMigrations
|
|
72
73
|
}
|
|
@@ -14,22 +14,21 @@ import {
|
|
|
14
14
|
import {
|
|
15
15
|
createModificationType,
|
|
16
16
|
Differ,
|
|
17
|
-
ModificationHandler,
|
|
17
|
+
ModificationHandler, ModificationHandlerCreateSqlOptions,
|
|
18
18
|
ModificationHandlerOptions,
|
|
19
19
|
} from '../ModificationHandler'
|
|
20
20
|
import { VERSION_ACL_PATCH, VERSION_REMOVE_REFERENCING_RELATIONS } from '../ModificationVersions'
|
|
21
21
|
import { isRelation, PredicateDefinitionProcessor } from '@contember/schema-utils'
|
|
22
22
|
import { removeFieldModification } from '../fields'
|
|
23
|
-
import { SchemaWithMeta } from '../utils/schemaMeta'
|
|
24
23
|
|
|
25
24
|
export class RemoveEntityModificationHandler implements ModificationHandler<RemoveEntityModificationData> {
|
|
26
25
|
constructor(
|
|
27
26
|
private readonly data: RemoveEntityModificationData,
|
|
28
|
-
private readonly schema:
|
|
27
|
+
private readonly schema: Schema,
|
|
29
28
|
private readonly options: ModificationHandlerOptions,
|
|
30
29
|
) {}
|
|
31
30
|
|
|
32
|
-
public createSql(builder: MigrationBuilder): void {
|
|
31
|
+
public createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {
|
|
33
32
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
34
33
|
if (entity.view) {
|
|
35
34
|
builder.dropView(entity.tableName)
|
|
@@ -37,7 +36,8 @@ export class RemoveEntityModificationHandler implements ModificationHandler<Remo
|
|
|
37
36
|
}
|
|
38
37
|
if (this.options.formatVersion >= VERSION_REMOVE_REFERENCING_RELATIONS) {
|
|
39
38
|
this.getFieldsToRemove(this.schema).forEach(([entityName, fieldName]) => {
|
|
40
|
-
removeFieldModification.createHandler({ entityName, fieldName }, this.schema, this.options)
|
|
39
|
+
const removeFieldHandler = removeFieldModification.createHandler({ entityName, fieldName }, this.schema, this.options)
|
|
40
|
+
removeFieldHandler.createSql(builder, options)
|
|
41
41
|
})
|
|
42
42
|
}
|
|
43
43
|
builder.dropTable(entity.tableName)
|
|
@@ -5,6 +5,7 @@ import {
|
|
|
5
5
|
createModificationType,
|
|
6
6
|
Differ,
|
|
7
7
|
ModificationHandler,
|
|
8
|
+
ModificationHandlerCreateSqlOptions,
|
|
8
9
|
ModificationHandlerOptions,
|
|
9
10
|
} from '../ModificationHandler'
|
|
10
11
|
import {
|
|
@@ -23,14 +24,14 @@ export class ToggleEventLogModificationHandler implements ModificationHandler<To
|
|
|
23
24
|
) {
|
|
24
25
|
}
|
|
25
26
|
|
|
26
|
-
public createSql(builder: MigrationBuilder): void {
|
|
27
|
+
public createSql(builder: MigrationBuilder, { systemSchema }: ModificationHandlerCreateSqlOptions): void {
|
|
27
28
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
28
29
|
if (entity.view) {
|
|
29
30
|
return
|
|
30
31
|
}
|
|
31
32
|
if (this.data.enabled) {
|
|
32
|
-
createEventTrigger(builder,
|
|
33
|
-
createEventTrxTrigger(builder,
|
|
33
|
+
createEventTrigger(builder, systemSchema, entity.tableName, [entity.primaryColumn])
|
|
34
|
+
createEventTrxTrigger(builder, systemSchema, entity.tableName)
|
|
34
35
|
} else {
|
|
35
36
|
dropEventTrigger(builder, entity.tableName)
|
|
36
37
|
dropEventTrxTrigger(builder, entity.tableName)
|
|
@@ -5,28 +5,29 @@ import {
|
|
|
5
5
|
updateAcl,
|
|
6
6
|
updateAclEntities,
|
|
7
7
|
updateAclEveryRole,
|
|
8
|
-
updateEntity,
|
|
9
8
|
updateEveryEntity,
|
|
10
9
|
updateEveryField,
|
|
11
10
|
updateModel,
|
|
12
11
|
updateSchema,
|
|
13
12
|
} from '../utils/schemaUpdateUtils'
|
|
14
|
-
import {
|
|
13
|
+
import {
|
|
14
|
+
createModificationType,
|
|
15
|
+
ModificationHandler,
|
|
16
|
+
ModificationHandlerCreateSqlOptions,
|
|
17
|
+
ModificationHandlerOptions,
|
|
18
|
+
} from '../ModificationHandler'
|
|
15
19
|
import { isIt } from '../../utils/isIt'
|
|
16
|
-
import { VERSION_ACL_PATCH
|
|
17
|
-
import { NamingHelper } from '@contember/schema-utils'
|
|
20
|
+
import { VERSION_ACL_PATCH } from '../ModificationVersions'
|
|
18
21
|
import { NoopModification } from '../NoopModification'
|
|
19
|
-
import { renameConstraintSchemaUpdater, renameConstraintsSqlBuilder } from '../utils/renameConstraintsHelper'
|
|
20
22
|
import { changeValue } from '../utils/valueUtils'
|
|
21
23
|
import { updateEntityTableNameModification } from './UpdateEntityTableNameModification'
|
|
22
|
-
import { SchemaWithMeta } from '../utils/schemaMeta'
|
|
23
24
|
|
|
24
25
|
export class UpdateEntityNameModificationHandler implements ModificationHandler<UpdateEntityNameModificationData> {
|
|
25
26
|
private subModification: ModificationHandler<any>
|
|
26
27
|
|
|
27
28
|
constructor(
|
|
28
29
|
private readonly data: UpdateEntityNameModificationData,
|
|
29
|
-
private readonly schema:
|
|
30
|
+
private readonly schema: Schema,
|
|
30
31
|
private readonly options: ModificationHandlerOptions,
|
|
31
32
|
) {
|
|
32
33
|
this.subModification = data.tableName
|
|
@@ -38,12 +39,8 @@ export class UpdateEntityNameModificationHandler implements ModificationHandler<
|
|
|
38
39
|
: new NoopModification()
|
|
39
40
|
}
|
|
40
41
|
|
|
41
|
-
public createSql(builder: MigrationBuilder): void {
|
|
42
|
-
|
|
43
|
-
if (!entity.view && this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_NAME) {
|
|
44
|
-
renameConstraintsSqlBuilder(builder, entity, this.getNewConstraintName.bind(this))
|
|
45
|
-
}
|
|
46
|
-
this.subModification.createSql(builder)
|
|
42
|
+
public createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {
|
|
43
|
+
this.subModification.createSql(builder, options)
|
|
47
44
|
}
|
|
48
45
|
|
|
49
46
|
public getSchemaUpdater(): SchemaUpdater {
|
|
@@ -58,9 +55,6 @@ export class UpdateEntityNameModificationHandler implements ModificationHandler<
|
|
|
58
55
|
return field
|
|
59
56
|
}),
|
|
60
57
|
),
|
|
61
|
-
this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_NAME
|
|
62
|
-
? updateEntity(this.data.entityName, renameConstraintSchemaUpdater(this.getNewConstraintName.bind(this)))
|
|
63
|
-
: undefined,
|
|
64
58
|
({ model }) => {
|
|
65
59
|
const { [this.data.entityName]: renamed, ...entities } = model.entities
|
|
66
60
|
const newEntities = {
|
|
@@ -112,15 +106,6 @@ export class UpdateEntityNameModificationHandler implements ModificationHandler<
|
|
|
112
106
|
)
|
|
113
107
|
}
|
|
114
108
|
|
|
115
|
-
private getNewConstraintName(constraint: Model.UniqueConstraint): string | null {
|
|
116
|
-
const generatedName = NamingHelper.createUniqueConstraintName(this.data.entityName, constraint.fields)
|
|
117
|
-
const isGenerated = constraint.name === generatedName
|
|
118
|
-
if (!isGenerated) {
|
|
119
|
-
null
|
|
120
|
-
}
|
|
121
|
-
return NamingHelper.createUniqueConstraintName(this.data.newEntityName, constraint.fields)
|
|
122
|
-
}
|
|
123
|
-
|
|
124
109
|
describe() {
|
|
125
110
|
return { message: `Change entity name from ${this.data.entityName} to ${this.data.newEntityName}` }
|
|
126
111
|
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
+
import { Model, Schema } from '@contember/schema'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
|
+
import deepEqual from 'fast-deep-equal'
|
|
6
|
+
|
|
7
|
+
export class UpdateEntityOrderByModificationHandler implements ModificationHandler<UpdateEntityOrderByModificationData> {
|
|
8
|
+
|
|
9
|
+
constructor(private readonly data: UpdateEntityOrderByModificationData, private readonly schema: Schema) { }
|
|
10
|
+
|
|
11
|
+
public createSql(builder: MigrationBuilder): void { }
|
|
12
|
+
|
|
13
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
14
|
+
const { entityName, orderBy } = this.data
|
|
15
|
+
return updateModel(
|
|
16
|
+
updateEntity(entityName, ({ entity }) => {
|
|
17
|
+
if (orderBy) {
|
|
18
|
+
return {
|
|
19
|
+
...entity,
|
|
20
|
+
orderBy,
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
const { orderBy: _, ...rest } = entity
|
|
24
|
+
return rest
|
|
25
|
+
}),
|
|
26
|
+
)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
describe() {
|
|
30
|
+
return { message: `Update order-by of entity ${this.data.entityName}` }
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export interface UpdateEntityOrderByModificationData {
|
|
35
|
+
entityName: string
|
|
36
|
+
orderBy?: readonly Model.OrderBy[]
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export const updateEntityOrderByModification = createModificationType({
|
|
40
|
+
id: 'updateEntityOrderBy',
|
|
41
|
+
handler: UpdateEntityOrderByModificationHandler,
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
export class UpdateEntityOrderByDiffer implements Differ {
|
|
45
|
+
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
46
|
+
return Object.values(updatedSchema.model.entities)
|
|
47
|
+
.flatMap(updatedEntity => {
|
|
48
|
+
const origEntity = originalSchema.model.entities[updatedEntity.name]
|
|
49
|
+
if (!origEntity) {
|
|
50
|
+
return []
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
if (!deepEqual(updatedEntity.orderBy ?? [], origEntity.orderBy ?? [])) {
|
|
54
|
+
if (updatedEntity.orderBy) {
|
|
55
|
+
return [updateEntityOrderByModification.createModification({
|
|
56
|
+
entityName: updatedEntity.name,
|
|
57
|
+
orderBy: updatedEntity.orderBy,
|
|
58
|
+
})]
|
|
59
|
+
}
|
|
60
|
+
return [updateEntityOrderByModification.createModification({
|
|
61
|
+
entityName: updatedEntity.name,
|
|
62
|
+
})]
|
|
63
|
+
}
|
|
64
|
+
return []
|
|
65
|
+
})
|
|
66
|
+
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { acceptFieldVisitor, isInverseRelation, isRelation
|
|
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
4
|
import { removeField, SchemaUpdater } from '../utils/schemaUpdateUtils'
|