@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
|
@@ -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,19 +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 { resolveIndexName, SchemaWithMeta } from '../utils/schemaMeta'
|
|
30
16
|
import { addForeignKeyConstraint } from './helpers'
|
|
17
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
31
18
|
|
|
32
19
|
|
|
33
20
|
export class CreateRelationModificationHandler implements ModificationHandler<CreateRelationModificationData> {
|
|
34
21
|
|
|
35
22
|
constructor(
|
|
36
23
|
private readonly data: CreateRelationModificationData,
|
|
37
|
-
private readonly schema:
|
|
24
|
+
private readonly schema: Schema,
|
|
38
25
|
private readonly options: ModificationHandlerOptions,
|
|
39
26
|
) {}
|
|
40
27
|
|
|
41
|
-
public createSql(builder: MigrationBuilder
|
|
28
|
+
public createSql(builder: MigrationBuilder, {
|
|
29
|
+
databaseMetadata,
|
|
30
|
+
systemSchema,
|
|
31
|
+
invalidateDatabaseMetadata,
|
|
32
|
+
}: ModificationHandlerCreateSqlOptions): void {
|
|
42
33
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
43
34
|
if (entity.view) {
|
|
44
35
|
return
|
|
@@ -51,34 +42,34 @@ export class CreateRelationModificationHandler implements ModificationHandler<Cr
|
|
|
51
42
|
notNull: !relation.nullable,
|
|
52
43
|
},
|
|
53
44
|
})
|
|
54
|
-
addForeignKeyConstraint({ builder, entity, targetEntity, relation })
|
|
45
|
+
addForeignKeyConstraint({ builder, entity, targetEntity, relation, databaseMetadata, invalidateDatabaseMetadata })
|
|
55
46
|
}
|
|
56
47
|
acceptRelationTypeVisitor(this.schema.model, entity, this.getNormalizedOwningSide(), {
|
|
57
48
|
visitManyHasOne: ({ relation }) => {
|
|
58
49
|
createOwningSide(relation)
|
|
59
50
|
const columnName = relation.joiningColumn.columnName
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
builder.
|
|
63
|
-
|
|
64
|
-
})
|
|
51
|
+
const tableNameId = wrapIdentifier(entity.tableName)
|
|
52
|
+
const columnNameId = wrapIdentifier(columnName)
|
|
53
|
+
builder.sql(`CREATE INDEX ON ${tableNameId} (${columnNameId})`)
|
|
54
|
+
invalidateDatabaseMetadata()
|
|
65
55
|
},
|
|
66
56
|
visitOneHasMany: () => {},
|
|
67
57
|
visitOneHasOneOwning: ({ relation }) => {
|
|
68
58
|
createOwningSide(relation)
|
|
69
|
-
const
|
|
70
|
-
|
|
59
|
+
const tableNameId = wrapIdentifier(entity.tableName)
|
|
60
|
+
const columnNameId = wrapIdentifier(relation.joiningColumn.columnName)
|
|
61
|
+
builder.sql(`ALTER TABLE ${tableNameId} ADD UNIQUE (${columnNameId})`)
|
|
62
|
+
invalidateDatabaseMetadata()
|
|
71
63
|
},
|
|
72
64
|
visitOneHasOneInverse: () => {},
|
|
73
65
|
visitManyHasManyOwning: ({ relation }) => {
|
|
74
|
-
createJunctionTableSql(builder,
|
|
66
|
+
createJunctionTableSql(builder, systemSchema, this.schema, entity, targetEntity, relation)
|
|
75
67
|
},
|
|
76
68
|
visitManyHasManyInverse: () => {},
|
|
77
69
|
})
|
|
78
70
|
}
|
|
79
71
|
|
|
80
72
|
public getSchemaUpdater(): SchemaUpdater {
|
|
81
|
-
const entity = this.schema.model.entities[this.data.entityName]
|
|
82
73
|
return updateSchema(
|
|
83
74
|
updateModel(
|
|
84
75
|
updateEntity(this.data.entityName, addField(this.getNormalizedOwningSide())),
|
|
@@ -86,12 +77,6 @@ export class CreateRelationModificationHandler implements ModificationHandler<Cr
|
|
|
86
77
|
? updateEntity(this.data.owningSide.target, addField(this.data.inverseSide))
|
|
87
78
|
: undefined,
|
|
88
79
|
),
|
|
89
|
-
this.data.owningSide.type === Model.RelationType.ManyHasOne
|
|
90
|
-
? addTakenIndexName(NamingHelper.createForeignKeyIndexName(entity.tableName, this.data.owningSide.joiningColumn.columnName))
|
|
91
|
-
: undefined,
|
|
92
|
-
this.data.owningSide.type === Model.RelationType.ManyHasMany && isOwningRelation(this.data.owningSide)
|
|
93
|
-
? addTakenIndexName(NamingHelper.createJunctionTablePrimaryConstraintName(this.data.owningSide.joiningTable.tableName))
|
|
94
|
-
: undefined,
|
|
95
80
|
)
|
|
96
81
|
}
|
|
97
82
|
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
createModificationType,
|
|
6
6
|
Differ,
|
|
7
7
|
ModificationHandler,
|
|
8
|
-
|
|
8
|
+
ModificationHandlerCreateSqlOptions,
|
|
9
9
|
} from '../ModificationHandler'
|
|
10
10
|
import {
|
|
11
11
|
createEventTrigger,
|
|
@@ -22,11 +22,10 @@ export class ToggleJunctionEventLogModificationHandler implements ModificationHa
|
|
|
22
22
|
constructor(
|
|
23
23
|
private readonly data: ToggleJunctionEventLogModificationData,
|
|
24
24
|
private readonly schema: Schema,
|
|
25
|
-
private readonly options: ModificationHandlerOptions,
|
|
26
25
|
) {
|
|
27
26
|
}
|
|
28
27
|
|
|
29
|
-
public createSql(builder: MigrationBuilder): void {
|
|
28
|
+
public createSql(builder: MigrationBuilder, { systemSchema }: ModificationHandlerCreateSqlOptions): void {
|
|
30
29
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
31
30
|
const relation = entity.fields[this.data.fieldName]
|
|
32
31
|
if (!isRelation(relation) || relation.type !== Model.RelationType.ManyHasMany || !isOwningRelation(relation)) {
|
|
@@ -38,8 +37,8 @@ export class ToggleJunctionEventLogModificationHandler implements ModificationHa
|
|
|
38
37
|
relation.joiningTable.joiningColumn.columnName,
|
|
39
38
|
relation.joiningTable.inverseJoiningColumn.columnName,
|
|
40
39
|
]
|
|
41
|
-
createEventTrigger(builder,
|
|
42
|
-
createEventTrxTrigger(builder,
|
|
40
|
+
createEventTrigger(builder, systemSchema, tableName, primaryColumns)
|
|
41
|
+
createEventTrxTrigger(builder, systemSchema, tableName)
|
|
43
42
|
} else {
|
|
44
43
|
dropEventTrigger(builder, tableName)
|
|
45
44
|
dropEventTrxTrigger(builder, tableName)
|
|
@@ -1,26 +1,34 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
2
|
import { Model, Schema } from '@contember/schema'
|
|
3
3
|
import { SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
createModificationType,
|
|
6
|
+
Differ,
|
|
7
|
+
ModificationHandler,
|
|
8
|
+
ModificationHandlerCreateSqlOptions,
|
|
9
|
+
} from '../ModificationHandler'
|
|
5
10
|
import { isIt } from '../../utils/isIt'
|
|
6
11
|
import { updateRelations } from '../utils/diffUtils'
|
|
7
12
|
import { acceptRelationTypeVisitor } from '@contember/schema-utils'
|
|
8
13
|
import { addForeignKeyConstraint } from './helpers'
|
|
9
14
|
|
|
10
15
|
export class UpdateRelationOnDeleteModificationHandler implements ModificationHandler<UpdateRelationOnDeleteModificationData> {
|
|
11
|
-
constructor(
|
|
16
|
+
constructor(
|
|
17
|
+
private readonly data: UpdateRelationOnDeleteModificationData,
|
|
18
|
+
private readonly schema: Schema,
|
|
19
|
+
) {}
|
|
12
20
|
|
|
13
|
-
public createSql(builder: MigrationBuilder): void {
|
|
21
|
+
public createSql(builder: MigrationBuilder, { databaseMetadata, invalidateDatabaseMetadata }: ModificationHandlerCreateSqlOptions): void {
|
|
14
22
|
const entity = this.schema.model.entities[this.data.entityName]
|
|
15
23
|
if (entity.view) {
|
|
16
24
|
return
|
|
17
25
|
}
|
|
18
26
|
acceptRelationTypeVisitor(this.schema.model, entity, this.data.fieldName, {
|
|
19
27
|
visitManyHasOne: ({ entity, relation, targetEntity }) => {
|
|
20
|
-
addForeignKeyConstraint({ builder, entity, targetEntity, relation, recreate: true })
|
|
28
|
+
addForeignKeyConstraint({ builder, entity, targetEntity, relation, recreate: true, databaseMetadata, invalidateDatabaseMetadata })
|
|
21
29
|
},
|
|
22
30
|
visitOneHasOneOwning: ({ entity, relation, targetEntity }) => {
|
|
23
|
-
addForeignKeyConstraint({ builder, entity, targetEntity, relation, recreate: true })
|
|
31
|
+
addForeignKeyConstraint({ builder, entity, targetEntity, relation, recreate: true, databaseMetadata, invalidateDatabaseMetadata })
|
|
24
32
|
},
|
|
25
33
|
visitOneHasMany: () => {},
|
|
26
34
|
visitOneHasOneInverse: () => {},
|
|
@@ -1,34 +1,39 @@
|
|
|
1
1
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
2
|
-
import { NamingHelper } from '@contember/schema-utils'
|
|
3
2
|
import { Model } from '@contember/schema'
|
|
3
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
4
|
+
import { SchemaDatabaseMetadata } from '@contember/schema-utils'
|
|
4
5
|
|
|
5
|
-
export const addForeignKeyConstraint = ({ builder, entity, relation, targetEntity, recreate = false }: {
|
|
6
|
+
export const addForeignKeyConstraint = ({ builder, entity, relation, targetEntity, recreate = false, databaseMetadata, invalidateDatabaseMetadata }: {
|
|
6
7
|
recreate?: boolean
|
|
7
8
|
builder: MigrationBuilder
|
|
8
9
|
entity: Model.Entity
|
|
9
10
|
targetEntity: Model.Entity
|
|
10
11
|
relation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation
|
|
12
|
+
databaseMetadata: SchemaDatabaseMetadata
|
|
13
|
+
invalidateDatabaseMetadata: () => void
|
|
11
14
|
}) => {
|
|
12
|
-
const fkName = NamingHelper.createForeignKeyName(
|
|
13
|
-
entity.tableName,
|
|
14
|
-
relation.joiningColumn.columnName,
|
|
15
|
-
targetEntity.tableName,
|
|
16
|
-
targetEntity.primaryColumn,
|
|
17
|
-
)
|
|
18
15
|
if (recreate) {
|
|
19
|
-
|
|
16
|
+
const fkNames = databaseMetadata.getForeignKeyConstraintNames(
|
|
17
|
+
{
|
|
18
|
+
fromTable: entity.tableName,
|
|
19
|
+
fromColumn: relation.joiningColumn.columnName,
|
|
20
|
+
toTable: targetEntity.tableName,
|
|
21
|
+
toColumn: targetEntity.primaryColumn,
|
|
22
|
+
},
|
|
23
|
+
)
|
|
24
|
+
for (const name of fkNames) {
|
|
25
|
+
builder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)
|
|
26
|
+
}
|
|
20
27
|
}
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
deferred: false,
|
|
33
|
-
})
|
|
28
|
+
|
|
29
|
+
const onDelete = ({
|
|
30
|
+
[Model.OnDelete.setNull]: 'SET NULL',
|
|
31
|
+
[Model.OnDelete.cascade]: 'CASCADE',
|
|
32
|
+
[Model.OnDelete.restrict]: 'NO ACTION',
|
|
33
|
+
} as const)[relation.joiningColumn.onDelete]
|
|
34
|
+
builder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)}
|
|
35
|
+
ADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)})
|
|
36
|
+
REFERENCES ${wrapIdentifier(targetEntity.tableName)}(${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE`)
|
|
37
|
+
|
|
38
|
+
invalidateDatabaseMetadata()
|
|
34
39
|
}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { Schema } from '@contember/schema'
|
|
2
|
+
import { SchemaUpdater, updateEveryEntity, updateModel } from '../utils/schemaUpdateUtils'
|
|
3
|
+
import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
|
|
4
|
+
|
|
5
|
+
export class RemoveIndexNamesModificationHandler implements ModificationHandler<RemoveIndexNamesModificationData> {
|
|
6
|
+
constructor() {}
|
|
7
|
+
|
|
8
|
+
public createSql(): void {
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
public getSchemaUpdater(): SchemaUpdater {
|
|
12
|
+
return updateModel(
|
|
13
|
+
updateEveryEntity(({ entity }) => {
|
|
14
|
+
return {
|
|
15
|
+
...entity,
|
|
16
|
+
indexes: entity.indexes.map(({ name, ...other }) => other),
|
|
17
|
+
unique: entity.unique.map(({ name, ...other }) => other),
|
|
18
|
+
}
|
|
19
|
+
}),
|
|
20
|
+
)
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
describe() {
|
|
24
|
+
return { message: `Schema upgrade: remove names of indexes and unique constraints` }
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export const removeIndexNamesModification = createModificationType({
|
|
29
|
+
id: 'removeIndexNames',
|
|
30
|
+
handler: RemoveIndexNamesModificationHandler,
|
|
31
|
+
})
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
export type RemoveIndexNamesModificationData = {}
|
|
35
|
+
|
|
36
|
+
export class RemoveIndexNamesDiffer implements Differ {
|
|
37
|
+
createDiff(originalSchema: Schema) {
|
|
38
|
+
const hasNames = !!Object.values(originalSchema.model.entities).find(it => {
|
|
39
|
+
return it.indexes.find(it => !!it.name) || it.unique.find(it => !!it.name)
|
|
40
|
+
})
|
|
41
|
+
if (hasNames) {
|
|
42
|
+
return [removeIndexNamesModification.createModification({})]
|
|
43
|
+
}
|
|
44
|
+
return []
|
|
45
|
+
}
|
|
46
|
+
}
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import { createEventTrigger, createEventTrxTrigger } from './sqlUpdateUtils'
|
|
2
2
|
import { MigrationBuilder } from '@contember/database-migrations'
|
|
3
|
-
import { Model } from '@contember/schema'
|
|
3
|
+
import { Model, Schema } from '@contember/schema'
|
|
4
4
|
import { getPrimaryColumnType } from './getPrimaryColumnType'
|
|
5
|
-
import {
|
|
5
|
+
import { wrapIdentifier } from '../../utils/dbHelpers'
|
|
6
6
|
|
|
7
7
|
export const createJunctionTableSql = (
|
|
8
8
|
builder: MigrationBuilder,
|
|
9
9
|
systemSchema: string,
|
|
10
|
-
schema:
|
|
10
|
+
schema: Schema,
|
|
11
11
|
entity: Model.Entity,
|
|
12
12
|
targetEntity: Model.Entity,
|
|
13
13
|
relation: Model.ManyHasManyOwningRelation,
|
|
@@ -33,11 +33,11 @@ export const createJunctionTableSql = (
|
|
|
33
33
|
},
|
|
34
34
|
},
|
|
35
35
|
)
|
|
36
|
-
|
|
37
|
-
const
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
36
|
+
|
|
37
|
+
const tableNameId = wrapIdentifier(relation.joiningTable.tableName)
|
|
38
|
+
const columnNameId = primaryColumns.map(wrapIdentifier)
|
|
39
|
+
builder.sql(`ALTER TABLE ${tableNameId} ADD PRIMARY KEY (${columnNameId.join(', ')})`)
|
|
40
|
+
|
|
41
41
|
if (relation.joiningTable.eventLog.enabled) {
|
|
42
42
|
createEventTrigger(builder, systemSchema, relation.joiningTable.tableName, primaryColumns)
|
|
43
43
|
createEventTrxTrigger(builder, systemSchema, relation.joiningTable.tableName)
|
|
@@ -3,10 +3,9 @@ import { SchemaUpdateError } from '../exceptions'
|
|
|
3
3
|
import { isDefined } from '../../utils/isDefined'
|
|
4
4
|
import { isInverseRelation, isOwningRelation, isRelation, PredicateDefinitionProcessor } from '@contember/schema-utils'
|
|
5
5
|
import { VERSION_ACL_PATCH, VERSION_REMOVE_RELATION_INVERSE_SIDE } from '../ModificationVersions'
|
|
6
|
-
import { resolveIndexName, SchemaWithMeta } from './schemaMeta'
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
export type SchemaUpdater = (args: { schema:
|
|
8
|
+
export type SchemaUpdater = (args: { schema: Schema }) => Schema
|
|
10
9
|
export type ModelUpdater = (args: { schema: Schema; model: Model.Schema }) => Model.Schema
|
|
11
10
|
export type EntityUpdater = (args: { schema: Schema; model: Model.Schema; entity: Model.Entity }) => Model.Entity
|
|
12
11
|
export type FieldUpdater<In extends Model.AnyField, Out extends Model.AnyField> = (args: {
|
|
@@ -271,13 +270,13 @@ export const removeField = (entityName: string, fieldName: string, version: numb
|
|
|
271
270
|
updateModel(
|
|
272
271
|
updateEntity(entity.name, ({ entity }) => {
|
|
273
272
|
const { [field.name]: removed, ...fields } = entity.fields
|
|
274
|
-
const indexes =
|
|
275
|
-
const unique =
|
|
273
|
+
const indexes = entity.indexes.filter(index => !index.fields.includes(field.name))
|
|
274
|
+
const unique = entity.unique.filter(index => !index.fields.includes(field.name))
|
|
276
275
|
return {
|
|
277
276
|
...entity,
|
|
278
277
|
fields,
|
|
279
|
-
indexes
|
|
280
|
-
unique
|
|
278
|
+
indexes,
|
|
279
|
+
unique,
|
|
281
280
|
}
|
|
282
281
|
}),
|
|
283
282
|
isRelation(field) && isInverseRelation(field)
|
|
@@ -290,14 +289,3 @@ export const removeField = (entityName: string, fieldName: string, version: numb
|
|
|
290
289
|
)({ schema })
|
|
291
290
|
}
|
|
292
291
|
}
|
|
293
|
-
|
|
294
|
-
export const addTakenIndexName = (indexName: string): SchemaUpdater => ({ schema }) => ({
|
|
295
|
-
...schema,
|
|
296
|
-
meta: {
|
|
297
|
-
...schema.meta,
|
|
298
|
-
takenIndexNames: {
|
|
299
|
-
...schema.meta?.takenIndexNames,
|
|
300
|
-
[resolveIndexName(schema, indexName)]: true,
|
|
301
|
-
},
|
|
302
|
-
},
|
|
303
|
-
})
|
package/src/tsconfig.json
CHANGED
|
@@ -2,4 +2,10 @@ import { Model } from '@contember/schema'
|
|
|
2
2
|
|
|
3
3
|
type SomePartial<E, K extends keyof E> = Omit<E, K> & Partial<Pick<E, K>>
|
|
4
4
|
|
|
5
|
-
export type
|
|
5
|
+
export type PossibleEntityShapeInMigrations =
|
|
6
|
+
& Omit<Model.Entity, 'eventLog' | 'indexes' | 'unique'>
|
|
7
|
+
& {
|
|
8
|
+
eventLog?: Model.Entity['eventLog']
|
|
9
|
+
indexes?: (readonly Model.Index[]) | Readonly<Record<string, Model.Index>>
|
|
10
|
+
unique: (readonly Model.UniqueConstraint[]) | Readonly<Record<string, Model.UniqueConstraint>>
|
|
11
|
+
}
|
|
@@ -67,7 +67,7 @@ testMigrations('convert one has many to many has many', {
|
|
|
67
67
|
"category_id" uuid NOT NULL REFERENCES "category"("id") ON DELETE CASCADE
|
|
68
68
|
);
|
|
69
69
|
ALTER TABLE "article_categories"
|
|
70
|
-
ADD
|
|
70
|
+
ADD PRIMARY KEY ("article_id", "category_id");
|
|
71
71
|
|
|
72
72
|
CREATE TRIGGER "log_event" AFTER INSERT OR UPDATE OR DELETE
|
|
73
73
|
ON "article_categories" FOR EACH ROW
|
|
@@ -24,8 +24,8 @@ testMigrations('convert one has one to many has one relation without inverse sid
|
|
|
24
24
|
},
|
|
25
25
|
],
|
|
26
26
|
sql: SQL`
|
|
27
|
-
CREATE INDEX
|
|
28
|
-
ALTER TABLE "post" DROP CONSTRAINT "
|
|
27
|
+
CREATE INDEX ON "post" ("image_id");
|
|
28
|
+
ALTER TABLE "post" DROP CONSTRAINT "uniq_post_image_id";
|
|
29
29
|
`,
|
|
30
30
|
})
|
|
31
31
|
|
|
@@ -52,8 +52,8 @@ testMigrations('convert one has one to many has one relation with inverse side',
|
|
|
52
52
|
},
|
|
53
53
|
],
|
|
54
54
|
sql: SQL`
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
55
|
+
CREATE INDEX ON "post" ("image_id");
|
|
56
|
+
ALTER TABLE "post" DROP CONSTRAINT "uniq_post_image_id";
|
|
57
|
+
`,
|
|
58
58
|
})
|
|
59
59
|
|
|
@@ -23,10 +23,10 @@ testMigrations('create index', {
|
|
|
23
23
|
{
|
|
24
24
|
modification: 'createIndex',
|
|
25
25
|
entityName: 'Article',
|
|
26
|
-
index: {
|
|
26
|
+
index: { fields: ['title'] },
|
|
27
27
|
},
|
|
28
28
|
],
|
|
29
|
-
sql: SQL`CREATE INDEX
|
|
29
|
+
sql: SQL`CREATE INDEX ON "article" ("title");`,
|
|
30
30
|
})
|
|
31
31
|
|
|
32
32
|
|
|
@@ -37,8 +37,8 @@ testMigrations('drop index', {
|
|
|
37
37
|
{
|
|
38
38
|
modification: 'removeIndex',
|
|
39
39
|
entityName: 'Article',
|
|
40
|
-
|
|
40
|
+
fields: ['title'],
|
|
41
41
|
},
|
|
42
42
|
],
|
|
43
|
-
sql: SQL`DROP INDEX "
|
|
43
|
+
sql: SQL`DROP INDEX "idx_article_title";`,
|
|
44
44
|
})
|
|
@@ -31,11 +31,11 @@ testMigrations('create a table (no relations, unique on column)', {
|
|
|
31
31
|
primary: 'id',
|
|
32
32
|
primaryColumn: 'id',
|
|
33
33
|
tableName: 'author',
|
|
34
|
-
unique:
|
|
34
|
+
unique: [],
|
|
35
35
|
eventLog: {
|
|
36
36
|
enabled: true,
|
|
37
37
|
},
|
|
38
|
-
indexes:
|
|
38
|
+
indexes: [],
|
|
39
39
|
},
|
|
40
40
|
},
|
|
41
41
|
{
|
|
@@ -74,10 +74,7 @@ testMigrations('create a table (no relations, unique on column)', {
|
|
|
74
74
|
{
|
|
75
75
|
modification: 'createUniqueConstraint',
|
|
76
76
|
entityName: 'Author',
|
|
77
|
-
unique: {
|
|
78
|
-
name: 'unique_Author_email_a3e587',
|
|
79
|
-
fields: ['email'],
|
|
80
|
-
},
|
|
77
|
+
unique: { fields: ['email'] },
|
|
81
78
|
},
|
|
82
79
|
],
|
|
83
80
|
sql: SQL`CREATE TABLE "author" (
|
|
@@ -101,7 +98,7 @@ testMigrations('create a table (no relations, unique on column)', {
|
|
|
101
98
|
ALTER TABLE "author"
|
|
102
99
|
ADD "registered_at" date;
|
|
103
100
|
ALTER TABLE "author"
|
|
104
|
-
ADD
|
|
101
|
+
ADD UNIQUE ("email");`,
|
|
105
102
|
})
|
|
106
103
|
|
|
107
104
|
namespace ViewEntityUpdatedSchema {
|
|
@@ -137,12 +134,12 @@ testMigrations('create a view', {
|
|
|
137
134
|
primary: 'id',
|
|
138
135
|
primaryColumn: 'id',
|
|
139
136
|
tableName: 'author',
|
|
140
|
-
unique:
|
|
137
|
+
unique: [],
|
|
141
138
|
view: { sql: "SELECT null as id, 'John' AS name" },
|
|
142
139
|
eventLog: {
|
|
143
140
|
enabled: true,
|
|
144
141
|
},
|
|
145
|
-
indexes:
|
|
142
|
+
indexes: [],
|
|
146
143
|
},
|
|
147
144
|
},
|
|
148
145
|
],
|
|
@@ -30,11 +30,11 @@ testMigrations('create many has many relation (post with categories)', {
|
|
|
30
30
|
primary: 'id',
|
|
31
31
|
primaryColumn: 'id',
|
|
32
32
|
tableName: 'category',
|
|
33
|
-
unique:
|
|
33
|
+
unique: [],
|
|
34
34
|
eventLog: {
|
|
35
35
|
enabled: true,
|
|
36
36
|
},
|
|
37
|
-
indexes:
|
|
37
|
+
indexes: [],
|
|
38
38
|
},
|
|
39
39
|
},
|
|
40
40
|
{
|
|
@@ -93,7 +93,7 @@ testMigrations('create many has many relation (post with categories)', {
|
|
|
93
93
|
"category_id" uuid NOT NULL REFERENCES "category"("id") ON DELETE CASCADE
|
|
94
94
|
);
|
|
95
95
|
ALTER TABLE "post_categories"
|
|
96
|
-
ADD
|
|
96
|
+
ADD PRIMARY KEY ("post_id", "category_id");
|
|
97
97
|
CREATE TRIGGER "log_event"
|
|
98
98
|
AFTER INSERT OR UPDATE OR DELETE
|
|
99
99
|
ON "post_categories"
|
|
@@ -32,11 +32,11 @@ testMigrations('create many has one relation (post with author)', {
|
|
|
32
32
|
primary: 'id',
|
|
33
33
|
primaryColumn: 'id',
|
|
34
34
|
tableName: 'post',
|
|
35
|
-
unique:
|
|
35
|
+
unique: [],
|
|
36
36
|
eventLog: {
|
|
37
37
|
enabled: true,
|
|
38
38
|
},
|
|
39
|
-
indexes:
|
|
39
|
+
indexes: [],
|
|
40
40
|
},
|
|
41
41
|
},
|
|
42
42
|
{
|
|
@@ -84,6 +84,6 @@ testMigrations('create many has one relation (post with author)', {
|
|
|
84
84
|
ALTER TABLE "post"
|
|
85
85
|
ADD "author_id" uuid;
|
|
86
86
|
ALTER TABLE "post"
|
|
87
|
-
ADD
|
|
88
|
-
CREATE INDEX
|
|
87
|
+
ADD FOREIGN KEY ("author_id") REFERENCES "author"("id") ON DELETE CASCADE DEFERRABLE INITIALLY IMMEDIATE;
|
|
88
|
+
CREATE INDEX ON "post" ("author_id");`,
|
|
89
89
|
})
|