@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,15 +1,14 @@
1
1
  import { escapeValue, MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { addField, SchemaUpdater, updateEntity, updateModel } from '../utils/schemaUpdateUtils'
4
- import { ModificationHandlerStatic } from '../ModificationHandler'
4
+ import { createModificationType, Differ, ModificationHandler } from '../ModificationHandler'
5
5
  import { wrapIdentifier } from '../../utils/dbHelpers'
6
6
  import { getColumnName, isColumn } from '@contember/schema-utils'
7
7
  import { ImplementationException } from '../../exceptions'
8
8
  import { createFields } from '../utils/diffUtils'
9
+ import { getColumnSqlType } from '../utils/columnUtils'
9
10
 
10
- export const CreateColumnModification: ModificationHandlerStatic<CreateColumnModificationData> = class {
11
- static id = 'createColumn'
12
-
11
+ export class CreateColumnModificationHandler implements ModificationHandler<CreateColumnModificationData> {
13
12
  constructor(private readonly data: CreateColumnModificationData, private readonly schema: Schema) {}
14
13
 
15
14
  public createSql(builder: MigrationBuilder): void {
@@ -21,7 +20,7 @@ export const CreateColumnModification: ModificationHandlerStatic<CreateColumnMod
21
20
  const hasSeed = this.data.fillValue !== undefined || this.data.copyValue !== undefined
22
21
  builder.addColumn(entity.tableName, {
23
22
  [column.columnName]: {
24
- type: column.type === Model.ColumnType.Enum ? `"${column.columnType}"` : column.columnType,
23
+ type: getColumnSqlType(column),
25
24
  notNull: !column.nullable && !hasSeed,
26
25
  sequenceGenerated: column.sequence,
27
26
  },
@@ -33,7 +32,7 @@ export const CreateColumnModification: ModificationHandlerStatic<CreateColumnMod
33
32
  } else if (this.data.copyValue !== undefined) {
34
33
  const copyFrom = getColumnName(this.schema.model, entity, this.data.copyValue)
35
34
  builder.sql(`UPDATE ${wrapIdentifier(entity.tableName)}
36
- SET ${wrapIdentifier(column.columnName)} = ${wrapIdentifier(copyFrom)}`)
35
+ SET ${wrapIdentifier(column.columnName)} = ${wrapIdentifier(copyFrom)}::${getColumnSqlType(column)}`)
37
36
  } else {
38
37
  throw new ImplementationException()
39
38
  }
@@ -63,17 +62,28 @@ export const CreateColumnModification: ModificationHandlerStatic<CreateColumnMod
63
62
  : undefined
64
63
  return { message: `Add field ${this.data.entityName}.${this.data.field.name}`, failureWarning }
65
64
  }
65
+ }
66
66
 
67
- static createModification(data: CreateColumnModificationData) {
68
- return { modification: this.id, ...data }
69
- }
67
+ export interface CreateColumnModificationData {
68
+ entityName: string
69
+ field: Model.AnyColumn
70
+ fillValue?: any
71
+ copyValue?: string
72
+ }
70
73
 
71
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
74
+
75
+ export const createColumnModification = createModificationType({
76
+ id: 'createColumn',
77
+ handler: CreateColumnModificationHandler,
78
+ })
79
+
80
+ export class CreateColumnDiffer implements Differ {
81
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
72
82
  return createFields(originalSchema, updatedSchema, ({ newField, updatedEntity }) => {
73
83
  if (!isColumn(newField)) {
74
84
  return undefined
75
85
  }
76
- return CreateColumnModification.createModification({
86
+ return createColumnModification.createModification({
77
87
  entityName: updatedEntity.name,
78
88
  field: newField,
79
89
  ...(newField.default !== undefined ? { fillValue: newField.default } : {}),
@@ -81,10 +91,3 @@ export const CreateColumnModification: ModificationHandlerStatic<CreateColumnMod
81
91
  })
82
92
  }
83
93
  }
84
-
85
- export interface CreateColumnModificationData {
86
- entityName: string
87
- field: Model.AnyColumn
88
- fillValue?: any
89
- copyValue?: string
90
- }
@@ -1,13 +1,14 @@
1
- import { MigrationBuilder } from '@contember/database-migrations'
1
+ import { escapeValue, 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 { updateColumns } from '../utils/diffUtils'
7
7
  import { wrapIdentifier } from '@contember/database'
8
+ import { getColumnSqlType } from '../utils/columnUtils'
9
+ import { getEntityDependantViews } from '../utils/viewDependencies'
8
10
 
9
- export const UpdateColumnDefinitionModification: ModificationHandlerStatic<UpdateColumnDefinitionModificationData> = class {
10
- static id = 'updateColumnDefinition'
11
+ export class UpdateColumnDefinitionModificationHandler implements ModificationHandler<UpdateColumnDefinitionModificationData> {
11
12
  constructor(private readonly data: UpdateColumnDefinitionModificationData, private readonly schema: Schema) {}
12
13
 
13
14
  public createSql(builder: MigrationBuilder): void {
@@ -15,34 +16,40 @@ export const UpdateColumnDefinitionModification: ModificationHandlerStatic<Updat
15
16
  if (entity.view) {
16
17
  return
17
18
  }
18
- const field = entity.fields[this.data.fieldName] as Model.AnyColumn
19
- const definition = this.data.definition
20
- const newType = definition.columnType !== field.columnType
21
- ? definition.type === Model.ColumnType.Enum
22
- ? `"${definition.columnType}"`
23
- : definition.columnType
24
- : undefined
25
- builder.alterColumn(entity.tableName, field.columnName, {
26
- type: newType,
27
- notNull: field.nullable !== definition.nullable ? !definition.nullable : undefined,
28
- using: newType !== undefined ? `${wrapIdentifier(field.columnName)}::${newType}` : undefined,
29
- sequenceGenerated: field.sequence && !definition.sequence ? false : (!field.sequence ? definition.sequence : undefined),
19
+ const oldColumn = entity.fields[this.data.fieldName] as Model.AnyColumn
20
+ const newColumn = this.data.definition
21
+
22
+ const hasNewSequence = !oldColumn.sequence && newColumn.sequence
23
+ const hasNewType = newColumn.columnType !== oldColumn.columnType
24
+ const columnType = getColumnSqlType(newColumn)
25
+
26
+ const usingCast = `${wrapIdentifier(oldColumn.columnName)}::${columnType}`
27
+
28
+ builder.alterColumn(entity.tableName, oldColumn.columnName, {
29
+ type: hasNewSequence || hasNewType ? columnType : undefined,
30
+ notNull: oldColumn.nullable !== newColumn.nullable ? !newColumn.nullable : undefined,
31
+ using: hasNewSequence
32
+ ? `COALESCE(${usingCast}, nextval(PG_GET_SERIAL_SEQUENCE(${escapeValue(entity.tableName)}, ${escapeValue(oldColumn.columnName)})))`
33
+ : hasNewType
34
+ ? usingCast
35
+ : undefined,
36
+ sequenceGenerated: oldColumn.sequence && !newColumn.sequence ? false : (!oldColumn.sequence ? newColumn.sequence : undefined),
30
37
  })
31
38
 
32
39
  const seqAlter = []
33
- if (field.sequence && definition.sequence) {
34
- if (field.sequence.precedence !== definition.sequence.precedence) {
35
- seqAlter.push(`SET GENERATED ${definition.sequence.precedence}`)
40
+ if (oldColumn.sequence && newColumn.sequence) {
41
+ if (oldColumn.sequence.precedence !== newColumn.sequence.precedence) {
42
+ seqAlter.push(`SET GENERATED ${newColumn.sequence.precedence}`)
36
43
  }
37
- if (field.sequence.start !== definition.sequence.start && typeof definition.sequence.start == 'number') {
38
- seqAlter.push(`SET START WITH ${definition.sequence.start}`)
44
+ if (oldColumn.sequence.start !== newColumn.sequence.start && typeof newColumn.sequence.start == 'number') {
45
+ seqAlter.push(`SET START WITH ${newColumn.sequence.start}`)
39
46
  }
40
- if (definition.sequence.restart) {
47
+ if (newColumn.sequence.restart) {
41
48
  seqAlter.push('RESTART')
42
49
  }
43
50
  }
44
51
  if (seqAlter.length > 0) {
45
- builder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} ALTER ${wrapIdentifier(field.columnName)} ${seqAlter.join(' ')}`)
52
+ builder.sql(`ALTER TABLE ${wrapIdentifier(entity.tableName)} ALTER ${wrapIdentifier(oldColumn.columnName)} ${seqAlter.join(' ')}`)
46
53
  }
47
54
  }
48
55
 
@@ -71,27 +78,49 @@ export const UpdateColumnDefinitionModification: ModificationHandlerStatic<Updat
71
78
  failureWarning,
72
79
  }
73
80
  }
81
+ }
74
82
 
