@contember/schema-migrations 1.3.0-alpha.7 → 1.3.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/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/SchemaDiffer.d.ts +1 -1
- package/dist/src/SchemaDiffer.d.ts.map +1 -1
- package/dist/src/SchemaDiffer.js +10 -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/modifications/ModificationHandler.d.ts +10 -6
- 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 +3 -2
- package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
- package/dist/src/modifications/ModificationVersions.d.ts +4 -3
- package/dist/src/modifications/ModificationVersions.d.ts.map +1 -1
- package/dist/src/modifications/ModificationVersions.js +5 -4
- package/dist/src/modifications/ModificationVersions.js.map +1 -1
- package/dist/src/modifications/columns/CreateColumnModification.d.ts +2 -2
- package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/CreateColumnModification.js +14 -24
- package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +5 -3
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +19 -4
- package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
- package/dist/src/modifications/columns/columnUtils.d.ts +14 -0
- package/dist/src/modifications/columns/columnUtils.d.ts.map +1 -0
- package/dist/src/modifications/columns/columnUtils.js +29 -0
- package/dist/src/modifications/columns/columnUtils.js.map +1 -0
- 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 -34
- package/dist/src/modifications/entities/UpdateEntityNameModification.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 -42
- 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 +4 -5
- package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
- package/dist/src/modifications/relations/CreateRelationModification.js +13 -17
- 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 +3 -3
- package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
- package/dist/src/modifications/relations/helpers.d.ts +4 -1
- package/dist/src/modifications/relations/helpers.d.ts.map +1 -1
- package/dist/src/modifications/relations/helpers.js +20 -17
- package/dist/src/modifications/relations/helpers.js.map +1 -1
- package/dist/src/modifications/relations/normalization.d.ts +2 -2
- package/dist/src/modifications/relations/normalization.d.ts.map +1 -1
- package/dist/src/modifications/settings/UpdateSettingsModification.d.ts +1 -1
- package/dist/src/modifications/settings/UpdateSettingsModification.d.ts.map +1 -1
- 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 +12 -14
- 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/modifications/utils/viewDependencies.d.ts +1 -1
- package/dist/src/modifications/utils/viewDependencies.d.ts.map +1 -1
- 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/createColumn.test.js +0 -2
- package/dist/tests/cases/integration/createColumn.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 +42 -4
- package/dist/tests/cases/integration/updateColumnDefinition.test.js.map +1 -1
- package/dist/tests/cases/integration/updateEntityName.test.js +1 -20
- package/dist/tests/cases/integration/updateEntityName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateFieldName.test.js +1 -21
- package/dist/tests/cases/integration/updateFieldName.test.js.map +1 -1
- package/dist/tests/cases/integration/updateRelationOnDelete.test.js +2 -2
- 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 +10 -4
- package/dist/tests/src/tests.js.map +1 -1
- package/dist/tests/tsconfig.tsbuildinfo +1 -1
- package/package.json +8 -9
- package/src/MigrationDescriber.ts +11 -9
- package/src/SchemaDiffer.ts +12 -13
- package/src/SchemaMigrator.ts +1 -3
- package/src/modifications/ModificationHandler.ts +10 -5
- package/src/modifications/ModificationHandlerFactory.ts +12 -11
- package/src/modifications/ModificationVersions.ts +4 -3
- package/src/modifications/columns/CreateColumnModification.ts +19 -27
- package/src/modifications/columns/UpdateColumnDefinitionModification.ts +22 -4
- package/src/modifications/columns/columnUtils.ts +35 -0
- 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 -46
- package/src/modifications/fields/RemoveFieldModification.ts +1 -1
- package/src/modifications/fields/UpdateFieldNameModification.ts +30 -57
- 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 +20 -35
- package/src/modifications/relations/ToggleJunctionEventLogModification.ts +4 -5
- package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +13 -5
- package/src/modifications/relations/helpers.ts +27 -22
- 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 +0 -1
- 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/createColumn.test.ts +0 -2
- 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 +36 -4
- package/tests/cases/integration/updateEntityName.test.ts +1 -20
- package/tests/cases/integration/updateFieldName.test.ts +1 -21
- package/tests/cases/integration/updateRelationOnDelete.test.ts +2 -2
- package/tests/cases/integration/updateView.test.ts +18 -18
- package/tests/scripts/checkCreateConsistentMigrations.ts +1 -1
- package/tests/src/tests.ts +13 -8
- 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/modifications/utils/renameConstraintsHelper.ts +0 -34
- package/src/modifications/utils/schemaMeta.ts +0 -18
- package/tests/cases/integration/takenIndexName.test.ts +0 -314
|
@@ -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,32 +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 { createModificationType, ModificationHandler, ModificationHandlerOptions } from '../ModificationHandler'
|
|
15
|
-
import { isIt } from '../../utils/isIt'
|
|
16
13
|
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
14
|
+
createModificationType,
|
|
15
|
+
ModificationHandler,
|
|
16
|
+
ModificationHandlerCreateSqlOptions,
|
|
17
|
+
ModificationHandlerOptions,
|
|
18
|
+
} from '../ModificationHandler'
|
|
19
|
+
import { isIt } from '../../utils/isIt'
|
|
20
|
+
import { VERSION_ACL_PATCH } from '../ModificationVersions'
|
|
22
21
|
import { NoopModification } from '../NoopModification'
|
|
23
|
-
import { renameConstraintSchemaUpdater, renameConstraintsSqlBuilder } from '../utils/renameConstraintsHelper'
|
|
24
22
|
import { changeValue } from '../utils/valueUtils'
|
|
25
23
|
import { updateEntityTableNameModification } from './UpdateEntityTableNameModification'
|
|
26
|
-
import { SchemaWithMeta } from '../utils/schemaMeta'
|
|
27
24
|
|
|
28
25
|
export class UpdateEntityNameModificationHandler implements ModificationHandler<UpdateEntityNameModificationData> {
|
|
29
26
|
private subModification: ModificationHandler<any>
|
|
30
27
|
|
|
31
28
|
constructor(
|
|
32
29
|
private readonly data: UpdateEntityNameModificationData,
|
|
33
|
-
private readonly schema:
|
|
30
|
+
private readonly schema: Schema,
|
|
34
31
|
private readonly options: ModificationHandlerOptions,
|
|
35
32
|
) {
|
|
36
33
|
this.subModification = data.tableName
|
|
@@ -42,29 +39,8 @@ export class UpdateEntityNameModificationHandler implements ModificationHandler<
|
|
|
42
39
|
: new NoopModification()
|
|
43
40
|
}
|
|
44
41
|
|
|
45
|
-
public createSql(builder: MigrationBuilder): void {
|
|
46
|
-
|
|
47
|
-
if (!entity.view && this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_NAME) {
|
|
48
|
-
renameConstraintsSqlBuilder(builder, entity, this.getNewConstraintName.bind(this))
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
if (this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_NAME_ONE_HAS_ONE) {
|
|
52
|
-
acceptEveryFieldVisitor(this.schema.model, this.data.entityName, {
|
|
53
|
-
visitColumn: () => {},
|
|
54
|
-
visitManyHasManyOwning: () => {},
|
|
55
|
-
visitManyHasManyInverse: () => {},
|
|
56
|
-
visitOneHasOneInverse: () => {},
|
|
57
|
-
visitManyHasOne: () => {},
|
|
58
|
-
visitOneHasMany: () => {},
|
|
59
|
-
visitOneHasOneOwning: ({ relation }) => {
|
|
60
|
-
const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
|
|
61
|
-
const newUniqueConstraintName = NamingHelper.createUniqueConstraintName(this.data.newEntityName, [relation.name])
|
|
62
|
-
builder.renameConstraint(entity.tableName, uniqueConstraintName, newUniqueConstraintName)
|
|
63
|
-
},
|
|
64
|
-
})
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
this.subModification.createSql(builder)
|
|
42
|
+
public createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {
|
|
43
|
+
this.subModification.createSql(builder, options)
|
|
68
44
|
}
|
|
69
45
|
|
|
70
46
|
public getSchemaUpdater(): SchemaUpdater {
|
|
@@ -79,9 +55,6 @@ export class UpdateEntityNameModificationHandler implements ModificationHandler<
|
|
|
79
55
|
return field
|
|
80
56
|
}),
|
|
81
57
|
),
|
|
82
|
-
this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_NAME
|
|
83
|
-
? updateEntity(this.data.entityName, renameConstraintSchemaUpdater(this.getNewConstraintName.bind(this)))
|
|
84
|
-
: undefined,
|
|
85
58
|
({ model }) => {
|
|
86
59
|
const { [this.data.entityName]: renamed, ...entities } = model.entities
|
|
87
60
|
const newEntities = {
|
|
@@ -133,15 +106,6 @@ export class UpdateEntityNameModificationHandler implements ModificationHandler<
|
|
|
133
106
|
)
|
|
134
107
|
}
|
|
135
108
|
|
|
136
|
-
private getNewConstraintName(constraint: Model.UniqueConstraint): string | null {
|
|
137
|
-
const generatedName = NamingHelper.createUniqueConstraintName(this.data.entityName, constraint.fields)
|
|
138
|
-
const isGenerated = constraint.name === generatedName
|
|
139
|
-
if (!isGenerated) {
|
|
140
|
-
null
|
|
141
|
-
}
|
|
142
|
-
return NamingHelper.createUniqueConstraintName(this.data.newEntityName, constraint.fields)
|
|
143
|
-
}
|
|
144
|
-
|
|
145
109
|
describe() {
|
|
146
110
|
return { message: `Change entity name from ${this.data.entityName} to ${this.data.newEntityName}` }
|
|
147
111
|
}
|
|
@@ -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'
|
|
@@ -13,25 +13,28 @@ import {
|
|
|
13
13
|
updateModel,
|
|
14
14
|
updateSchema,
|
|
15
15
|
} from '../utils/schemaUpdateUtils'
|
|
16
|
-
import {
|
|
17
|
-
|
|
16
|
+
import {
|
|
17
|
+
createModificationType,
|
|
18
|
+
ModificationHandler,
|
|
19
|
+
ModificationHandlerCreateSqlOptions,
|
|
20
|
+
ModificationHandlerOptions,
|
|
21
|
+
} from '../ModificationHandler'
|
|
22
|
+
import { acceptFieldVisitor, PredicateDefinitionProcessor } from '@contember/schema-utils'
|
|
18
23
|
import {
|
|
19
24
|
VERSION_ACL_PATCH,
|
|
20
|
-
|
|
21
|
-
|
|
25
|
+
VERSION_UPDATE_CONSTRAINT_FIELDS,
|
|
26
|
+
VERSION_UPDATE_INDEX_FIELDS,
|
|
22
27
|
} from '../ModificationVersions'
|
|
23
|
-
import { renameConstraintSchemaUpdater, renameConstraintsSqlBuilder } from '../utils/renameConstraintsHelper'
|
|
24
28
|
import { changeValue } from '../utils/valueUtils'
|
|
25
29
|
import { updateColumnNameModification } from '../columns'
|
|
26
30
|
import { NoopModification } from '../NoopModification'
|
|
27
|
-
import { SchemaWithMeta } from '../utils/schemaMeta'
|
|
28
31
|
|
|
29
32
|
export class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {
|
|
30
33
|
private renameColumnSubModification: ModificationHandler<any> = new NoopModification()
|
|
31
34
|
|
|
32
35
|
constructor(
|
|
33
36
|
private readonly data: UpdateFieldNameModificationData,
|
|
34
|
-
private readonly schema:
|
|
37
|
+
private readonly schema: Schema,
|
|
35
38
|
private readonly options: ModificationHandlerOptions,
|
|
36
39
|
) {
|
|
37
40
|
if (this.data.columnName) {
|
|
@@ -43,57 +46,39 @@ export class UpdateFieldNameModificationHandler implements ModificationHandler<U
|
|
|
43
46
|
}
|
|
44
47
|
}
|
|
45
48
|
|
|
46
|
-
public createSql(builder: MigrationBuilder): void {
|
|
49
|
+
public createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {
|
|
47
50
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
48
51
|
if (entity.view) {
|
|
49
52
|
return
|
|
50
53
|
}
|
|
51
|
-
|
|
52
|
-
renameConstraintsSqlBuilder(builder, entity, this.getNewConstraintName.bind(this))
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
if (this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_NAME_ONE_HAS_ONE) {
|
|
56
|
-
acceptFieldVisitor(this.schema.model, this.data.entityName, this.data.fieldName, {
|
|
57
|
-
visitColumn: () => {},
|
|
58
|
-
visitManyHasManyOwning: () => {},
|
|
59
|
-
visitManyHasManyInverse: () => {},
|
|
60
|
-
visitOneHasOneInverse: () => {},
|
|
61
|
-
visitManyHasOne: () => {},
|
|
62
|
-
visitOneHasMany: () => {},
|
|
63
|
-
visitOneHasOneOwning: ({ relation }) => {
|
|
64
|
-
const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
|
|
65
|
-
const newUniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [this.data.newFieldName])
|
|
66
|
-
builder.renameConstraint(entity.tableName, uniqueConstraintName, newUniqueConstraintName)
|
|
67
|
-
},
|
|
68
|
-
})
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
this.renameColumnSubModification.createSql(builder)
|
|
54
|
+
this.renameColumnSubModification.createSql(builder, options)
|
|
72
55
|
}
|
|
73
56
|
|
|
74
57
|
public getSchemaUpdater(): SchemaUpdater {
|
|
75
|
-
const updateConstraintName =
|
|
76
|
-
this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_NAME
|
|
77
|
-
? updateEntity(this.data.entityName, renameConstraintSchemaUpdater(this.getNewConstraintName.bind(this)))
|
|
78
|
-
: undefined
|
|
79
58
|
const updateConstraintFields =
|
|
80
|
-
this.options.formatVersion >=
|
|
59
|
+
this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_FIELDS
|
|
81
60
|
? updateEntity(this.data.entityName, ({ entity }) => {
|
|
82
61
|
return {
|
|
83
62
|
...entity,
|
|
84
|
-
unique:
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
...unique,
|
|
89
|
-
fields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),
|
|
90
|
-
},
|
|
91
|
-
]),
|
|
92
|
-
),
|
|
63
|
+
unique: entity.unique.map(unique => ({
|
|
64
|
+
...unique,
|
|
65
|
+
fields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),
|
|
66
|
+
})),
|
|
93
67
|
}
|
|
94
68
|
})
|
|
95
69
|
: undefined
|
|
96
|
-
|
|
70
|
+
const updateIndexFields =
|
|
71
|
+
this.options.formatVersion >= VERSION_UPDATE_INDEX_FIELDS
|
|
72
|
+
? updateEntity(this.data.entityName, ({ entity }) => {
|
|
73
|
+
return {
|
|
74
|
+
...entity,
|
|
75
|
+
indexes: entity.indexes.map(unique => ({
|
|
76
|
+
...unique,
|
|
77
|
+
fields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),
|
|
78
|
+
})),
|
|
79
|
+
}
|
|
80
|
+
})
|
|
81
|
+
: undefined
|
|
97
82
|
const updateRelationReferences = updateEveryEntity(
|
|
98
83
|
updateEveryField(({ field, entity }) => {
|
|
99
84
|
const isUpdatedRelation = (entity: Model.Entity, relation: Model.AnyRelation | null) => {
|
|
@@ -189,26 +174,14 @@ export class UpdateFieldNameModificationHandler implements ModificationHandler<U
|
|
|
189
174
|
updateAclOp,
|
|
190
175
|
this.renameColumnSubModification.getSchemaUpdater(),
|
|
191
176
|
updateModel(
|
|
192
|
-
updateConstraintName,
|
|
193
177
|
updateConstraintFields,
|
|
178
|
+
updateIndexFields,
|
|
194
179
|
updateRelationReferences,
|
|
195
180
|
updateFieldName,
|
|
196
181
|
),
|
|
197
182
|
)
|
|
198
183
|
}
|
|
199
184
|
|
|
200
|
-
|
|
201
|
-
private getNewConstraintName(constraint: Model.UniqueConstraint): string | null {
|
|
202
|
-
const generatedName = NamingHelper.createUniqueConstraintName(this.data.entityName, constraint.fields)
|
|
203
|
-
const isGenerated = constraint.name === generatedName
|
|
204
|
-
if (!isGenerated) {
|
|
205
|
-
null
|
|
206
|
-
}
|
|
207
|
-
const newFieldNames = constraint.fields.map(changeValue(this.data.fieldName, this.data.newFieldName))
|
|
208
|
-
const newName = NamingHelper.createUniqueConstraintName(this.data.entityName, newFieldNames)
|
|
209
|
-
return newName === constraint.name ? null : newName
|
|
210
|
-
}
|
|
211
|
-
|
|
212
185
|
describe() {
|
|
213
186
|
return { message: `Change field name ${this.data.entityName}.${this.data.fieldName} to ${this.data.newFieldName}` }
|
|
214
187
|
}
|
|
@@ -1,56 +1,47 @@
|
|
|
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 { getIndexColumns } from './utils'
|
|
12
|
+
import deepEqual from 'fast-deep-equal'
|
|
6
13
|
|
|
7
14
|
export class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {
|
|
8
15
|
constructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}
|
|
9
16
|
|
|
10
|
-
public createSql(builder: MigrationBuilder): void {
|
|
17
|
+
public createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {
|
|
11
18
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
12
19
|
if (entity.view) {
|
|
13
20
|
return
|
|
14
21
|
}
|
|
15
22
|
const fields = this.data.index.fields
|
|
16
|
-
const columns =
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
},
|
|
21
|
-
visitManyHasOne: ({ relation }) => {
|
|
22
|
-
return relation.joiningColumn.columnName
|
|
23
|
-
},
|
|
24
|
-
visitOneHasOneOwning: ({ relation }) => {
|
|
25
|
-
return relation.joiningColumn.columnName
|
|
26
|
-
},
|
|
27
|
-
visitOneHasMany: () => {
|
|
28
|
-
throw new Error(`Cannot create index on 1:m relation in ${entity.name}.${fieldName}`)
|
|
29
|
-
},
|
|
30
|
-
visitOneHasOneInverse: () => {
|
|
31
|
-
throw new Error(`Cannot create index on 1:1 inverse relation in ${entity.name}.${fieldName}`)
|
|
32
|
-
},
|
|
33
|
-
visitManyHasManyOwning: () => {
|
|
34
|
-
throw new Error(`Cannot create index on m:m relation in ${entity.name}.${fieldName}`)
|
|
35
|
-
},
|
|
36
|
-
visitManyHasManyInverse: () => {
|
|
37
|
-
throw new Error(`Cannot create index on m:m inverse relation in ${entity.name}.${fieldName}`)
|
|
38
|
-
},
|
|
39
|
-
})
|
|
40
|
-
})
|
|
41
|
-
builder.addIndex(entity.tableName, [...columns], {
|
|
42
|
-
name: this.data.index.name,
|
|
23
|
+
const columns = getIndexColumns({
|
|
24
|
+
fields,
|
|
25
|
+
entity,
|
|
26
|
+
model: this.schema.model,
|
|
43
27
|
})
|
|
28
|
+
|
|
29
|
+
const tableNameId = wrapIdentifier(entity.tableName)
|
|
30
|
+
const columnNameIds = columns.map(wrapIdentifier)
|
|
31
|
+
|
|
32
|
+
builder.sql(`CREATE INDEX ON ${tableNameId} (${columnNameIds.join(', ')})`)
|
|
33
|
+
|
|
34
|
+
invalidateDatabaseMetadata()
|
|
44
35
|
}
|
|
45
36
|
|
|
46
37
|
public getSchemaUpdater(): SchemaUpdater {
|
|
47
38
|
return updateModel(
|
|
48
39
|
updateEntity(this.data.entityName, ({ entity }) => ({
|
|
49
40
|
...entity,
|
|
50
|
-
indexes:
|
|
41
|
+
indexes: [
|
|
51
42
|
...entity.indexes,
|
|
52
|
-
|
|
53
|
-
|
|
43
|
+
this.data.index,
|
|
44
|
+
],
|
|
54
45
|
})),
|
|
55
46
|
)
|
|
56
47
|
}
|
|
@@ -67,17 +58,20 @@ export const createIndexModification = createModificationType({
|
|
|
67
58
|
handler: CreateIndexModificationHandler,
|
|
68
59
|
})
|
|
69
60
|
|
|
61
|
+
export interface CreateIndexModificationData {
|
|
62
|
+
entityName: string
|
|
63
|
+
index: Model.Index
|
|
64
|
+
}
|
|
65
|
+
|
|
70
66
|
export class CreateIndexDiffer implements Differ {
|
|
71
67
|
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
72
68
|
return Object.values(updatedSchema.model.entities).flatMap(entity =>
|
|
73
|
-
|
|
74
|
-
.filter(it => !originalSchema.model.entities[entity.name].indexes
|
|
75
|
-
.map(index => createIndexModification.createModification({
|
|
69
|
+
entity.indexes
|
|
70
|
+
.filter(it => !originalSchema.model.entities[entity.name].indexes.find(idx => deepEqual(idx.fields, it.fields)))
|
|
71
|
+
.map(index => createIndexModification.createModification({
|
|
72
|
+
entityName: entity.name,
|
|
73
|
+
index,
|
|
74
|
+
})),
|
|
76
75
|
)
|
|
77
76
|
}
|
|
78
77
|
}
|
|
79
|
-
|
|
80
|
-
export interface CreateIndexModificationData {
|
|
81
|
-
entityName: string
|
|
82
|
-
index: Model.Index
|
|
83
|
-
}
|