@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.
Files changed (214) hide show
  1. package/dist/src/MigrationDescriber.d.ts +4 -4
  2. package/dist/src/MigrationDescriber.d.ts.map +1 -1
  3. package/dist/src/MigrationDescriber.js +8 -7
  4. package/dist/src/MigrationDescriber.js.map +1 -1
  5. package/dist/src/SchemaDiffer.js +3 -2
  6. package/dist/src/SchemaDiffer.js.map +1 -1
  7. package/dist/src/SchemaMigrator.d.ts +1 -2
  8. package/dist/src/SchemaMigrator.d.ts.map +1 -1
  9. package/dist/src/SchemaMigrator.js +0 -1
  10. package/dist/src/SchemaMigrator.js.map +1 -1
  11. package/dist/src/modifications/ModificationHandler.d.ts +9 -5
  12. package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
  13. package/dist/src/modifications/ModificationHandler.js.map +1 -1
  14. package/dist/src/modifications/ModificationHandlerFactory.d.ts +2 -2
  15. package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
  16. package/dist/src/modifications/ModificationHandlerFactory.js +2 -0
  17. package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
  18. package/dist/src/modifications/ModificationVersions.d.ts +4 -3
  19. package/dist/src/modifications/ModificationVersions.d.ts.map +1 -1
  20. package/dist/src/modifications/ModificationVersions.js +5 -4
  21. package/dist/src/modifications/ModificationVersions.js.map +1 -1
  22. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
  23. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +3 -3
  24. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
  25. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +3 -3
  26. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
  27. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +20 -32
  28. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
  29. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +11 -5
  30. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
  31. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +37 -9
  32. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
  33. package/dist/src/modifications/constraints/utils.d.ts +7 -0
  34. package/dist/src/modifications/constraints/utils.d.ts.map +1 -0
  35. package/dist/src/modifications/constraints/utils.js +33 -0
  36. package/dist/src/modifications/constraints/utils.js.map +1 -0
  37. package/dist/src/modifications/entities/CreateEntityModification.d.ts +4 -4
  38. package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
  39. package/dist/src/modifications/entities/CreateEntityModification.js +18 -14
  40. package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
  41. package/dist/src/modifications/entities/CreateViewModification.d.ts +2 -2
  42. package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
  43. package/dist/src/modifications/entities/CreateViewModification.js +14 -10
  44. package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
  45. package/dist/src/modifications/entities/RemoveEntityModification.d.ts +3 -4
  46. package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
  47. package/dist/src/modifications/entities/RemoveEntityModification.js +3 -2
  48. package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
  49. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +2 -2
  50. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
  51. package/dist/src/modifications/entities/ToggleEventLogModification.js +3 -3
  52. package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
  53. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +4 -5
  54. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
  55. package/dist/src/modifications/entities/UpdateEntityNameModification.js +3 -34
  56. package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
  57. package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
  58. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +4 -5
  59. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
  60. package/dist/src/modifications/fields/UpdateFieldNameModification.js +18 -42
  61. package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
  62. package/dist/src/modifications/indexes/CreateIndexModification.d.ts +5 -5
  63. package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -1
  64. package/dist/src/modifications/indexes/CreateIndexModification.js +24 -35
  65. package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -1
  66. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +12 -6
  67. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -1
  68. package/dist/src/modifications/indexes/RemoveIndexModification.js +36 -10
  69. package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
  70. package/dist/src/modifications/indexes/utils.d.ts +7 -0
  71. package/dist/src/modifications/indexes/utils.d.ts.map +1 -0
  72. package/dist/src/modifications/indexes/utils.js +33 -0
  73. package/dist/src/modifications/indexes/utils.js.map +1 -0
  74. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +3 -4
  75. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
  76. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +10 -10
  77. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
  78. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +3 -4
  79. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
  80. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +14 -12
  81. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
  82. package/dist/src/modifications/relations/CreateRelationModification.d.ts +3 -4
  83. package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
  84. package/dist/src/modifications/relations/CreateRelationModification.js +13 -17
  85. package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
  86. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +3 -4
  87. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -1
  88. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +4 -5
  89. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -1
  90. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +2 -2
  91. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
  92. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +3 -3
  93. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
  94. package/dist/src/modifications/relations/helpers.d.ts +4 -1
  95. package/dist/src/modifications/relations/helpers.d.ts.map +1 -1
  96. package/dist/src/modifications/relations/helpers.js +20 -17
  97. package/dist/src/modifications/relations/helpers.js.map +1 -1
  98. package/dist/src/modifications/upgrade/RemoveIndexNamesModification.d.ts +19 -0
  99. package/dist/src/modifications/upgrade/RemoveIndexNamesModification.d.ts.map +1 -0
  100. package/dist/src/modifications/upgrade/RemoveIndexNamesModification.js +40 -0
  101. package/dist/src/modifications/upgrade/RemoveIndexNamesModification.js.map +1 -0
  102. package/dist/src/modifications/utils/createJunctionTable.d.ts +2 -3
  103. package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
  104. package/dist/src/modifications/utils/createJunctionTable.js +4 -6
  105. package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
  106. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +2 -4
  107. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
  108. package/dist/src/modifications/utils/schemaUpdateUtils.js +5 -20
  109. package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
  110. package/dist/src/modifications/utils/stringArrayEquals.d.ts +2 -0
  111. package/dist/src/modifications/utils/stringArrayEquals.d.ts.map +1 -0
  112. package/dist/src/modifications/utils/stringArrayEquals.js +9 -0
  113. package/dist/src/modifications/utils/stringArrayEquals.js.map +1 -0
  114. package/dist/src/tsconfig.tsbuildinfo +1 -1
  115. package/dist/src/utils/PartialEntity.d.ts +5 -3
  116. package/dist/src/utils/PartialEntity.d.ts.map +1 -1
  117. package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +1 -1
  118. package/dist/tests/cases/integration/convertOneToManyRelation.test.js +5 -5
  119. package/dist/tests/cases/integration/convertOneToManyRelation.test.js.map +1 -1
  120. package/dist/tests/cases/integration/createAndDropIndex.test.js +4 -4
  121. package/dist/tests/cases/integration/createAndDropIndex.test.js.map +1 -1
  122. package/dist/tests/cases/integration/createEntity.test.js +6 -9
  123. package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
  124. package/dist/tests/cases/integration/createManyHasMany.test.js +3 -3
  125. package/dist/tests/cases/integration/createManyHasOne.test.js +4 -4
  126. package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
  127. package/dist/tests/cases/integration/createOneHasMany.test.js +6 -9
  128. package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
  129. package/dist/tests/cases/integration/createOneHasOne.test.js +6 -6
  130. package/dist/tests/cases/integration/createRelationInverseSide.test.js +1 -1
  131. package/dist/tests/cases/integration/createRelationInverseSide.test.js.map +1 -1
  132. package/dist/tests/cases/integration/createView.test.js +6 -6
  133. package/dist/tests/cases/integration/removeField.test.js +6 -6
  134. package/dist/tests/cases/integration/removeField.test.js.map +1 -1
  135. package/dist/tests/cases/integration/updateColumnDefinition.test.js +4 -4
  136. package/dist/tests/cases/integration/updateEntityName.test.js +1 -20
  137. package/dist/tests/cases/integration/updateEntityName.test.js.map +1 -1
  138. package/dist/tests/cases/integration/updateFieldName.test.js +1 -21
  139. package/dist/tests/cases/integration/updateFieldName.test.js.map +1 -1
  140. package/dist/tests/cases/integration/updateRelationOnDelete.test.js +2 -2
  141. package/dist/tests/cases/integration/updateRelationOnDelete.test.js.map +1 -1
  142. package/dist/tests/cases/integration/updateView.test.js +18 -18
  143. package/dist/tests/scripts/checkCreateConsistentMigrations.js +1 -1
  144. package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
  145. package/dist/tests/src/tests.d.ts.map +1 -1
  146. package/dist/tests/src/tests.js +10 -4
  147. package/dist/tests/src/tests.js.map +1 -1
  148. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  149. package/package.json +6 -7
  150. package/src/MigrationDescriber.ts +11 -9
  151. package/src/SchemaDiffer.ts +3 -3
  152. package/src/SchemaMigrator.ts +1 -3
  153. package/src/modifications/ModificationHandler.ts +10 -5
  154. package/src/modifications/ModificationHandlerFactory.ts +12 -11
  155. package/src/modifications/ModificationVersions.ts +4 -3
  156. package/src/modifications/columns/UpdateColumnDefinitionModification.ts +1 -2
  157. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +31 -40
  158. package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +60 -15
  159. package/src/modifications/constraints/utils.ts +36 -0
  160. package/src/modifications/entities/CreateEntityModification.ts +9 -8
  161. package/src/modifications/entities/CreateViewModification.ts +4 -3
  162. package/src/modifications/entities/RemoveEntityModification.ts +5 -5
  163. package/src/modifications/entities/ToggleEventLogModification.ts +4 -3
  164. package/src/modifications/entities/UpdateEntityNameModification.ts +10 -46
  165. package/src/modifications/fields/RemoveFieldModification.ts +1 -1
  166. package/src/modifications/fields/UpdateFieldNameModification.ts +30 -57
  167. package/src/modifications/indexes/CreateIndexModification.ts +35 -41
  168. package/src/modifications/indexes/RemoveIndexModification.ts +57 -17
  169. package/src/modifications/indexes/utils.ts +30 -0
  170. package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +7 -19
  171. package/src/modifications/relations/ConvertOneToManyRelationModification.ts +21 -22
  172. package/src/modifications/relations/CreateRelationModification.ts +20 -35
  173. package/src/modifications/relations/ToggleJunctionEventLogModification.ts +4 -5
  174. package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +13 -5
  175. package/src/modifications/relations/helpers.ts +27 -22
  176. package/src/modifications/upgrade/RemoveIndexNamesModification.ts +46 -0
  177. package/src/modifications/utils/createJunctionTable.ts +8 -8
  178. package/src/modifications/utils/schemaUpdateUtils.ts +5 -17
  179. package/src/modifications/utils/stringArrayEquals.ts +4 -0
  180. package/src/tsconfig.json +0 -1
  181. package/src/utils/PartialEntity.ts +7 -1
  182. package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +1 -1
  183. package/tests/cases/integration/convertOneToManyRelation.test.ts +5 -5
  184. package/tests/cases/integration/createAndDropIndex.test.ts +4 -4
  185. package/tests/cases/integration/createEntity.test.ts +6 -9
  186. package/tests/cases/integration/createManyHasMany.test.ts +3 -3
  187. package/tests/cases/integration/createManyHasOne.test.ts +4 -4
  188. package/tests/cases/integration/createOneHasMany.test.ts +6 -9
  189. package/tests/cases/integration/createOneHasOne.test.ts +6 -6
  190. package/tests/cases/integration/createRelationInverseSide.test.ts +1 -1
  191. package/tests/cases/integration/createView.test.ts +6 -6
  192. package/tests/cases/integration/removeField.test.ts +6 -6
  193. package/tests/cases/integration/updateColumnDefinition.test.ts +4 -4
  194. package/tests/cases/integration/updateEntityName.test.ts +1 -20
  195. package/tests/cases/integration/updateFieldName.test.ts +1 -21
  196. package/tests/cases/integration/updateRelationOnDelete.test.ts +2 -2
  197. package/tests/cases/integration/updateView.test.ts +18 -18
  198. package/tests/scripts/checkCreateConsistentMigrations.ts +1 -1
  199. package/tests/src/tests.ts +13 -8
  200. package/dist/src/modifications/utils/renameConstraintsHelper.d.ts +0 -8
  201. package/dist/src/modifications/utils/renameConstraintsHelper.d.ts.map +0 -1
  202. package/dist/src/modifications/utils/renameConstraintsHelper.js +0 -31
  203. package/dist/src/modifications/utils/renameConstraintsHelper.js.map +0 -1
  204. package/dist/src/modifications/utils/schemaMeta.d.ts +0 -8
  205. package/dist/src/modifications/utils/schemaMeta.d.ts.map +0 -1
  206. package/dist/src/modifications/utils/schemaMeta.js +0 -13
  207. package/dist/src/modifications/utils/schemaMeta.js.map +0 -1
  208. package/dist/tests/cases/integration/takenIndexName.test.d.ts +0 -2
  209. package/dist/tests/cases/integration/takenIndexName.test.d.ts.map +0 -1
  210. package/dist/tests/cases/integration/takenIndexName.test.js +0 -307
  211. package/dist/tests/cases/integration/takenIndexName.test.js.map +0 -1
  212. package/src/modifications/utils/renameConstraintsHelper.ts +0 -34
  213. package/src/modifications/utils/schemaMeta.ts +0 -18
  214. 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, NamingHelper } from '@contember/schema-utils'
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 { resolveIndexName, SchemaWithMeta } from '../utils/schemaMeta'
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: SchemaWithMeta,
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
- const proposedIndexName = NamingHelper.createForeignKeyIndexName(entity.tableName, columnName)
49
- const indexName = resolveIndexName(this.schema, proposedIndexName)
50
- builder.addIndex(entity.tableName, columnName, {
51
- name: indexName,
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 uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
54
- builder.dropConstraint(entity.tableName, uniqueConstraintName)
55
- this.subModification.createSql(builder)
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
- const entity = this.schema.model.entities[this.data.entityName]
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: SchemaWithMeta,
24
+ private readonly schema: Schema,
38
25
  private readonly options: ModificationHandlerOptions,
39
26
  ) {}
40
27
 
41
- public createSql(builder: MigrationBuilder): void {
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 proposedIndexName = NamingHelper.createForeignKeyIndexName(entity.tableName, columnName)
61
- const indexName = resolveIndexName(this.schema, proposedIndexName)
62
- builder.addIndex(entity.tableName, columnName, {
63
- name: indexName,
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 uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
70
- builder.addConstraint(entity.tableName, uniqueConstraintName, { unique: [relation.joiningColumn.columnName] })
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, this.options.systemSchema, this.schema, entity, targetEntity, relation)
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
- ModificationHandlerOptions,
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, this.options.systemSchema, tableName, primaryColumns)
42
- createEventTrxTrigger(builder, this.options.systemSchema, tableName)
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 { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
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(private readonly data: UpdateRelationOnDeleteModificationData, private readonly schema: Schema) {}
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
- builder.dropConstraint(entity.tableName, fkName)
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
- builder.addConstraint(entity.tableName, fkName, {
22
- foreignKeys: {
23
- columns: relation.joiningColumn.columnName,
24
- references: `"${targetEntity.tableName}"("${targetEntity.primaryColumn}")`,
25
- onDelete: ({
26
- [Model.OnDelete.setNull]: 'SET NULL',
27
- [Model.OnDelete.cascade]: 'CASCADE',
28
- [Model.OnDelete.restrict]: 'NO ACTION',
29
- } as const)[relation.joiningColumn.onDelete],
30
- },
31
- deferrable: true,
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 { resolveIndexName, SchemaWithMeta } from './schemaMeta'
5
+ import { wrapIdentifier } from '../../utils/dbHelpers'
6
6
 
7
7
  export const createJunctionTableSql = (
8
8
  builder: MigrationBuilder,
9
9
  systemSchema: string,
10
- schema: SchemaWithMeta,
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
- const proposedIndexName = `${relation.joiningTable.tableName}_pkey`
37
- const indexName = resolveIndexName(schema, proposedIndexName)
38
- builder.addConstraint(relation.joiningTable.tableName, indexName, {
39
- primaryKey: primaryColumns,
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: SchemaWithMeta }) => SchemaWithMeta
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 = Object.entries(entity.indexes).filter(([, index]) => !index.fields.includes(field.name))
275
- const unique = Object.entries(entity.unique).filter(([, index]) => !index.fields.includes(field.name))
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: Object.fromEntries(indexes),
280
- unique: Object.fromEntries(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
- })
@@ -0,0 +1,4 @@
1
+ export const stringArrayEquals = (colA: string[], colB: string[]) => {
2
+ return colA.length === colB.length
3
+ && colA.every((it, index) => it === colB[index])
4
+ }
package/src/tsconfig.json CHANGED
@@ -6,7 +6,6 @@
6
6
  "downlevelIteration": true
7
7
  },
8
8
  "references": [
9
- { "path": "../../database/src" },
10
9
  { "path": "../../database-migrations/src" },
11
10
  { "path": "../../engine-common/src" },
12
11
  { "path": "../../schema/src" },
@@ -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 PartialEntity = SomePartial<Model.Entity, 'eventLog' | 'indexes'>
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 CONSTRAINT "article_categories_pkey" PRIMARY KEY ("article_id", "category_id");
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 "post_image_id_index" ON "post" ("image_id");
28
- ALTER TABLE "post" DROP CONSTRAINT "unique_Post_image_a85d6d";
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
- CREATE INDEX "post_image_id_index" ON "post" ("image_id");
56
- ALTER TABLE "post" DROP CONSTRAINT "unique_Post_image_a85d6d";
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: { name: 'idx_Article_title_2dc66a', fields: ['title'] },
26
+ index: { fields: ['title'] },
27
27
  },
28
28
  ],
29
- sql: SQL`CREATE INDEX "idx_Article_title_2dc66a" ON "article" ("title");`,
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
- indexName: 'idx_Article_title_2dc66a',
40
+ fields: ['title'],
41
41
  },
42
42
  ],
43
- sql: SQL`DROP INDEX "idx_Article_title_2dc66a";`,
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 CONSTRAINT "unique_Author_email_a3e587" UNIQUE ("email");`,
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 CONSTRAINT "post_categories_pkey" PRIMARY KEY ("post_id", "category_id");
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 CONSTRAINT "fk_post_author_id_87ef9a" FOREIGN KEY ("author_id") REFERENCES "author"("id") ON DELETE CASCADE DEFERRABLE INITIALLY IMMEDIATE;
88
- CREATE INDEX "post_author_id_index" ON "post" ("author_id");`,
87
+ ADD FOREIGN KEY ("author_id") REFERENCES "author"("id") ON DELETE CASCADE DEFERRABLE INITIALLY IMMEDIATE;
88
+ CREATE INDEX ON "post" ("author_id");`,
89
89
  })