75
- static createModification(data: UpdateColumnDefinitionModificationData) {
76
- return { modification: this.id, ...data }
83
+ type SequenceDefinitionAlter =
84
+ & Model.AnyColumn['sequence']
85
+ & {
86
+ restart?: boolean
77
87
  }
78
88
 
79
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
89
+ type ColumnDefinitionAlter =
90
+ & Omit<Model.AnyColumn, 'sequence' | 'columnName' | 'name'>
91
+ & {
92
+ sequence?: SequenceDefinitionAlter
93
+ }
94
+
95
+ export interface UpdateColumnDefinitionModificationData {
96
+ entityName: string
97
+ fieldName: string
98
+ definition: ColumnDefinitionAlter
99
+ }
100
+
101
+ export const updateColumnDefinitionModification = createModificationType({
102
+ id: 'updateColumnDefinition',
103
+ handler: UpdateColumnDefinitionModificationHandler,
104
+ })
105
+
106
+ export class UpdateColumnDefinitionDiffer implements Differ<UpdateColumnDefinitionModificationData> {
107
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
80
108
  return updateColumns(originalSchema, updatedSchema, ({ originalColumn, updatedColumn, updatedEntity }) => {
81
109
  const {
82
110
  name: {},
83
111
  columnName: {},
84
112
  ...updatedDefinition
85
- } = updatedColumn as any
113
+ } = updatedColumn
86
114
  const {
87
115
  name: {},
88
116
  columnName: {},
89
117
  ...originalDefinition
90
- } = originalColumn as any
118
+ } = originalColumn
91
119
  if (deepEqual(updatedDefinition, originalDefinition)) {
92
120
  return undefined
93
121
  }
94
- return UpdateColumnDefinitionModification.createModification({
122
+
123
+ return updateColumnDefinitionModification.createModification({
95
124
  entityName: updatedEntity.name,
96
125
  fieldName: updatedColumn.name,
97
126
  definition: updatedDefinition,
@@ -99,21 +128,3 @@ export const UpdateColumnDefinitionModification: ModificationHandlerStatic<Updat
99
128
  })
100
129
  }
101
130
  }
102
-
103
- type SequenceDefinitionAlter =
104
- & Model.AnyColumn['sequence']
105
- & {
106
- restart?: boolean
107
- }
108
-
109
- type ColumnDefinitionAlter =
110
- & Model.AnyColumn
111
- & {
112
- sequence?: SequenceDefinitionAlter
113
- }
114
-
115
- export interface UpdateColumnDefinitionModificationData {
116
- entityName: string
117
- fieldName: string
118
- definition: ColumnDefinitionAlter
119
- }
@@ -1,13 +1,13 @@
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 { updateColumns } from '../utils/diffUtils'
6
6
  import { acceptFieldVisitor } from '@contember/schema-utils'
7
7
 
8
- export const UpdateColumnNameModification: ModificationHandlerStatic<UpdateColumnNameModificationData> = class {
9
- static id = 'updateColumnName'
10
- constructor(private readonly data: UpdateColumnNameModificationData, private readonly schema: Schema) {}
8
+ export class UpdateColumnNameModificationHandler implements ModificationHandler<UpdateColumnNameModificationData> {
9
+ constructor(private readonly data: UpdateColumnNameModificationData, private readonly schema: Schema) {
10
+ }
11
11
 
12
12
  public createSql(builder: MigrationBuilder): void {
13
13
  const entity = this.schema.model.entities[this.data.entityName]
@@ -15,13 +15,13 @@ export const UpdateColumnNameModification: ModificationHandlerStatic<UpdateColum
15
15
  return
16
16
  }
17
17
  acceptFieldVisitor(this.schema.model, entity, this.data.fieldName, {
18
- visitColumn: (entity, column) => {
18
+ visitColumn: ({ entity, column }) => {
19
19
  builder.renameColumn(entity.tableName, column.columnName, this.data.columnName)
20
20
  },
21
- visitManyHasOne: (entity, relation) => {
21
+ visitManyHasOne: ({ entity, relation }) => {
22
22
  builder.renameColumn(entity.tableName, relation.joiningColumn.columnName, this.data.columnName)
23
23
  },
24
- visitOneHasOneOwning: (entity, relation) => {
24
+ visitOneHasOneOwning: ({ entity, relation }) => {
25
25
  builder.renameColumn(entity.tableName, relation.joiningColumn.columnName, this.data.columnName)
26
26
  },
27
27
  visitManyHasManyInverse: () => {
@@ -43,44 +43,47 @@ export const UpdateColumnNameModification: ModificationHandlerStatic<UpdateColum
43
43
  return updateModel(
44
44
  updateEntity(
45
45
  this.data.entityName,
46
- updateField(this.data.fieldName, ({ field, entity }) => acceptFieldVisitor<Model.AnyField>(this.schema.model, entity, field, {
47
- visitColumn: (entity, column) => {
48
- return {
49
- ...column,
50
- columnName: this.data.columnName,
51
- }
52
- },
53
- visitManyHasOne: (entity, relation) => {
54
- return {
55
- ...relation,
56
- joiningColumn: {
57
- ...relation.joiningColumn,
58
- columnName: this.data.columnName,
59
- },
60
- }
61
- },
62
- visitOneHasOneOwning: (entity, relation) => {
63
- return {
64
- ...relation,
65
- joiningColumn: {
66
- ...relation.joiningColumn,
46
+ updateField(this.data.fieldName, ({ field, entity }) =>
47
+ acceptFieldVisitor<Model.AnyField>(this.schema.model, entity, field, {
48
+ visitColumn: ({ column }) => {
49
+ return {
50
+ ...column,
67
51
  columnName: this.data.columnName,
68
- },
69
- }
70
- },
71
- visitManyHasManyInverse: () => {
72
- throw new Error('Cannot rename column of many-to-many relation')
73
- },
74
- visitManyHasManyOwning: () => {
75
- throw new Error('Cannot rename column of many-to-many relation')
52
+ }
53
+ },
54
+ visitManyHasOne: ({ entity, relation }) => {
55
+ return {
56
+ ...relation,
57
+ joiningColumn: {
58
+ ...relation.joiningColumn,
59
+ columnName: this.data.columnName,
60
+ },
61
+ }
62
+ },
63
+ visitOneHasOneOwning: ({ entity, relation }) => {
64
+ return {
65
+ ...relation,
66
+ joiningColumn: {
67
+ ...relation.joiningColumn,
68
+ columnName: this.data.columnName,
69
+ },
70
+ }
71
+ },
72
+ visitManyHasManyInverse: () => {
73
+ throw new Error('Cannot rename column of many-to-many relation')
74
+ },
75
+ visitManyHasManyOwning: () => {
76
+ throw new Error('Cannot rename column of many-to-many relation')
77
+ },
78
+ visitOneHasMany: () => {
79
+ throw new Error('Cannot rename column of one-to-many relation')
80
+ },
81
+ visitOneHasOneInverse: () => {
82
+ throw new Error('Cannot rename column of one-to-one inverse relation')
83
+ },
76
84
  },
77
- visitOneHasMany: () => {
78
- throw new Error('Cannot rename column of one-to-many relation')
79
- },
80
- visitOneHasOneInverse: () => {
81
- throw new Error('Cannot rename column of one-to-one inverse relation')
82
- },
83
- })),
85
+ ),
86
+ ),
84
87
  ),
85
88
  )
86
89
  }
@@ -88,17 +91,26 @@ export const UpdateColumnNameModification: ModificationHandlerStatic<UpdateColum
88
91
  describe() {
89
92
  return { message: `Change column name of field ${this.data.entityName}.${this.data.fieldName}` }
90
93
  }
94
+ }
91
95
 
92
- static createModification(data: UpdateColumnNameModificationData) {
93
- return { modification: this.id, ...data }
94
- }
96
+ export interface UpdateColumnNameModificationData {
97
+ entityName: string
98
+ fieldName: string
99
+ columnName: string
100
+ }
101
+
102
+ export const updateColumnNameModification = createModificationType({
103
+ id: 'updateColumnName',
104
+ handler: UpdateColumnNameModificationHandler,
105
+ })
95
106
 
96
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
107
+ export class UpdateColumnNameDiffer implements Differ {
108
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
97
109
  return updateColumns(originalSchema, updatedSchema, ({ originalColumn, updatedColumn, updatedEntity }) => {
98
110
  if (originalColumn.columnName === updatedColumn.columnName) {
99
111
  return undefined
100
112
  }
101
- return UpdateColumnNameModification.createModification({
113
+ return updateColumnNameModification.createModification({
102
114
  entityName: updatedEntity.name,
103
115
  fieldName: updatedColumn.name,
104
116
  columnName: updatedColumn.columnName,
@@ -106,8 +118,3 @@ export const UpdateColumnNameModification: ModificationHandlerStatic<UpdateColum
106
118
  })
107
119
  }
108
120
  }
109
- export interface UpdateColumnNameModificationData {
110
- entityName: string
111
- fieldName: string
112
- columnName: string
113
- }
@@ -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, 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 CreateUniqueConstraintModification: ModificationHandlerStatic<CreateUniqueConstraintModificationData> = class {
8
- static id = 'createUniqueConstraint'
9
-
10
- constructor(private readonly data: CreateUniqueConstraintModificationData, private readonly schema: Schema) {}
7
+ export class CreateUniqueConstraintModificationHandler implements ModificationHandler<CreateUniqueConstraintModificationData> {
8
+ constructor(private readonly data: CreateUniqueConstraintModificationData, private readonly schema: Schema) {
9
+ }
11
10
 
12
11
  public createSql(builder: MigrationBuilder): void {
13
12
  const entity = this.schema.model.entities[this.data.entityName]
@@ -17,10 +16,10 @@ export const CreateUniqueConstraintModification: ModificationHandlerStatic<Creat
17
16
  const fields = this.data.unique.fields
18
17
  const columns = fields.map(fieldName => {
19
18
  return acceptFieldVisitor(this.schema.model, entity, fieldName, {
20
- visitColumn: ({}, column) => {
19
+ visitColumn: ({ column }) => {
21
20
  return column.columnName
22
21
  },
23
- visitManyHasOne: ({}, relation) => {
22
+ visitManyHasOne: ({ relation }) => {
24
23
  return relation.joiningColumn.columnName
25
24
  },
26
25
  visitOneHasMany: () => {
@@ -66,20 +65,27 @@ export const CreateUniqueConstraintModification: ModificationHandlerStatic<Creat
66
65
  }
67
66
  }
68
67
 
69
- static createModification(data: CreateUniqueConstraintModificationData) {
70
- return { modification: this.id, ...data }
71
- }
68
+ }
72
69
 
73
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
70
+ export interface CreateUniqueConstraintModificationData {
71
+ entityName: string
72
+ unique: Model.UniqueConstraint
73
+ }
74
+
75
+ export const createUniqueConstraintModification = createModificationType({
76
+ id: 'createUniqueConstraint',
77
+ handler: CreateUniqueConstraintModificationHandler,
78
+ })
79
+
80
+ export class CreateUniqueConstraintDiffer implements Differ {
81
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
74
82
  return Object.values(updatedSchema.model.entities).flatMap(entity =>
75
83
  Object.values(entity.unique)
76
84
  .filter(it => !originalSchema.model.entities[entity.name].unique[it.name])
77
- .map(unique => CreateUniqueConstraintModification.createModification({ entityName: entity.name, unique })),
85
+ .map(unique => createUniqueConstraintModification.createModification({
86
+ entityName: entity.name,
87
+ unique,
88
+ })),
78
89
  )
79
90
  }
80
91
  }
81
-
82
- export interface CreateUniqueConstraintModificationData {
83
- entityName: string
84
- unique: Model.UniqueConstraint
85
- }
@@ -1,12 +1,12 @@
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 RemoveUniqueConstraintModification: ModificationHandlerStatic<RemoveUniqueConstraintModificationData> = class {
8
- static id = 'removeUniqueConstraint'
9
- constructor(private readonly data: RemoveUniqueConstraintModificationData, private readonly schema: Schema) {}
7
+ export class RemoveUniqueConstraintModificationHandler implements ModificationHandler<RemoveUniqueConstraintModificationData> {
8
+ constructor(private readonly data: RemoveUniqueConstraintModificationData, private readonly schema: Schema) {
9
+ }
10
10
 
11
11
  public createSql(builder: MigrationBuilder): void {
12
12
  const entity = this.schema.model.entities[this.data.entityName]
@@ -32,12 +32,21 @@ export const RemoveUniqueConstraintModification: ModificationHandlerStatic<Remov
32
32
  const fields = this.schema.model.entities[this.data.entityName].unique[this.data.constraintName].fields
33
33
  return { message: `Remove unique constraint (${fields.join(', ')}) on entity ${this.data.entityName}` }
34
34
  }
35
+ }
35
36
 
36
- static createModification(data: RemoveUniqueConstraintModificationData) {
37
- return { modification: this.id, ...data }
38
- }
37
+ export interface RemoveUniqueConstraintModificationData {
38
+ entityName: string
39
+ constraintName: string
40
+ }
39
41
 
40
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
42
+ export const removeUniqueConstraintModification = createModificationType({
43
+ id: 'removeUniqueConstraint',
44
+ handler: RemoveUniqueConstraintModificationHandler,
45
+ })
46
+
47
+
48
+ export class RemoveUniqueConstraintDiffer implements Differ {
49
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
41
50
  return Object.values(originalSchema.model.entities).flatMap(entity =>
42
51
  Object.values(entity.unique)
43
52
  .filter(
@@ -47,7 +56,7 @@ export const RemoveUniqueConstraintModification: ModificationHandlerStatic<Remov
47
56
  !deepEqual(it.fields, updatedSchema.model.entities[entity.name].unique[it.name].fields)),
48
57
  )
49
58
  .map(unique =>
50
- RemoveUniqueConstraintModification.createModification({
59
+ removeUniqueConstraintModification.createModification({
51
60
  entityName: entity.name,
52
61
  constraintName: unique.name,
53
62
  }),
@@ -55,8 +64,3 @@ export const RemoveUniqueConstraintModification: ModificationHandlerStatic<Remov
55
64
  )
56
65
  }
57
66
  }
58
-
59
- export interface RemoveUniqueConstraintModificationData {
60
- entityName: string
61
- constraintName: string
62
- }
@@ -1,6 +1,6 @@
1
1
  import { Differ } from '../ModificationHandler'
2
2
  import { Schema } from '@contember/schema'
3
- import { RemoveEntityModification } from '../entities'
3
+ import { removeEntityModification } from '../entities'
4
4
 
5
5
  export class ChangeViewNonViewDiffer implements Differ {
6
6
  createDiff(originalSchema: Schema, updatedSchema: Schema) {
@@ -12,6 +12,6 @@ export class ChangeViewNonViewDiffer implements Differ {
12
12
  }
13
13
  return !!origEntity.view !== !!it.view
14
14
  })
15
- .map(it => RemoveEntityModification.createModification({ entityName: it.name }))
15
+ .map(it => removeEntityModification.createModification({ entityName: it.name }))
16
16
  }
17
17
  }
@@ -2,7 +2,7 @@ import { Differ } from '../ModificationHandler'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { updateFields } from '../utils/diffUtils'
4
4
  import deepEqual from 'fast-deep-equal'
5
- import { RemoveFieldModification } from '../fields'
5
+ import { removeFieldModification } from '../fields'
6
6
 
7
7
  export class RemoveChangedFieldDiffer implements Differ {
8
8
  constructor(
@@ -17,7 +17,7 @@ export class RemoveChangedFieldDiffer implements Differ {
17
17
  }
18
18
  if (!deepEqual({ ...updatedField, inversedBy: undefined }, { ...originalField, inversedBy: undefined })) {
19
19
  return [
20
- RemoveFieldModification.createModification({
20
+ removeFieldModification.createModification({
21
21
  entityName: updatedEntity.name,
22
22
  fieldName: updatedField.name,
23
23
  }),
@@ -1,9 +1,8 @@
1
1
  import { Differ } from '../ModificationHandler'
2
- import { Model, Schema } from '@contember/schema'
2
+ import { Schema } from '@contember/schema'
3
3
  import deepEqual from 'fast-deep-equal'
4
- import { RemoveEntityModification } from '../entities'
5
- import { getViewDirectDependants } from '../utils/viewDependencies'
6
- import { Migration } from '../../Migration'
4
+ import { cascadeRemoveDependantViews } from '../utils/viewDependencies'
5
+ import { UpdateColumnDefinitionDiffer } from '../columns'
7
6
 
8
7
  export class RemoveChangedViewDiffer implements Differ {
9
8
  constructor() {
@@ -18,25 +17,13 @@ export class RemoveChangedViewDiffer implements Differ {
18
17
  }
19
18
  return !deepEqual(updatedEntity.view, it.view)
20
19
  })
21
- if (changedViews.length === 0) {
20
+ const columnDiffer = new UpdateColumnDefinitionDiffer()
21
+ const columnChanges = columnDiffer.createDiff(originalSchema, updatedSchema)
22
+ if (changedViews.length === 0 && columnChanges.length === 0) {
22
23
  return []
23
24
  }
24
- const removed = new Set<string>()
25
- const dependants = getViewDirectDependants(originalSchema.model)
26
- const modifications: Migration.Modification[] = []
27
- const removeCascade = (entity: Model.Entity) => {
28
- if (removed.has(entity.name)) {
29
- return
30
- }
31
- removed.add(entity.name)
32
- for (const dependant of dependants.get(entity.name) ?? []) {
33
- removeCascade(dependant)
34
- }
35
- modifications.push(RemoveEntityModification.createModification({ entityName: entity.name }))
36
- }
37
- for (const changed of changedViews) {
38
- removeCascade(changed)
39
- }
40
- return modifications
25
+ const changedColumnsEntities = Array.from(new Set(columnChanges.map(it => it.entityName)))
26
+ .map(it => originalSchema.model.entities[it])
27
+ return cascadeRemoveDependantViews(originalSchema.model, [...changedViews, ...changedColumnsEntities])
41
28
  }
42
29
  }
@@ -1,12 +1,17 @@
1
1
  import { MigrationBuilder } from '@contember/database-migrations'
2
2
  import { Model, Schema } from '@contember/schema'
3
3
  import { SchemaUpdater, 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 { createEventTrigger, createEventTrxTrigger } from '../utils/sqlUpdateUtils'
6
11
  import { PartialEntity } from '../../utils/PartialEntity.js'
12
+ import { getColumnSqlType } from '../utils/columnUtils'
7
13
 
8
- export const CreateEntityModification: ModificationHandlerStatic<CreateEntityModificationData> = class {
9
- static id = 'createEntity'
14
+ export class CreateEntityModificationHandler implements ModificationHandler<CreateEntityModificationData> {
10
15
  constructor(
11
16
  private readonly data: CreateEntityModificationData,
12
17
  private readonly schema: Schema,
@@ -25,7 +30,7 @@ export const CreateEntityModification: ModificationHandlerStatic<CreateEntityMod
25
30
  builder.createTable(entity.tableName, {
26
31
  [primaryColumn.name]: {
27
32
  primaryKey: true,
28
- type: primaryColumn.type === Model.ColumnType.Enum ? `"${primaryColumn.columnType}"` : primaryColumn.columnType,
33
+ type: getColumnSqlType(primaryColumn),
29
34
  notNull: true,
30
35
  sequenceGenerated: primaryColumn.sequence,
31
36
  },
@@ -56,16 +61,20 @@ export const CreateEntityModification: ModificationHandlerStatic<CreateEntityMod
56
61
  return { message: `Add entity ${this.data.entity.name}` }
57
62
  }
58
63
 
59
- static createModification(data: CreateEntityModificationData) {
60
- return { modification: this.id, ...data }
61
- }
64
+ }
65
+
66
+ export const createEntityModification = createModificationType({
67
+ id: 'createEntity',
68
+ handler: CreateEntityModificationHandler,
69
+ })
62
70
 
63
- static createDiff(originalSchema: Schema, updatedSchema: Schema) {
71
+ export class CreateEntityDiffer implements Differ {
72
+ createDiff(originalSchema: Schema, updatedSchema: Schema) {
64
73
  return Object.values(updatedSchema.model.entities)
65
74
  .filter(it => !originalSchema.model.entities[it.name])
66
75
  .filter(it => !it.view)
67
76
  .map(entity =>
68
- CreateEntityModification.createModification({
77
+ createEntityModification.createModification({
69
78
  entity: {
70
79
  ...entity,
71
80
  fields: {