@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,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 EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOrphanRemovalModificationData> = class {
9
- static id = 'enableOrphanRemoval'
8
+ export class EnableOrphanRemovalModificationHandler implements ModificationHandler<EnableOrphanRemovalModificationData> {
10
9
  constructor(private readonly data: EnableOrphanRemovalModificationData, private readonly schema: Schema) {}
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {}
@@ -30,11 +29,20 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
30
29
  }
31
30
  }
32
31
 
33
- static createModification(data: EnableOrphanRemovalModificationData) {
34
- return { modification: this.id, ...data }
35
- }
32
+ }
33
+
34
+ export interface EnableOrphanRemovalModificationData {
35
+ entityName: string
36
+ fieldName: string
37
+ }
36
38
 
37
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
39
+ export const enableOrphanRemovalModification = createModificationType({
40
+ id: 'enableOrphanRemoval',
41
+ handler: EnableOrphanRemovalModificationHandler,
42
+ })
43
+
44
+ export class EnableOrphanRemovalDiffer implements Differ {
45
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
38
46
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
39
47
  if (
40
48
  isOwningRelation(originalRelation) &&
@@ -44,7 +52,7 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
44
52
  !originalRelation.orphanRemoval &&
45
53
  updatedRelation.orphanRemoval
46
54
  ) {
47
- return EnableOrphanRemovalModification.createModification({
55
+ return enableOrphanRemovalModification.createModification({
48
56
  entityName: updatedEntity.name,
49
57
  fieldName: updatedRelation.name,
50
58
  })
@@ -53,8 +61,3 @@ export const EnableOrphanRemovalModification: ModificationHandlerStatic<EnableOr
53
61
  })
54
62
  }
55
63
  }
56
-
57
- export interface EnableOrphanRemovalModificationData {
58
- entityName: string
59
- fieldName: string
60
- }
@@ -1,13 +1,12 @@
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 { getEntity, tryGetColumnName } from '@contember/schema-utils'
6
6
  import { isIt } from '../../utils/isIt'
7
7
  import { updateRelations } from '../utils/diffUtils'
8
8
 
9
- export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRelationNotNullModificationData> = class {
10
- static id = 'makeRelationNotNull'
9
+ export class MakeRelationNotNullModificationHandler implements ModificationHandler<MakeRelationNotNullModificationData> {
11
10
  constructor(private readonly data: MakeRelationNotNullModificationData, private readonly schema: Schema) {}
12
11
 
13
12
  public createSql(builder: MigrationBuilder): void {
@@ -43,12 +42,21 @@ export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRela
43
42
  failureWarning: 'Changing to not-null may fail in runtime',
44
43
  }
45
44
  }
45
+ }
46
46
 
47
- static createModification(data: MakeRelationNotNullModificationData) {
48
- return { modification: this.id, ...data }
49
- }
47
+ export interface MakeRelationNotNullModificationData {
48
+ entityName: string
49
+ fieldName: string
50
+ // todo fillValue
51
+ }
50
52
 
51
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
53
+ export const makeRelationNotNullModification = createModificationType({
54
+ id: 'makeRelationNotNull',
55
+ handler: MakeRelationNotNullModificationHandler,
56
+ })
57
+
58
+ export class MakeRelationNotNullDiffer implements Differ {
59
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
52
60
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
53
61
  if (
54
62
  originalRelation.type === updatedRelation.type &&
@@ -57,7 +65,7 @@ export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRela
57
65
  !updatedRelation.nullable &&
58
66
  originalRelation.nullable
59
67
  ) {
60
- return MakeRelationNotNullModification.createModification({
68
+ return makeRelationNotNullModification.createModification({
61
69
  entityName: updatedEntity.name,
62
70
  fieldName: updatedRelation.name,
63
71
  })
@@ -66,9 +74,3 @@ export const MakeRelationNotNullModification: ModificationHandlerStatic<MakeRela
66
74
  })
67
75
  }
68
76
  }
69
-
70
- export interface MakeRelationNotNullModificationData {
71
- entityName: string
72
- fieldName: string
73
- // todo fillValue
74
- }
@@ -1,13 +1,12 @@
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 { getEntity, tryGetColumnName } from '@contember/schema-utils'
6
6
  import { isIt } from '../../utils/isIt'
7
7
  import { updateRelations } from '../utils/diffUtils'
8
8
 
