@contember/schema-migrations 1.2.0-alpha.8 → 1.2.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 (315) hide show
  1. package/dist/src/Migration.d.ts +2 -0
  2. package/dist/src/Migration.d.ts.map +1 -1
  3. package/dist/src/Migration.js +2 -2
  4. package/dist/src/Migration.js.map +1 -1
  5. package/dist/src/MigrationCreator.d.ts +3 -1
  6. package/dist/src/MigrationCreator.d.ts.map +1 -1
  7. package/dist/src/MigrationCreator.js +2 -2
  8. package/dist/src/MigrationCreator.js.map +1 -1
  9. package/dist/src/MigrationDescriber.d.ts +1 -2
  10. package/dist/src/MigrationDescriber.d.ts.map +1 -1
  11. package/dist/src/MigrationDescriber.js +5 -7
  12. package/dist/src/MigrationDescriber.js.map +1 -1
  13. package/dist/src/MigrationFilesManager.d.ts.map +1 -1
  14. package/dist/src/MigrationFilesManager.js +10 -19
  15. package/dist/src/MigrationFilesManager.js.map +1 -1
  16. package/dist/src/MigrationsResolver.d.ts.map +1 -1
  17. package/dist/src/MigrationsResolver.js +1 -0
  18. package/dist/src/MigrationsResolver.js.map +1 -1
  19. package/dist/src/SchemaDiffer.d.ts +6 -1
  20. package/dist/src/SchemaDiffer.d.ts.map +1 -1
  21. package/dist/src/SchemaDiffer.js +46 -54
  22. package/dist/src/SchemaDiffer.js.map +1 -1
  23. package/dist/src/SchemaMigrator.d.ts +3 -2
  24. package/dist/src/SchemaMigrator.d.ts.map +1 -1
  25. package/dist/src/SchemaMigrator.js.map +1 -1
  26. package/dist/src/index.d.ts +1 -5
  27. package/dist/src/index.d.ts.map +1 -1
  28. package/dist/src/index.js +1 -11
  29. package/dist/src/index.js.map +1 -1
  30. package/dist/src/modifications/ModificationHandler.d.ts +16 -8
  31. package/dist/src/modifications/ModificationHandler.d.ts.map +1 -1
  32. package/dist/src/modifications/ModificationHandler.js +9 -1
  33. package/dist/src/modifications/ModificationHandler.js.map +1 -1
  34. package/dist/src/modifications/ModificationHandlerFactory.d.ts +8 -7
  35. package/dist/src/modifications/ModificationHandlerFactory.d.ts.map +1 -1
  36. package/dist/src/modifications/ModificationHandlerFactory.js +43 -39
  37. package/dist/src/modifications/ModificationHandlerFactory.js.map +1 -1
  38. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts +13 -2
  39. package/dist/src/modifications/acl/PatchAclSchemaModification.d.ts.map +1 -1
  40. package/dist/src/modifications/acl/PatchAclSchemaModification.js +28 -28
  41. package/dist/src/modifications/acl/PatchAclSchemaModification.js.map +1 -1
  42. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts +17 -3
  43. package/dist/src/modifications/acl/UpdateAclSchemaModification.d.ts.map +1 -1
  44. package/dist/src/modifications/acl/UpdateAclSchemaModification.js +33 -30
  45. package/dist/src/modifications/acl/UpdateAclSchemaModification.js.map +1 -1
  46. package/dist/src/modifications/columns/CreateColumnModification.d.ts +21 -3
  47. package/dist/src/modifications/columns/CreateColumnModification.d.ts.map +1 -1
  48. package/dist/src/modifications/columns/CreateColumnModification.js +72 -69
  49. package/dist/src/modifications/columns/CreateColumnModification.js.map +1 -1
  50. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts +20 -4
  51. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.d.ts.map +1 -1
  52. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js +78 -71
  53. package/dist/src/modifications/columns/UpdateColumnDefinitionModification.js.map +1 -1
  54. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts +18 -2
  55. package/dist/src/modifications/columns/UpdateColumnNameModification.d.ts.map +1 -1
  56. package/dist/src/modifications/columns/UpdateColumnNameModification.js +97 -94
  57. package/dist/src/modifications/columns/UpdateColumnNameModification.js.map +1 -1
  58. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts +21 -3
  59. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.d.ts.map +1 -1
  60. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js +72 -66
  61. package/dist/src/modifications/constraints/CreateUniqueConstraintModification.js.map +1 -1
  62. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts +18 -2
  63. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.d.ts.map +1 -1
  64. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js +45 -42
  65. package/dist/src/modifications/constraints/RemoveUniqueConstraintModification.js.map +1 -1
  66. package/dist/src/modifications/differs/ChangeViewNonViewDiffer.js +1 -1
  67. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts +1 -3
  68. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.d.ts.map +1 -1
  69. package/dist/src/modifications/differs/RemoveChangedFieldDiffer.js +1 -1
  70. package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts +1 -2
  71. package/dist/src/modifications/differs/RemoveChangedViewDiffer.d.ts.map +1 -1
  72. package/dist/src/modifications/differs/RemoveChangedViewDiffer.js +7 -20
  73. package/dist/src/modifications/differs/RemoveChangedViewDiffer.js.map +1 -1
  74. package/dist/src/modifications/entities/CreateEntityModification.d.ts +19 -2
  75. package/dist/src/modifications/entities/CreateEntityModification.d.ts.map +1 -1
  76. package/dist/src/modifications/entities/CreateEntityModification.js +66 -63
  77. package/dist/src/modifications/entities/CreateEntityModification.js.map +1 -1
  78. package/dist/src/modifications/entities/CreateViewModification.d.ts +21 -2
  79. package/dist/src/modifications/entities/CreateViewModification.d.ts.map +1 -1
  80. package/dist/src/modifications/entities/CreateViewModification.js +59 -56
  81. package/dist/src/modifications/entities/CreateViewModification.js.map +1 -1
  82. package/dist/src/modifications/entities/RemoveEntityModification.d.ts +22 -2
  83. package/dist/src/modifications/entities/RemoveEntityModification.d.ts.map +1 -1
  84. package/dist/src/modifications/entities/RemoveEntityModification.js +73 -70
  85. package/dist/src/modifications/entities/RemoveEntityModification.js.map +1 -1
  86. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts +19 -2
  87. package/dist/src/modifications/entities/ToggleEventLogModification.d.ts.map +1 -1
  88. package/dist/src/modifications/entities/ToggleEventLogModification.js +57 -54
  89. package/dist/src/modifications/entities/ToggleEventLogModification.js.map +1 -1
  90. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts +18 -2
  91. package/dist/src/modifications/entities/UpdateEntityNameModification.d.ts.map +1 -1
  92. package/dist/src/modifications/entities/UpdateEntityNameModification.js +78 -78
  93. package/dist/src/modifications/entities/UpdateEntityNameModification.js.map +1 -1
  94. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts +18 -2
  95. package/dist/src/modifications/entities/UpdateEntityTableNameModification.d.ts.map +1 -1
  96. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js +40 -34
  97. package/dist/src/modifications/entities/UpdateEntityTableNameModification.js.map +1 -1
  98. package/dist/src/modifications/entities/UpdateViewModification.d.ts +15 -3
  99. package/dist/src/modifications/entities/UpdateViewModification.d.ts.map +1 -1
  100. package/dist/src/modifications/entities/UpdateViewModification.js +28 -28
  101. package/dist/src/modifications/entities/UpdateViewModification.js.map +1 -1
  102. package/dist/src/modifications/enums/CreateEnumModification.d.ts +18 -2
  103. package/dist/src/modifications/enums/CreateEnumModification.d.ts.map +1 -1
  104. package/dist/src/modifications/enums/CreateEnumModification.js +42 -36
  105. package/dist/src/modifications/enums/CreateEnumModification.js.map +1 -1
  106. package/dist/src/modifications/enums/RemoveEnumModification.d.ts +18 -2
  107. package/dist/src/modifications/enums/RemoveEnumModification.d.ts.map +1 -1
  108. package/dist/src/modifications/enums/RemoveEnumModification.js +36 -33
  109. package/dist/src/modifications/enums/RemoveEnumModification.js.map +1 -1
  110. package/dist/src/modifications/enums/UpdateEnumModification.d.ts +19 -2
  111. package/dist/src/modifications/enums/UpdateEnumModification.d.ts.map +1 -1
  112. package/dist/src/modifications/enums/UpdateEnumModification.js +43 -40
  113. package/dist/src/modifications/enums/UpdateEnumModification.js.map +1 -1
  114. package/dist/src/modifications/fields/RemoveFieldModification.d.ts +20 -2
  115. package/dist/src/modifications/fields/RemoveFieldModification.d.ts.map +1 -1
  116. package/dist/src/modifications/fields/RemoveFieldModification.js +67 -64
  117. package/dist/src/modifications/fields/RemoveFieldModification.js.map +1 -1
  118. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts +18 -2
  119. package/dist/src/modifications/fields/UpdateFieldNameModification.d.ts.map +1 -1
  120. package/dist/src/modifications/fields/UpdateFieldNameModification.js +132 -132
  121. package/dist/src/modifications/fields/UpdateFieldNameModification.js.map +1 -1
  122. package/dist/src/modifications/index.d.ts +14 -0
  123. package/dist/src/modifications/index.d.ts.map +1 -0
  124. package/dist/src/modifications/index.js +32 -0
  125. package/dist/src/modifications/index.js.map +1 -0
  126. package/dist/src/modifications/indexes/CreateIndexModification.d.ts +18 -3
  127. package/dist/src/modifications/indexes/CreateIndexModification.d.ts.map +1 -1
  128. package/dist/src/modifications/indexes/CreateIndexModification.js +68 -65
  129. package/dist/src/modifications/indexes/CreateIndexModification.js.map +1 -1
  130. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts +18 -2
  131. package/dist/src/modifications/indexes/RemoveIndexModification.d.ts.map +1 -1
  132. package/dist/src/modifications/indexes/RemoveIndexModification.js +47 -44
  133. package/dist/src/modifications/indexes/RemoveIndexModification.js.map +1 -1
  134. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts +22 -3
  135. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.d.ts.map +1 -1
  136. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js +68 -65
  137. package/dist/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.js.map +1 -1
  138. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts +22 -2
  139. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.d.ts.map +1 -1
  140. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js +81 -70
  141. package/dist/src/modifications/relations/ConvertOneToManyRelationModification.js.map +1 -1
  142. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts +18 -3
  143. package/dist/src/modifications/relations/CreateRelationInverseSideModification.d.ts.map +1 -1
  144. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js +36 -33
  145. package/dist/src/modifications/relations/CreateRelationInverseSideModification.js.map +1 -1
  146. package/dist/src/modifications/relations/CreateRelationModification.d.ts +24 -3
  147. package/dist/src/modifications/relations/CreateRelationModification.d.ts.map +1 -1
  148. package/dist/src/modifications/relations/CreateRelationModification.js +99 -85
  149. package/dist/src/modifications/relations/CreateRelationModification.js.map +1 -1
  150. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts +18 -2
  151. package/dist/src/modifications/relations/DisableOrphanRemovalModification.d.ts.map +1 -1
  152. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js +42 -39
  153. package/dist/src/modifications/relations/DisableOrphanRemovalModification.js.map +1 -1
  154. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts +18 -2
  155. package/dist/src/modifications/relations/EnableOrphanRemovalModification.d.ts.map +1 -1
  156. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js +45 -42
  157. package/dist/src/modifications/relations/EnableOrphanRemovalModification.js.map +1 -1
  158. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts +19 -2
  159. package/dist/src/modifications/relations/MakeRelationNotNullModification.d.ts.map +1 -1
  160. package/dist/src/modifications/relations/MakeRelationNotNullModification.js +55 -52
  161. package/dist/src/modifications/relations/MakeRelationNotNullModification.js.map +1 -1
  162. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts +18 -2
  163. package/dist/src/modifications/relations/MakeRelationNullableModification.d.ts.map +1 -1
  164. package/dist/src/modifications/relations/MakeRelationNullableModification.js +54 -51
  165. package/dist/src/modifications/relations/MakeRelationNullableModification.js.map +1 -1
  166. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts +25 -0
  167. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.d.ts.map +1 -0
  168. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js +84 -0
  169. package/dist/src/modifications/relations/ToggleJunctionEventLogModification.js.map +1 -0
  170. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts +18 -3
  171. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.d.ts.map +1 -1
  172. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js +42 -39
  173. package/dist/src/modifications/relations/UpdateRelationOnDeleteModification.js.map +1 -1
  174. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts +18 -3
  175. package/dist/src/modifications/relations/UpdateRelationOrderByModification.d.ts.map +1 -1
  176. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js +43 -40
  177. package/dist/src/modifications/relations/UpdateRelationOrderByModification.js.map +1 -1
  178. package/dist/src/modifications/relations/index.d.ts +1 -1
  179. package/dist/src/modifications/relations/index.d.ts.map +1 -1
  180. package/dist/src/modifications/relations/index.js +1 -1
  181. package/dist/src/modifications/relations/index.js.map +1 -1
  182. package/dist/src/modifications/settings/UpdateSettingsModification.d.ts +28 -0
  183. package/dist/src/modifications/settings/UpdateSettingsModification.d.ts.map +1 -0
  184. package/dist/src/modifications/settings/UpdateSettingsModification.js +64 -0
  185. package/dist/src/modifications/settings/UpdateSettingsModification.js.map +1 -0
  186. package/dist/src/modifications/settings/index.d.ts +2 -0
  187. package/dist/src/modifications/settings/index.d.ts.map +1 -0
  188. package/dist/src/modifications/settings/index.js +18 -0
  189. package/dist/src/modifications/settings/index.js.map +1 -0
  190. package/dist/src/modifications/utils/columnUtils.d.ts +3 -0
  191. package/dist/src/modifications/utils/columnUtils.d.ts.map +1 -0
  192. package/dist/src/modifications/utils/columnUtils.js +9 -0
  193. package/dist/src/modifications/utils/columnUtils.js.map +1 -0
  194. package/dist/src/modifications/utils/createJunctionTable.d.ts +2 -1
  195. package/dist/src/modifications/utils/createJunctionTable.d.ts.map +1 -1
  196. package/dist/src/modifications/utils/createJunctionTable.js +7 -5
  197. package/dist/src/modifications/utils/createJunctionTable.js.map +1 -1
  198. package/dist/src/modifications/utils/diffUtils.d.ts +14 -12
  199. package/dist/src/modifications/utils/diffUtils.d.ts.map +1 -1
  200. package/dist/src/modifications/utils/diffUtils.js.map +1 -1
  201. package/dist/src/modifications/utils/schemaMeta.d.ts +8 -0
  202. package/dist/src/modifications/utils/schemaMeta.d.ts.map +1 -0
  203. package/dist/src/modifications/utils/schemaMeta.js +13 -0
  204. package/dist/src/modifications/utils/schemaMeta.js.map +1 -0
  205. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts +4 -2
  206. package/dist/src/modifications/utils/schemaUpdateUtils.d.ts.map +1 -1
  207. package/dist/src/modifications/utils/schemaUpdateUtils.js +24 -2
  208. package/dist/src/modifications/utils/schemaUpdateUtils.js.map +1 -1
  209. package/dist/src/modifications/utils/viewDependencies.d.ts +4 -2
  210. package/dist/src/modifications/utils/viewDependencies.d.ts.map +1 -1
  211. package/dist/src/modifications/utils/viewDependencies.js +29 -6
  212. package/dist/src/modifications/utils/viewDependencies.js.map +1 -1
  213. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts +13 -2
  214. package/dist/src/modifications/validation/PatchValidationSchemaModification.d.ts.map +1 -1
  215. package/dist/src/modifications/validation/PatchValidationSchemaModification.js +28 -28
  216. package/dist/src/modifications/validation/PatchValidationSchemaModification.js.map +1 -1
  217. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts +17 -3
  218. package/dist/src/modifications/validation/UpdateValidationSchemaModification.d.ts.map +1 -1
  219. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js +33 -30
  220. package/dist/src/modifications/validation/UpdateValidationSchemaModification.js.map +1 -1
  221. package/dist/src/tsconfig.tsbuildinfo +1 -1
  222. package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js +3 -2
  223. package/dist/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.js.map +1 -1
  224. package/dist/tests/cases/integration/createColumn.test.js +36 -0
  225. package/dist/tests/cases/integration/createColumn.test.js.map +1 -1
  226. package/dist/tests/cases/integration/createManyHasMany.test.js +3 -2
  227. package/dist/tests/cases/integration/createManyHasMany.test.js.map +1 -1
  228. package/dist/tests/cases/integration/createView.test.js +80 -0
  229. package/dist/tests/cases/integration/createView.test.js.map +1 -1
  230. package/dist/tests/cases/integration/removeField.test.js +72 -0
  231. package/dist/tests/cases/integration/removeField.test.js.map +1 -1
  232. package/dist/tests/cases/integration/takenIndexName.test.d.ts +2 -0
  233. package/dist/tests/cases/integration/takenIndexName.test.d.ts.map +1 -0
  234. package/dist/tests/cases/integration/takenIndexName.test.js +307 -0
  235. package/dist/tests/cases/integration/takenIndexName.test.js.map +1 -0
  236. package/dist/tests/cases/integration/updateColumnDefinition.test.js +160 -0
  237. package/dist/tests/cases/integration/updateColumnDefinition.test.js.map +1 -1
  238. package/dist/tests/scripts/checkCreateConsistentMigrations.js +5 -4
  239. package/dist/tests/scripts/checkCreateConsistentMigrations.js.map +1 -1
  240. package/dist/tests/src/tests.d.ts.map +1 -1
  241. package/dist/tests/src/tests.js +15 -5
  242. package/dist/tests/src/tests.js.map +1 -1
  243. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  244. package/package.json +6 -6
  245. package/src/Migration.ts +3 -1
  246. package/src/MigrationCreator.ts +2 -1
  247. package/src/MigrationDescriber.ts +8 -8
  248. package/src/MigrationFilesManager.ts +10 -20
  249. package/src/MigrationsResolver.ts +1 -0
  250. package/src/SchemaDiffer.ts +82 -85
  251. package/src/SchemaMigrator.ts +3 -2
  252. package/src/index.ts +1 -5
  253. package/src/modifications/ModificationHandler.ts +22 -9
  254. package/src/modifications/ModificationHandlerFactory.ts +69 -65
  255. package/src/modifications/acl/PatchAclSchemaModification.ts +7 -8
  256. package/src/modifications/acl/UpdateAclSchemaModification.ts +16 -15
  257. package/src/modifications/columns/CreateColumnModification.ts +21 -18
  258. package/src/modifications/columns/UpdateColumnDefinitionModification.ts +58 -47
  259. package/src/modifications/columns/UpdateColumnNameModification.ts +60 -53
  260. package/src/modifications/constraints/CreateUniqueConstraintModification.ts +23 -17
  261. package/src/modifications/constraints/RemoveUniqueConstraintModification.ts +18 -14
  262. package/src/modifications/differs/ChangeViewNonViewDiffer.ts +2 -2
  263. package/src/modifications/differs/RemoveChangedFieldDiffer.ts +2 -2
  264. package/src/modifications/differs/RemoveChangedViewDiffer.ts +9 -22
  265. package/src/modifications/entities/CreateEntityModification.ts +18 -9
  266. package/src/modifications/entities/CreateViewModification.ts +10 -8
  267. package/src/modifications/entities/RemoveEntityModification.ts +24 -16
  268. package/src/modifications/entities/ToggleEventLogModification.ts +20 -13
  269. package/src/modifications/entities/UpdateEntityNameModification.ts +11 -10
  270. package/src/modifications/entities/UpdateEntityTableNameModification.ts +18 -13
  271. package/src/modifications/entities/UpdateViewModification.ts +7 -7
  272. package/src/modifications/enums/CreateEnumModification.ts +18 -13
  273. package/src/modifications/enums/RemoveEnumModification.ts +14 -12
  274. package/src/modifications/enums/UpdateEnumModification.ts +15 -13
  275. package/src/modifications/fields/RemoveFieldModification.ts +20 -17
  276. package/src/modifications/fields/UpdateFieldNameModification.ts +18 -18
  277. package/src/modifications/index.ts +13 -0
  278. package/src/modifications/indexes/CreateIndexModification.ts +13 -12
  279. package/src/modifications/indexes/RemoveIndexModification.ts +12 -8
  280. package/src/modifications/relations/ConvertOneHasManyToManyHasManyRelationModification.ts +48 -29
  281. package/src/modifications/relations/ConvertOneToManyRelationModification.ts +50 -27
  282. package/src/modifications/relations/CreateRelationInverseSideModification.ts +15 -13
  283. package/src/modifications/relations/CreateRelationModification.ts +65 -35
  284. package/src/modifications/relations/DisableOrphanRemovalModification.ts +15 -12
  285. package/src/modifications/relations/EnableOrphanRemovalModification.ts +16 -13
  286. package/src/modifications/relations/MakeRelationNotNullModification.ts +16 -14
  287. package/src/modifications/relations/MakeRelationNullableModification.ts +17 -13
  288. package/src/modifications/relations/{ToggleManyHasManyEventLogModification.ts → ToggleJunctionEventLogModification.ts} +21 -14
  289. package/src/modifications/relations/UpdateRelationOnDeleteModification.ts +16 -14
  290. package/src/modifications/relations/UpdateRelationOrderByModification.ts +17 -14
  291. package/src/modifications/relations/index.ts +1 -1
  292. package/src/modifications/settings/UpdateSettingsModification.ts +87 -0
  293. package/src/modifications/settings/index.ts +1 -0
  294. package/src/modifications/utils/columnUtils.ts +5 -0
  295. package/src/modifications/utils/createJunctionTable.ts +7 -5
  296. package/src/modifications/utils/diffUtils.ts +12 -12
  297. package/src/modifications/utils/schemaMeta.ts +18 -0
  298. package/src/modifications/utils/schemaUpdateUtils.ts +22 -2
  299. package/src/modifications/utils/viewDependencies.ts +28 -5
  300. package/src/modifications/validation/PatchValidationSchemaModification.ts +7 -7
  301. package/src/modifications/validation/UpdateValidationSchemaModification.ts +17 -14
  302. package/src/tsconfig.json +2 -2
  303. package/tests/cases/integration/convertOneHasManyToManyHasManyRelation.test.ts +3 -2
  304. package/tests/cases/integration/createColumn.test.ts +33 -0
  305. package/tests/cases/integration/createManyHasMany.test.ts +3 -2
  306. package/tests/cases/integration/createView.test.ts +70 -0
  307. package/tests/cases/integration/removeField.test.ts +58 -0
  308. package/tests/cases/integration/takenIndexName.test.ts +314 -0
  309. package/tests/cases/integration/updateColumnDefinition.test.ts +138 -1
  310. package/tests/scripts/checkCreateConsistentMigrations.ts +3 -2
  311. package/tests/src/tests.ts +21 -11
  312. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts +0 -8
  313. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.d.ts.map +0 -1
  314. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js +0 -81
  315. package/dist/src/modifications/relations/ToggleManyHasManyEventLogModification.js.map +0 -1
