@contember/schema-migrations 1.3.0-alpha.7 → 1.3.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (237) 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.d.ts +1 -1
  6. package/dist/src/SchemaDiffer.d.ts.map +1 -1
  7. package/dist/src/SchemaDiffer.js +10 -2
  8. package/dist/src/SchemaDiffer.js.map +1 -1
  9. package/dist/src/SchemaMigrator.d.ts +1 -2
  10. package/dist/src/SchemaMigrator.d.ts.map +1 -1
  11. package/dist/src/SchemaMigrator.js +0 -1
  12. package/dist/src/SchemaMigrator.js.map +1 -1
  13. package/dist/src/modifications/ModificationHandler.d.ts +10 -6
  14. package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
  15. package/dist/src/modifications/ModificationHandler.js.map +1 -1
  16. package/dist/src/modifications/ModificationHandlerFactory.d.ts +2 -2
  17. package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
  18. package/dist/src/modifications/ModificationHandlerFactory.js +3 -2
  19. package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
  20. package/dist/src/modifications/ModificationVersions.d.ts +4 -3
  21. package/dist/src/modifications/ModificationVersions.d.ts.map +1 -1
  22. package/dist/src/modifications/ModificationVersions.js +5 -4
  23. package/dist/src/modifications/ModificationVersions.js.map +1 -1
  24. package/dist/src/modifications/columns/CreateColumnModification.d.ts +2 -2
  25. package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
  26. package/dist/src/modifications/columns/CreateColumnModification.js +14 -24
  27. package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
  28. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +5 -3
  29. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
  30. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +19 -4
  31. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
  32. package/dist/src/modifications/columns/columnUtils.d.ts +14 -0
  33. package/dist/src/modifications/columns/columnUtils.d.ts.map +1 -0
  34. package/dist/src/modifications/columns/columnUtils.js +29 -0
  35. package/dist/src/modifications/columns/columnUtils.js.map +1 -0
  36. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +3 -3
  37. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
  38. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +20 -32
  39. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
  40. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +11 -5
  41. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
  42. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +37 -9
  43. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
  44. package/dist/src/modifications/constraints/utils.d.ts +7 -0
  45. package/dist/src/modifications/constraints/utils.d.ts.map +1 -0
  46. package/dist/src/modifications/constraints/utils.js +33 -0
  47. package/dist/src/modifications/constraints/utils.js.map +1 -0
  48. package/dist/src/modifications/entities/CreateEntityModification.d.ts +4 -4
  49. package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
  50. package/dist/src/modifications/entities/CreateEntityModification.js +18 -14
  51. package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
  52. package/dist/src/modifications/entities/CreateViewModification.d.ts +2 -2
  53. package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
  54. package/dist/src/modifications/entities/CreateViewModification.js +14 -10
  55. package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
  56. package/dist/src/modifications/entities/RemoveEntityModification.d.ts +3 -4
  57. package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
  58. package/dist/src/modifications/entities/RemoveEntityModification.js +3 -2
  59. package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
  60. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +2 -2
  61. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
  62. package/dist/src/modifications/entities/ToggleEventLogModification.js +3 -3
  63. package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
  64. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +4 -5
  65. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
  66. package/dist/src/modifications/entities/UpdateEntityNameModification.js +3 -34
  67. package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
  68. package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
  69. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +4 -5
  70. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
  71. package/dist/src/modifications/fields/UpdateFieldNameModification.js +18 -42
  72. package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
  73. package/dist/src/modifications/indexes/CreateIndexModification.d.ts +5 -5
  74. package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -1
  75. package/dist/src/modifications/indexes/CreateIndexModification.js +24 -35
  76. package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -1
  77. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +12 -6
  78. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -1
  79. package/dist/src/modifications/indexes/RemoveIndexModification.js +36 -10
  80. package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
  81. package/dist/src/modifications/indexes/utils.d.ts +7 -0
  82. package/dist/src/modifications/indexes/utils.d.ts.map +1 -0
  83. package/dist/src/modifications/indexes/utils.js +33 -0
  84. package/dist/src/modifications/indexes/utils.js.map +1 -0
  85. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +3 -4
  86. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
  87. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +10 -10
  88. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
  89. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +3 -4
  90. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
  91. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +14 -12
  92. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
  93. package/dist/src/modifications/relations/CreateRelationModification.d.ts +4 -5
  94. package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
  95. package/dist/src/modifications/relations/CreateRelationModification.js +13 -17
  96. package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
  97. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +3 -4
  98. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -1
  99. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +4 -5
  100. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -1
  101. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +2 -2
  102. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
  103. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +3 -3
  104. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
  105. package/dist/src/modifications/relations/helpers.d.ts +4 -1
  106. package/dist/src/modifications/relations/helpers.d.ts.map +1 -1
  107. package/dist/src/modifications/relations/helpers.js +20 -17
  108. package/dist/src/modifications/relations/helpers.js.map +1 -1
  109. package/dist/src/modifications/relations/normalization.d.ts +2 -2
  110. package/dist/src/modifications/relations/normalization.d.ts.map +1 -1
  111. package/dist/src/modifications/settings/UpdateSettingsModification.d.ts +1 -1
  112. package/dist/src/modifications/settings/UpdateSettingsModification.d.ts.map +1 -1
  113. package/dist/src/modifications/upgrade/RemoveIndexNamesModification.d.ts +19 -0
  114. package/dist/src/modifications/upgrade/RemoveIndexNamesModification.d.ts.map +1 -0
  115. package/dist/src/modifications/upgrade/RemoveIndexNamesModification.js +40 -0
  116. package/dist/src/modifications/upgrade/RemoveIndexNamesModification.js.map +1 -0
  117. package/dist/src/modifications/utils/createJunctionTable.d.ts +2 -3
  118. package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
  119. package/dist/src/modifications/utils/createJunctionTable.js +4 -6
  120. package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
  121. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +12 -14
  122. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
  123. package/dist/src/modifications/utils/schemaUpdateUtils.js +5 -20
  124. package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
  125. package/dist/src/modifications/utils/stringArrayEquals.d.ts +2 -0
  126. package/dist/src/modifications/utils/stringArrayEquals.d.ts.map +1 -0
  127. package/dist/src/modifications/utils/stringArrayEquals.js +9 -0
  128. package/dist/src/modifications/utils/stringArrayEquals.js.map +1 -0
  129. package/dist/src/modifications/utils/viewDependencies.d.ts +1 -1
  130. package/dist/src/modifications/utils/viewDependencies.d.ts.map +1 -1
  131. package/dist/src/tsconfig.tsbuildinfo +1 -1
  132. package/dist/src/utils/PartialEntity.d.ts +5 -3
  133. package/dist/src/utils/PartialEntity.d.ts.map +1 -1
  134. package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +1 -1
  135. package/dist/tests/cases/integration/convertOneToManyRelation.test.js +5 -5
  136. package/dist/tests/cases/integration/convertOneToManyRelation.test.js.map +1 -1
  137. package/dist/tests/cases/integration/createAndDropIndex.test.js +4 -4
  138. package/dist/tests/cases/integration/createAndDropIndex.test.js.map +1 -1
  139. package/dist/tests/cases/integration/createColumn.test.js +0 -2
  140. package/dist/tests/cases/integration/createColumn.test.js.map +1 -1
  141. package/dist/tests/cases/integration/createEntity.test.js +6 -9
  142. package/dist/tests/cases/integration/createEntity.test.js.map +1 -1
  143. package/dist/tests/cases/integration/createManyHasMany.test.js +3 -3
  144. package/dist/tests/cases/integration/createManyHasOne.test.js +4 -4
  145. package/dist/tests/cases/integration/createManyHasOne.test.js.map +1 -1
  146. package/dist/tests/cases/integration/createOneHasMany.test.js +6 -9
  147. package/dist/tests/cases/integration/createOneHasMany.test.js.map +1 -1
  148. package/dist/tests/cases/integration/createOneHasOne.test.js +6 -6
  149. package/dist/tests/cases/integration/createRelationInverseSide.test.js +1 -1
  150. package/dist/tests/cases/integration/createRelationInverseSide.test.js.map +1 -1
  151. package/dist/tests/cases/integration/createView.test.js +6 -6
  152. package/dist/tests/cases/integration/removeField.test.js +6 -6
  153. package/dist/tests/cases/integration/removeField.test.js.map +1 -1
  154. package/dist/tests/cases/integration/updateColumnDefinition.test.js +42 -4
  155. package/dist/tests/cases/integration/updateColumnDefinition.test.js.map +1 -1
  156. package/dist/tests/cases/integration/updateEntityName.test.js +1 -20
  157. package/dist/tests/cases/integration/updateEntityName.test.js.map +1 -1
  158. package/dist/tests/cases/integration/updateFieldName.test.js +1 -21
  159. package/dist/tests/cases/integration/updateFieldName.test.js.map +1 -1
  160. package/dist/tests/cases/integration/updateRelationOnDelete.test.js +2 -2
  161. package/dist/tests/cases/integration/updateRelationOnDelete.test.js.map +1 -1
  162. package/dist/tests/cases/integration/updateView.test.js +18 -18
  163. package/dist/tests/scripts/checkCreateConsistentMigrations.js +1 -1
  164. package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
  165. package/dist/tests/src/tests.d.ts.map +1 -1
  166. package/dist/tests/src/tests.js +10 -4
  167. package/dist/tests/src/tests.js.map +1 -1
  168. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  169. package/package.json +8 -9
  170. package/src/MigrationDescriber.ts +11 -9
  171. package/src/SchemaDiffer.ts +12 -13
  172. package/src/SchemaMigrator.ts +1 -3
  173. package/src/modifications/ModificationHandler.ts +10 -5
  174. package/src/modifications/ModificationHandlerFactory.ts +12 -11
  175. package/src/modifications/ModificationVersions.ts +4 -3
  176. package/src/modifications/columns/CreateColumnModification.ts +19 -27
  177. package/src/modifications/columns/UpdateColumnDefinitionModification.ts +22 -4
  178. package/src/modifications/columns/columnUtils.ts +35 -0
  179. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +31 -40
  180. package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +60 -15
  181. package/src/modifications/constraints/utils.ts +36 -0
  182. package/src/modifications/entities/CreateEntityModification.ts +9 -8
  183. package/src/modifications/entities/CreateViewModification.ts +4 -3
  184. package/src/modifications/entities/RemoveEntityModification.ts +5 -5
  185. package/src/modifications/entities/ToggleEventLogModification.ts +4 -3
  186. package/src/modifications/entities/UpdateEntityNameModification.ts +10 -46
  187. package/src/modifications/fields/RemoveFieldModification.ts +1 -1
  188. package/src/modifications/fields/UpdateFieldNameModification.ts +30 -57
  189. package/src/modifications/indexes/CreateIndexModification.ts +35 -41
  190. package/src/modifications/indexes/RemoveIndexModification.ts +57 -17
  191. package/src/modifications/indexes/utils.ts +30 -0
  192. package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +7 -19
  193. package/src/modifications/relations/ConvertOneToManyRelationModification.ts +21 -22
  194. package/src/modifications/relations/CreateRelationModification.ts +20 -35
  195. package/src/modifications/relations/ToggleJunctionEventLogModification.ts +4 -5
  196. package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +13 -5
  197. package/src/modifications/relations/helpers.ts +27 -22
  198. package/src/modifications/upgrade/RemoveIndexNamesModification.ts +46 -0
  199. package/src/modifications/utils/createJunctionTable.ts +8 -8
  200. package/src/modifications/utils/schemaUpdateUtils.ts +5 -17
  201. package/src/modifications/utils/stringArrayEquals.ts +4 -0
  202. package/src/tsconfig.json +0 -1
  203. package/src/utils/PartialEntity.ts +7 -1
  204. package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +1 -1
  205. package/tests/cases/integration/convertOneToManyRelation.test.ts +5 -5
  206. package/tests/cases/integration/createAndDropIndex.test.ts +4 -4
  207. package/tests/cases/integration/createColumn.test.ts +0 -2
  208. package/tests/cases/integration/createEntity.test.ts +6 -9
  209. package/tests/cases/integration/createManyHasMany.test.ts +3 -3
  210. package/tests/cases/integration/createManyHasOne.test.ts +4 -4
  211. package/tests/cases/integration/createOneHasMany.test.ts +6 -9
  212. package/tests/cases/integration/createOneHasOne.test.ts +6 -6
  213. package/tests/cases/integration/createRelationInverseSide.test.ts +1 -1
  214. package/tests/cases/integration/createView.test.ts +6 -6
  215. package/tests/cases/integration/removeField.test.ts +6 -6
  216. package/tests/cases/integration/updateColumnDefinition.test.ts +36 -4
  217. package/tests/cases/integration/updateEntityName.test.ts +1 -20
  218. package/tests/cases/integration/updateFieldName.test.ts +1 -21
  219. package/tests/cases/integration/updateRelationOnDelete.test.ts +2 -2
  220. package/tests/cases/integration/updateView.test.ts +18 -18
  221. package/tests/scripts/checkCreateConsistentMigrations.ts +1 -1
  222. package/tests/src/tests.ts +13 -8
  223. package/dist/src/modifications/utils/renameConstraintsHelper.d.ts +0 -8
  224. package/dist/src/modifications/utils/renameConstraintsHelper.d.ts.map +0 -1
  225. package/dist/src/modifications/utils/renameConstraintsHelper.js +0 -31
  226. package/dist/src/modifications/utils/renameConstraintsHelper.js.map +0 -1
  227. package/dist/src/modifications/utils/schemaMeta.d.ts +0 -8
  228. package/dist/src/modifications/utils/schemaMeta.d.ts.map +0 -1
  229. package/dist/src/modifications/utils/schemaMeta.js +0 -13
  230. package/dist/src/modifications/utils/schemaMeta.js.map +0 -1
  231. package/dist/tests/cases/integration/takenIndexName.test.d.ts +0 -2
  232. package/dist/tests/cases/integration/takenIndexName.test.d.ts.map +0 -1
  233. package/dist/tests/cases/integration/takenIndexName.test.js +0 -307
  234. package/dist/tests/cases/integration/takenIndexName.test.js.map +0 -1
  235. package/src/modifications/utils/renameConstraintsHelper.ts +0 -34
  236. package/src/modifications/utils/schemaMeta.ts +0 -18
  237. package/tests/cases/integration/takenIndexName.test.ts +0 -314
@@ -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 { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
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
- builder.dropIndex(entity.tableName, [], {
16
- name: this.data.indexName,
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 { [this.data.indexName]: removed, ...indexes } = entity.indexes
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.schema.model.entities[this.data.entityName].indexes[this.data.indexName].fields
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
- Object.values(entity.indexes)
90
+ entity.indexes
49
91
  .filter(
50
- it =>
51
- updatedSchema.model.entities[entity.name] &&
52
- (!updatedSchema.model.entities[entity.name].indexes[it.name] ||
53
- !deepEqual(it.fields, updatedSchema.model.entities[entity.name].indexes[it.name].fields)),
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
- indexName: index.name,
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, NamingHelper } from '@contember/schema-utils'
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 '@contember/database'
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: SchemaWithMeta,
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, this.options.systemSchema, this.schema, entity, targetEntity, normalizeManyHasManyRelation(this.data.owningSide))
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, 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)