9
- export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRelationNullableModificationData> = class {
10
- static id = 'makeRelationNullable'
9
+ export class MakeRelationNullableModificationHandler implements ModificationHandler<MakeRelationNullableModificationData> {
11
10
  constructor(private readonly data: MakeRelationNullableModificationData, private readonly schema: Schema) {}
12
11
 
13
12
  public createSql(builder: MigrationBuilder): void {
@@ -43,11 +42,21 @@ export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRel
43
42
  }
44
43
  }
45
44
 
46
- static createModification(data: MakeRelationNullableModificationData) {
47
- return { modification: this.id, ...data }
48
- }
45
+ }
46
+
47
+ export interface MakeRelationNullableModificationData {
48
+ entityName: string
49
+ fieldName: string
50
+ }
49
51
 
50
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
52
+
53
+ export const makeRelationNullableModification = createModificationType({
54
+ id: 'makeRelationNullable',
55
+ handler: MakeRelationNullableModificationHandler,
56
+ })
57
+
58
+ export class MakeRelationNullableDiffer implements Differ {
59
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
51
60
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
52
61
  if (
53
62
  originalRelation.type === updatedRelation.type &&
@@ -56,7 +65,7 @@ export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRel
56
65
  updatedRelation.nullable &&
57
66
  !originalRelation.nullable
58
67
  ) {
59
- return MakeRelationNullableModification.createModification({
68
+ return makeRelationNullableModification.createModification({
60
69
  entityName: updatedEntity.name,
61
70
  fieldName: updatedRelation.name,
62
71
  })
@@ -65,8 +74,3 @@ export const MakeRelationNullableModification: ModificationHandlerStatic<MakeRel
65
74
  })
66
75
  }
67
76
  }