@@ -1,12 +1,10 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { acceptFieldVisitor } from '@contember/schema-utils'
6
6
 
7
- export const CreateIndexModification: ModificationHandlerStatic<CreateIndexModificationData> = class {
8
- static id = 'createIndex'
9
-
7
+ export class CreateIndexModificationHandler implements ModificationHandler<CreateIndexModificationData> {
10
8
  constructor(private readonly data: CreateIndexModificationData, private readonly schema: Schema) {}
11
9
 
12
10
  public createSql(builder: MigrationBuilder): void {
@@ -17,13 +15,13 @@ export const CreateIndexModification: ModificationHandlerStatic<CreateIndexModif
17
15
  const fields = this.data.index.fields
18
16
  const columns = fields.map(fieldName => {
19
17
  return acceptFieldVisitor(this.schema.model, entity, fieldName, {
20
- visitColumn: ({}, column) => {
18
+ visitColumn: ({ column }) => {
21
19
  return column.columnName
22
20
  },
23
- visitManyHasOne: ({}, relation) => {
21
+ visitManyHasOne: ({ relation }) => {
24
22
  return relation.joiningColumn.columnName
25
23
  },
26
- visitOneHasOneOwning: ({}, relation) => {
24
+ visitOneHasOneOwning: ({ relation }) => {
27
25
  return relation.joiningColumn.columnName
28
26
  },
29
27
  visitOneHasMany: () => {
@@ -62,16 +60,19 @@ export const CreateIndexModification: ModificationHandlerStatic<CreateIndexModif
62
60
  message: `Create index(${this.data.index.fields.join(', ')}) on entity ${this.data.entityName}`,
63
61
  }
64
62
  }
63
+ }
65
64
 
66
- static createModification(data: CreateIndexModificationData) {
67
- return { modification: this.id, ...data }
68
- }
65
+ export const createIndexModification = createModificationType({
66
+ id: 'createIndex',
67
+ handler: CreateIndexModificationHandler,
68
+ })
69
69
 
70
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
70
+ export class CreateIndexDiffer implements Differ {
71
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
71
72
  return Object.values(updatedSchema.model.entities).flatMap(entity =>
72
73
  Object.values(entity.indexes)
73
74
  .filter(it => !originalSchema.model.entities[entity.name].indexes[it.name])
74
- .map(index => CreateIndexModification.createModification({ entityName: entity.name, index })),
75
+ .map(index => createIndexModification.createModification({ entityName: entity.name, index })),
75
76
  )
76
77
  }
77
78
  }
@@ -1,11 +1,10 @@
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 { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import deepEqual from 'fast-deep-equal'
6
6
 
7
- export const RemoveIndexModification: ModificationHandlerStatic<RemoveIndexModificationData> = class {
8
- static id = 'removeIndex'
7
+ export class RemoveIndexModificationHandler implements ModificationHandler<RemoveIndexModificationData> {
9
8
  constructor(private readonly data: RemoveIndexModificationData, private readonly schema: Schema) {}
10
9
 
11
10
  public createSql(builder: MigrationBuilder): void {
@@ -34,12 +33,17 @@ export const RemoveIndexModification: ModificationHandlerStatic<RemoveIndexModif
34
33
  const fields = this.schema.model.entities[this.data.entityName].indexes[this.data.indexName].fields
35
34
  return { message: `Remove index (${fields.join(', ')}) on entity ${this.data.entityName}` }
36
35
  }
36
+ }
37
37
 
38
- static createModification(data: RemoveIndexModificationData) {
39
- return { modification: this.id, ...data }
40
- }
38
+ export const removeIndexModification = createModificationType({
39
+ id: 'removeIndex',
40
+ handler: RemoveIndexModificationHandler,
41
+ })
42
+
43
+
44
+ export class RemoveIndexDiffer implements Differ {
41
45
 
42
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
46
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
43
47
  return Object.values(originalSchema.model.entities).flatMap(entity =>
44
48
  Object.values(entity.indexes)
45
49
  .filter(
@@ -49,7 +53,7 @@ export const RemoveIndexModification: ModificationHandlerStatic<RemoveIndexModif
49
53
  !deepEqual(it.fields, updatedSchema.model.entities[entity.name].indexes[it.name].fields)),
50
54
  )
51
55
  .map(index =>
52
- RemoveIndexModification.createModification({
56
+ removeIndexModification.createModification({
53
57
  entityName: entity.name,
54
58
  indexName: index.name,
55
59
  }),
@@ -1,24 +1,36 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { addField, SchemaUpdater, updateEntity, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandler, ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
5
- import { isInverseRelation, isOwningRelation } from '@contember/schema-utils'
3
+ import {
4
+ addField,
5
+ addTakenIndexName,
6
+ SchemaUpdater,
7
+ updateEntity,
8
+ updateModel,
9
+ updateSchema,
10
+ } from '../utils/schemaUpdateUtils'
11
+ import {
12
+ createModificationType,
13
+ Differ,
14
+ ModificationHandler,
15
+ ModificationHandlerOptions,
16
+ } from '../ModificationHandler'
17
+ import { isInverseRelation, isOwningRelation, NamingHelper } from '@contember/schema-utils'
6
18
  import { updateRelations } from '../utils/diffUtils'
7
- import { UpdateFieldNameModification } from '../fields'
8
19
  import { createJunctionTableSql } from '../utils/createJunctionTable'
9
20
  import { wrapIdentifier } from '@contember/database'
10
21
  import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
22
+ import { updateFieldNameModification } from '../fields'
23
+ import { SchemaWithMeta } from '../utils/schemaMeta'
11
24
 
12
- export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHandlerStatic<ConvertOneHasManyToManyHasManyRelationModificationData> = class {
13
- static id = 'convertOneHasManyToManyHasManyRelation'
25
+ export class ConvertOneHasManyToManyHasManyRelationModificationHandler implements ModificationHandler<ConvertOneHasManyToManyHasManyRelationModificationData> {
14
26
  private subModification: ModificationHandler<any>
15
27
 
16
28
  constructor(
17
29
  private readonly data: ConvertOneHasManyToManyHasManyRelationModificationData,
18
- private readonly schema: Schema,
30
+ private readonly schema: SchemaWithMeta,
19
31
  private readonly options: ModificationHandlerOptions,
20
32
  ) {
21
- this.subModification = new UpdateFieldNameModification(
33
+ this.subModification = updateFieldNameModification.createHandler(
22
34
  {
23
35
  entityName: this.data.entityName,
24
36
  fieldName: this.data.fieldName,
@@ -34,7 +46,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
34
46
  const { relation: oldRelation } = this.getRelation()
35
47
  const entity = this.schema.model.entities[this.data.entityName]
36
48
 
37
- createJunctionTableSql(builder, this.options.systemSchema, entity, targetEntity, normalizeManyHasManyRelation(this.data.owningSide))
49
+ createJunctionTableSql(builder, this.options.systemSchema, this.schema, entity, targetEntity, normalizeManyHasManyRelation(this.data.owningSide))
38
50
  const joiningTable = this.data.owningSide.joiningTable
39
51
  builder.sql(`
40
52
  INSERT INTO ${wrapIdentifier(joiningTable.tableName)} (
@@ -54,6 +66,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
54
66
  this.subModification.getSchemaUpdater(),
55
67
  updateModel(updateEntity(entityName, addField(normalizeManyHasManyRelation(this.data.owningSide)))),
56
68
  this.data.inverseSide ? updateModel(updateEntity(this.data.owningSide.target, addField(this.data.inverseSide))) : undefined,
69
+ addTakenIndexName(NamingHelper.createJunctionTablePrimaryConstraintName(this.data.owningSide.joiningTable.tableName)),
57
70
  )
58
71
  }
59
72
 
@@ -63,11 +76,33 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
63
76
  }
64
77
  }
65
78
 
66
- static createModification(data: ConvertOneHasManyToManyHasManyRelationModificationData) {
67
- return { modification: this.id, ...data }
79
+
80
+
81
+
82
+ private getRelation(): { entity: Model.Entity; relation: Model.ManyHasOneRelation } {
83
+ const entity = this.schema.model.entities[this.data.entityName]
84
+ const relation = entity.fields[this.data.fieldName]
85
+ if (relation.type !== Model.RelationType.ManyHasOne) {
86
+ throw new Error()
87
+ }
88
+ return { entity, relation }
68
89
  }
90
+ }
91
+
92
+ export const convertOneHasManyToManyHasManyRelationModification = createModificationType({
93
+ id: 'convertOneHasManyToManyHasManyRelation',
94
+ handler: ConvertOneHasManyToManyHasManyRelationModificationHandler,
95
+ })
69
96
 
70
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
97
+ export interface ConvertOneHasManyToManyHasManyRelationModificationData {
98
+ entityName: string
99
+ fieldName: string
100
+ owningSide: PartialManyHasManyRelation
101
+ inverseSide?: Model.ManyHasManyInverseRelation
102
+ }
103
+
104
+ export class ConvertOneHasManyToManyHasManyRelationDiffer implements Differ {
105
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
71
106
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
72
107
  if (
73
108
  isInverseRelation(originalRelation) &&
@@ -81,7 +116,7 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
81
116
  if (owningSide.type !== Model.RelationType.ManyHasMany || !isOwningRelation(owningSide)) {
82
117
  throw new Error()
83
118
  }
84
- return ConvertOneHasManyToManyHasManyRelationModification.createModification({
119
+ return convertOneHasManyToManyHasManyRelationModification.createModification({
85
120
  entityName: updatedRelation.target,
86
121
  fieldName: owningOldName,
87
122
  owningSide,
@@ -91,20 +126,4 @@ export const ConvertOneHasManyToManyHasManyRelationModification: ModificationHan
91
126
  return undefined
92
127
  })
93
128
  }
94
-
95
- private getRelation(): { entity: Model.Entity; relation: Model.ManyHasOneRelation } {
96
- const entity = this.schema.model.entities[this.data.entityName]
97
- const relation = entity.fields[this.data.fieldName]
98
- if (relation.type !== Model.RelationType.ManyHasOne) {
99
- throw new Error()
100
- }
101
- return { entity, relation }
102
- }
103
- }
104
-
105
- export interface ConvertOneHasManyToManyHasManyRelationModificationData {
106
- entityName: string
107
- fieldName: string
108
- owningSide: PartialManyHasManyRelation
109
- inverseSide?: Model.ManyHasManyInverseRelation
110
129
  }
@@ -1,24 +1,36 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
- import { SchemaUpdater, updateEntity, updateField, updateModel, updateSchema } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandler, ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
3
+ import {
4
+ addTakenIndexName,
5
+ SchemaUpdater,
6
+ updateEntity,
7
+ updateField,
8
+ updateModel,
9
+ updateSchema,
10
+ } from '../utils/schemaUpdateUtils'
11
+ import {
12
+ createModificationType,
13
+ Differ,
14
+ ModificationHandler,
15
+ ModificationHandlerOptions,
16
+ } from '../ModificationHandler'
5
17
  import { isOwningRelation, NamingHelper } from '@contember/schema-utils'
6
18
  import { updateRelations } from '../utils/diffUtils'
7
- import { UpdateFieldNameModification } from '../fields'
8
19
  import { NoopModification } from '../NoopModification'
20
+ import { updateFieldNameModification } from '../fields'
21
+ import { resolveIndexName, SchemaWithMeta } from '../utils/schemaMeta'
9
22
 
10
- export const ConvertOneToManyRelationModification: ModificationHandlerStatic<ConvertOneToManyRelationModificationData> = class {
11
- static id = 'convertOneToManyRelation'
23
+ export class ConvertOneToManyRelationModificationHandler implements ModificationHandler<ConvertOneToManyRelationModificationData> {
12
24
  private subModification: ModificationHandler<any>
13
25
 
14
26
  constructor(
15
27
  private readonly data: ConvertOneToManyRelationModificationData,
16
- private readonly schema: Schema,
28
+ private readonly schema: SchemaWithMeta,
17
29
  private readonly options: ModificationHandlerOptions,
18
30
  ) {
19
31
  const { relation } = this.getRelation()
20
32
  this.subModification = data.newInverseSideFieldName && relation.inversedBy ?
21
- new UpdateFieldNameModification(
33
+ updateFieldNameModification.createHandler(
22
34
  {
23
35
  entityName: relation.target,
24
36
  fieldName: relation.inversedBy,
@@ -32,7 +44,12 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
32
44
 
33
45
  public createSql(builder: MigrationBuilder): void {
34
46
  const { entity, relation } = this.getRelation()
35
- builder.addIndex(entity.tableName, relation.joiningColumn.columnName)
47
+ 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,
52
+ })
36
53
  const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
37
54
  builder.dropConstraint(entity.tableName, uniqueConstraintName)
38
55
  this.subModification.createSql(builder)
@@ -41,6 +58,8 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
41
58
  public getSchemaUpdater(): SchemaUpdater {
42
59
  const { relation } = this.getRelation()
43
60
  const { entityName, fieldName } = this.data
61
+ const entity = this.schema.model.entities[this.data.entityName]
62
+ const field = entity.fields[fieldName] as Model.OneHasOneOwningRelation
44
63
  return updateSchema(
45
64
  updateModel(
46
65
  updateEntity(
@@ -68,6 +87,7 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
68
87
  ),
69
88
  ),
70
89
  ) : undefined,
90
+ addTakenIndexName(NamingHelper.createForeignKeyIndexName(entity.tableName, field.joiningColumn.columnName)),
71
91
  )
72
92
  }
73
93
 
@@ -77,11 +97,29 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
77
97
  }
78
98
  }
79
99
 
80
- static createModification(data: ConvertOneToManyRelationModificationData) {
81
- return { modification: this.id, ...data }
100
+ private getRelation() {
101
+ const entity = this.schema.model.entities[this.data.entityName]
102
+ const relation = entity.fields[this.data.fieldName]
103
+ if (relation.type !== Model.RelationType.OneHasOne || !isOwningRelation(relation)) {
104
+ throw new Error()
105
+ }
106
+ return { entity, relation }
82
107
  }
108
+ }
109
+
110
+ export interface ConvertOneToManyRelationModificationData {
111
+ entityName: string
112
+ fieldName: string
113
+ newInverseSideFieldName?: string
114
+ }
83
115
 
84
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
116
+ export const convertOneToManyRelationModification = createModificationType({
117
+ id: 'convertOneToManyRelation',
118
+ handler: ConvertOneToManyRelationModificationHandler,
119
+ })
120
+
121
+ export class ConvertOneToManyRelationDiffer implements Differ {
122
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
85
123
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
86
124
  if (
87
125
  isOwningRelation(originalRelation) &&
@@ -90,7 +128,7 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
90
128
  updatedRelation.type === Model.RelationType.ManyHasOne
91
129
  ) {
92
130
  const isInverseSideRenamed = originalRelation.inversedBy && updatedRelation.inversedBy && originalRelation.inversedBy !== updatedRelation.inversedBy
93
- return ConvertOneToManyRelationModification.createModification({
131
+ return convertOneToManyRelationModification.createModification({
94
132
  entityName: updatedEntity.name,
95
133
  fieldName: updatedRelation.name,
96
134
  ...(isInverseSideRenamed ? {
@@ -101,19 +139,4 @@ export const ConvertOneToManyRelationModification: ModificationHandlerStatic<Con
101
139
  return undefined
102
140
  })
103
141
  }
104
-
105
- private getRelation() {
106
- const entity = this.schema.model.entities[this.data.entityName]
107
- const relation = entity.fields[this.data.fieldName]
108
- if (relation.type !== Model.RelationType.OneHasOne || !isOwningRelation(relation)) {
109
- throw new Error()
110
- }
111
- return { entity, relation }
112
- }
113
- }
114
-
115
- export interface ConvertOneToManyRelationModificationData {
116
- entityName: string
117
- fieldName: string
118
- newInverseSideFieldName?: string
119
142
  }
@@ -1,12 +1,11 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { addField, SchemaUpdater, updateEntity, updateField, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { createFields } from '../utils/diffUtils'
6
6
  import { isInverseRelation, isRelation } from '@contember/schema-utils'
7
7
 
8
- export const CreateRelationInverseSideModification: ModificationHandlerStatic<CreateRelationInverseSideModificationData> = class {
9
- static id = 'createRelationInverseSide'
8
+ export class CreateRelationInverseSideModificationHandler implements ModificationHandler<CreateRelationInverseSideModificationData> {
10
9
  constructor(private readonly data: CreateRelationInverseSideModificationData, private readonly schema: Schema) {}
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {}
@@ -27,25 +26,28 @@ export const CreateRelationInverseSideModification: ModificationHandlerStatic<Cr
27
26
  describe() {
28
27
  return { message: `Add relation ${this.data.entityName}.${this.data.relation.name}` }
29
28
  }
29
+ }
30
30
 
31
- static createModification(data: CreateRelationInverseSideModificationData) {
32
- return { modification: this.id, ...data }
33
- }
31
+ export interface CreateRelationInverseSideModificationData {
32
+ entityName: string
33
+ relation: Model.AnyRelation & Model.InverseRelation
34
+ }
34
35
 
35
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
+ export const createRelationInverseSideModification = createModificationType({
37
+ id: 'createRelationInverseSide',
38
+ handler: CreateRelationInverseSideModificationHandler,
39
+ })
40
+
41
+ export class CreateRelationInverseSideDiffer implements Differ {
42
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
43
  return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
37
44
  if (!isRelation(newField) || !isInverseRelation(newField)) {
38
45
  return undefined
39
46
  }
40
- return CreateRelationInverseSideModification.createModification({
47
+ return createRelationInverseSideModification.createModification({
41
48
  entityName: updatedEntity.name,
42
49
  relation: newField,
43
50
  })
44
51
  })
45
52
  }
46
53
  }
47
-
48
- export interface CreateRelationInverseSideModificationData {
49
- entityName: string
50
- relation: Model.AnyRelation & Model.InverseRelation
51
- }
@@ -7,21 +7,33 @@ import {
7
7
  NamingHelper,
8
8
  } from '@contember/schema-utils'
9
9
  import { MigrationBuilder } from '@contember/database-migrations'
10
- import { addField, SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
11
- import { ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
10
+ import {
11
+ addField,
12
+ addTakenIndexName,
13
+ SchemaUpdater,
14
+ updateEntity,
15
+ updateModel,
16
+ updateSchema,
17
+ } from '../utils/schemaUpdateUtils'
18
+ import {
19
+ createModificationType,
20
+ Differ,
21
+ ModificationHandler,
22
+ ModificationHandlerOptions,
23
+ } from '../ModificationHandler'
12
24
  import { isIt } from '../../utils/isIt'
13
25
  import { createFields } from '../utils/diffUtils'
14
26
  import { getPrimaryColumnType } from '../utils/getPrimaryColumnType'
15
27
  import { createJunctionTableSql } from '../utils/createJunctionTable'
16
28
  import { normalizeManyHasManyRelation, PartialManyHasManyRelation } from './normalization'
29
+ import { resolveIndexName, SchemaWithMeta } from '../utils/schemaMeta'
17
30
 
18
31
 
19
- export const CreateRelationModification: ModificationHandlerStatic<CreateRelationModificationData> = class {
20
- static id = 'createRelation'
32
+ export class CreateRelationModificationHandler implements ModificationHandler<CreateRelationModificationData> {
21
33
 
22
34
  constructor(
23
35
  private readonly data: CreateRelationModificationData,
24
- private readonly schema: Schema,
36
+ private readonly schema: SchemaWithMeta,
25
37
  private readonly options: ModificationHandlerOptions,
26
38
  ) {}
27
39
 
@@ -55,29 +67,43 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
55
67
  })
56
68
  }
57
69
  acceptRelationTypeVisitor(this.schema.model, entity, this.getNormalizedOwningSide(), {
58
- visitManyHasOne: ({}, relation, {}, _) => {
70
+ visitManyHasOne: ({ relation }) => {
59
71
  createOwningSide(relation)
60
- builder.addIndex(entity.tableName, relation.joiningColumn.columnName)
72
+ const columnName = relation.joiningColumn.columnName
73
+ const proposedIndexName = NamingHelper.createForeignKeyIndexName(entity.tableName, columnName)
74
+ const indexName = resolveIndexName(this.schema, proposedIndexName)
75
+ builder.addIndex(entity.tableName, columnName, {
76
+ name: indexName,
77
+ })
61
78
  },
62
79
  visitOneHasMany: () => {},
63
- visitOneHasOneOwning: ({}, relation, {}, _) => {
80
+ visitOneHasOneOwning: ({ relation }) => {
64
81
  createOwningSide(relation)
65
82
  const uniqueConstraintName = NamingHelper.createUniqueConstraintName(entity.name, [relation.name])
66
83
  builder.addConstraint(entity.tableName, uniqueConstraintName, { unique: [relation.joiningColumn.columnName] })
67
84
  },
68
85
  visitOneHasOneInverse: () => {},
69
- visitManyHasManyOwning: ({}, relation, {}, _) => {
70
- createJunctionTableSql(builder, this.options.systemSchema, entity, targetEntity, relation)
86
+ visitManyHasManyOwning: ({ relation }) => {
87
+ createJunctionTableSql(builder, this.options.systemSchema, this.schema, entity, targetEntity, relation)
71
88
  },
72
89
  visitManyHasManyInverse: () => {},
73
90
  })
74
91
  }
75
92
 
76
93
  public getSchemaUpdater(): SchemaUpdater {
77
- return updateModel(
78
- updateEntity(this.data.entityName, addField(this.getNormalizedOwningSide())),
79
- this.data.inverseSide !== undefined
80
- ? updateEntity(this.data.owningSide.target, addField(this.data.inverseSide))
94
+ const entity = this.schema.model.entities[this.data.entityName]
95
+ return updateSchema(
96
+ updateModel(
97
+ updateEntity(this.data.entityName, addField(this.getNormalizedOwningSide())),
98
+ this.data.inverseSide !== undefined
99
+ ? updateEntity(this.data.owningSide.target, addField(this.data.inverseSide))
100
+ : undefined,
101
+ ),
102
+ this.data.owningSide.type === Model.RelationType.ManyHasOne
103
+ ? addTakenIndexName(NamingHelper.createForeignKeyIndexName(entity.tableName, this.data.owningSide.joiningColumn.columnName))
104
+ : undefined,
105
+ this.data.owningSide.type === Model.RelationType.ManyHasMany && isOwningRelation(this.data.owningSide)
106
+ ? addTakenIndexName(NamingHelper.createJunctionTablePrimaryConstraintName(this.data.owningSide.joiningTable.tableName))
81
107
  : undefined,
82
108
  )
83
109
  }
@@ -91,11 +117,32 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
91
117
  return { message: `Add relation ${this.data.entityName}.${this.data.owningSide.name}`, failureWarning }
92
118
  }
93
119
 
94
- static createModification(data: CreateRelationModificationData) {
95
- return { modification: this.id, ...data }
120
+
121
+ private getNormalizedOwningSide(): Model.AnyOwningRelation {
122
+ if (this.data.owningSide.type === Model.RelationType.ManyHasMany) {
123
+ return normalizeManyHasManyRelation(this.data.owningSide)
124
+ }
125
+ return this.data.owningSide
96
126
  }
127
+ }
128
+
97
129
 
98
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
130
+ export type CreateRelationModificationData = {
131
+ entityName: string
132
+ owningSide:
133
+ | Model.ManyHasOneRelation
134
+ | Model.OneHasOneOwningRelation
135
+ | PartialManyHasManyRelation
136
+ inverseSide?: Model.AnyInverseRelation
137
+ }
138
+
139
+ export const createRelationModification = createModificationType({
140
+ id: 'createRelation',
141
+ handler: CreateRelationModificationHandler,
142
+ })
143
+
144
+ export class CreateRelationDiffer implements Differ {
145
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
99
146
  return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
100
147
  if (!isRelation(newField) || !isOwningRelation(newField)) {
101
148
  return undefined
@@ -106,28 +153,11 @@ export const CreateRelationModification: ModificationHandlerStatic<CreateRelatio
106
153
  if (inverseSide && !(isRelation(inverseSide) && isInverseRelation(inverseSide))) {
107
154
  throw new Error()
108
155
  }
109
- return CreateRelationModification.createModification({
156
+ return createRelationModification.createModification({
110
157
  entityName: updatedEntity.name,
111
158
  owningSide: newField,
112
159
  ...(inverseSide ? { inverseSide } : {}),
113
160
  })
114
161
  })
115
162
  }
116
-
117
- private getNormalizedOwningSide(): Model.AnyOwningRelation {
118
- if (this.data.owningSide.type === Model.RelationType.ManyHasMany) {
119
- return normalizeManyHasManyRelation(this.data.owningSide)
120
- }
121
- return this.data.owningSide
122
- }
123
- }
124
-
125
-
126
- export type CreateRelationModificationData = {
127
- entityName: string
128
- owningSide:
129
- | Model.ManyHasOneRelation
130
- | Model.OneHasOneOwningRelation
131
- | PartialManyHasManyRelation
132
- inverseSide?: Model.AnyInverseRelation
133
163
  }
@@ -1,12 +1,11 @@
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 { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { isOwningRelation } from '@contember/schema-utils'
6
6
  import { updateRelations } from '../utils/diffUtils'
7
7
 
8
- export const DisableOrphanRemovalModification: ModificationHandlerStatic<DisableOrphanRemovalModificationData> = class {
9
- static id = 'disableOrphanRemoval'
8
+ export class DisableOrphanRemovalModificationHandler implements ModificationHandler<DisableOrphanRemovalModificationData> {
10
9
 
11
10
  constructor(private readonly data: DisableOrphanRemovalModificationData, private readonly schema: Schema) {}
12
11
 
@@ -27,12 +26,20 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
27
26
  message: `Disable orphan removal on ${this.data.entityName}.${this.data.fieldName}`,
28
27
  }
29
28
  }
29
+ }
30
30
 
31
- static createModification(data: DisableOrphanRemovalModificationData) {
32
- return { modification: this.id, ...data }
33
- }
31
+ export interface DisableOrphanRemovalModificationData {
32
+ entityName: string
33
+ fieldName: string
34
+ }
34
35
 
35
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
+ export const disableOrphanRemovalModification = createModificationType({
37
+ id: 'disableOrphanRemoval',
38
+ handler: DisableOrphanRemovalModificationHandler,
39
+ })
40
+
41
+ export class DisableOrphanRemovalDiffer implements Differ {
42
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
43
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
37
44
  if (
38
45
  isOwningRelation(originalRelation) &&
@@ -42,7 +49,7 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
42
49
  originalRelation.orphanRemoval &&
43
50
  !updatedRelation.orphanRemoval
44
51
  ) {
45
- return DisableOrphanRemovalModification.createModification({
52
+ return disableOrphanRemovalModification.createModification({
46
53
  entityName: updatedEntity.name,
47
54
  fieldName: updatedRelation.name,
48
55
  })
@@ -51,7 +58,3 @@ export const DisableOrphanRemovalModification: ModificationHandlerStatic<Disable
51
58
  })
52
59
  }
53
60
  }
54
- export interface DisableOrphanRemovalModificationData {
55
- entityName: string
56
- fieldName: string
57
- }