@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
|
@@ -13,21 +13,28 @@ import {
|
|
|
13
13
|
updateModel,
|
|
14
14
|
updateSchema,
|
|
15
15
|
} from '../utils/schemaUpdateUtils'
|
|
16
|
-
import {
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
16
|
+
import {
|
|
17
|
+
createModificationType,
|
|
18
|
+
ModificationHandler,
|
|
19
|
+
ModificationHandlerCreateSqlOptions,
|
|
20
|
+
ModificationHandlerOptions,
|
|
21
|
+
} from '../ModificationHandler'
|
|
22
|
+
import { acceptFieldVisitor, PredicateDefinitionProcessor } from '@contember/schema-utils'
|
|
23
|
+
import {
|
|
24
|
+
VERSION_ACL_PATCH,
|
|
25
|
+
VERSION_UPDATE_CONSTRAINT_FIELDS,
|
|
26
|
+
VERSION_UPDATE_INDEX_FIELDS,
|
|
27
|
+
} from '../ModificationVersions'
|
|
20
28
|
import { changeValue } from '../utils/valueUtils'
|
|
21
29
|
import { updateColumnNameModification } from '../columns'
|
|
22
30
|
import { NoopModification } from '../NoopModification'
|
|
23
|
-
import { SchemaWithMeta } from '../utils/schemaMeta'
|
|
24
31
|
|
|
25
32
|
export class UpdateFieldNameModificationHandler implements ModificationHandler<UpdateFieldNameModificationData> {
|
|
26
33
|
private renameColumnSubModification: ModificationHandler<any> = new NoopModification()
|
|
27
34
|
|
|
28
35
|
constructor(
|
|
29
36
|
private readonly data: UpdateFieldNameModificationData,
|
|
30
|
-
private readonly schema:
|
|
37
|
+
private readonly schema: Schema,
|
|
31
38
|
private readonly options: ModificationHandlerOptions,
|
|
32
39
|
) {
|
|
33
40
|
if (this.data.columnName) {
|
|
@@ -39,40 +46,39 @@ export class UpdateFieldNameModificationHandler implements ModificationHandler<U
|
|
|
39
46
|
}
|
|
40
47
|
}
|
|
41
48
|
|
|
42
|
-
public createSql(builder: MigrationBuilder): void {
|
|
49
|
+
public createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {
|
|
43
50
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
44
51
|
if (entity.view) {
|
|
45
52
|
return
|
|
46
53
|
}
|
|
47
|
-
|
|
48
|
-
renameConstraintsSqlBuilder(builder, entity, this.getNewConstraintName.bind(this))
|
|
49
|
-
}
|
|
50
|
-
this.renameColumnSubModification.createSql(builder)
|
|
54
|
+
this.renameColumnSubModification.createSql(builder, options)
|
|
51
55
|
}
|
|
52
56
|
|
|
53
57
|
public getSchemaUpdater(): SchemaUpdater {
|
|
54
|
-
const updateConstraintName =
|
|
55
|
-
this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_NAME
|
|
56
|
-
? updateEntity(this.data.entityName, renameConstraintSchemaUpdater(this.getNewConstraintName.bind(this)))
|
|
57
|
-
: undefined
|
|
58
58
|
const updateConstraintFields =
|
|
59
|
-
this.options.formatVersion >=
|
|
59
|
+
this.options.formatVersion >= VERSION_UPDATE_CONSTRAINT_FIELDS
|
|
60
60
|
? updateEntity(this.data.entityName, ({ entity }) => {
|
|
61
61
|
return {
|
|
62
62
|
...entity,
|
|
63
|
-
unique:
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
...unique,
|
|
68
|
-
fields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),
|
|
69
|
-
},
|
|
70
|
-
]),
|
|
71
|
-
),
|
|
63
|
+
unique: entity.unique.map(unique => ({
|
|
64
|
+
...unique,
|
|
65
|
+
fields: unique.fields.map(changeValue(this.data.fieldName, this.data.newFieldName)),
|
|
66
|
+
})),
|
|
72
67
|
}
|
|
73
68
|
})
|
|
74
69
|
: undefined
|
|
75
|
-
|
|
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
|
|
76
82
|
const updateRelationReferences = updateEveryEntity(
|
|
77
83
|
updateEveryField(({ field, entity }) => {
|
|
78
84
|
const isUpdatedRelation = (entity: Model.Entity, relation: Model.AnyRelation | null) => {
|
|
@@ -168,26 +174,14 @@ export class UpdateFieldNameModificationHandler implements ModificationHandler<U
|
|
|
168
174
|
updateAclOp,
|
|
169
175
|
this.renameColumnSubModification.getSchemaUpdater(),
|
|
170
176
|
updateModel(
|
|
171
|
-
updateConstraintName,
|
|
172
177
|
updateConstraintFields,
|
|
178
|
+
updateIndexFields,
|
|
173
179
|
updateRelationReferences,
|
|
174
180
|
updateFieldName,
|
|
175
181
|
),
|
|
176
182
|
)
|
|
177
183
|
}
|
|
178
184
|
|
|
179
|
-
|
|
180
|
-
private getNewConstraintName(constraint: Model.UniqueConstraint): string | null {
|
|
181
|
-
const generatedName = NamingHelper.createUniqueConstraintName(this.data.entityName, constraint.fields)
|
|
182
|
-
const isGenerated = constraint.name === generatedName
|
|
183
|
-
if (!isGenerated) {
|
|
184
|
-
null
|
|
185
|
-
}
|
|
186
|
-
const newFieldNames = constraint.fields.map(changeValue(this.data.fieldName, this.data.newFieldName))
|
|
187
|
-
const newName = NamingHelper.createUniqueConstraintName(this.data.entityName, newFieldNames)
|
|
188
|
-
return newName === constraint.name ? null : newName
|
|
189
|
-
}
|
|
190
|
-
|
|
191
185
|
describe() {
|
|
192
186
|
return { message: `Change field name ${this.data.entityName}.${this.data.fieldName} to ${this.data.newFieldName}` }
|
|
193
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
|
-
}
|
|
@@ -1,26 +1,45 @@
|
|
|
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 { getIndexColumns } from './utils'
|
|
12
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
6
13
|
|
|
7
14
|
export class RemoveIndexModificationHandler implements ModificationHandler<RemoveIndexModificationData> {
|
|
8
15
|
constructor(private readonly data: RemoveIndexModificationData, 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
|
-
|
|
16
|
-
|
|
22
|
+
const fields = this.getFields()
|
|
23
|
+
|
|
24
|
+
const columns = getIndexColumns({
|
|
25
|
+
entity,
|
|
26
|
+
fields,
|
|
27
|
+
model: this.schema.model,
|
|
17
28
|
})
|
|
29
|
+
|
|
30
|
+
const indexNames = databaseMetadata.getIndexNames({ tableName: entity.tableName, columnNames: columns })
|
|
31
|
+
|
|
32
|
+
for (const name of indexNames) {
|
|
33
|
+
builder.sql(`DROP INDEX ${wrapIdentifier(name)}`)
|
|
34
|
+
}
|
|
35
|
+
invalidateDatabaseMetadata()
|
|
18
36
|
}
|
|
19
37
|
|
|
20
38
|
public getSchemaUpdater(): SchemaUpdater {
|
|
39
|
+
const fields = this.getFields()
|
|
21
40
|
return updateModel(
|
|
22
41
|
updateEntity(this.data.entityName, ({ entity }) => {
|
|
23
|
-
const
|
|
42
|
+
const indexes = entity.indexes.filter(it => !deepEqual(it.fields, fields))
|
|
24
43
|
return {
|
|
25
44
|
...entity,
|
|
26
45
|
indexes,
|
|
@@ -30,9 +49,20 @@ export class RemoveIndexModificationHandler implements ModificationHandler<Remov
|
|
|
30
49
|
}
|
|
31
50
|
|
|
32
51
|
describe() {
|
|
33
|
-
const fields = this.
|
|
52
|
+
const fields = this.getFields()
|
|
34
53
|
return { message: `Remove index (${fields.join(', ')}) on entity ${this.data.entityName}` }
|
|
35
54
|
}
|
|
55
|
+
|
|
56
|
+
getFields() {
|
|
57
|
+
const entity = this.schema.model.entities[this.data.entityName]
|
|
58
|
+
const fields = 'indexName' in this.data
|
|
59
|
+
? entity.indexes.find(it => it.name === this.data.indexName)?.fields
|
|
60
|
+
: this.data.fields
|
|
61
|
+
if (!fields) {
|
|
62
|
+
throw new Error()
|
|
63
|
+
}
|
|
64
|
+
return fields
|
|
65
|
+
}
|
|
36
66
|
}
|
|
37
67
|
|
|
38
68
|
export const removeIndexModification = createModificationType({
|
|
@@ -41,28 +71,38 @@ export const removeIndexModification = createModificationType({
|
|
|
41
71
|
})
|
|
42
72
|
|
|
43
73
|
|
|
74
|
+
export type RemoveIndexModificationData =
|
|
75
|
+
| {
|
|
76
|
+
entityName: string
|
|
77
|
+
indexName: string
|
|
78
|
+
fields?: never
|
|
79
|
+
}
|
|
80
|
+
| {
|
|
81
|
+
entityName: string
|
|
82
|
+
fields: readonly string[]
|
|
83
|
+
indexName?: never
|
|
84
|
+
}
|
|
85
|
+
|
|
44
86
|
export class RemoveIndexDiffer implements Differ {
|
|
45
87
|
|
|
46
88
|
createDiff(originalSchema: Schema, updatedSchema: Schema) {
|
|
47
89
|
return Object.values(originalSchema.model.entities).flatMap(entity =>
|
|
48
|
-
|
|
90
|
+
entity.indexes
|
|
49
91
|
.filter(
|
|
50
|
-
it =>
|
|
51
|
-
updatedSchema.model.entities[entity.name]
|
|
52
|
-
(!
|
|
53
|
-
|
|
92
|
+
it => {
|
|
93
|
+
const updatedEntity = updatedSchema.model.entities[entity.name]
|
|
94
|
+
if (!updatedEntity) {
|
|
95
|
+
return false
|
|
96
|
+
}
|
|
97
|
+
return !updatedEntity.indexes.find(index => deepEqual(index.fields, it.fields))
|
|
98
|
+
},
|
|
54
99
|
)
|
|
55
100
|
.map(index =>
|
|
56
101
|
removeIndexModification.createModification({
|
|
57
102
|
entityName: entity.name,
|
|
58
|
-
|
|
103
|
+
fields: index.fields,
|
|
59
104
|
}),
|
|
60
105
|
),
|
|
61
106
|
)
|
|
62
107
|
}
|
|
63
108
|
}
|
|
64
|
-
|
|
65
|
-
export interface RemoveIndexModificationData {
|
|
66
|
-
entityName: string
|
|
67
|
-
indexName: string
|
|
68
|
-
}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { acceptFieldVisitor } from '@contember/schema-utils'
|
|
2
|
+
import { Model } from '@contember/schema'
|
|
3
|
+
|
|
4
|
+
export const getIndexColumns = ({ entity, fields, model }: { fields: readonly string[]; model: Model.Schema; entity: Model.Entity }) => {
|
|
5
|
+
return fields.map(fieldName => {
|
|
6
|
+
return acceptFieldVisitor(model, entity, fieldName, {
|
|
7
|
+
visitColumn: ({ column }) => {
|
|
8
|
+
return column.columnName
|
|
9
|
+
},
|
|
10
|
+
visitManyHasOne: ({ relation }) => {
|
|
11
|
+
return relation.joiningColumn.columnName
|
|
12
|
+
},
|
|
13
|
+
visitOneHasOneOwning: ({ relation }) => {
|
|
14
|
+
return relation.joiningColumn.columnName
|
|
15
|
+
},
|
|
16
|
+
visitOneHasMany: () => {
|
|
17
|
+
throw new Error(`Cannot create index on 1:m relation in ${entity.name}.${fieldName}`)
|
|
18
|
+
},
|
|
19
|
+
visitOneHasOneInverse: () => {
|
|
20
|
+
throw new Error(`Cannot create index on 1:1 inverse relation in ${entity.name}.${fieldName}`)
|
|
21
|
+
},
|
|
22
|
+
visitManyHasManyOwning: () => {
|
|
23
|
+
throw new Error(`Cannot create index on m:m relation in ${entity.name}.${fieldName}`)
|
|
24
|
+
},
|
|
25
|
+
visitManyHasManyInverse: () => {
|
|
26
|
+
throw new Error(`Cannot create index on m:m inverse relation in ${entity.name}.${fieldName}`)
|
|
27
|
+
},
|
|
28
|
+
})
|
|
29
|
+
})
|
|
30
|
+
}
|
|
@@ -1,33 +1,25 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import {
|
|
4
|
-
addField,
|
|
5
|
-
addTakenIndexName,
|
|
6
|
-
SchemaUpdater,
|
|
7
|
-
updateEntity,
|
|
8
|
-
updateModel,
|
|
9
|
-
updateSchema,
|
|
10
|
-
} from '../utils/schemaUpdateUtils'
|
|
3
|
+
import { addField, SchemaUpdater, updateEntity, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
|
|
11
4
|
import {
|
|
12
5
|
createModificationType,
|
|
13
6
|
Differ,
|
|
14
|
-
ModificationHandler,
|
|
7
|
+
ModificationHandler, ModificationHandlerCreateSqlOptions,
|
|
15
8
|
ModificationHandlerOptions,
|
|
16
9
|
} from '../ModificationHandler'
|
|
17
|
-
import { isInverseRelation, isOwningRelation
|
|
10
|
+
import { isInverseRelation, isOwningRelation } from '@contember/schema-utils'
|
|
18
11
|
import { updateRelations } from '../utils/diffUtils'
|
|
19
12
|
import { createJunctionTableSql } from '../utils/createJunctionTable'
|
|
20
|
-
import { wrapIdentifier } from '
|
|
13
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
21
14
|
import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
|
|
22
15
|
import { updateFieldNameModification } from '../fields'
|
|
23
|
-
import { SchemaWithMeta } from '../utils/schemaMeta'
|
|
24
16
|
|
|
25
17
|
export class ConvertOneHasManyToManyHasManyRelationModificationHandler implements ModificationHandler<ConvertOneHasManyToManyHasManyRelationModificationData> {
|
|
26
18
|
private subModification: ModificationHandler<any>
|
|
27
19
|
|
|
28
20
|
constructor(
|
|
29
21
|
private readonly data: ConvertOneHasManyToManyHasManyRelationModificationData,
|
|
30
|
-
private readonly schema:
|
|
22
|
+
private readonly schema: Schema,
|
|
31
23
|
private readonly options: ModificationHandlerOptions,
|
|
32
24
|
) {
|
|
33
25
|
this.subModification = updateFieldNameModification.createHandler(
|
|
@@ -41,12 +33,12 @@ export class ConvertOneHasManyToManyHasManyRelationModificationHandler implement
|
|
|
41
33
|
)
|
|
42
34
|
}
|
|
43
35
|
|
|
44
|
-
public createSql(builder: MigrationBuilder): void {
|
|
36
|
+
public createSql(builder: MigrationBuilder, { systemSchema }: ModificationHandlerCreateSqlOptions): void {
|
|
45
37
|
const targetEntity = this.schema.model.entities[this.data.owningSide.target]
|
|
46
38
|
const { relation: oldRelation } = this.getRelation()
|
|
47
39
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
48
40
|
|
|
49
|
-
createJunctionTableSql(builder,
|
|
41
|
+
createJunctionTableSql(builder, systemSchema, this.schema, entity, targetEntity, normalizeManyHasManyRelation(this.data.owningSide))
|
|
50
42
|
const joiningTable = this.data.owningSide.joiningTable
|
|
51
43
|
builder.sql(`
|
|
52
44
|
INSERT INTO ${wrapIdentifier(joiningTable.tableName)} (
|
|
@@ -66,7 +58,6 @@ export class ConvertOneHasManyToManyHasManyRelationModificationHandler implement
|
|
|
66
58
|
this.subModification.getSchemaUpdater(),
|
|
67
59
|
updateModel(updateEntity(entityName, addField(normalizeManyHasManyRelation(this.data.owningSide)))),
|
|
68
60
|
this.data.inverseSide ? updateModel(updateEntity(this.data.owningSide.target, addField(this.data.inverseSide))) : undefined,
|
|
69
|
-
addTakenIndexName(NamingHelper.createJunctionTablePrimaryConstraintName(this.data.owningSide.joiningTable.tableName)),
|
|
70
61
|
)
|
|
71
62
|
}
|
|
72
63
|
|
|
@@ -76,9 +67,6 @@ export class ConvertOneHasManyToManyHasManyRelationModificationHandler implement
|
|
|
76
67
|
}
|
|
77
68
|
}
|
|
78
69
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
70
|
private getRelation(): { entity: Model.Entity; relation: Model.ManyHasOneRelation } {
|
|
83
71
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
84
72
|
const relation = entity.fields[this.data.fieldName]
|
|
@@ -1,31 +1,25 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
|
-
import {
|
|
4
|
-
addTakenIndexName,
|
|
5
|
-
SchemaUpdater,
|
|
6
|
-
updateEntity,
|
|
7
|
-
updateField,
|
|
8
|
-
updateModel,
|
|
9
|
-
updateSchema,
|
|
10
|
-
} from '../utils/schemaUpdateUtils'
|
|
3
|
+
import { SchemaUpdater, updateEntity, updateField, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
|
|
11
4
|
import {
|
|
12
5
|
createModificationType,
|
|
13
6
|
Differ,
|
|
14
7
|
ModificationHandler,
|
|
8
|
+
ModificationHandlerCreateSqlOptions,
|
|
15
9
|
ModificationHandlerOptions,
|
|
16
10
|
} from '../ModificationHandler'
|
|
17
|
-
import { isOwningRelation
|
|
11
|
+
import { isOwningRelation } from '@contember/schema-utils'
|
|
18
12
|
import { updateRelations } from '../utils/diffUtils'
|
|
19
13
|
import { NoopModification } from '../NoopModification'
|
|
20
14
|
import { updateFieldNameModification } from '../fields'
|
|
21
|
-
import {
|
|
15
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
22
16
|
|
|
23
17
|
export class ConvertOneToManyRelationModificationHandler implements ModificationHandler<ConvertOneToManyRelationModificationData> {
|
|
24
18
|
private subModification: ModificationHandler<any>
|
|
25
19
|
|
|
26
20
|
constructor(
|
|
27
21
|
private readonly data: ConvertOneToManyRelationModificationData,
|
|
28
|
-
private readonly schema:
|
|
22
|
+
private readonly schema: Schema,
|
|
29
23
|
private readonly options: ModificationHandlerOptions,
|
|
30
24
|
) {
|
|
31
25
|
const { relation } = this.getRelation()
|
|
@@ -42,24 +36,30 @@ export class ConvertOneToManyRelationModificationHandler implements Modification
|
|
|
42
36
|
: new NoopModification()
|
|
43
37
|
}
|
|
44
38
|
|
|
45
|
-
public createSql(builder: MigrationBuilder): void {
|
|
39
|
+
public createSql(builder: MigrationBuilder, options: ModificationHandlerCreateSqlOptions): void {
|
|
46
40
|
const { entity, relation } = this.getRelation()
|
|
47
41
|
const columnName = relation.joiningColumn.columnName
|
|
48
|
-
|
|
49
|
-
const
|
|
50
|
-
|
|
51
|
-
|
|
42
|
+
|
|
43
|
+
const tableNameId = wrapIdentifier(entity.tableName)
|
|
44
|
+
const columnNameId = wrapIdentifier(columnName)
|
|
45
|
+
builder.sql(`CREATE INDEX ON ${tableNameId} (${columnNameId})`)
|
|
46
|
+
|
|
47
|
+
const uniqueConstraintNames = options.databaseMetadata.getUniqueConstraintNames({
|
|
48
|
+
tableName: entity.tableName,
|
|
49
|
+
columnNames: [relation.joiningColumn.columnName],
|
|
52
50
|
})
|
|
53
|
-
const
|
|
54
|
-
|
|
55
|
-
|
|
51
|
+
for (const name of uniqueConstraintNames) {
|
|
52
|
+
builder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)
|
|
53
|
+
}
|
|
54
|
+
options.invalidateDatabaseMetadata()
|
|
55
|
+
|
|
56
|
+
this.subModification.createSql(builder, options)
|
|
56
57
|
}
|
|
57
58
|
|
|
58
59
|
public getSchemaUpdater(): SchemaUpdater {
|
|
59
60
|
const { relation } = this.getRelation()
|
|
60
61
|
const { entityName, fieldName } = this.data
|
|
61
|
-
|
|
62
|
-
const field = entity.fields[fieldName] as Model.OneHasOneOwningRelation
|
|
62
|
+
|
|
63
63
|
return updateSchema(
|
|
64
64
|
updateModel(
|
|
65
65
|
updateEntity(
|
|
@@ -87,7 +87,6 @@ export class ConvertOneToManyRelationModificationHandler implements Modification
|
|
|
87
87
|
),
|
|
88
88
|
),
|
|
89
89
|
) : undefined,
|
|
90
|
-
addTakenIndexName(NamingHelper.createForeignKeyIndexName(entity.tableName, field.joiningColumn.columnName)),
|
|
91
90
|
)
|
|
92
91
|
}
|
|
93
92
|
|
|
@@ -1,24 +1,11 @@
|
|
|
1
1
|
import { Model, Schema } from '@contember/schema'
|
|
2
|
-
import {
|
|
3
|
-
acceptRelationTypeVisitor,
|
|
4
|
-
isInverseRelation,
|
|
5
|
-
isOwningRelation,
|
|
6
|
-
isRelation,
|
|
7
|
-
NamingHelper,
|
|
8
|
-
} from '@contember/schema-utils'
|
|
2
|
+
import { acceptRelationTypeVisitor, isInverseRelation, isOwningRelation, isRelation } from '@contember/schema-utils'
|
|
9
3
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
10
|
-
import {
|
|
11
|
-
addField,
|
|
12
|
-
addTakenIndexName,
|
|
13
|
-
SchemaUpdater,
|
|
14
|
-
updateEntity,
|
|
15
|
-
updateModel,
|
|
16
|
-
updateSchema,
|
|
17
|
-
} from '../utils/schemaUpdateUtils'
|
|
4
|
+
import { addField, SchemaUpdater, updateEntity, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
|
|
18
5
|
import {
|
|
19
6
|
createModificationType,
|
|
20
7
|
Differ,
|
|
21
|
-
ModificationHandler,
|
|
8
|
+
ModificationHandler, ModificationHandlerCreateSqlOptions,
|
|
22
9
|
ModificationHandlerOptions,
|
|
23
10
|
} from '../ModificationHandler'
|
|
24
11
|
import { isIt } from '../../utils/isIt'
|
|
@@ -26,18 +13,23 @@ import { createFields } from '../utils/diffUtils'
|
|
|
26
13
|
import { getPrimaryColumnType } from '../utils/getPrimaryColumnType'
|
|
27
14
|
import { createJunctionTableSql } from '../utils/createJunctionTable'
|
|
28
15
|
import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
|
|
29
|
-
import {
|
|
16
|
+
import { addForeignKeyConstraint } from './helpers'
|
|
17
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
30
18
|
|
|
31
19
|
|
|
32
20
|
export class CreateRelationModificationHandler implements ModificationHandler<CreateRelationModificationData> {
|
|
33
21
|
|
|
34
22
|
constructor(
|
|
35
23
|
private readonly data: CreateRelationModificationData,
|
|
36
|
-
private readonly schema:
|
|
24
|
+
private readonly schema: Schema,
|
|
37
25
|
private readonly options: ModificationHandlerOptions,
|
|
38
26
|
) {}
|
|
39
27
|
|
|
40
|
-
public createSql(builder: MigrationBuilder
|
|
28
|
+
public createSql(builder: MigrationBuilder, {
|
|
29
|
+
databaseMetadata,
|
|
30
|
+
systemSchema,
|
|
31
|
+
invalidateDatabaseMetadata,
|
|
32
|
+
}: ModificationHandlerCreateSqlOptions): void {
|
|
41
33
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
42
34
|
if (entity.view) {
|
|
43
35
|
return
|
|
@@ -50,48 +42,34 @@ export class CreateRelationModificationHandler implements ModificationHandler<Cr
|
|
|
50
42
|
notNull: !relation.nullable,
|
|
51
43
|
},
|
|
52
44
|
})
|
|
53
|
-
|
|
54
|
-
entity.tableName,
|
|
55
|
-
relation.joiningColumn.columnName,
|
|
56
|
-
targetEntity.tableName,
|
|
57
|
-
targetEntity.primaryColumn,
|
|
58
|
-
)
|
|
59
|
-
builder.addConstraint(entity.tableName, fkName, {
|
|
60
|
-
foreignKeys: {
|
|
61
|
-
columns: relation.joiningColumn.columnName,
|
|
62
|
-
references: `"${targetEntity.tableName}"("${targetEntity.primaryColumn}")`,
|
|
63
|
-
onDelete: 'NO ACTION',
|
|
64
|
-
},
|
|
65
|
-
deferrable: true,
|
|
66
|
-
deferred: false,
|
|
67
|
-
})
|
|
45
|
+
addForeignKeyConstraint({ builder, entity, targetEntity, relation, databaseMetadata, invalidateDatabaseMetadata })
|
|
68
46
|
}
|
|
69
47
|
acceptRelationTypeVisitor(this.schema.model, entity, this.getNormalizedOwningSide(), {
|
|
70
48
|
visitManyHasOne: ({ relation }) => {
|
|
71
49
|
createOwningSide(relation)
|
|
72
50
|
const columnName = relation.joiningColumn.columnName
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
builder.
|
|
76
|
-
|
|
77
|
-
})
|
|
51
|
+
const tableNameId = wrapIdentifier(entity.tableName)
|
|
52
|
+
const columnNameId = wrapIdentifier(columnName)
|
|
53
|
+
builder.sql(`CREATE INDEX ON ${tableNameId} (${columnNameId})`)
|
|
54
|
+
invalidateDatabaseMetadata()
|
|
78
55
|
},
|
|
79
56
|
visitOneHasMany: () => {},
|
|
80
57
|
visitOneHasOneOwning: ({ relation }) => {
|
|
81
58
|
createOwningSide(relation)
|
|
82
|
-
const
|
|
83
|
-
|
|
59
|
+
const tableNameId = wrapIdentifier(entity.tableName)
|
|
60
|
+
const columnNameId = wrapIdentifier(relation.joiningColumn.columnName)
|
|
61
|
+
builder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameId})`)
|
|
62
|
+
invalidateDatabaseMetadata()
|
|
84
63
|
},
|
|
85
64
|
visitOneHasOneInverse: () => {},
|
|
86
65
|
visitManyHasManyOwning: ({ relation }) => {
|
|
87
|
-
createJunctionTableSql(builder,
|
|
66
|
+
createJunctionTableSql(builder, systemSchema, this.schema, entity, targetEntity, relation)
|
|
88
67
|
},
|
|
89
68
|
visitManyHasManyInverse: () => {},
|
|
90
69
|
})
|
|
91
70
|
}
|
|
92
71
|
|
|
93
72
|
public getSchemaUpdater(): SchemaUpdater {
|
|
94
|
-
const entity = this.schema.model.entities[this.data.entityName]
|
|
95
73
|
return updateSchema(
|
|
96
74
|
updateModel(
|
|
97
75
|
updateEntity(this.data.entityName, addField(this.getNormalizedOwningSide())),
|
|
@@ -99,12 +77,6 @@ export class CreateRelationModificationHandler implements ModificationHandler<Cr
|
|
|
99
77
|
? updateEntity(this.data.owningSide.target, addField(this.data.inverseSide))
|
|
100
78
|
: undefined,
|
|
101
79
|
),
|
|
102
|
-
this.data.owningSide.type === Model.RelationType.ManyHasOne
|
|
103
|
-
? addTakenIndexName(NamingHelper.createForeignKeyIndexName(entity.tableName, this.data.owningSide.joiningColumn.columnName))
|
|
104
|
-
: undefined,
|
|
105
|
-
this.data.owningSide.type === Model.RelationType.ManyHasMany && isOwningRelation(this.data.owningSide)
|
|
106
|
-
? addTakenIndexName(NamingHelper.createJunctionTablePrimaryConstraintName(this.data.owningSide.joiningTable.tableName))
|
|
107
|
-
: undefined,
|
|
108
80
|
)
|
|
109
81
|
}
|
|
110
82
|
|