68
-
69
- export interface MakeRelationNullableModificationData {
70
- entityName: string
71
- fieldName: string
72
- }
@@ -1,7 +1,12 @@
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 { ModificationHandlerOptions, ModificationHandlerStatic } from '../ModificationHandler'
4
+ import {
5
+ createModificationType,
6
+ Differ,
7
+ ModificationHandler,
8
+ ModificationHandlerOptions,
9
+ } from '../ModificationHandler'
5
10
  import {
6
11
  createEventTrigger,
7
12
  createEventTrxTrigger,
@@ -12,8 +17,7 @@ import { isOwningRelation, isRelation } from '@contember/schema-utils'
12
17
  import { updateRelations } from '../utils/diffUtils'
13
18
  import { isIt } from '../../utils/isIt'
14
19
 
15
- export const ToggleJunctionEventLogModification: ModificationHandlerStatic<ToggleJunctionEventLogModificationData> = class {
16
- static id = 'toggleJunctionEventLog'
20
+ export class ToggleJunctionEventLogModificationHandler implements ModificationHandler<ToggleJunctionEventLogModificationData> {
17
21
 
18
22
  constructor(
19
23
  private readonly data: ToggleJunctionEventLogModificationData,
@@ -67,12 +71,21 @@ export const ToggleJunctionEventLogModification: ModificationHandlerStatic<Toggl
67
71
  message: `${this.data.enabled ? 'Enable' : 'Disable'} event log for ${this.data.entityName}.${this.data.fieldName}`,
68
72
  }
69
73
  }
74
+ }
70
75
 
71
- static createModification(data: ToggleJunctionEventLogModificationData) {
72
- return { modification: this.id, ...data }
73
- }
76
+ export interface ToggleJunctionEventLogModificationData {
77
+ entityName: string
78
+ fieldName: string
79
+ enabled: boolean
80
+ }
74
81
 
75
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
82
+ export const toggleJunctionEventLogModification = createModificationType({
83
+ id: 'toggleJunctionEventLog',
84
+ handler: ToggleJunctionEventLogModificationHandler,
85
+ })
86
+
87
+ export class ToggleJunctionEventLogDiffer implements Differ {
88
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
76
89
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
77
90
  if (
78
91
  originalRelation.type === updatedRelation.type &&
@@ -82,7 +95,7 @@ export const ToggleJunctionEventLogModification: ModificationHandlerStatic<Toggl
82
95
  const newValue = updatedRelation.joiningTable.eventLog?.enabled ?? false
83
96
  const oldValue = originalRelation.joiningTable.eventLog?.enabled ?? false
84
97
  if (newValue !== oldValue) {
85
- return ToggleJunctionEventLogModification.createModification({
98
+ return toggleJunctionEventLogModification.createModification({
86
99
  entityName: updatedEntity.name,
87
100
  fieldName: updatedRelation.name,
88
101
  enabled: newValue,
@@ -94,9 +107,3 @@ export const ToggleJunctionEventLogModification: ModificationHandlerStatic<Toggl
94
107
 
95
108
  }
96
109
  }
97
-
98
- export interface ToggleJunctionEventLogModificationData {
99
- entityName: string
100
- fieldName: string
101
- enabled: boolean
102
- }
@@ -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 { isIt } from '../../utils/isIt'
6
6
  import { updateRelations } from '../utils/diffUtils'
7
7
 
8
- export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<UpdateRelationOnDeleteModificationData> = class {
9
- static id = 'updateRelationOnDelete'
8
+ export class UpdateRelationOnDeleteModificationHandler implements ModificationHandler<UpdateRelationOnDeleteModificationData> {
10
9
  constructor(private readonly data: UpdateRelationOnDeleteModificationData, private readonly schema: Schema) {}
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {}
@@ -27,12 +26,21 @@ export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<Updat
27
26
  describe() {
28
27
  return { message: `Change on-delete policy of relation ${this.data.entityName}.${this.data.fieldName}` }
29
28
  }
29
+ }
30
30
 
31
- static createModification(data: UpdateRelationOnDeleteModificationData) {
32
- return { modification: this.id, ...data }
33
- }
31
+ export interface UpdateRelationOnDeleteModificationData {
32
+ entityName: string
33
+ fieldName: string
34
+ onDelete: Model.OnDelete
35
+ }
34
36
 
35
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
37
+ export const updateRelationOnDeleteModification = createModificationType({
38
+ id: 'updateRelationOnDelete',
39
+ handler: UpdateRelationOnDeleteModificationHandler,
40
+ })
41
+
42
+ export class UpdateRelationOnDeleteDiffer implements Differ {
43
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
44
  return updateRelations(originalSchema, updatedSchema, ({ originalRelation, updatedRelation, updatedEntity }) => {
37
45
  if (
38
46
  originalRelation.type === updatedRelation.type &&
@@ -40,7 +48,7 @@ export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<Updat
40
48
  isIt<Model.JoiningColumnRelation>(originalRelation, 'joiningColumn') &&
41
49
  updatedRelation.joiningColumn.onDelete !== originalRelation.joiningColumn.onDelete
42
50
  ) {
43
- return UpdateRelationOnDeleteModification.createModification({
51
+ return updateRelationOnDeleteModification.createModification({
44
52
  entityName: updatedEntity.name,
45
53
  fieldName: updatedRelation.name,
46
54
  onDelete: updatedRelation.joiningColumn.onDelete,
@@ -50,9 +58,3 @@ export const UpdateRelationOnDeleteModification: ModificationHandlerStatic<Updat
50
58
  })
51
59
  }
52
60
  }
53
-
54
- export interface UpdateRelationOnDeleteModificationData {
55
- entityName: string
56
- fieldName: string
57
- onDelete: Model.OnDelete
58
- }
@@ -1,12 +1,12 @@
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 deepEqual from 'fast-deep-equal'
6
6
  import { updateRelations } from '../utils/diffUtils'
7
7
 
8
- export const UpdateRelationOrderByModification: ModificationHandlerStatic<UpdateRelationOrderByModificationData> = class {
9
- static id = 'updateRelationOrderBy'
8
+ export class UpdateRelationOrderByModificationHandler implements ModificationHandler<UpdateRelationOrderByModificationData> {
9
+
10
10
  constructor(private readonly data: UpdateRelationOrderByModificationData, private readonly schema: Schema) {}
11
11
 
12
12
  public createSql(builder: MigrationBuilder): void {}
@@ -27,12 +27,21 @@ export const UpdateRelationOrderByModification: ModificationHandlerStatic<Update
27
27
  describe() {
28
28
  return { message: `Update order-by of relation ${this.data.entityName}.${this.data.fieldName}` }
29
29
  }
30
+ }
30
31
 
31
- static createModification(data: UpdateRelationOrderByModificationData) {
32
- return { modification: this.id, ...data }
33
- }
32
+ export interface UpdateRelationOrderByModificationData {
33
+ entityName: string
34
+ fieldName: string
35
+ orderBy: readonly Model.OrderBy[]
36
+ }
34
37
 
35
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
38
+ export const updateRelationOrderByModification = createModificationType({
39
+ id: 'updateRelationOrderBy',
40
+ handler: UpdateRelationOrderByModificationHandler,
41
+ })
42
+
43
+ export class UpdateRelationOrderByDiffer implements Differ {
44
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
36
45
  return updateRelations(originalSchema, updatedSchema, ({ updatedRelation, originalRelation, updatedEntity }) => {
37
46
  const isItOrderable = (relation: Model.AnyRelation): relation is Model.OrderableRelation & Model.AnyRelation =>
38
47
  relation.type === Model.RelationType.ManyHasMany || relation.type === Model.RelationType.OneHasMany
@@ -42,7 +51,7 @@ export const UpdateRelationOrderByModification: ModificationHandlerStatic<Update
42
51
  isItOrderable(originalRelation) &&
43
52
  !deepEqual(updatedRelation.orderBy || [], originalRelation.orderBy || [])
44
53
  ) {
45
- return UpdateRelationOrderByModification.createModification({
54
+ return updateRelationOrderByModification.createModification({
46
55
  entityName: updatedEntity.name,
47
56
  fieldName: updatedRelation.name,
48
57
  orderBy: updatedRelation.orderBy || [],
@@ -52,9 +61,3 @@ export const UpdateRelationOrderByModification: ModificationHandlerStatic<Update
52
61
  })
53
62
  }
54
63
  }
55
-
56
- export interface UpdateRelationOrderByModificationData {
57
- entityName: string
58
- fieldName: string
59
- orderBy: readonly Model.OrderBy[]
60
- }
@@ -6,6 +6,6 @@ export * from './DisableOrphanRemovalModification'
6
6
  export * from './EnableOrphanRemovalModification'
7
7
  export * from './MakeRelationNotNullModification'
8
8
  export * from './MakeRelationNullableModification'
9
- export * from './ToggleManyHasManyEventLogModification'
9
+ export * from './ToggleJunctionEventLogModification'
10
10
  export * from './UpdateRelationOnDeleteModification'
11
11
  export * from './UpdateRelationOrderByModification'
@@ -0,0 +1,87 @@
1
+ import { MigrationBuilder } from '@contember/database-migrations'
2
+ import { Schema, Settings } from '@contember/schema'
3
+ import { SchemaUpdater } from '../utils/schemaUpdateUtils'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
+ import deepEqual from 'fast-deep-equal'
6
+
7
+ export class UpdateSettingsModificationHandler implements ModificationHandler<UpdateSettingsModificationData> {
8
+ constructor(
9
+ private readonly data: UpdateSettingsModificationData,
10
+ ) {
11
+ }
12
+
13
+ public createSql(builder: MigrationBuilder): void {
14
+ }
15
+
16
+ public getSchemaUpdater(): SchemaUpdater {
17
+ return ({ schema }) => {
18
+ const { [this.data.key]: _, ...settings } = schema.settings
19
+ if (this.data.op === 'unset') {
20
+ return {
21
+ ...schema,
22
+ settings,
23
+ }
24
+ }
25
+ return {
26
+ ...schema,
27
+ settings: { ...settings, [this.data.key]: this.data.value },
28
+ }
29
+ }
30
+ }
31
+
32
+
33
+ describe() {
34
+ return { message: `Change settings of ${this.data.key}` }
35
+ }
36
+
37
+ }
38
+
39
+ export const updateSettingsModification = createModificationType({
40
+ id: 'updateSettings',
41
+ handler: UpdateSettingsModificationHandler,
42
+ })
43
+
44
+ export class UpdateSettingsDiffer implements Differ {
45
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
46
+ const allKeys = Array.from(new Set([
47
+ ...Object.keys(originalSchema.settings),
48
+ ...Object.keys(updatedSchema.settings),
49
+ ] as (keyof Settings.Schema)[]))
50
+
51
+ return allKeys
52
+ .filter(key => !deepEqual(originalSchema.settings[key], updatedSchema.settings[key]))
53
+ .map(key => {
54
+ const value = updatedSchema.settings[key]
55
+ if (value === undefined) {
56
+ return updateSettingsModification.createModification({
57
+ op: 'unset',
58
+ key,
59
+ })
60
+ }
61
+ return updateSettingsModification.createModification({
62
+ op: 'set',
63
+ key,
64
+ value,
65
+ })
66
+ })
67
+ }
68
+ }
69
+
70
+
71
+
72
+ export interface SetSettingsModificationData<K extends keyof Settings.Schema = keyof Settings.Schema> {
73
+ op: 'set'
74
+ key: K
75
+ value: Settings.Schema[K]
76
+ }
77
+
78
+
79
+ export interface UnsetSettingsModificationData<K extends keyof Settings.Schema = keyof Settings.Schema> {
80
+ op: 'unset'
81
+ key: K
82
+ }
83
+
84
+
85
+ export type UpdateSettingsModificationData =
86
+ | SetSettingsModificationData
87
+ | UnsetSettingsModificationData
@@ -0,0 +1 @@
1
+ export * from './UpdateSettingsModification'
@@ -0,0 +1,5 @@
1
+ import { Model } from '@contember/schema'
2
+
3
+ export const getColumnSqlType = (column: Pick<Model.AnyColumn, 'type' | 'columnType'>) => column.type === Model.ColumnType.Enum
4
+ ? `"${column.columnType}"`
5
+ : column.columnType
@@ -2,10 +2,12 @@ import { createEventTrigger, createEventTrxTrigger } from './sqlUpdateUtils'
2
2
  import { MigrationBuilder } from '@contember/database-migrations'
3
3
  import { Model } from '@contember/schema'
4
4
  import { getPrimaryColumnType } from './getPrimaryColumnType'
5
+ import { resolveIndexName, SchemaWithMeta } from './schemaMeta'
5
6
 
6
7
  export const createJunctionTableSql = (
7
8
  builder: MigrationBuilder,
8
9
  systemSchema: string,
10
+ schema: SchemaWithMeta,
9
11
  entity: Model.Entity,
10
12
  targetEntity: Model.Entity,
11
13
  relation: Model.ManyHasManyOwningRelation,
@@ -30,12 +32,12 @@ export const createJunctionTableSql = (
30
32
  onDelete: 'CASCADE',
31
33
  },
32
34
  },
33
- {
34
- constraints: {
35
- primaryKey: primaryColumns,
36
- },
37
- },
38
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
+ })
39
41
  if (relation.joiningTable.eventLog.enabled) {
40
42
  createEventTrigger(builder, systemSchema, relation.joiningTable.tableName, primaryColumns)
41
43
  createEventTrxTrigger(builder, systemSchema, relation.joiningTable.tableName)
@@ -4,7 +4,7 @@ import { isColumn, isRelation } from '@contember/schema-utils'
4
4
  import { isDefined } from '../../utils/isDefined'
5
5
  import deepEqual from 'fast-deep-equal'
6
6
 
7
- export const updateFields = (
7
+ export const updateFields = <Data = { [field: string]: any }>(
8
8
  originalSchema: Schema,
9
9
  updatedSchema: Schema,
10
10
  modificationGenerator: (args: {
@@ -12,8 +12,8 @@ export const updateFields = (
12
12
  updatedEntity: Model.Entity
13
13
  originalField: Model.AnyField
14
14
  updatedField: Model.AnyField
15
- }) => Migration.Modification | Migration.Modification[] | undefined,
16
- ): Migration.Modification[] => {
15
+ }) => Migration.Modification<Data> | Migration.Modification<Data>[] | undefined,
16
+ ): Migration.Modification<Data>[] => {
17
17
  return Object.values(updatedSchema.model.entities)
18
18
  .filter(({ name }) => originalSchema.model.entities[name])
19
19
  .flatMap(updatedEntity => {
@@ -43,7 +43,7 @@ export const updateFields = (
43
43
  })
44
44
  }
45
45
 
46
- export const updateColumns = (
46
+ export const updateColumns = <Data = { [field: string]: any }>(
47
47
  originalSchema: Schema,
48
48
  updatedSchema: Schema,
49
49
  modificationGenerator: (args: {
@@ -51,8 +51,8 @@ export const updateColumns = (
51
51
  originalColumn: Model.AnyColumn
52
52
  updatedEntity: Model.Entity
53
53
  updatedColumn: Model.AnyColumn
54
- }) => Migration.Modification | undefined,
55
- ) => {
54
+ }) => Migration.Modification<Data> | undefined,
55
+ ): Migration.Modification<Data>[] => {
56
56
  return updateFields(
57
57
  originalSchema,
58
58
  updatedSchema,
@@ -70,7 +70,7 @@ export const updateColumns = (
70
70
  )
71
71
  }
72
72
 
73
- export const updateRelations = (
73
+ export const updateRelations = <Data = { [field: string]: any }>(
74
74
  originalSchema: Schema,
75
75
  updatedSchema: Schema,
76
76
  modificationGenerator: (args: {
@@ -78,8 +78,8 @@ export const updateRelations = (
78
78
  originalRelation: Model.AnyRelation
79
79
  updatedEntity: Model.Entity
80
80
  updatedRelation: Model.AnyRelation
81
- }) => Migration.Modification | undefined,
82
- ) => {
81
+ }) => Migration.Modification<Data> | undefined,
82
+ ): Migration.Modification<Data>[] => {
83
83
  return updateFields(
84
84
  originalSchema,
85
85
  updatedSchema,
@@ -97,15 +97,15 @@ export const updateRelations = (
97
97
  )
98
98
  }
99
99
 
100
- export const createFields = (
100
+ export const createFields = <Data = { [field: string]: any }>(
101
101
  originalSchema: Schema,
102
102
  updatedSchema: Schema,
103
103
  modificationGenerator: (args: {
104
104
  originalEntity: Model.Entity
105
105
  updatedEntity: Model.Entity
106
106
  newField: Model.AnyField
107
- }) => Migration.Modification | undefined,
108
- ) => {
107
+ }) => Migration.Modification<Data> | undefined,
108
+ ): Migration.Modification<Data>[] => {
109
109
  return Object.values(updatedSchema.model.entities)
110
110
  .filter(({ name }) => originalSchema.model.entities[name])
111
111
  .flatMap(updatedEntity => {
@@ -0,0 +1,18 @@
1
+ import { Schema } from '@contember/schema'
2
+
3
+ export type SchemaWithMeta =
4
+ & Schema
5
+ & {
6
+ meta?: {
7
+ takenIndexNames: Record<string, true>
8
+ }
9
+ }
10
+
11
+ export const resolveIndexName = (schema: SchemaWithMeta, indexName: string): string => {
12
+ for (let i = 0; ; i++) {
13
+ const name = indexName + (i === 0 ? '' : `${i}`)
14
+ if (!schema.meta || !(name in schema.meta.takenIndexNames)) {
15
+ return name
16
+ }
17
+ }
18
+ }
@@ -3,8 +3,10 @@ import { SchemaUpdateError } from '../exceptions'
3
3
  import { isDefined } from '../../utils/isDefined'
4
4
  import { isInverseRelation, isOwningRelation, isRelation, PredicateDefinitionProcessor } from '@contember/schema-utils'
5
5
  import { VERSION_ACL_PATCH, VERSION_REMOVE_RELATION_INVERSE_SIDE } from '../ModificationVersions'
6
+ import { resolveIndexName, SchemaWithMeta } from './schemaMeta'
6
7
 
7
- export type SchemaUpdater = (args: { schema: Schema }) => Schema
8
+
9
+ export type SchemaUpdater = (args: { schema: SchemaWithMeta }) => SchemaWithMeta
8
10
  export type ModelUpdater = (args: { schema: Schema; model: Model.Schema }) => Model.Schema
9
11
  export type EntityUpdater = (args: { schema: Schema; model: Model.Schema; entity: Model.Entity }) => Model.Entity
10
12
  export type FieldUpdater<In extends Model.AnyField, Out extends Model.AnyField> = (args: {
@@ -269,7 +271,14 @@ export const removeField = (entityName: string, fieldName: string, version: numb
269
271
  updateModel(
270
272
  updateEntity(entity.name, ({ entity }) => {
271
273
  const { [field.name]: removed, ...fields } = entity.fields
272
- return { ...entity, fields }
274
+ const indexes = Object.entries(entity.indexes).filter(([, index]) => !index.fields.includes(field.name))
275
+ const unique = Object.entries(entity.unique).filter(([, index]) => !index.fields.includes(field.name))
276
+ return {
277
+ ...entity,
278
+ fields,
279
+ indexes: Object.fromEntries(indexes),
280
+ unique: Object.fromEntries(unique),
281
+ }
273
282
  }),
274
283
  isRelation(field) && isInverseRelation(field)
275
284
  ? updateEntity(
@@ -281,3 +290,14 @@ export const removeField = (entityName: string, fieldName: string, version: numb
281
290
  )({ schema })
282
291
  }
283
292
  }
293
+
294
+ export const addTakenIndexName = (indexName: string): SchemaUpdater => ({ schema }) => ({
295
+ ...schema,
296
+ meta: {
297
+ ...schema.meta,
298
+ takenIndexNames: {
299
+ ...schema.meta?.takenIndexNames,
300
+ [resolveIndexName(schema, indexName)]: true,
301
+ },
302
+ },
303
+ })