@contember/schema-migrations 1.3.0-alpha.7 → 1.3.0-alpha.8
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.js +3 -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 +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 +2 -0
- 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/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 -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 +3 -4
- 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/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 +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 +6 -7
- package/src/MigrationDescriber.ts +11 -9
- package/src/SchemaDiffer.ts +3 -3
- 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/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 -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/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 +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
|
@@ -4,6 +4,7 @@ import {
|
|
|
4
4
|
ModificationDescription,
|
|
5
5
|
ModificationDescriptionContext,
|
|
6
6
|
ModificationHandler,
|
|
7
|
+
ModificationHandlerCreateSqlOptions,
|
|
7
8
|
ModificationHandlerFactory,
|
|
8
9
|
ModificationHandlerOptions,
|
|
9
10
|
SchemaUpdateError,
|
|
@@ -14,23 +15,22 @@ import { Schema } from '@contember/schema'
|
|
|
14
15
|
|
|
15
16
|
export interface ModificationDescriptionResult {
|
|
16
17
|
modification: Migration.Modification
|
|
17
|
-
sql: string
|
|
18
18
|
schema: Schema
|
|
19
19
|
description: ModificationDescription
|
|
20
20
|
handler: ModificationHandler<any>
|
|
21
|
+
getSql: (options: ModificationHandlerCreateSqlOptions) => string
|
|
21
22
|
}
|
|
22
23
|
|
|
23
24
|
export class MigrationDescriber {
|
|
24
25
|
constructor(private readonly modificationHandlerFactory: ModificationHandlerFactory) {
|
|
25
26
|
}
|
|
26
27
|
|
|
27
|
-
public
|
|
28
|
+
public describeModification(
|
|
28
29
|
schema: Schema,
|
|
29
30
|
modification: Migration.Modification,
|
|
30
31
|
options: ModificationHandlerOptions,
|
|
31
32
|
modificationDescriptionContext: ModificationDescriptionContext = emptyModificationDescriptionContext,
|
|
32
|
-
):
|
|
33
|
-
const builder = createMigrationBuilder()
|
|
33
|
+
): ModificationDescriptionResult {
|
|
34
34
|
const modificationHandler = this.modificationHandlerFactory.create(
|
|
35
35
|
modification.modification,
|
|
36
36
|
modification,
|
|
@@ -45,29 +45,31 @@ export class MigrationDescriber {
|
|
|
45
45
|
}
|
|
46
46
|
throw new SchemaUpdateError(e.message + '\n for modification: \n' + JSON.stringify(modification))
|
|
47
47
|
}
|
|
48
|
-
await modificationHandler.createSql(builder)
|
|
49
48
|
return {
|
|
50
49
|
modification,
|
|
51
50
|
schema,
|
|
52
|
-
|
|
51
|
+
getSql: options => {
|
|
52
|
+
const builder = createMigrationBuilder()
|
|
53
|
+
modificationHandler.createSql(builder, options)
|
|
54
|
+
return builder.getSql()
|
|
55
|
+
},
|
|
53
56
|
description: modificationHandler.describe(modificationDescriptionContext),
|
|
54
57
|
handler: modificationHandler,
|
|
55
58
|
}
|
|
56
59
|
}
|
|
57
60
|
|
|
58
|
-
public
|
|
61
|
+
public describeModifications(schema: Schema, migration: Migration): ModificationDescriptionResult[] {
|
|
59
62
|
const result = []
|
|
60
63
|
const createdEntities = []
|
|
61
64
|
for (const modification of migration.modifications) {
|
|
62
65
|
if (modification.modification === createEntityModification.id) {
|
|
63
66
|
createdEntities.push(modification.entity.name)
|
|
64
67
|
}
|
|
65
|
-
const description =
|
|
68
|
+
const description = this.describeModification(
|
|
66
69
|
schema,
|
|
67
70
|
modification,
|
|
68
71
|
{
|
|
69
72
|
formatVersion: migration.formatVersion,
|
|
70
|
-
systemSchema,
|
|
71
73
|
},
|
|
72
74
|
{
|
|
73
75
|
createdEntities,
|
package/src/SchemaDiffer.ts
CHANGED
|
@@ -44,12 +44,12 @@ import {
|
|
|
44
44
|
} from './modifications'
|
|
45
45
|
import { ChangeViewNonViewDiffer, RemoveChangedFieldDiffer, RemoveChangedViewDiffer } from './modifications/differs'
|
|
46
46
|
import { CreateIndexDiffer, RemoveIndexDiffer } from './modifications/indexes'
|
|
47
|
-
import { SchemaWithMeta } from './modifications/utils/schemaMeta'
|
|
48
47
|
import { CreateTriggerDiffer, RemoveTriggerDiffer, UpdateTriggerDiffer } from './modifications/actions'
|
|
49
48
|
import { UpdateTargetDiffer } from './modifications/actions/UpdateTargetModification'
|
|
50
49
|
import { CreateTargetDiffer } from './modifications/actions/CreateTargetModification'
|
|
51
50
|
import { RemoveTargetDiffer } from './modifications/actions/RemoveTargetModification'
|
|
52
51
|
import { UpdateSettingsDiffer } from './modifications/settings'
|
|
52
|
+
import { RemoveIndexNamesDiffer } from './modifications/upgrade/RemoveIndexNamesModification'
|
|
53
53
|
|
|
54
54
|
type DiffOptions = { skipRecreateValidation?: boolean; skipInitialSchemaValidation?: boolean }
|
|
55
55
|
|
|
@@ -72,6 +72,7 @@ export class SchemaDiffer {
|
|
|
72
72
|
}
|
|
73
73
|
|
|
74
74
|
const differs: Differ[] = [
|
|
75
|
+
new RemoveIndexNamesDiffer(),
|
|
75
76
|
new UpdateSettingsDiffer(),
|
|
76
77
|
new ConvertOneToManyRelationDiffer(),
|
|
77
78
|
new ConvertOneHasManyToManyHasManyRelationDiffer(),
|
|
@@ -125,8 +126,7 @@ export class SchemaDiffer {
|
|
|
125
126
|
|
|
126
127
|
|
|
127
128
|
if (!skipRecreateValidation) {
|
|
128
|
-
const
|
|
129
|
-
const errors = deepCompare(updatedSchema, appliedDiffsSchema2, [])
|
|
129
|
+
const errors = deepCompare(updatedSchema, appliedDiffsSchema, [])
|
|
130
130
|
if (errors.length === 0) {
|
|
131
131
|
return diffs
|
|
132
132
|
}
|
package/src/SchemaMigrator.ts
CHANGED
|
@@ -1,17 +1,15 @@
|
|
|
1
1
|
import { Schema } from '@contember/schema'
|
|
2
2
|
import { ModificationHandlerFactory } from './modifications'
|
|
3
3
|
import { Migration } from './Migration'
|
|
4
|
-
import { SchemaWithMeta } from './modifications/utils/schemaMeta'
|
|
5
4
|
|
|
6
5
|
export class SchemaMigrator {
|
|
7
6
|
constructor(private readonly modificationHandlerFactory: ModificationHandlerFactory) {}
|
|
8
7
|
|
|
9
|
-
public applyModifications(schema: Schema, diff: readonly Migration.Modification[], formatVersion: number):
|
|
8
|
+
public applyModifications(schema: Schema, diff: readonly Migration.Modification[], formatVersion: number): Schema {
|
|
10
9
|
for (const modification of diff) {
|
|
11
10
|
const { modification: name, ...data } = modification
|
|
12
11
|
const modificationHandler = this.modificationHandlerFactory.create(name, data, schema, {
|
|
13
12
|
formatVersion,
|
|
14
|
-
systemSchema: 'system', // not important here
|
|
15
13
|
})
|
|
16
14
|
schema = modificationHandler.getSchemaUpdater()({ schema })
|
|
17
15
|
}
|
|
@@ -2,7 +2,7 @@ import { MigrationBuilder } from '@contember/database-migrations'
|
|
|
2
2
|
import { SchemaUpdater } from './utils/schemaUpdateUtils'
|
|
3
3
|
import { Schema } from '@contember/schema'
|
|
4
4
|
import { Migration } from '../Migration'
|
|
5
|
-
import {
|
|
5
|
+
import { SchemaDatabaseMetadata } from '@contember/schema-utils'
|
|
6
6
|
|
|
7
7
|
export interface ModificationDescription {
|
|
8
8
|
message: string
|
|
@@ -14,20 +14,25 @@ export const emptyModificationDescriptionContext: ModificationDescriptionContext
|
|
|
14
14
|
export type ModificationDescriptionContext = { createdEntities: string[] }
|
|
15
15
|
|
|
16
16
|
export interface ModificationHandler<Data> {
|
|
17
|
-
createSql(builder: MigrationBuilder): void
|
|
17
|
+
createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void
|
|
18
18
|
|
|
19
19
|
getSchemaUpdater(): SchemaUpdater
|
|
20
20
|
|
|
21
21
|
describe(context: ModificationDescriptionContext): ModificationDescription
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
+
export interface ModificationHandlerCreateSqlOptions {
|
|
25
|
+
systemSchema: string
|
|
26
|
+
databaseMetadata: SchemaDatabaseMetadata
|
|
27
|
+
invalidateDatabaseMetadata: () => void
|
|
28
|
+
}
|
|
29
|
+
|
|
24
30
|
export interface ModificationHandlerOptions {
|
|
25
31
|
formatVersion: number
|
|
26
|
-
systemSchema: string
|
|
27
32
|
}
|
|
28
33
|
|
|
29
34
|
export interface ModificationHandlerConstructor<Data> {
|
|
30
|
-
new(data: Data, schema:
|
|
35
|
+
new(data: Data, schema: Schema, options: ModificationHandlerOptions): ModificationHandler<Data>
|
|
31
36
|
}
|
|
32
37
|
|
|
33
38
|
export interface Differ<Data = { [field: string]: any }> {
|
|
@@ -38,7 +43,7 @@ export interface Differ<Data = { [field: string]: any }> {
|
|
|
38
43
|
export interface ModificationType<Id extends String, Data> {
|
|
39
44
|
id: Id
|
|
40
45
|
createModification: (data: Data) => Migration.Modification<Data>
|
|
41
|
-
createHandler: (data: Data, schema:
|
|
46
|
+
createHandler: (data: Data, schema: Schema, options: ModificationHandlerOptions) => ModificationHandler<Data>
|
|
42
47
|
}
|
|
43
48
|
|
|
44
49
|
export const createModificationType = <Data, Id extends string>({ handler, id }: {
|
|
@@ -4,44 +4,44 @@ import { patchAclSchemaModification, updateAclSchemaModification } from './acl'
|
|
|
4
4
|
import { createColumnModification, updateColumnDefinitionModification, updateColumnNameModification } from './columns'
|
|
5
5
|
import { createUniqueConstraintModification, removeUniqueConstraintModification } from './constraints'
|
|
6
6
|
import {
|
|
7
|
-
createEntityModification,
|
|
8
|
-
|
|
7
|
+
createEntityModification,
|
|
8
|
+
createViewModification,
|
|
9
|
+
removeEntityModification,
|
|
10
|
+
toggleEventLogModification,
|
|
9
11
|
updateEntityNameModification,
|
|
10
12
|
updateEntityTableNameModification,
|
|
11
13
|
} from './entities'
|
|
12
14
|
import { updateViewModification } from './entities/UpdateViewModification'
|
|
13
|
-
import {
|
|
14
|
-
createEnumModification,
|
|
15
|
-
removeEnumModification,
|
|
16
|
-
updateEnumModification,
|
|
17
|
-
} from './enums'
|
|
15
|
+
import { createEnumModification, removeEnumModification, updateEnumModification } from './enums'
|
|
18
16
|
import { removeFieldModification, updateFieldNameModification } from './fields'
|
|
19
17
|
import {
|
|
20
18
|
convertOneHasManyToManyHasManyRelationModification,
|
|
21
19
|
convertOneToManyRelationModification,
|
|
22
20
|
createRelationInverseSideModification,
|
|
23
|
-
createRelationModification,
|
|
21
|
+
createRelationModification,
|
|
22
|
+
disableOrphanRemovalModification,
|
|
24
23
|
enableOrphanRemovalModification,
|
|
25
24
|
makeRelationNotNullModification,
|
|
26
|
-
makeRelationNullableModification,
|
|
25
|
+
makeRelationNullableModification,
|
|
26
|
+
toggleJunctionEventLogModification,
|
|
27
27
|
updateRelationOnDeleteModification,
|
|
28
28
|
updateRelationOrderByModification,
|
|
29
29
|
} from './relations'
|
|
30
30
|
import { patchValidationSchemaModification, updateValidationSchemaModification } from './validation'
|
|
31
31
|
import { createIndexModification, removeIndexModification } from './indexes'
|
|
32
|
-
import { SchemaWithMeta } from './utils/schemaMeta'
|
|
33
32
|
import { updateSettingsModification } from './settings'
|
|
34
33
|
import { createTriggerModification, removeTriggerModification, updateTriggerModification } from './actions'
|
|
35
34
|
import { createTargetModification } from './actions/CreateTargetModification'
|
|
36
35
|
import { removeTargetModification } from './actions/RemoveTargetModification'
|
|
37
36
|
import { updateTargetModification } from './actions/UpdateTargetModification'
|
|
38
37
|
import { updateEntityOrderByModification } from './entities/UpdateEntityOrderByModification'
|
|
38
|
+
import { removeIndexNamesModification } from './upgrade/RemoveIndexNamesModification'
|
|
39
39
|
|
|
40
40
|
|
|
41
41
|
class ModificationHandlerFactory {
|
|
42
42
|
constructor(private readonly map: Record<string, ModificationType<string, any>>) {}
|
|
43
43
|
|
|
44
|
-
public create<D>(name: string, data: D, schema:
|
|
44
|
+
public create<D>(name: string, data: D, schema: Schema, options: ModificationHandlerOptions): ModificationHandler<D> {
|
|
45
45
|
if (!this.map[name]) {
|
|
46
46
|
throw new Error(`Undefined modification handler for ${name}`)
|
|
47
47
|
}
|
|
@@ -53,6 +53,7 @@ namespace ModificationHandlerFactory {
|
|
|
53
53
|
type HandlerMap<D> = { [modificationName: string]: ModificationType<string, D> }
|
|
54
54
|
|
|
55
55
|
const handlers = [
|
|
56
|
+
removeIndexNamesModification,
|
|
56
57
|
updateSettingsModification,
|
|
57
58
|
updateAclSchemaModification,
|
|
58
59
|
patchAclSchemaModification,
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
export const VERSION_INITIAL = 1
|
|
2
|
-
export const VERSION_LATEST =
|
|
2
|
+
export const VERSION_LATEST = 5
|
|
3
3
|
|
|
4
4
|
export const VERSION_ACL_PATCH = 2
|
|
5
|
-
export const
|
|
5
|
+
export const VERSION_UPDATE_CONSTRAINT_FIELDS = 2
|
|
6
6
|
export const VERSION_REMOVE_RELATION_INVERSE_SIDE = 3
|
|
7
7
|
export const VERSION_REMOVE_REFERENCING_RELATIONS = 3
|
|
8
|
-
export const
|
|
8
|
+
export const _REMOVED_VERSION_UPDATE_CONSTRAINT_NAME_ONE_HAS_ONE = 4
|
|
9
|
+
export const VERSION_UPDATE_INDEX_FIELDS = 5
|
|
@@ -4,9 +4,8 @@ import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/
|
|
|
4
4
|
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
5
5
|
import deepEqual from 'fast-deep-equal'
|
|
6
6
|
import { updateColumns } from '../utils/diffUtils'
|
|
7
|
-
import { wrapIdentifier } from '
|
|
7
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
8
8
|
import { getColumnSqlType } from '../utils/columnUtils'
|
|
9
|
-
import { getEntityDependantViews } from '../utils/viewDependencies'
|
|
10
9
|
|
|
11
10
|
export class UpdateColumnDefinitionModificationHandler implements ModificationHandler<UpdateColumnDefinitionModificationData> {
|
|
12
11
|
constructor(private readonly data: UpdateColumnDefinitionModificationData, private readonly schema: Schema) {}
|
|
@@ -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)
|