@contember/engine-system-api 2.0.0-alpha.12 → 2.0.0-alpha.13

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 (394) hide show
  1. package/dist/development/index.cjs +2 -2
  2. package/dist/development/index.js +2 -2
  3. package/dist/development/src/SystemContainer.cjs +4 -3
  4. package/dist/development/src/SystemContainer.cjs.map +1 -1
  5. package/dist/development/src/SystemContainer.js +4 -3
  6. package/dist/development/src/SystemContainer.js.map +1 -1
  7. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.cjs +1 -2
  8. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.cjs.map +1 -1
  9. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.js +1 -2
  10. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.js.map +1 -1
  11. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.cjs +1 -2
  12. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.cjs.map +1 -1
  13. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.js +1 -2
  14. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.js.map +1 -1
  15. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.cjs +1 -2
  16. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.cjs.map +1 -1
  17. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.js +1 -2
  18. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.js.map +1 -1
  19. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs +1 -2
  20. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs.map +1 -1
  21. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js +1 -2
  22. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js.map +1 -1
  23. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.cjs +1 -1
  24. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.cjs.map +1 -1
  25. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.js +1 -1
  26. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.js.map +1 -1
  27. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.cjs +1 -1
  28. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.cjs.map +1 -1
  29. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.js +1 -1
  30. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.js.map +1 -1
  31. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.cjs +1 -1
  32. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.cjs.map +1 -1
  33. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.js +1 -1
  34. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.js.map +1 -1
  35. package/dist/development/src/migrations/2024-06-28-153000-schema.cjs +18 -0
  36. package/dist/development/src/migrations/2024-06-28-153000-schema.cjs.map +1 -0
  37. package/dist/development/src/migrations/2024-06-28-153000-schema.js +19 -0
  38. package/dist/development/src/migrations/2024-06-28-153000-schema.js.map +1 -0
  39. package/dist/development/src/migrations/2024-06-28-153001-schema-init.cjs +12 -0
  40. package/dist/development/src/migrations/2024-06-28-153001-schema-init.cjs.map +1 -0
  41. package/dist/development/src/migrations/2024-06-28-153001-schema-init.js +13 -0
  42. package/dist/development/src/migrations/2024-06-28-153001-schema-init.js.map +1 -0
  43. package/dist/development/src/migrations/2024-07-29-150000-event-data-index.cjs +11 -0
  44. package/dist/development/src/migrations/2024-07-29-150000-event-data-index.cjs.map +1 -0
  45. package/dist/development/src/migrations/2024-07-29-150000-event-data-index.js +12 -0
  46. package/dist/development/src/migrations/2024-07-29-150000-event-data-index.js.map +1 -0
  47. package/dist/development/src/migrations/runner.cjs +11 -5
  48. package/dist/development/src/migrations/runner.cjs.map +1 -1
  49. package/dist/development/src/migrations/runner.js +11 -5
  50. package/dist/development/src/migrations/runner.js.map +1 -1
  51. package/dist/development/src/migrations/snapshot.cjs +17 -1
  52. package/dist/development/src/migrations/snapshot.cjs.map +1 -1
  53. package/dist/development/src/migrations/snapshot.js +17 -1
  54. package/dist/development/src/migrations/snapshot.js.map +1 -1
  55. package/dist/development/src/model/authorization/AuthorizationActions.cjs +1 -0
  56. package/dist/development/src/model/authorization/AuthorizationActions.cjs.map +1 -1
  57. package/dist/development/src/model/authorization/AuthorizationActions.js +1 -0
  58. package/dist/development/src/model/authorization/AuthorizationActions.js.map +1 -1
  59. package/dist/development/src/model/authorization/PermissionsFactory.cjs +1 -0
  60. package/dist/development/src/model/authorization/PermissionsFactory.cjs.map +1 -1
  61. package/dist/development/src/model/authorization/PermissionsFactory.js +1 -0
  62. package/dist/development/src/model/authorization/PermissionsFactory.js.map +1 -1
  63. package/dist/development/src/model/authorization/StagePermissionsFactory.cjs +4 -5
  64. package/dist/development/src/model/authorization/StagePermissionsFactory.cjs.map +1 -1
  65. package/dist/development/src/model/authorization/StagePermissionsFactory.js +4 -5
  66. package/dist/development/src/model/authorization/StagePermissionsFactory.js.map +1 -1
  67. package/dist/development/src/model/authorization/StageScope.cjs +2 -2
  68. package/dist/development/src/model/authorization/StageScope.cjs.map +1 -1
  69. package/dist/development/src/model/authorization/StageScope.js +2 -2
  70. package/dist/development/src/model/authorization/StageScope.js.map +1 -1
  71. package/dist/development/src/model/commands/schema/SaveSchemaCommand.cjs +28 -0
  72. package/dist/development/src/model/commands/schema/SaveSchemaCommand.cjs.map +1 -0
  73. package/dist/development/src/model/commands/schema/SaveSchemaCommand.js +28 -0
  74. package/dist/development/src/model/commands/schema/SaveSchemaCommand.js.map +1 -0
  75. package/dist/development/src/model/migrations/MigrationAlterer.cjs +10 -0
  76. package/dist/development/src/model/migrations/MigrationAlterer.cjs.map +1 -1
  77. package/dist/development/src/model/migrations/MigrationAlterer.js +10 -0
  78. package/dist/development/src/model/migrations/MigrationAlterer.js.map +1 -1
  79. package/dist/development/src/model/migrations/ProjectMigrator.cjs +29 -10
  80. package/dist/development/src/model/migrations/ProjectMigrator.cjs.map +1 -1
  81. package/dist/development/src/model/migrations/ProjectMigrator.js +30 -11
  82. package/dist/development/src/model/migrations/ProjectMigrator.js.map +1 -1
  83. package/dist/development/src/model/migrations/SchemaProvider.cjs +58 -0
  84. package/dist/development/src/model/migrations/SchemaProvider.cjs.map +1 -0
  85. package/dist/development/src/model/migrations/SchemaProvider.js +58 -0
  86. package/dist/development/src/model/migrations/SchemaProvider.js.map +1 -0
  87. package/dist/development/src/model/queries/events/EventsQuery.cjs +10 -14
  88. package/dist/development/src/model/queries/events/EventsQuery.cjs.map +1 -1
  89. package/dist/development/src/model/queries/events/EventsQuery.js +10 -14
  90. package/dist/development/src/model/queries/events/EventsQuery.js.map +1 -1
  91. package/dist/development/src/model/queries/schema/SchemaQuery.cjs +34 -0
  92. package/dist/development/src/model/queries/schema/SchemaQuery.cjs.map +1 -0
  93. package/dist/development/src/model/queries/schema/SchemaQuery.js +34 -0
  94. package/dist/development/src/model/queries/schema/SchemaQuery.js.map +1 -0
  95. package/dist/development/src/resolvers/ResolverFactory.cjs +6 -2
  96. package/dist/development/src/resolvers/ResolverFactory.cjs.map +1 -1
  97. package/dist/development/src/resolvers/ResolverFactory.js +7 -3
  98. package/dist/development/src/resolvers/ResolverFactory.js.map +1 -1
  99. package/dist/development/src/resolvers/SystemResolverContext.cjs +5 -5
  100. package/dist/development/src/resolvers/SystemResolverContext.cjs.map +1 -1
  101. package/dist/development/src/resolvers/SystemResolverContext.js +5 -5
  102. package/dist/development/src/resolvers/SystemResolverContext.js.map +1 -1
  103. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.cjs +0 -1
  104. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.cjs.map +1 -1
  105. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.js +0 -1
  106. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
  107. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.cjs +0 -1
  108. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.cjs.map +1 -1
  109. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.js +0 -1
  110. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.js.map +1 -1
  111. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.cjs +1 -1
  112. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.cjs.map +1 -1
  113. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.js +1 -1
  114. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.js.map +1 -1
  115. package/dist/development/src/resolvers/query/EventsQueryResolver.cjs +0 -1
  116. package/dist/development/src/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  117. package/dist/development/src/resolvers/query/EventsQueryResolver.js +0 -1
  118. package/dist/development/src/resolvers/query/EventsQueryResolver.js.map +1 -1
  119. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs +0 -1
  120. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs.map +1 -1
  121. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.js +0 -1
  122. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.js.map +1 -1
  123. package/dist/development/src/resolvers/query/SchemaQueryResolver.cjs +23 -0
  124. package/dist/development/src/resolvers/query/SchemaQueryResolver.cjs.map +1 -0
  125. package/dist/development/src/resolvers/query/SchemaQueryResolver.js +23 -0
  126. package/dist/development/src/resolvers/query/SchemaQueryResolver.js.map +1 -0
  127. package/dist/development/src/resolvers/query/StagesQueryResolver.cjs +0 -1
  128. package/dist/development/src/resolvers/query/StagesQueryResolver.cjs.map +1 -1
  129. package/dist/development/src/resolvers/query/StagesQueryResolver.js +0 -1
  130. package/dist/development/src/resolvers/query/StagesQueryResolver.js.map +1 -1
  131. package/dist/development/src/resolvers/types/OldValuesHelpers.cjs +0 -1
  132. package/dist/development/src/resolvers/types/OldValuesHelpers.cjs.map +1 -1
  133. package/dist/development/src/resolvers/types/OldValuesHelpers.js +0 -1
  134. package/dist/development/src/resolvers/types/OldValuesHelpers.js.map +1 -1
  135. package/dist/development/src/schema/system.graphql.cjs +3 -1
  136. package/dist/development/src/schema/system.graphql.cjs.map +1 -1
  137. package/dist/development/src/schema/system.graphql.js +3 -1
  138. package/dist/development/src/schema/system.graphql.js.map +1 -1
  139. package/dist/development/src/schema/types.cjs.map +1 -1
  140. package/dist/development/src/schema/types.js.map +1 -1
  141. package/dist/production/index.cjs +2 -2
  142. package/dist/production/index.js +2 -2
  143. package/dist/production/src/SystemContainer.cjs +4 -3
  144. package/dist/production/src/SystemContainer.cjs.map +1 -1
  145. package/dist/production/src/SystemContainer.js +4 -3
  146. package/dist/production/src/SystemContainer.js.map +1 -1
  147. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.cjs +1 -2
  148. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.cjs.map +1 -1
  149. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.js +1 -2
  150. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.js.map +1 -1
  151. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.cjs +1 -2
  152. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.cjs.map +1 -1
  153. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.js +1 -2
  154. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.js.map +1 -1
  155. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.cjs +1 -2
  156. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.cjs.map +1 -1
  157. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.js +1 -2
  158. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.js.map +1 -1
  159. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs +1 -2
  160. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs.map +1 -1
  161. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js +1 -2
  162. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js.map +1 -1
  163. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.cjs +1 -1
  164. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.cjs.map +1 -1
  165. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.js +1 -1
  166. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.js.map +1 -1
  167. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.cjs +1 -1
  168. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.cjs.map +1 -1
  169. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.js +1 -1
  170. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.js.map +1 -1
  171. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.cjs +1 -1
  172. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.cjs.map +1 -1
  173. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.js +1 -1
  174. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.js.map +1 -1
  175. package/dist/production/src/migrations/2024-06-28-153000-schema.cjs +18 -0
  176. package/dist/production/src/migrations/2024-06-28-153000-schema.cjs.map +1 -0
  177. package/dist/production/src/migrations/2024-06-28-153000-schema.js +19 -0
  178. package/dist/production/src/migrations/2024-06-28-153000-schema.js.map +1 -0
  179. package/dist/production/src/migrations/2024-06-28-153001-schema-init.cjs +12 -0
  180. package/dist/production/src/migrations/2024-06-28-153001-schema-init.cjs.map +1 -0
  181. package/dist/production/src/migrations/2024-06-28-153001-schema-init.js +13 -0
  182. package/dist/production/src/migrations/2024-06-28-153001-schema-init.js.map +1 -0
  183. package/dist/production/src/migrations/2024-07-29-150000-event-data-index.cjs +11 -0
  184. package/dist/production/src/migrations/2024-07-29-150000-event-data-index.cjs.map +1 -0
  185. package/dist/production/src/migrations/2024-07-29-150000-event-data-index.js +12 -0
  186. package/dist/production/src/migrations/2024-07-29-150000-event-data-index.js.map +1 -0
  187. package/dist/production/src/migrations/runner.cjs +11 -5
  188. package/dist/production/src/migrations/runner.cjs.map +1 -1
  189. package/dist/production/src/migrations/runner.js +11 -5
  190. package/dist/production/src/migrations/runner.js.map +1 -1
  191. package/dist/production/src/migrations/snapshot.cjs +17 -1
  192. package/dist/production/src/migrations/snapshot.cjs.map +1 -1
  193. package/dist/production/src/migrations/snapshot.js +17 -1
  194. package/dist/production/src/migrations/snapshot.js.map +1 -1
  195. package/dist/production/src/model/authorization/AuthorizationActions.cjs +1 -0
  196. package/dist/production/src/model/authorization/AuthorizationActions.cjs.map +1 -1
  197. package/dist/production/src/model/authorization/AuthorizationActions.js +1 -0
  198. package/dist/production/src/model/authorization/AuthorizationActions.js.map +1 -1
  199. package/dist/production/src/model/authorization/PermissionsFactory.cjs +1 -0
  200. package/dist/production/src/model/authorization/PermissionsFactory.cjs.map +1 -1
  201. package/dist/production/src/model/authorization/PermissionsFactory.js +1 -0
  202. package/dist/production/src/model/authorization/PermissionsFactory.js.map +1 -1
  203. package/dist/production/src/model/authorization/StagePermissionsFactory.cjs +4 -5
  204. package/dist/production/src/model/authorization/StagePermissionsFactory.cjs.map +1 -1
  205. package/dist/production/src/model/authorization/StagePermissionsFactory.js +4 -5
  206. package/dist/production/src/model/authorization/StagePermissionsFactory.js.map +1 -1
  207. package/dist/production/src/model/authorization/StageScope.cjs +2 -2
  208. package/dist/production/src/model/authorization/StageScope.cjs.map +1 -1
  209. package/dist/production/src/model/authorization/StageScope.js +2 -2
  210. package/dist/production/src/model/authorization/StageScope.js.map +1 -1
  211. package/dist/production/src/model/commands/schema/SaveSchemaCommand.cjs +28 -0
  212. package/dist/production/src/model/commands/schema/SaveSchemaCommand.cjs.map +1 -0
  213. package/dist/production/src/model/commands/schema/SaveSchemaCommand.js +28 -0
  214. package/dist/production/src/model/commands/schema/SaveSchemaCommand.js.map +1 -0
  215. package/dist/production/src/model/migrations/MigrationAlterer.cjs +10 -0
  216. package/dist/production/src/model/migrations/MigrationAlterer.cjs.map +1 -1
  217. package/dist/production/src/model/migrations/MigrationAlterer.js +10 -0
  218. package/dist/production/src/model/migrations/MigrationAlterer.js.map +1 -1
  219. package/dist/production/src/model/migrations/ProjectMigrator.cjs +29 -10
  220. package/dist/production/src/model/migrations/ProjectMigrator.cjs.map +1 -1
  221. package/dist/production/src/model/migrations/ProjectMigrator.js +30 -11
  222. package/dist/production/src/model/migrations/ProjectMigrator.js.map +1 -1
  223. package/dist/production/src/model/migrations/SchemaProvider.cjs +58 -0
  224. package/dist/production/src/model/migrations/SchemaProvider.cjs.map +1 -0
  225. package/dist/production/src/model/migrations/SchemaProvider.js +58 -0
  226. package/dist/production/src/model/migrations/SchemaProvider.js.map +1 -0
  227. package/dist/production/src/model/queries/events/EventsQuery.cjs +10 -14
  228. package/dist/production/src/model/queries/events/EventsQuery.cjs.map +1 -1
  229. package/dist/production/src/model/queries/events/EventsQuery.js +10 -14
  230. package/dist/production/src/model/queries/events/EventsQuery.js.map +1 -1
  231. package/dist/production/src/model/queries/schema/SchemaQuery.cjs +34 -0
  232. package/dist/production/src/model/queries/schema/SchemaQuery.cjs.map +1 -0
  233. package/dist/production/src/model/queries/schema/SchemaQuery.js +34 -0
  234. package/dist/production/src/model/queries/schema/SchemaQuery.js.map +1 -0
  235. package/dist/production/src/resolvers/ResolverFactory.cjs +6 -2
  236. package/dist/production/src/resolvers/ResolverFactory.cjs.map +1 -1
  237. package/dist/production/src/resolvers/ResolverFactory.js +7 -3
  238. package/dist/production/src/resolvers/ResolverFactory.js.map +1 -1
  239. package/dist/production/src/resolvers/SystemResolverContext.cjs +5 -5
  240. package/dist/production/src/resolvers/SystemResolverContext.cjs.map +1 -1
  241. package/dist/production/src/resolvers/SystemResolverContext.js +5 -5
  242. package/dist/production/src/resolvers/SystemResolverContext.js.map +1 -1
  243. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.cjs +0 -1
  244. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.cjs.map +1 -1
  245. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.js +0 -1
  246. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
  247. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.cjs +0 -1
  248. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.cjs.map +1 -1
  249. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.js +0 -1
  250. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.js.map +1 -1
  251. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.cjs +1 -1
  252. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.cjs.map +1 -1
  253. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.js +1 -1
  254. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.js.map +1 -1
  255. package/dist/production/src/resolvers/query/EventsQueryResolver.cjs +0 -1
  256. package/dist/production/src/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  257. package/dist/production/src/resolvers/query/EventsQueryResolver.js +0 -1
  258. package/dist/production/src/resolvers/query/EventsQueryResolver.js.map +1 -1
  259. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs +0 -1
  260. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs.map +1 -1
  261. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.js +0 -1
  262. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.js.map +1 -1
  263. package/dist/production/src/resolvers/query/SchemaQueryResolver.cjs +23 -0
  264. package/dist/production/src/resolvers/query/SchemaQueryResolver.cjs.map +1 -0
  265. package/dist/production/src/resolvers/query/SchemaQueryResolver.js +23 -0
  266. package/dist/production/src/resolvers/query/SchemaQueryResolver.js.map +1 -0
  267. package/dist/production/src/resolvers/query/StagesQueryResolver.cjs +0 -1
  268. package/dist/production/src/resolvers/query/StagesQueryResolver.cjs.map +1 -1
  269. package/dist/production/src/resolvers/query/StagesQueryResolver.js +0 -1
  270. package/dist/production/src/resolvers/query/StagesQueryResolver.js.map +1 -1
  271. package/dist/production/src/resolvers/types/OldValuesHelpers.cjs +0 -1
  272. package/dist/production/src/resolvers/types/OldValuesHelpers.cjs.map +1 -1
  273. package/dist/production/src/resolvers/types/OldValuesHelpers.js +0 -1
  274. package/dist/production/src/resolvers/types/OldValuesHelpers.js.map +1 -1
  275. package/dist/production/src/schema/system.graphql.cjs +3 -1
  276. package/dist/production/src/schema/system.graphql.cjs.map +1 -1
  277. package/dist/production/src/schema/system.graphql.js +3 -1
  278. package/dist/production/src/schema/system.graphql.js.map +1 -1
  279. package/dist/production/src/schema/types.cjs.map +1 -1
  280. package/dist/production/src/schema/types.js.map +1 -1
  281. package/dist/tests/cases/unit/eventsQuery.test.d.ts +2 -0
  282. package/dist/tests/cases/unit/eventsQuery.test.d.ts.map +1 -0
  283. package/dist/tests/src/uuid.d.ts +3 -0
  284. package/dist/tests/src/uuid.d.ts.map +1 -0
  285. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  286. package/dist/types/SystemContainer.d.ts +7 -3
  287. package/dist/types/SystemContainer.d.ts.map +1 -1
  288. package/dist/types/index.d.ts +1 -1
  289. package/dist/types/index.d.ts.map +1 -1
  290. package/dist/types/migrations/2024-06-28-153000-schema.d.ts +3 -0
  291. package/dist/types/migrations/2024-06-28-153000-schema.d.ts.map +1 -0
  292. package/dist/types/migrations/2024-06-28-153001-schema-init.d.ts +4 -0
  293. package/dist/types/migrations/2024-06-28-153001-schema-init.d.ts.map +1 -0
  294. package/dist/types/migrations/2024-07-29-150000-event-data-index.d.ts +3 -0
  295. package/dist/types/migrations/2024-07-29-150000-event-data-index.d.ts.map +1 -0
  296. package/dist/types/migrations/runner.d.ts +3 -3
  297. package/dist/types/migrations/runner.d.ts.map +1 -1
  298. package/dist/types/migrations/snapshot.d.ts.map +1 -1
  299. package/dist/types/migrations/types.d.ts +2 -2
  300. package/dist/types/migrations/types.d.ts.map +1 -1
  301. package/dist/types/model/SchemaGetter.d.ts +6 -0
  302. package/dist/types/model/SchemaGetter.d.ts.map +1 -0
  303. package/dist/types/model/authorization/AuthorizationActions.d.ts +5 -0
  304. package/dist/types/model/authorization/AuthorizationActions.d.ts.map +1 -1
  305. package/dist/types/model/authorization/PermissionsFactory.d.ts.map +1 -1
  306. package/dist/types/model/authorization/StagePermissionsFactory.d.ts +4 -4
  307. package/dist/types/model/authorization/StagePermissionsFactory.d.ts.map +1 -1
  308. package/dist/types/model/authorization/StageScope.d.ts.map +1 -1
  309. package/dist/types/model/commands/schema/SaveSchemaCommand.d.ts +8 -0
  310. package/dist/types/model/commands/schema/SaveSchemaCommand.d.ts.map +1 -0
  311. package/dist/types/model/dependencies/content/ContentQueryExecutor.d.ts +3 -2
  312. package/dist/types/model/dependencies/content/ContentQueryExecutor.d.ts.map +1 -1
  313. package/dist/types/model/migrations/MigrationAlterer.d.ts +4 -0
  314. package/dist/types/model/migrations/MigrationAlterer.d.ts.map +1 -1
  315. package/dist/types/model/migrations/ProjectMigrator.d.ts +3 -3
  316. package/dist/types/model/migrations/ProjectMigrator.d.ts.map +1 -1
  317. package/dist/types/model/migrations/SchemaProvider.d.ts +28 -0
  318. package/dist/types/model/migrations/SchemaProvider.d.ts.map +1 -0
  319. package/dist/types/model/migrations/index.d.ts +1 -1
  320. package/dist/types/model/migrations/index.d.ts.map +1 -1
  321. package/dist/types/model/queries/events/EventsQuery.d.ts.map +1 -1
  322. package/dist/types/model/queries/index.d.ts +1 -0
  323. package/dist/types/model/queries/index.d.ts.map +1 -1
  324. package/dist/types/model/queries/schema/SchemaQuery.d.ts +8 -0
  325. package/dist/types/model/queries/schema/SchemaQuery.d.ts.map +1 -0
  326. package/dist/types/model/queries/schema/index.d.ts +2 -0
  327. package/dist/types/model/queries/schema/index.d.ts.map +1 -0
  328. package/dist/types/resolvers/ResolverFactory.d.ts +3 -1
  329. package/dist/types/resolvers/ResolverFactory.d.ts.map +1 -1
  330. package/dist/types/resolvers/SystemResolverContext.d.ts +4 -4
  331. package/dist/types/resolvers/SystemResolverContext.d.ts.map +1 -1
  332. package/dist/types/resolvers/query/SchemaQueryResolver.d.ts +7 -0
  333. package/dist/types/resolvers/query/SchemaQueryResolver.d.ts.map +1 -0
  334. package/dist/types/schema/system.graphql.d.ts.map +1 -1
  335. package/dist/types/schema/types.d.ts +15 -3
  336. package/dist/types/schema/types.d.ts.map +1 -1
  337. package/dist/types/tsconfig.tsbuildinfo +1 -1
  338. package/graphql.codegen.yml +2 -0
  339. package/package.json +12 -12
  340. package/src/SystemContainer.ts +14 -11
  341. package/src/bin/runMigrations.ts +4 -4
  342. package/src/index.ts +3 -2
  343. package/src/migrations/2020-05-06-150000-composed-primary.ts +1 -1
  344. package/src/migrations/2020-06-01-103000-event-trigger-perf.ts +1 -1
  345. package/src/migrations/2021-05-07-155800-event-log-rework.ts +1 -1
  346. package/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts +1 -1
  347. package/src/migrations/2022-10-03-110000-table-on-delete.ts +1 -1
  348. package/src/migrations/2023-09-11-174000-fix-on-delete.ts +1 -1
  349. package/src/migrations/2023-10-19-173000-fix-unique.ts +1 -1
  350. package/src/migrations/2024-06-28-153000-schema.ts +20 -0
  351. package/src/migrations/2024-06-28-153001-schema-init.ts +12 -0
  352. package/src/migrations/2024-07-29-150000-event-data-index.ts +11 -0
  353. package/src/migrations/runner.ts +10 -4
  354. package/src/migrations/snapshot.ts +17 -1
  355. package/src/migrations/types.ts +2 -2
  356. package/src/model/SchemaGetter.ts +3 -0
  357. package/src/model/authorization/AuthorizationActions.ts +1 -0
  358. package/src/model/authorization/PermissionsFactory.ts +1 -0
  359. package/src/model/authorization/StagePermissionsFactory.ts +5 -5
  360. package/src/model/authorization/StageScope.ts +2 -2
  361. package/src/model/commands/schema/SaveSchemaCommand.ts +31 -0
  362. package/src/model/dependencies/content/ContentQueryExecutor.ts +3 -2
  363. package/src/model/migrations/MigrationAlterer.ts +14 -0
  364. package/src/model/migrations/ProjectMigrator.ts +34 -12
  365. package/src/model/migrations/SchemaProvider.ts +77 -0
  366. package/src/model/migrations/index.ts +1 -1
  367. package/src/model/queries/events/EventsQuery.ts +15 -17
  368. package/src/model/queries/index.ts +1 -0
  369. package/src/model/queries/schema/SchemaQuery.ts +48 -0
  370. package/src/model/queries/schema/index.ts +1 -0
  371. package/src/resolvers/ResolverFactory.ts +9 -1
  372. package/src/resolvers/SystemResolverContext.ts +8 -13
  373. package/src/resolvers/mutation/TruncateMutationResolver.ts +1 -1
  374. package/src/resolvers/query/SchemaQueryResolver.ts +19 -0
  375. package/src/schema/system.graphql.ts +3 -1
  376. package/src/schema/types.ts +12 -2
  377. package/tests/cases/migrations/2020-05-06-150000-composed-primary.test.ts +9 -1
  378. package/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.ts +9 -1
  379. package/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.ts +17 -6
  380. package/tests/cases/migrations/2023-09-11-174000-fix-on-delete.test.ts +32 -12
  381. package/tests/cases/migrations/2023-10-19-173000-fix-unique.test.ts +9 -1
  382. package/tests/cases/unit/eventsQuery.test.ts +39 -0
  383. package/tests/src/uuid.ts +4 -0
  384. package/dist/development/src/model/migrations/SchemaVersionBuilder.cjs +0 -37
  385. package/dist/development/src/model/migrations/SchemaVersionBuilder.cjs.map +0 -1
  386. package/dist/development/src/model/migrations/SchemaVersionBuilder.js +0 -37
  387. package/dist/development/src/model/migrations/SchemaVersionBuilder.js.map +0 -1
  388. package/dist/production/src/model/migrations/SchemaVersionBuilder.cjs +0 -37
  389. package/dist/production/src/model/migrations/SchemaVersionBuilder.cjs.map +0 -1
  390. package/dist/production/src/model/migrations/SchemaVersionBuilder.js +0 -37
  391. package/dist/production/src/model/migrations/SchemaVersionBuilder.js.map +0 -1
  392. package/dist/types/model/migrations/SchemaVersionBuilder.d.ts +0 -37
  393. package/dist/types/model/migrations/SchemaVersionBuilder.d.ts.map +0 -1
  394. package/src/model/migrations/SchemaVersionBuilder.ts +0 -43
@@ -1 +1 @@
1
- {"version":3,"file":"2020-06-01-103000-event-trigger-perf.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-06-01-103000-event-trigger-perf.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventStatementTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_statement', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'STATEMENT',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'statement_trigger_event',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS $$\nDECLARE\n DECLARE new_event_type TEXT;\n DECLARE previous_id UUID;\n DECLARE new_event_data JSONB;\n DECLARE update_diff JSONB;\n DECLARE primary_values JSONB;\n DECLARE old_row JSONB;\n DECLARE new_row JSONB;\nBEGIN\n old_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n primary_values := (\n SELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n FROM jsonb_each(COALESCE(old_row, new_row))\n WHERE key = ANY (TG_ARGV)\n );\n\n\n CASE TG_OP\n WHEN 'INSERT' THEN BEGIN\n new_event_type := 'create';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', COALESCE((\n SELECT jsonb_object_agg(key, value)\n FROM jsonb_each(new_row)\n WHERE NOT (key = ANY (TG_ARGV))\n ), '{}'::JSONB)\n );\n END;\n WHEN 'UPDATE' THEN BEGIN\n update_diff := (\n SELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n FROM jsonb_each(old_row) o\n FULL OUTER JOIN\n jsonb_each(new_row) n ON n.key = o.key\n WHERE n.value IS DISTINCT FROM o.value\n );\n IF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n RETURN NULL;\n END IF;\n new_event_type := 'update';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', update_diff\n );\n END;\n WHEN 'DELETE' THEN BEGIN\n new_event_type := 'delete';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values\n );\n END;\n ELSE RAISE\n EXCEPTION 'Unknown TG_OP value %', TG_OP;\n END CASE;\n CASE WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NULL THEN\n PERFORM set_config('system.current_stage_id' || TG_TABLE_SCHEMA, \"id\"::TEXT, TRUE), set_config('system.current_stage_event' || TG_TABLE_SCHEMA, \"event_id\"::TEXT, TRUE)\n FROM \"stage\"\n WHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n FOR NO KEY UPDATE;\n ELSE\n -- do nothing\n END CASE;\n previous_id := current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID;\n INSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n VALUES (set_config('system.current_stage_event' || TG_TABLE_SCHEMA, system.uuid_generate_v4()::TEXT, TRUE)::UUID, new_event_type, new_event_data, previous_id);\n\n RETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"statement_trigger_event\"() RETURNS TRIGGER AS\n$$\nBEGIN\n CASE\n WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NOT NULL THEN\n UPDATE stage SET event_id = current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID WHERE id = current_setting('system.current_stage_id' || TG_TABLE_SCHEMA)::UUID;\n ELSE\n -- do nothing\n END CASE;\n RETURN NULL;\nEND;\n$$\n LANGUAGE plpgsql`)\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;;AAKA,MAAM,8BAA8B,CAAC,SAA2B,cAAoB;AAC3E,UAAA,cAAc,WAAW,uBAAuB;AAAA,IACvD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,gCAA+B,SAA2B,MAA0C;AACnG,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AAClD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA2EO;AACnB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAYQ;AACpB,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IACvE;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IACxE;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"2020-06-01-103000-event-trigger-perf.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-06-01-103000-event-trigger-perf.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventStatementTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_statement', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'STATEMENT',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'statement_trigger_event',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS $$\nDECLARE\n DECLARE new_event_type TEXT;\n DECLARE previous_id UUID;\n DECLARE new_event_data JSONB;\n DECLARE update_diff JSONB;\n DECLARE primary_values JSONB;\n DECLARE old_row JSONB;\n DECLARE new_row JSONB;\nBEGIN\n old_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN to_jsonb(old) ELSE NULL END;\n new_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN to_jsonb(new) ELSE NULL END;\n primary_values := (\n SELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n FROM jsonb_each(COALESCE(old_row, new_row))\n WHERE key = ANY (TG_ARGV)\n );\n\n\n CASE TG_OP\n WHEN 'INSERT' THEN BEGIN\n new_event_type := 'create';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', COALESCE((\n SELECT jsonb_object_agg(key, value)\n FROM jsonb_each(new_row)\n WHERE NOT (key = ANY (TG_ARGV))\n ), '{}'::JSONB)\n );\n END;\n WHEN 'UPDATE' THEN BEGIN\n update_diff := (\n SELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n FROM jsonb_each(old_row) o\n FULL OUTER JOIN\n jsonb_each(new_row) n ON n.key = o.key\n WHERE n.value IS DISTINCT FROM o.value\n );\n IF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n RETURN NULL;\n END IF;\n new_event_type := 'update';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values,\n 'values', update_diff\n );\n END;\n WHEN 'DELETE' THEN BEGIN\n new_event_type := 'delete';\n new_event_data := jsonb_build_object(\n 'tableName', TG_TABLE_NAME,\n 'rowId', primary_values\n );\n END;\n ELSE RAISE\n EXCEPTION 'Unknown TG_OP value %', TG_OP;\n END CASE;\n CASE WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NULL THEN\n PERFORM set_config('system.current_stage_id' || TG_TABLE_SCHEMA, \"id\"::TEXT, TRUE), set_config('system.current_stage_event' || TG_TABLE_SCHEMA, \"event_id\"::TEXT, TRUE)\n FROM \"stage\"\n WHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n FOR NO KEY UPDATE;\n ELSE\n -- do nothing\n END CASE;\n previous_id := current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID;\n INSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n VALUES (set_config('system.current_stage_event' || TG_TABLE_SCHEMA, system.uuid_generate_v4()::TEXT, TRUE)::UUID, new_event_type, new_event_data, previous_id);\n\n RETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"statement_trigger_event\"() RETURNS TRIGGER AS\n$$\nBEGIN\n CASE\n WHEN NULLIF(current_setting('system.current_stage_id' || TG_TABLE_SCHEMA, TRUE), '') IS NOT NULL THEN\n UPDATE stage SET event_id = current_setting('system.current_stage_event' || TG_TABLE_SCHEMA)::UUID WHERE id = current_setting('system.current_stage_id' || TG_TABLE_SCHEMA)::UUID;\n ELSE\n -- do nothing\n END CASE;\n RETURN NULL;\nEND;\n$$\n LANGUAGE plpgsql`)\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tcreateEventStatementTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;AAKA,MAAM,8BAA8B,CAAC,SAA2B,cAAoB;AAC3E,UAAA,cAAc,WAAW,uBAAuB;AAAA,IACvD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,gCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBA2EO;AACnB,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAYQ;AACpB,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IACvE;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IACxE;AAAA,EACD;AACD;"}
@@ -9,7 +9,6 @@ require("../schema/dev.graphql.cjs");
9
9
  require("../schema/system.graphql.cjs");
10
10
  require("@contember/schema-utils");
11
11
  require("@contember/logger");
12
- require("../model/migrations/SchemaVersionBuilder.cjs");
13
12
  const createTrxEvent = (builder, tableName) => {
14
13
  builder.createTrigger(tableName, "log_event_trx", {
15
14
  when: "AFTER",
@@ -24,7 +23,7 @@ const createTrxEvent = (builder, tableName) => {
24
23
  });
25
24
  };
26
25
  async function _20210507155800eventlogrework(builder, args) {
27
- const schema = await args.schemaResolver(args.connection);
26
+ const schema = (await args.schemaResolver(args.connection)).schema;
28
27
  const junctionTables = modelHelpers.getJunctionTables(schema.model);
29
28
  const schemas = args.project.stages.map((it) => `stage_${it.slug}`);
30
29
  builder.sql(`LOCK TABLE event`);
@@ -1 +1 @@
1
- {"version":3,"file":"2021-05-07-155800-event-log-rework.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-07-155800-event-log-rework.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`LOCK TABLE event`)\n\tbuilder.sql(`\n\t\tALTER TABLE schema_migration\n\t\tADD PRIMARY KEY (id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE DOMAIN event_data_type AS TEXT\n\t\tCONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE event_data (\n\t\t\tid UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,\n\t\ttype event_data_type NOT NULL,\n\t\ttable_name TEXT NOT NULL,\n\t\trow_ids JSONB NOT NULL,\n\t\tvalues JSONB DEFAULT NULL,\n\t\tcreated_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,\n\t\tschema_id INTEGER NOT NULL REFERENCES schema_migration(id),\n\t\tidentity_id UUID NOT NULL,\n\t\ttransaction_id UUID DEFAULT COALESCE(\n\t\t\t(NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,\n\t\t\t(SET_CONFIG('system.transaction_id'::TEXT, (\"uuid_generate_v4\"())::TEXT, TRUE))::UUID) NOT NULL\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event_row_id\n\t\tON event_data(row_ids)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_table_name\n\t\tON event_data(table_name)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_type\n\t\tON event_data(type)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_transaction\n\t\tON event_data(transaction_id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE stage_transaction (\n\t\t\ttransaction_id UUID NOT NULL,\n\t\t\tstage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,\n\t\t\tapplied_at TIMESTAMPTZ NOT NULL,\n\t\t\tPRIMARY KEY (transaction_id, stage_id)\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\tevents AS (\n\t\t\tSELECT\n\t\t\t\te.*,\n\t\t\t\t(SELECT MAX(id) FROM schema_migration) AS schema_id,\n\t\t\t\t1 AS index,\n\t\t\t\tstage.id AS stage_id\n\t\t\tFROM stage\n\t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tCOALESCE(\n \t\t\t\t\tCASE WHEN event.type = 'run_migration' THEN\n\t\t\t\t\t\t(SELECT id FROM schema_migration WHERE version = event.data ->> 'version')\n\t\t\t\t\tEND,\n\t\t\t\t\tevents.schema_id\n\t\t\t\t),\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\t\tJOIN events\n \t\t\tON events.previous_id = event.id\n \t\t),\n \t\tshifted_events AS (\n \t\t\tSELECT\n \t\t\t\t*,\n \t\t\t\t(\n \t\t\t\t\tcreated_at\n \t\t\t\t\t+ (ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY index DESC ) - 1 ||' us')::INTERVAL\n \t\t\t\t) AS shifted_created_at\n \t\t\tFROM events\n \t\t)\n \t\tINSERT\n \t\tINTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)\n \t\tSELECT\n \t\t\tid,\n \t\t\ttype,\n \t\t\tdata ->> 'tableName',\n \t\t\tdata -> 'rowId',\n \t\t\tdata -> 'values',\n \t\t\tshifted_created_at,\n \t\t\tschema_id,\n \t\t\tidentity_id,\n \t\t\ttransaction_id\n \t\tFROM shifted_events\n \t\tWHERE type NOT IN ('init', 'run_migration')\n \t\tON CONFLICT DO NOTHING\n \t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n \t\tevents AS (\n \t\t\tSELECT\n \t\t\t\te.*,\n \t\t\t\t1 AS index,\n \t\t\t\tstage.id AS stage_id\n \t\t\tFROM stage\n \t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\tJOIN events ON events.previous_id = event.id\n \t\t),\n \t\ttransaction_times AS (\n \t\t\tSELECT\n \t\t\t\tDISTINCT ON (transaction_id, stage_id)\n \t\t\t\ttransaction_id,\n \t\t\t\tcreated_at,\n \t\t\t\tindex,\n \t\t\t\tstage_id\n \t\t\tFROM events\n \t\t\tORDER BY transaction_id\n \t\t)\n \t\tINSERT\n \t\tINTO stage_transaction (transaction_id, stage_id, applied_at)\n \t\tSELECT transaction_id, stage_id, created_at\n \t\tFROM transaction_times\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n\t\t$$\n\t\tDECLARE new_event_type TEXT;\n\t\tDECLARE table_name TEXT;\n\t\tDECLARE values JSONB;\n\t\tDECLARE update_diff JSONB;\n\t\tDECLARE primary_values JSONB;\n\t\tDECLARE old_row JSONB;\n\t\tDECLARE new_row JSONB;\n\t\tBEGIN\n\t\t\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;\n\t\t\tnew_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;\n\t\t\tprimary_values := (\n\t\t\t\tSELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))\n\t\t\t\tFROM JSONB_EACH(COALESCE(old_row, new_row))\n\t\t\t\tWHERE key = ANY (TG_ARGV)\n\t\t\t);\n\t\t\ttable_name := tg_table_name;\n\t\t\tCASE TG_OP\n\t\t\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'create';\n\t\t\t\t\tvalues := COALESCE(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(key, value)\n \t\t\t\t\t\t FROM JSONB_EACH(new_row)\n \t\t\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n \t\t\t\t\t\t),\n \t\t\t\t\t\tJSONB_BUILD_OBJECT()\n \t\t\t\t\t);\n\t\t\t\tEND;\n\t\t\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\t\t\tupdate_diff := (\n\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)\n\t\t\t\t\t\tFROM JSONB_EACH(old_row) o\n \t\t\t\t\t\tFULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key\n\t\t\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t\t\t);\n\t\t\t\t\tIF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN\n\t\t\t\t\t\tRETURN NULL;\n\t\t\t\t\tEND IF;\n\t\t\t\t\tnew_event_type := 'update';\n\t\t\t\t\tvalues := update_diff;\n\t\t\t\tEND;\n\t\t\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'delete';\n\t\t\t\tEND;\n\t\t\t\tELSE RAISE\n\t\t\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\t\tEND CASE;\n\n\t\t\tCASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN\n\t\t\t\tPERFORM SET_CONFIG('system.schema_id', (select MAX(\"id\")::TEXT from schema_migration), TRUE);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tINSERT INTO \"event_data\" (\"id\", \"type\", \"table_name\", \"row_ids\", \"values\", \"created_at\", schema_id, identity_id)\n\t\t\tVALUES (\n\t\t\t\t\"uuid_generate_v4\"(),\n\t\t\t\tnew_event_type,\n\t\t\t\ttable_name,\n\t\t\t\tprimary_values,\n\t\t\t\tvalues,\n\t\t\t\tCLOCK_TIMESTAMP(),\n\t\t\t\tCURRENT_SETTING('system.schema_id')::INT,\n\t\t\t\tCOALESCE(\n\t\t\t\t\tCURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,\n \t\t\t\t\t'00000000-0000-0000-0000-000000000000'::UUID)\n \t\t\t\t);\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS\n\t\t$$\n\t\tBEGIN\n\t\t\tPERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number\n\n\t\t\tCASE WHEN\n\t\t\t\tNULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL\n\t\t\t\tAND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL\n\t\t\t\tTHEN\n\t\t\t\tINSERT INTO stage_transaction(transaction_id, stage_id, applied_at)\n\t\t\t\tVALUES (\n\t\t\t\t\tCURRENT_SETTING('system.transaction_id')::UUID,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT id\n \t\t\t\t\t\tFROM \"stage\"\n \t\t\t\t\t\tWHERE \"slug\" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))\n \t\t\t\t ),\n\t\t\t\t\tCLOCK_TIMESTAMP()\n\t\t\t\t)\n\t\t\t\tON CONFLICT DO NOTHING;\n\n\t\t\t\tPERFORM SET_CONFIG('system.transaction_inserted', '1', true);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tALTER TABLE stage\n\t\tALTER event_id DROP NOT NULL\n\t`)\n\tbuilder.sql(`\n\t\tALTER TABLE event\n\t\tRENAME TO event_bak\n\t`)\n}\n"],"names":["getJunctionTables","schema"],"mappings":";;;;;;;;;;;;AAKA,MAAM,iBAAiB,CAAC,SAA2B,cAAoB;AAC9D,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,8BAA+B,SAA2B,MAA0C;AACnG,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AAClD,QAAA,iBAAiBA,aAAAA,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAcX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,GAiDV;AACF,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA+BX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAyEX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EA8BX;AAED,aAAW,SAAS,gBAAgB;AACnC,eAAWC,WAAU,SAAS;AACrB,cAAA,YAAY,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,qBAAqB;AAC5E,qBAAe,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAC1D;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AACrB,cAAA,YAAY,EAAE,MAAM,OAAO,WAAW,QAAAA,WAAU,qBAAqB;AAC7E,qBAAe,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAC3D;AAAA,EACD;AACA,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACD,UAAQ,IAAI;AAAA;AAAA;AAAA,EAGX;AACF;;"}
1
+ {"version":3,"file":"2021-05-07-155800-event-log-rework.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-07-155800-event-log-rework.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`LOCK TABLE event`)\n\tbuilder.sql(`\n\t\tALTER TABLE schema_migration\n\t\tADD PRIMARY KEY (id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE DOMAIN event_data_type AS TEXT\n\t\tCONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE event_data (\n\t\t\tid UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,\n\t\ttype event_data_type NOT NULL,\n\t\ttable_name TEXT NOT NULL,\n\t\trow_ids JSONB NOT NULL,\n\t\tvalues JSONB DEFAULT NULL,\n\t\tcreated_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,\n\t\tschema_id INTEGER NOT NULL REFERENCES schema_migration(id),\n\t\tidentity_id UUID NOT NULL,\n\t\ttransaction_id UUID DEFAULT COALESCE(\n\t\t\t(NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,\n\t\t\t(SET_CONFIG('system.transaction_id'::TEXT, (\"uuid_generate_v4\"())::TEXT, TRUE))::UUID) NOT NULL\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event_row_id\n\t\tON event_data(row_ids)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_table_name\n\t\tON event_data(table_name)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_type\n\t\tON event_data(type)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_transaction\n\t\tON event_data(transaction_id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE stage_transaction (\n\t\t\ttransaction_id UUID NOT NULL,\n\t\t\tstage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,\n\t\t\tapplied_at TIMESTAMPTZ NOT NULL,\n\t\t\tPRIMARY KEY (transaction_id, stage_id)\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\tevents AS (\n\t\t\tSELECT\n\t\t\t\te.*,\n\t\t\t\t(SELECT MAX(id) FROM schema_migration) AS schema_id,\n\t\t\t\t1 AS index,\n\t\t\t\tstage.id AS stage_id\n\t\t\tFROM stage\n\t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tCOALESCE(\n \t\t\t\t\tCASE WHEN event.type = 'run_migration' THEN\n\t\t\t\t\t\t(SELECT id FROM schema_migration WHERE version = event.data ->> 'version')\n\t\t\t\t\tEND,\n\t\t\t\t\tevents.schema_id\n\t\t\t\t),\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\t\tJOIN events\n \t\t\tON events.previous_id = event.id\n \t\t),\n \t\tshifted_events AS (\n \t\t\tSELECT\n \t\t\t\t*,\n \t\t\t\t(\n \t\t\t\t\tcreated_at\n \t\t\t\t\t+ (ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY index DESC ) - 1 ||' us')::INTERVAL\n \t\t\t\t) AS shifted_created_at\n \t\t\tFROM events\n \t\t)\n \t\tINSERT\n \t\tINTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)\n \t\tSELECT\n \t\t\tid,\n \t\t\ttype,\n \t\t\tdata ->> 'tableName',\n \t\t\tdata -> 'rowId',\n \t\t\tdata -> 'values',\n \t\t\tshifted_created_at,\n \t\t\tschema_id,\n \t\t\tidentity_id,\n \t\t\ttransaction_id\n \t\tFROM shifted_events\n \t\tWHERE type NOT IN ('init', 'run_migration')\n \t\tON CONFLICT DO NOTHING\n \t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n \t\tevents AS (\n \t\t\tSELECT\n \t\t\t\te.*,\n \t\t\t\t1 AS index,\n \t\t\t\tstage.id AS stage_id\n \t\t\tFROM stage\n \t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\tJOIN events ON events.previous_id = event.id\n \t\t),\n \t\ttransaction_times AS (\n \t\t\tSELECT\n \t\t\t\tDISTINCT ON (transaction_id, stage_id)\n \t\t\t\ttransaction_id,\n \t\t\t\tcreated_at,\n \t\t\t\tindex,\n \t\t\t\tstage_id\n \t\t\tFROM events\n \t\t\tORDER BY transaction_id\n \t\t)\n \t\tINSERT\n \t\tINTO stage_transaction (transaction_id, stage_id, applied_at)\n \t\tSELECT transaction_id, stage_id, created_at\n \t\tFROM transaction_times\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n\t\t$$\n\t\tDECLARE new_event_type TEXT;\n\t\tDECLARE table_name TEXT;\n\t\tDECLARE values JSONB;\n\t\tDECLARE update_diff JSONB;\n\t\tDECLARE primary_values JSONB;\n\t\tDECLARE old_row JSONB;\n\t\tDECLARE new_row JSONB;\n\t\tBEGIN\n\t\t\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;\n\t\t\tnew_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;\n\t\t\tprimary_values := (\n\t\t\t\tSELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))\n\t\t\t\tFROM JSONB_EACH(COALESCE(old_row, new_row))\n\t\t\t\tWHERE key = ANY (TG_ARGV)\n\t\t\t);\n\t\t\ttable_name := tg_table_name;\n\t\t\tCASE TG_OP\n\t\t\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'create';\n\t\t\t\t\tvalues := COALESCE(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(key, value)\n \t\t\t\t\t\t FROM JSONB_EACH(new_row)\n \t\t\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n \t\t\t\t\t\t),\n \t\t\t\t\t\tJSONB_BUILD_OBJECT()\n \t\t\t\t\t);\n\t\t\t\tEND;\n\t\t\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\t\t\tupdate_diff := (\n\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)\n\t\t\t\t\t\tFROM JSONB_EACH(old_row) o\n \t\t\t\t\t\tFULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key\n\t\t\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t\t\t);\n\t\t\t\t\tIF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN\n\t\t\t\t\t\tRETURN NULL;\n\t\t\t\t\tEND IF;\n\t\t\t\t\tnew_event_type := 'update';\n\t\t\t\t\tvalues := update_diff;\n\t\t\t\tEND;\n\t\t\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'delete';\n\t\t\t\tEND;\n\t\t\t\tELSE RAISE\n\t\t\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\t\tEND CASE;\n\n\t\t\tCASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN\n\t\t\t\tPERFORM SET_CONFIG('system.schema_id', (select MAX(\"id\")::TEXT from schema_migration), TRUE);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tINSERT INTO \"event_data\" (\"id\", \"type\", \"table_name\", \"row_ids\", \"values\", \"created_at\", schema_id, identity_id)\n\t\t\tVALUES (\n\t\t\t\t\"uuid_generate_v4\"(),\n\t\t\t\tnew_event_type,\n\t\t\t\ttable_name,\n\t\t\t\tprimary_values,\n\t\t\t\tvalues,\n\t\t\t\tCLOCK_TIMESTAMP(),\n\t\t\t\tCURRENT_SETTING('system.schema_id')::INT,\n\t\t\t\tCOALESCE(\n\t\t\t\t\tCURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,\n \t\t\t\t\t'00000000-0000-0000-0000-000000000000'::UUID)\n \t\t\t\t);\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS\n\t\t$$\n\t\tBEGIN\n\t\t\tPERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number\n\n\t\t\tCASE WHEN\n\t\t\t\tNULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL\n\t\t\t\tAND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL\n\t\t\t\tTHEN\n\t\t\t\tINSERT INTO stage_transaction(transaction_id, stage_id, applied_at)\n\t\t\t\tVALUES (\n\t\t\t\t\tCURRENT_SETTING('system.transaction_id')::UUID,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT id\n \t\t\t\t\t\tFROM \"stage\"\n \t\t\t\t\t\tWHERE \"slug\" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))\n \t\t\t\t ),\n\t\t\t\t\tCLOCK_TIMESTAMP()\n\t\t\t\t)\n\t\t\t\tON CONFLICT DO NOTHING;\n\n\t\t\t\tPERFORM SET_CONFIG('system.transaction_inserted', '1', true);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tALTER TABLE stage\n\t\tALTER event_id DROP NOT NULL\n\t`)\n\tbuilder.sql(`\n\t\tALTER TABLE event\n\t\tRENAME TO event_bak\n\t`)\n}\n"],"names":["getJunctionTables","schema"],"mappings":"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"}
@@ -8,7 +8,6 @@ import "../schema/dev.graphql.js";
8
8
  import "../schema/system.graphql.js";
9
9
  import "@contember/schema-utils";
10
10
  import "@contember/logger";
11
- import "../model/migrations/SchemaVersionBuilder.js";
12
11
  const createTrxEvent = (builder, tableName) => {
13
12
  builder.createTrigger(tableName, "log_event_trx", {
14
13
  when: "AFTER",
@@ -23,7 +22,7 @@ const createTrxEvent = (builder, tableName) => {
23
22
  });
24
23
  };
25
24
  async function _20210507155800eventlogrework(builder, args) {
26
- const schema = await args.schemaResolver(args.connection);
25
+ const schema = (await args.schemaResolver(args.connection)).schema;
27
26
  const junctionTables = getJunctionTables(schema.model);
28
27
  const schemas = args.project.stages.map((it) => `stage_${it.slug}`);
29
28
  builder.sql(`LOCK TABLE event`);
@@ -1 +1 @@
1
- {"version":3,"file":"2021-05-07-155800-event-log-rework.js","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-07-155800-event-log-rework.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`LOCK TABLE event`)\n\tbuilder.sql(`\n\t\tALTER TABLE schema_migration\n\t\tADD PRIMARY KEY (id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE DOMAIN event_data_type AS TEXT\n\t\tCONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE event_data (\n\t\t\tid UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,\n\t\ttype event_data_type NOT NULL,\n\t\ttable_name TEXT NOT NULL,\n\t\trow_ids JSONB NOT NULL,\n\t\tvalues JSONB DEFAULT NULL,\n\t\tcreated_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,\n\t\tschema_id INTEGER NOT NULL REFERENCES schema_migration(id),\n\t\tidentity_id UUID NOT NULL,\n\t\ttransaction_id UUID DEFAULT COALESCE(\n\t\t\t(NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,\n\t\t\t(SET_CONFIG('system.transaction_id'::TEXT, (\"uuid_generate_v4\"())::TEXT, TRUE))::UUID) NOT NULL\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event_row_id\n\t\tON event_data(row_ids)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_table_name\n\t\tON event_data(table_name)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_type\n\t\tON event_data(type)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_transaction\n\t\tON event_data(transaction_id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE stage_transaction (\n\t\t\ttransaction_id UUID NOT NULL,\n\t\t\tstage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,\n\t\t\tapplied_at TIMESTAMPTZ NOT NULL,\n\t\t\tPRIMARY KEY (transaction_id, stage_id)\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\tevents AS (\n\t\t\tSELECT\n\t\t\t\te.*,\n\t\t\t\t(SELECT MAX(id) FROM schema_migration) AS schema_id,\n\t\t\t\t1 AS index,\n\t\t\t\tstage.id AS stage_id\n\t\t\tFROM stage\n\t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tCOALESCE(\n \t\t\t\t\tCASE WHEN event.type = 'run_migration' THEN\n\t\t\t\t\t\t(SELECT id FROM schema_migration WHERE version = event.data ->> 'version')\n\t\t\t\t\tEND,\n\t\t\t\t\tevents.schema_id\n\t\t\t\t),\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\t\tJOIN events\n \t\t\tON events.previous_id = event.id\n \t\t),\n \t\tshifted_events AS (\n \t\t\tSELECT\n \t\t\t\t*,\n \t\t\t\t(\n \t\t\t\t\tcreated_at\n \t\t\t\t\t+ (ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY index DESC ) - 1 ||' us')::INTERVAL\n \t\t\t\t) AS shifted_created_at\n \t\t\tFROM events\n \t\t)\n \t\tINSERT\n \t\tINTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)\n \t\tSELECT\n \t\t\tid,\n \t\t\ttype,\n \t\t\tdata ->> 'tableName',\n \t\t\tdata -> 'rowId',\n \t\t\tdata -> 'values',\n \t\t\tshifted_created_at,\n \t\t\tschema_id,\n \t\t\tidentity_id,\n \t\t\ttransaction_id\n \t\tFROM shifted_events\n \t\tWHERE type NOT IN ('init', 'run_migration')\n \t\tON CONFLICT DO NOTHING\n \t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n \t\tevents AS (\n \t\t\tSELECT\n \t\t\t\te.*,\n \t\t\t\t1 AS index,\n \t\t\t\tstage.id AS stage_id\n \t\t\tFROM stage\n \t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\tJOIN events ON events.previous_id = event.id\n \t\t),\n \t\ttransaction_times AS (\n \t\t\tSELECT\n \t\t\t\tDISTINCT ON (transaction_id, stage_id)\n \t\t\t\ttransaction_id,\n \t\t\t\tcreated_at,\n \t\t\t\tindex,\n \t\t\t\tstage_id\n \t\t\tFROM events\n \t\t\tORDER BY transaction_id\n \t\t)\n \t\tINSERT\n \t\tINTO stage_transaction (transaction_id, stage_id, applied_at)\n \t\tSELECT transaction_id, stage_id, created_at\n \t\tFROM transaction_times\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n\t\t$$\n\t\tDECLARE new_event_type TEXT;\n\t\tDECLARE table_name TEXT;\n\t\tDECLARE values JSONB;\n\t\tDECLARE update_diff JSONB;\n\t\tDECLARE primary_values JSONB;\n\t\tDECLARE old_row JSONB;\n\t\tDECLARE new_row JSONB;\n\t\tBEGIN\n\t\t\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;\n\t\t\tnew_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;\n\t\t\tprimary_values := (\n\t\t\t\tSELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))\n\t\t\t\tFROM JSONB_EACH(COALESCE(old_row, new_row))\n\t\t\t\tWHERE key = ANY (TG_ARGV)\n\t\t\t);\n\t\t\ttable_name := tg_table_name;\n\t\t\tCASE TG_OP\n\t\t\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'create';\n\t\t\t\t\tvalues := COALESCE(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(key, value)\n \t\t\t\t\t\t FROM JSONB_EACH(new_row)\n \t\t\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n \t\t\t\t\t\t),\n \t\t\t\t\t\tJSONB_BUILD_OBJECT()\n \t\t\t\t\t);\n\t\t\t\tEND;\n\t\t\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\t\t\tupdate_diff := (\n\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)\n\t\t\t\t\t\tFROM JSONB_EACH(old_row) o\n \t\t\t\t\t\tFULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key\n\t\t\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t\t\t);\n\t\t\t\t\tIF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN\n\t\t\t\t\t\tRETURN NULL;\n\t\t\t\t\tEND IF;\n\t\t\t\t\tnew_event_type := 'update';\n\t\t\t\t\tvalues := update_diff;\n\t\t\t\tEND;\n\t\t\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'delete';\n\t\t\t\tEND;\n\t\t\t\tELSE RAISE\n\t\t\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\t\tEND CASE;\n\n\t\t\tCASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN\n\t\t\t\tPERFORM SET_CONFIG('system.schema_id', (select MAX(\"id\")::TEXT from schema_migration), TRUE);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tINSERT INTO \"event_data\" (\"id\", \"type\", \"table_name\", \"row_ids\", \"values\", \"created_at\", schema_id, identity_id)\n\t\t\tVALUES (\n\t\t\t\t\"uuid_generate_v4\"(),\n\t\t\t\tnew_event_type,\n\t\t\t\ttable_name,\n\t\t\t\tprimary_values,\n\t\t\t\tvalues,\n\t\t\t\tCLOCK_TIMESTAMP(),\n\t\t\t\tCURRENT_SETTING('system.schema_id')::INT,\n\t\t\t\tCOALESCE(\n\t\t\t\t\tCURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,\n \t\t\t\t\t'00000000-0000-0000-0000-000000000000'::UUID)\n \t\t\t\t);\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS\n\t\t$$\n\t\tBEGIN\n\t\t\tPERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number\n\n\t\t\tCASE WHEN\n\t\t\t\tNULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL\n\t\t\t\tAND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL\n\t\t\t\tTHEN\n\t\t\t\tINSERT INTO stage_transaction(transaction_id, stage_id, applied_at)\n\t\t\t\tVALUES (\n\t\t\t\t\tCURRENT_SETTING('system.transaction_id')::UUID,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT id\n \t\t\t\t\t\tFROM \"stage\"\n \t\t\t\t\t\tWHERE \"slug\" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))\n \t\t\t\t ),\n\t\t\t\t\tCLOCK_TIMESTAMP()\n\t\t\t\t)\n\t\t\t\tON CONFLICT DO NOTHING;\n\n\t\t\t\tPERFORM SET_CONFIG('system.transaction_inserted', '1', true);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tALTER TABLE stage\n\t\tALTER event_id DROP NOT NULL\n\t`)\n\tbuilder.sql(`\n\t\tALTER TABLE event\n\t\tRENAME TO event_bak\n\t`)\n}\n"],"names":["schema"],"mappings":"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"}
1
+ {"version":3,"file":"2021-05-07-155800-event-log-rework.js","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-07-155800-event-log-rework.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tbuilder.sql(`LOCK TABLE event`)\n\tbuilder.sql(`\n\t\tALTER TABLE schema_migration\n\t\tADD PRIMARY KEY (id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE DOMAIN event_data_type AS TEXT\n\t\tCONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE event_data (\n\t\t\tid UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,\n\t\ttype event_data_type NOT NULL,\n\t\ttable_name TEXT NOT NULL,\n\t\trow_ids JSONB NOT NULL,\n\t\tvalues JSONB DEFAULT NULL,\n\t\tcreated_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,\n\t\tschema_id INTEGER NOT NULL REFERENCES schema_migration(id),\n\t\tidentity_id UUID NOT NULL,\n\t\ttransaction_id UUID DEFAULT COALESCE(\n\t\t\t(NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,\n\t\t\t(SET_CONFIG('system.transaction_id'::TEXT, (\"uuid_generate_v4\"())::TEXT, TRUE))::UUID) NOT NULL\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event_row_id\n\t\tON event_data(row_ids)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_table_name\n\t\tON event_data(table_name)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_type\n\t\tON event_data(type)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE INDEX system_event2_transaction\n\t\tON event_data(transaction_id)\n\t`)\n\tbuilder.sql(`\n\t\tCREATE TABLE stage_transaction (\n\t\t\ttransaction_id UUID NOT NULL,\n\t\t\tstage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,\n\t\t\tapplied_at TIMESTAMPTZ NOT NULL,\n\t\t\tPRIMARY KEY (transaction_id, stage_id)\n\t\t)\n\t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\tevents AS (\n\t\t\tSELECT\n\t\t\t\te.*,\n\t\t\t\t(SELECT MAX(id) FROM schema_migration) AS schema_id,\n\t\t\t\t1 AS index,\n\t\t\t\tstage.id AS stage_id\n\t\t\tFROM stage\n\t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tCOALESCE(\n \t\t\t\t\tCASE WHEN event.type = 'run_migration' THEN\n\t\t\t\t\t\t(SELECT id FROM schema_migration WHERE version = event.data ->> 'version')\n\t\t\t\t\tEND,\n\t\t\t\t\tevents.schema_id\n\t\t\t\t),\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\t\tJOIN events\n \t\t\tON events.previous_id = event.id\n \t\t),\n \t\tshifted_events AS (\n \t\t\tSELECT\n \t\t\t\t*,\n \t\t\t\t(\n \t\t\t\t\tcreated_at\n \t\t\t\t\t+ (ROW_NUMBER() OVER (PARTITION BY transaction_id ORDER BY index DESC ) - 1 ||' us')::INTERVAL\n \t\t\t\t) AS shifted_created_at\n \t\t\tFROM events\n \t\t)\n \t\tINSERT\n \t\tINTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)\n \t\tSELECT\n \t\t\tid,\n \t\t\ttype,\n \t\t\tdata ->> 'tableName',\n \t\t\tdata -> 'rowId',\n \t\t\tdata -> 'values',\n \t\t\tshifted_created_at,\n \t\t\tschema_id,\n \t\t\tidentity_id,\n \t\t\ttransaction_id\n \t\tFROM shifted_events\n \t\tWHERE type NOT IN ('init', 'run_migration')\n \t\tON CONFLICT DO NOTHING\n \t`)\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n \t\tevents AS (\n \t\t\tSELECT\n \t\t\t\te.*,\n \t\t\t\t1 AS index,\n \t\t\t\tstage.id AS stage_id\n \t\t\tFROM stage\n \t\t\tJOIN event e ON stage.event_id = e.id\n \t\t\tUNION ALL\n \t\t\tSELECT\n \t\t\t\tevent.*,\n \t\t\t\tindex + 1,\n \t\t\t\tstage_id\n \t\t\tFROM event\n \t\t\tJOIN events ON events.previous_id = event.id\n \t\t),\n \t\ttransaction_times AS (\n \t\t\tSELECT\n \t\t\t\tDISTINCT ON (transaction_id, stage_id)\n \t\t\t\ttransaction_id,\n \t\t\t\tcreated_at,\n \t\t\t\tindex,\n \t\t\t\tstage_id\n \t\t\tFROM events\n \t\t\tORDER BY transaction_id\n \t\t)\n \t\tINSERT\n \t\tINTO stage_transaction (transaction_id, stage_id, applied_at)\n \t\tSELECT transaction_id, stage_id, created_at\n \t\tFROM transaction_times\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n\t\t$$\n\t\tDECLARE new_event_type TEXT;\n\t\tDECLARE table_name TEXT;\n\t\tDECLARE values JSONB;\n\t\tDECLARE update_diff JSONB;\n\t\tDECLARE primary_values JSONB;\n\t\tDECLARE old_row JSONB;\n\t\tDECLARE new_row JSONB;\n\t\tBEGIN\n\t\t\told_row := CASE WHEN TG_OP = 'DELETE' OR TG_OP = 'UPDATE' THEN TO_JSONB(old) ELSE NULL END;\n\t\t\tnew_row := CASE WHEN TG_OP = 'INSERT' OR TG_OP = 'UPDATE' THEN TO_JSONB(new) ELSE NULL END;\n\t\t\tprimary_values := (\n\t\t\t\tSELECT JSONB_AGG(value ORDER BY array_position(TG_ARGV, key))\n\t\t\t\tFROM JSONB_EACH(COALESCE(old_row, new_row))\n\t\t\t\tWHERE key = ANY (TG_ARGV)\n\t\t\t);\n\t\t\ttable_name := tg_table_name;\n\t\t\tCASE TG_OP\n\t\t\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'create';\n\t\t\t\t\tvalues := COALESCE(\n\t\t\t\t\t\t(\n\t\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(key, value)\n \t\t\t\t\t\t FROM JSONB_EACH(new_row)\n \t\t\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n \t\t\t\t\t\t),\n \t\t\t\t\t\tJSONB_BUILD_OBJECT()\n \t\t\t\t\t);\n\t\t\t\tEND;\n\t\t\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\t\t\tupdate_diff := (\n\t\t\t\t\t\tSELECT JSONB_OBJECT_AGG(COALESCE(n.key, o.key), n.value)\n\t\t\t\t\t\tFROM JSONB_EACH(old_row) o\n \t\t\t\t\t\tFULL OUTER JOIN JSONB_EACH(new_row) n ON n.key = o.key\n\t\t\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t\t\t);\n\t\t\t\t\tIF (SELECT COUNT(*) FROM JSONB_OBJECT_KEYS(update_diff)) = 0 THEN\n\t\t\t\t\t\tRETURN NULL;\n\t\t\t\t\tEND IF;\n\t\t\t\t\tnew_event_type := 'update';\n\t\t\t\t\tvalues := update_diff;\n\t\t\t\tEND;\n\t\t\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\t\t\tnew_event_type := 'delete';\n\t\t\t\tEND;\n\t\t\t\tELSE RAISE\n\t\t\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\t\tEND CASE;\n\n\t\t\tCASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN\n\t\t\t\tPERFORM SET_CONFIG('system.schema_id', (select MAX(\"id\")::TEXT from schema_migration), TRUE);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tINSERT INTO \"event_data\" (\"id\", \"type\", \"table_name\", \"row_ids\", \"values\", \"created_at\", schema_id, identity_id)\n\t\t\tVALUES (\n\t\t\t\t\"uuid_generate_v4\"(),\n\t\t\t\tnew_event_type,\n\t\t\t\ttable_name,\n\t\t\t\tprimary_values,\n\t\t\t\tvalues,\n\t\t\t\tCLOCK_TIMESTAMP(),\n\t\t\t\tCURRENT_SETTING('system.schema_id')::INT,\n\t\t\t\tCOALESCE(\n\t\t\t\t\tCURRENT_SETTING('tenant.identity_id'::TEXT, TRUE)::UUID,\n \t\t\t\t\t'00000000-0000-0000-0000-000000000000'::UUID)\n \t\t\t\t);\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\tbuilder.sql(`\n\t\tCREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS\n\t\t$$\n\t\tBEGIN\n\t\t\tPERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number\n\n\t\t\tCASE WHEN\n\t\t\t\tNULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL\n\t\t\t\tAND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL\n\t\t\t\tTHEN\n\t\t\t\tINSERT INTO stage_transaction(transaction_id, stage_id, applied_at)\n\t\t\t\tVALUES (\n\t\t\t\t\tCURRENT_SETTING('system.transaction_id')::UUID,\n\t\t\t\t\t(\n\t\t\t\t\t\tSELECT id\n \t\t\t\t\t\tFROM \"stage\"\n \t\t\t\t\t\tWHERE \"slug\" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))\n \t\t\t\t ),\n\t\t\t\t\tCLOCK_TIMESTAMP()\n\t\t\t\t)\n\t\t\t\tON CONFLICT DO NOTHING;\n\n\t\t\t\tPERFORM SET_CONFIG('system.transaction_inserted', '1', true);\n\t\t\tELSE\n\t\t\t\t-- do nothing\n\t\t\tEND CASE;\n\n\t\t\tRETURN NULL;\n\t\tEND;\n\t\t$$ LANGUAGE plpgsql\n\t`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropTrigger({ name: entity.tableName, schema }, 'log_event_statement')\n\t\t\tcreateTrxEvent(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tALTER TABLE stage\n\t\tALTER event_id DROP NOT NULL\n\t`)\n\tbuilder.sql(`\n\t\tALTER TABLE event\n\t\tRENAME TO event_bak\n\t`)\n}\n"],"names":["schema"],"mappings":"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"}
@@ -9,7 +9,6 @@ require("../schema/dev.graphql.cjs");
9
9
  require("../schema/system.graphql.cjs");
10
10
  require("@contember/schema-utils");
11
11
  require("@contember/logger");
12
- require("../model/migrations/SchemaVersionBuilder.cjs");
13
12
  const recreateTrigger = (builder, tableName) => {
14
13
  builder.dropTrigger(tableName, "log_event_trx", { ifExists: true });
15
14
  builder.dropTrigger(tableName, "log_event_statement", { ifExists: true });
@@ -27,7 +26,7 @@ const recreateTrigger = (builder, tableName) => {
27
26
  });
28
27
  };
29
28
  async function _202105191232000eventlogfixconstraint(builder, args) {
30
- const schema = await args.schemaResolver(args.connection);
29
+ const schema = (await args.schemaResolver(args.connection)).schema;
31
30
  const junctionTables = modelHelpers.getJunctionTables(schema.model);
32
31
  const schemas = args.project.stages.map((it) => `stage_${it.slug}`);
33
32
  for (const table of junctionTables) {
@@ -1 +1 @@
1
- {"version":3,"file":"2021-05-19-1232000-event-log-fix-constraint.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })\n\tbuilder.dropTrigger(tableName, 'log_event_statement', { ifExists: true })\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tconstraint: true,\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["getJunctionTables","schema"],"mappings":";;;;;;;;;;;;AAKA,MAAM,kBAAkB,CAAC,SAA2B,cAAoB;AACvE,UAAQ,YAAY,WAAW,iBAAiB,EAAE,UAAU,MAAM;AAClE,UAAQ,YAAY,WAAW,uBAAuB,EAAE,UAAU,MAAM;AAChE,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,sCAA+B,SAA2B,MAA0C;AACnG,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AAClD,QAAA,iBAAiBA,aAAAA,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAEhE,aAAW,SAAS,gBAAgB;AACnC,eAAWC,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAC3D;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAC5D;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"2021-05-19-1232000-event-log-fix-constraint.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })\n\tbuilder.dropTrigger(tableName, 'log_event_statement', { ifExists: true })\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tconstraint: true,\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["getJunctionTables","schema"],"mappings":";;;;;;;;;;;AAKA,MAAM,kBAAkB,CAAC,SAA2B,cAAoB;AACvE,UAAQ,YAAY,WAAW,iBAAiB,EAAE,UAAU,MAAM;AAClE,UAAQ,YAAY,WAAW,uBAAuB,EAAE,UAAU,MAAM;AAChE,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,sCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiBA,aAAAA,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAEhE,aAAW,SAAS,gBAAgB;AACnC,eAAWC,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAC3D;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAC5D;AAAA,EACD;AACD;;"}
@@ -8,7 +8,6 @@ import "../schema/dev.graphql.js";
8
8
  import "../schema/system.graphql.js";
9
9
  import "@contember/schema-utils";
10
10
  import "@contember/logger";
11
- import "../model/migrations/SchemaVersionBuilder.js";
12
11
  const recreateTrigger = (builder, tableName) => {
13
12
  builder.dropTrigger(tableName, "log_event_trx", { ifExists: true });
14
13
  builder.dropTrigger(tableName, "log_event_statement", { ifExists: true });
@@ -26,7 +25,7 @@ const recreateTrigger = (builder, tableName) => {
26
25
  });
27
26
  };
28
27
  async function _202105191232000eventlogfixconstraint(builder, args) {
29
- const schema = await args.schemaResolver(args.connection);
28
+ const schema = (await args.schemaResolver(args.connection)).schema;
30
29
  const junctionTables = getJunctionTables(schema.model);
31
30
  const schemas = args.project.stages.map((it) => `stage_${it.slug}`);
32
31
  for (const table of junctionTables) {
@@ -1 +1 @@
1
- {"version":3,"file":"2021-05-19-1232000-event-log-fix-constraint.js","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })\n\tbuilder.dropTrigger(tableName, 'log_event_statement', { ifExists: true })\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tconstraint: true,\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;;AAKA,MAAM,kBAAkB,CAAC,SAA2B,cAAoB;AACvE,UAAQ,YAAY,WAAW,iBAAiB,EAAE,UAAU,MAAM;AAClE,UAAQ,YAAY,WAAW,uBAAuB,EAAE,UAAU,MAAM;AAChE,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,sCAA+B,SAA2B,MAA0C;AACnG,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AAClD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAEhE,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAC3D;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAC5D;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"2021-05-19-1232000-event-log-fix-constraint.js","sources":["../../../../../packages/engine-system-api/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts"],"sourcesContent":["import { MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {\n\tbuilder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })\n\tbuilder.dropTrigger(tableName, 'log_event_statement', { ifExists: true })\n\tbuilder.createTrigger(tableName, 'log_event_trx', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tconstraint: true,\n\t\tdeferrable: true,\n\t\tdeferred: true,\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event_commit',\n\t\t},\n\t})\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst junctionTables = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\n\tfor (const table of junctionTables) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: table.tableName, schema })\n\t\t}\n\t}\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const schema of schemas) {\n\t\t\trecreateTrigger(builder, { name: entity.tableName, schema })\n\t\t}\n\t}\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;AAKA,MAAM,kBAAkB,CAAC,SAA2B,cAAoB;AACvE,UAAQ,YAAY,WAAW,iBAAiB,EAAE,UAAU,MAAM;AAClE,UAAQ,YAAY,WAAW,uBAAuB,EAAE,UAAU,MAAM;AAChE,UAAA,cAAc,WAAW,iBAAiB;AAAA,IACjD,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,EAAA,CACA;AACF;AAEA,eAAA,sCAA+B,SAA2B,MAA0C;AACnG,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AACtD,QAAA,iBAAiB,kBAAkB,OAAO,KAAK;AAC/C,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAEhE,aAAW,SAAS,gBAAgB;AACnC,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAC3D;AAAA,EACD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAC5D;AAAA,EACD;AACD;"}
@@ -4,7 +4,7 @@ const schemaUtils = require("@contember/schema-utils");
4
4
  const schema = require("@contember/schema");
5
5
  async function _20221003110000tableondelete(builder, args) {
6
6
  var _a;
7
- const schema$1 = await args.schemaResolver(args.connection);
7
+ const schema$1 = (await args.schemaResolver(args.connection)).schema;
8
8
  const stages = (await args.connection.query("SELECT schema FROM stage")).rows;
9
9
  const metadataByStage = {};
10
10
  for (const entity of Object.values(schema$1.model.entities)) {
@@ -1 +1 @@
1
- {"version":3,"file":"2022-10-03-110000-table-on-delete.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2022-10-03-110000-table-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fkNames = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).getNames()\n\t\t\t\tfor (const name of fkNames) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","entity","relation","targetEntity","Model","wrapIdentifier"],"mappings":";;;;AAMA,eAAA,6BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAMA,WAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AACxD,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAOA,SAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAASC,YAAAA,mBAGZD,SAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAE,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,UAAI,SAAS,cAAc,aAAaC,OAAAA,MAAM,SAAS,UAAU;AAChE;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,UAAU,iBAAiB,YAAY,OAAO;AAAA,UACnD,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,SAAS;AACZ,mBAAW,QAAQ,SAAS;AAC3B,kBAAQ,IAAI,eAAeC,SAAe,eAAA,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,OAAO,SAAS,CAAC,oBAAoBA,SAAe,eAAA,IAAI,CAAC,EAAE;AAAA,QACtI;AAEA,cAAM,WAAY;AAAA,UACjB,CAACD,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,QAAA,EACf,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvEA,wBAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvDA,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,aAAa,SAAS,CAAC,KAAKA,SAAAA,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"2022-10-03-110000-table-on-delete.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2022-10-03-110000-table-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fkNames = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).getNames()\n\t\t\t\tfor (const name of fkNames) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","entity","relation","targetEntity","Model","wrapIdentifier"],"mappings":";;;;AAMA,eAAA,6BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAMA,YAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAOA,SAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAASC,YAAAA,mBAGZD,SAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAE,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,UAAI,SAAS,cAAc,aAAaC,OAAAA,MAAM,SAAS,UAAU;AAChE;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,UAAU,iBAAiB,YAAY,OAAO;AAAA,UACnD,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,SAAS;AACZ,mBAAW,QAAQ,SAAS;AAC3B,kBAAQ,IAAI,eAAeC,SAAe,eAAA,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,OAAO,SAAS,CAAC,oBAAoBA,SAAe,eAAA,IAAI,CAAC,EAAE;AAAA,QACtI;AAEA,cAAM,WAAY;AAAA,UACjB,CAACD,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,QAAA,EACf,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvEA,wBAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvDA,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,aAAa,SAAS,CAAC,KAAKA,SAAAA,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;;"}
@@ -3,7 +3,7 @@ import { acceptFieldVisitor } from "@contember/schema-utils";
3
3
  import { Model } from "@contember/schema";
4
4
  async function _20221003110000tableondelete(builder, args) {
5
5
  var _a;
6
- const schema = await args.schemaResolver(args.connection);
6
+ const schema = (await args.schemaResolver(args.connection)).schema;
7
7
  const stages = (await args.connection.query("SELECT schema FROM stage")).rows;
8
8
  const metadataByStage = {};
9
9
  for (const entity of Object.values(schema.model.entities)) {
@@ -1 +1 @@
1
- {"version":3,"file":"2022-10-03-110000-table-on-delete.js","sources":["../../../../../packages/engine-system-api/src/migrations/2022-10-03-110000-table-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fkNames = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).getNames()\n\t\t\t\tfor (const name of fkNames) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["entity","relation","targetEntity"],"mappings":";;;AAMA,eAAA,6BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AACxD,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAAS,mBAGZ,OAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,UAAI,SAAS,cAAc,aAAa,MAAM,SAAS,UAAU;AAChE;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,UAAU,iBAAiB,YAAY,OAAO;AAAA,UACnD,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,SAAS;AACZ,mBAAW,QAAQ,SAAS;AAC3B,kBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,IAAI,CAAC,EAAE;AAAA,QACtI;AAEA,cAAM,WAAY;AAAA,UACjB,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,QAAA,EACf,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvE,eAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvD,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,KAAK,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"2022-10-03-110000-table-on-delete.js","sources":["../../../../../packages/engine-system-api/src/migrations/2022-10-03-110000-table-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (relation.joiningColumn.onDelete === Model.OnDelete.restrict) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fkNames = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).getNames()\n\t\t\t\tfor (const name of fkNames) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(name)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["entity","relation","targetEntity"],"mappings":";;;AAMA,eAAA,6BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAAS,mBAGZ,OAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,UAAI,SAAS,cAAc,aAAa,MAAM,SAAS,UAAU;AAChE;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,UAAU,iBAAiB,YAAY,OAAO;AAAA,UACnD,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,SAAS;AACZ,mBAAW,QAAQ,SAAS;AAC3B,kBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,IAAI,CAAC,EAAE;AAAA,QACtI;AAEA,cAAM,WAAY;AAAA,UACjB,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,QAAA,EACf,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvE,eAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvD,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,KAAK,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;"}
@@ -4,7 +4,7 @@ const schemaUtils = require("@contember/schema-utils");
4
4
  const schema = require("@contember/schema");
5
5
  async function _20230911174000fixondelete(builder, args) {
6
6
  var _a;
7
- const schema$1 = await args.schemaResolver(args.connection);
7
+ const schema$1 = (await args.schemaResolver(args.connection)).schema;
8
8
  const stages = (await args.connection.query("SELECT schema FROM stage")).rows;
9
9
  const metadataByStage = {};
10
10
  for (const entity of Object.values(schema$1.model.entities)) {
@@ -1 +1 @@
1
- {"version":3,"file":"2023-09-11-174000-fix-on-delete.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2023-09-11-174000-fix-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, ForeignKeyDeleteAction, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fks = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).toArray()\n\n\t\t\t\tconst dbConstraintFlag = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: ForeignKeyDeleteAction.setnull,\n\t\t\t\t\t[Model.OnDelete.cascade]: ForeignKeyDeleteAction.cascade,\n\t\t\t\t\t[Model.OnDelete.restrict]: ForeignKeyDeleteAction.restrict,\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tif (fks.every(it => it.deleteAction === dbConstraintFlag)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor (const fk of fks) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(fk.constraintName)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t\t[Model.OnDelete.restrict]: 'RESTRICT',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","entity","relation","targetEntity","Model","ForeignKeyDeleteAction","wrapIdentifier"],"mappings":";;;;AAMA,eAAA,2BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAMA,WAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AACxD,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAOA,SAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAASC,YAAAA,mBAGZD,SAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAE,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,MAAM,iBAAiB,YAAY,OAAO;AAAA,UAC/C,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,QAAQ;AAEX,cAAM,mBAAoB;AAAA,UACzB,CAACC,aAAM,SAAS,OAAO,GAAGC,SAAuB,uBAAA;AAAA,UACjD,CAACD,aAAM,SAAS,OAAO,GAAGC,SAAuB,uBAAA;AAAA,UACjD,CAACD,aAAM,SAAS,QAAQ,GAAGC,SAAuB,uBAAA;AAAA,QAAA,EACvC,SAAS,cAAc,QAAQ;AAE3C,YAAI,IAAI,MAAM,CAAA,OAAM,GAAG,iBAAiB,gBAAgB,GAAG;AAC1D;AAAA,QACD;AAEA,mBAAW,MAAM,KAAK;AACrB,kBAAQ,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAAA,eAAe,GAAG,cAAc,CAAC,EAAE;AAAA,QACnJ;AAEA,cAAM,WAAY;AAAA,UACjB,CAACF,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,QAAQ,GAAG;AAAA,QAAA,EAChB,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAeE,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvEA,wBAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvDA,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,aAAa,SAAS,CAAC,KAAKA,SAAAA,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;;"}
1
+ {"version":3,"file":"2023-09-11-174000-fix-on-delete.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2023-09-11-174000-fix-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, ForeignKeyDeleteAction, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fks = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).toArray()\n\n\t\t\t\tconst dbConstraintFlag = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: ForeignKeyDeleteAction.setnull,\n\t\t\t\t\t[Model.OnDelete.cascade]: ForeignKeyDeleteAction.cascade,\n\t\t\t\t\t[Model.OnDelete.restrict]: ForeignKeyDeleteAction.restrict,\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tif (fks.every(it => it.deleteAction === dbConstraintFlag)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor (const fk of fks) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(fk.constraintName)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t\t[Model.OnDelete.restrict]: 'RESTRICT',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["schema","acceptFieldVisitor","entity","relation","targetEntity","Model","ForeignKeyDeleteAction","wrapIdentifier"],"mappings":";;;;AAMA,eAAA,2BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAMA,YAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAOA,SAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAASC,YAAAA,mBAGZD,SAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAE,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,MAAM,iBAAiB,YAAY,OAAO;AAAA,UAC/C,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,QAAQ;AAEX,cAAM,mBAAoB;AAAA,UACzB,CAACC,aAAM,SAAS,OAAO,GAAGC,SAAuB,uBAAA;AAAA,UACjD,CAACD,aAAM,SAAS,OAAO,GAAGC,SAAuB,uBAAA;AAAA,UACjD,CAACD,aAAM,SAAS,QAAQ,GAAGC,SAAuB,uBAAA;AAAA,QAAA,EACvC,SAAS,cAAc,QAAQ;AAE3C,YAAI,IAAI,MAAM,CAAA,OAAM,GAAG,iBAAiB,gBAAgB,GAAG;AAC1D;AAAA,QACD;AAEA,mBAAW,MAAM,KAAK;AACrB,kBAAQ,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAAA,eAAe,GAAG,cAAc,CAAC,EAAE;AAAA,QACnJ;AAEA,cAAM,WAAY;AAAA,UACjB,CAACF,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAACA,OAAA,MAAM,SAAS,QAAQ,GAAG;AAAA,QAAA,EAChB,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAeE,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvEA,wBAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvDA,SAAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAe,eAAA,aAAa,SAAS,CAAC,KAAKA,SAAAA,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;;"}
@@ -3,7 +3,7 @@ import { acceptFieldVisitor } from "@contember/schema-utils";
3
3
  import { Model } from "@contember/schema";
4
4
  async function _20230911174000fixondelete(builder, args) {
5
5
  var _a;
6
- const schema = await args.schemaResolver(args.connection);
6
+ const schema = (await args.schemaResolver(args.connection)).schema;
7
7
  const stages = (await args.connection.query("SELECT schema FROM stage")).rows;
8
8
  const metadataByStage = {};
9
9
  for (const entity of Object.values(schema.model.entities)) {
@@ -1 +1 @@
1
- {"version":3,"file":"2023-09-11-174000-fix-on-delete.js","sources":["../../../../../packages/engine-system-api/src/migrations/2023-09-11-174000-fix-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, ForeignKeyDeleteAction, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fks = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).toArray()\n\n\t\t\t\tconst dbConstraintFlag = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: ForeignKeyDeleteAction.setnull,\n\t\t\t\t\t[Model.OnDelete.cascade]: ForeignKeyDeleteAction.cascade,\n\t\t\t\t\t[Model.OnDelete.restrict]: ForeignKeyDeleteAction.restrict,\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tif (fks.every(it => it.deleteAction === dbConstraintFlag)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor (const fk of fks) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(fk.constraintName)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t\t[Model.OnDelete.restrict]: 'RESTRICT',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["entity","relation","targetEntity"],"mappings":";;;AAMA,eAAA,2BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AACxD,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAAS,mBAGZ,OAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,MAAM,iBAAiB,YAAY,OAAO;AAAA,UAC/C,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,QAAQ;AAEX,cAAM,mBAAoB;AAAA,UACzB,CAAC,MAAM,SAAS,OAAO,GAAG,uBAAuB;AAAA,UACjD,CAAC,MAAM,SAAS,OAAO,GAAG,uBAAuB;AAAA,UACjD,CAAC,MAAM,SAAS,QAAQ,GAAG,uBAAuB;AAAA,QAAA,EACvC,SAAS,cAAc,QAAQ;AAE3C,YAAI,IAAI,MAAM,CAAA,OAAM,GAAG,iBAAiB,gBAAgB,GAAG;AAC1D;AAAA,QACD;AAEA,mBAAW,MAAM,KAAK;AACrB,kBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,GAAG,cAAc,CAAC,EAAE;AAAA,QACnJ;AAEA,cAAM,WAAY;AAAA,UACjB,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,QAAQ,GAAG;AAAA,QAAA,EAChB,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvE,eAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvD,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,KAAK,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;"}
1
+ {"version":3,"file":"2023-09-11-174000-fix-on-delete.js","sources":["../../../../../packages/engine-system-api/src/migrations/2023-09-11-174000-fix-on-delete.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, ForeignKeyDeleteAction, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { acceptFieldVisitor } from '@contember/schema-utils'\nimport { Model } from '@contember/schema'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tfor (const field of Object.values(entity.fields)) {\n\t\t\tconst result = acceptFieldVisitor<null | {\n\t\t\t\trelation: Model.OneHasOneOwningRelation | Model.ManyHasOneRelation\n\t\t\t\ttargetEntity: Model.Entity\n\t\t\t}>(schema.model, entity, field, {\n\t\t\t\tvisitManyHasOne: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneOwning: ({ entity, relation, targetEntity }) => {\n\t\t\t\t\treturn { relation, entity, targetEntity }\n\t\t\t\t},\n\t\t\t\tvisitOneHasOneInverse: () => null,\n\t\t\t\tvisitManyHasManyInverse: () => null,\n\t\t\t\tvisitManyHasManyOwning: () => null,\n\t\t\t\tvisitOneHasMany: () => null,\n\t\t\t\tvisitColumn: () => null,\n\t\t\t})\n\t\t\tif (!result) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst { targetEntity, relation } = result\n\t\t\tif (entity.view || targetEntity.view) {\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tfor (const stage of stages) {\n\t\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\t\tconst fks = databaseMetadata.foreignKeys.filter({\n\t\t\t\t\tfromTable: entity.tableName,\n\t\t\t\t\tfromColumn: relation.joiningColumn.columnName,\n\t\t\t\t\ttoTable: targetEntity.tableName,\n\t\t\t\t\ttoColumn: targetEntity.primaryColumn,\n\t\t\t\t}).toArray()\n\n\t\t\t\tconst dbConstraintFlag = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: ForeignKeyDeleteAction.setnull,\n\t\t\t\t\t[Model.OnDelete.cascade]: ForeignKeyDeleteAction.cascade,\n\t\t\t\t\t[Model.OnDelete.restrict]: ForeignKeyDeleteAction.restrict,\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tif (fks.every(it => it.deleteAction === dbConstraintFlag)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfor (const fk of fks) {\n\t\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(fk.constraintName)}`)\n\t\t\t\t}\n\n\t\t\t\tconst onDelete = ({\n\t\t\t\t\t[Model.OnDelete.setNull]: 'SET NULL',\n\t\t\t\t\t[Model.OnDelete.cascade]: 'CASCADE',\n\t\t\t\t\t[Model.OnDelete.restrict]: 'RESTRICT',\n\t\t\t\t} as const)[relation.joiningColumn.onDelete]\n\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)}\n\t\t\t\t\tADD FOREIGN KEY (${wrapIdentifier(relation.joiningColumn.columnName)}) \n\t\t\t\t\tREFERENCES ${wrapIdentifier(stage.schema)}.${wrapIdentifier(targetEntity.tableName)} (${wrapIdentifier(targetEntity.primaryColumn)}) ON DELETE ${onDelete} DEFERRABLE INITIALLY IMMEDIATE\n\t\t\t\t`)\n\t\t\t}\n\t\t}\n\t}\n}\n"],"names":["entity","relation","targetEntity"],"mappings":";;;AAMA,eAAA,2BAA+B,SAA2B,MAA0C;AANpG,MAAA;AAOC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAW,SAAS,OAAO,OAAO,OAAO,MAAM,GAAG;AACjD,YAAM,SAAS,mBAGZ,OAAO,OAAO,QAAQ,OAAO;AAAA,QAC/B,iBAAiB,CAAC,EAAE,QAAAA,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AACxD,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,sBAAsB,CAAC,EAAE,QAAAF,SAAQ,UAAAC,WAAU,cAAAC,oBAAmB;AAC7D,iBAAO,EAAE,UAAAD,WAAU,QAAAD,SAAQ,cAAAE;QAC5B;AAAA,QACA,uBAAuB,MAAM;AAAA,QAC7B,yBAAyB,MAAM;AAAA,QAC/B,wBAAwB,MAAM;AAAA,QAC9B,iBAAiB,MAAM;AAAA,QACvB,aAAa,MAAM;AAAA,MAAA,CACnB;AACD,UAAI,CAAC,QAAQ;AACZ;AAAA,MACD;AACM,YAAA,EAAE,cAAc,SAAa,IAAA;AAC/B,UAAA,OAAO,QAAQ,aAAa,MAAM;AACrC;AAAA,MACD;AACA,iBAAW,SAAS,QAAQ;AACrB,cAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,cAAA,MAAM,iBAAiB,YAAY,OAAO;AAAA,UAC/C,WAAW,OAAO;AAAA,UAClB,YAAY,SAAS,cAAc;AAAA,UACnC,SAAS,aAAa;AAAA,UACtB,UAAU,aAAa;AAAA,QAAA,CACvB,EAAE,QAAQ;AAEX,cAAM,mBAAoB;AAAA,UACzB,CAAC,MAAM,SAAS,OAAO,GAAG,uBAAuB;AAAA,UACjD,CAAC,MAAM,SAAS,OAAO,GAAG,uBAAuB;AAAA,UACjD,CAAC,MAAM,SAAS,QAAQ,GAAG,uBAAuB;AAAA,QAAA,EACvC,SAAS,cAAc,QAAQ;AAE3C,YAAI,IAAI,MAAM,CAAA,OAAM,GAAG,iBAAiB,gBAAgB,GAAG;AAC1D;AAAA,QACD;AAEA,mBAAW,MAAM,KAAK;AACrB,kBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,GAAG,cAAc,CAAC,EAAE;AAAA,QACnJ;AAEA,cAAM,WAAY;AAAA,UACjB,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,OAAO,GAAG;AAAA,UAC1B,CAAC,MAAM,SAAS,QAAQ,GAAG;AAAA,QAAA,EAChB,SAAS,cAAc,QAAQ;AAEnC,gBAAA,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC;AAAA,wBACvE,eAAe,SAAS,cAAc,UAAU,CAAC;AAAA,kBACvD,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,aAAa,SAAS,CAAC,KAAK,eAAe,aAAa,aAAa,CAAC,eAAe,QAAQ;AAAA,KACzJ;AAAA,MACF;AAAA,IACD;AAAA,EACD;AACD;"}
@@ -3,7 +3,7 @@ const Database = require("@contember/database");
3
3
  const schemaMigrations = require("@contember/schema-migrations");
4
4
  async function _20231019173000fixunique(builder, args) {
5
5
  var _a;
6
- const schema = await args.schemaResolver(args.connection);
6
+ const schema = (await args.schemaResolver(args.connection)).schema;
7
7
  const stages = (await args.connection.query("SELECT schema FROM stage")).rows;
8
8
  const metadataByStage = {};
9
9
  for (const entity of Object.values(schema.model.entities)) {
@@ -1 +1 @@
1
- {"version":3,"file":"2023-10-19-173000-fix-unique.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2023-10-19-173000-fix-unique.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { getUniqueConstraintColumns } from '@contember/schema-migrations'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tif (entity.view) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst expectedUnique: string[][] = []\n\n\t\tfor (const uniq of entity.unique) {\n\t\t\tconst columns = getUniqueConstraintColumns({\n\t\t\t\tentity,\n\t\t\t\tfields: uniq.fields,\n\t\t\t\tmodel: schema.model,\n\t\t\t})\n\t\t\texpectedUnique.push(columns)\n\t\t}\n\n\n\t\tfor (const stage of stages) {\n\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\tconst existingUniqueConstraints = databaseMetadata.uniqueConstraints.filter({ tableName: entity.tableName }).toArray()\n\t\t\tfor (const constraint of existingUniqueConstraints) {\n\t\t\t\tif (constraint.columnNames.length === 1 || expectedUnique.some(it => stringArrayEquals(it, constraint.columnNames))) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(constraint.constraintName)}`)\n\t\t\t}\n\t\t}\n\t}\n}\nconst stringArrayEquals = (colA: string[], colB: string[]) => {\n\tif (colA.length !== colB.length) {\n\t\treturn false\n\t}\n\tconst a = [...colA].sort()\n\tconst b = [...colB].sort()\n\treturn a.every((it, index) => it === b[index])\n}\n"],"names":["getUniqueConstraintColumns","wrapIdentifier"],"mappings":";;;AAKA,eAAA,yBAA+B,SAA2B,MAA0C;AALpG,MAAA;AAMC,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AACxD,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AAEA,UAAM,iBAA6B,CAAA;AAExB,eAAA,QAAQ,OAAO,QAAQ;AACjC,YAAM,UAAUA,iBAAAA,2BAA2B;AAAA,QAC1C;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OAAO,OAAO;AAAA,MAAA,CACd;AACD,qBAAe,KAAK,OAAO;AAAA,IAC5B;AAGA,eAAW,SAAS,QAAQ;AACrB,YAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,YAAA,4BAA4B,iBAAiB,kBAAkB,OAAO,EAAE,WAAW,OAAO,UAAA,CAAW,EAAE;AAC7G,iBAAW,cAAc,2BAA2B;AACnD,YAAI,WAAW,YAAY,WAAW,KAAK,eAAe,KAAK,CAAM,OAAA,kBAAkB,IAAI,WAAW,WAAW,CAAC,GAAG;AACpH;AAAA,QACD;AACA,gBAAQ,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAAA,eAAe,WAAW,cAAc,CAAC,EAAE;AAAA,MAC3J;AAAA,IACD;AAAA,EACD;AACD;AACA,MAAM,oBAAoB,CAAC,MAAgB,SAAmB;AACzD,MAAA,KAAK,WAAW,KAAK,QAAQ;AACzB,WAAA;AAAA,EACR;AACA,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AACzB,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AAClB,SAAA,EAAE,MAAM,CAAC,IAAI,UAAU,OAAO,EAAE,KAAK,CAAC;AAC9C;;"}
1
+ {"version":3,"file":"2023-10-19-173000-fix-unique.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2023-10-19-173000-fix-unique.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { getUniqueConstraintColumns } from '@contember/schema-migrations'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tif (entity.view) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst expectedUnique: string[][] = []\n\n\t\tfor (const uniq of entity.unique) {\n\t\t\tconst columns = getUniqueConstraintColumns({\n\t\t\t\tentity,\n\t\t\t\tfields: uniq.fields,\n\t\t\t\tmodel: schema.model,\n\t\t\t})\n\t\t\texpectedUnique.push(columns)\n\t\t}\n\n\n\t\tfor (const stage of stages) {\n\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\tconst existingUniqueConstraints = databaseMetadata.uniqueConstraints.filter({ tableName: entity.tableName }).toArray()\n\t\t\tfor (const constraint of existingUniqueConstraints) {\n\t\t\t\tif (constraint.columnNames.length === 1 || expectedUnique.some(it => stringArrayEquals(it, constraint.columnNames))) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(constraint.constraintName)}`)\n\t\t\t}\n\t\t}\n\t}\n}\nconst stringArrayEquals = (colA: string[], colB: string[]) => {\n\tif (colA.length !== colB.length) {\n\t\treturn false\n\t}\n\tconst a = [...colA].sort()\n\tconst b = [...colB].sort()\n\treturn a.every((it, index) => it === b[index])\n}\n"],"names":["getUniqueConstraintColumns","wrapIdentifier"],"mappings":";;;AAKA,eAAA,yBAA+B,SAA2B,MAA0C;AALpG,MAAA;AAMC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AAEA,UAAM,iBAA6B,CAAA;AAExB,eAAA,QAAQ,OAAO,QAAQ;AACjC,YAAM,UAAUA,iBAAAA,2BAA2B;AAAA,QAC1C;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OAAO,OAAO;AAAA,MAAA,CACd;AACD,qBAAe,KAAK,OAAO;AAAA,IAC5B;AAGA,eAAW,SAAS,QAAQ;AACrB,YAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,YAAA,4BAA4B,iBAAiB,kBAAkB,OAAO,EAAE,WAAW,OAAO,UAAA,CAAW,EAAE;AAC7G,iBAAW,cAAc,2BAA2B;AACnD,YAAI,WAAW,YAAY,WAAW,KAAK,eAAe,KAAK,CAAM,OAAA,kBAAkB,IAAI,WAAW,WAAW,CAAC,GAAG;AACpH;AAAA,QACD;AACA,gBAAQ,IAAI,eAAeC,SAAA,eAAe,MAAM,MAAM,CAAC,IAAIA,SAAAA,eAAe,OAAO,SAAS,CAAC,oBAAoBA,SAAAA,eAAe,WAAW,cAAc,CAAC,EAAE;AAAA,MAC3J;AAAA,IACD;AAAA,EACD;AACD;AACA,MAAM,oBAAoB,CAAC,MAAgB,SAAmB;AACzD,MAAA,KAAK,WAAW,KAAK,QAAQ;AACzB,WAAA;AAAA,EACR;AACA,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AACzB,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AAClB,SAAA,EAAE,MAAM,CAAC,IAAI,UAAU,OAAO,EAAE,KAAK,CAAC;AAC9C;;"}
@@ -2,7 +2,7 @@ import { wrapIdentifier } from "@contember/database";
2
2
  import { getUniqueConstraintColumns } from "@contember/schema-migrations";
3
3
  async function _20231019173000fixunique(builder, args) {
4
4
  var _a;
5
- const schema = await args.schemaResolver(args.connection);
5
+ const schema = (await args.schemaResolver(args.connection)).schema;
6
6
  const stages = (await args.connection.query("SELECT schema FROM stage")).rows;
7
7
  const metadataByStage = {};
8
8
  for (const entity of Object.values(schema.model.entities)) {
@@ -1 +1 @@
1
- {"version":3,"file":"2023-10-19-173000-fix-unique.js","sources":["../../../../../packages/engine-system-api/src/migrations/2023-10-19-173000-fix-unique.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { getUniqueConstraintColumns } from '@contember/schema-migrations'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tif (entity.view) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst expectedUnique: string[][] = []\n\n\t\tfor (const uniq of entity.unique) {\n\t\t\tconst columns = getUniqueConstraintColumns({\n\t\t\t\tentity,\n\t\t\t\tfields: uniq.fields,\n\t\t\t\tmodel: schema.model,\n\t\t\t})\n\t\t\texpectedUnique.push(columns)\n\t\t}\n\n\n\t\tfor (const stage of stages) {\n\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\tconst existingUniqueConstraints = databaseMetadata.uniqueConstraints.filter({ tableName: entity.tableName }).toArray()\n\t\t\tfor (const constraint of existingUniqueConstraints) {\n\t\t\t\tif (constraint.columnNames.length === 1 || expectedUnique.some(it => stringArrayEquals(it, constraint.columnNames))) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(constraint.constraintName)}`)\n\t\t\t}\n\t\t}\n\t}\n}\nconst stringArrayEquals = (colA: string[], colB: string[]) => {\n\tif (colA.length !== colB.length) {\n\t\treturn false\n\t}\n\tconst a = [...colA].sort()\n\tconst b = [...colB].sort()\n\treturn a.every((it, index) => it === b[index])\n}\n"],"names":[],"mappings":";;AAKA,eAAA,yBAA+B,SAA2B,MAA0C;AALpG,MAAA;AAMC,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AACxD,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AAEA,UAAM,iBAA6B,CAAA;AAExB,eAAA,QAAQ,OAAO,QAAQ;AACjC,YAAM,UAAU,2BAA2B;AAAA,QAC1C;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OAAO,OAAO;AAAA,MAAA,CACd;AACD,qBAAe,KAAK,OAAO;AAAA,IAC5B;AAGA,eAAW,SAAS,QAAQ;AACrB,YAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,YAAA,4BAA4B,iBAAiB,kBAAkB,OAAO,EAAE,WAAW,OAAO,UAAA,CAAW,EAAE;AAC7G,iBAAW,cAAc,2BAA2B;AACnD,YAAI,WAAW,YAAY,WAAW,KAAK,eAAe,KAAK,CAAM,OAAA,kBAAkB,IAAI,WAAW,WAAW,CAAC,GAAG;AACpH;AAAA,QACD;AACA,gBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,WAAW,cAAc,CAAC,EAAE;AAAA,MAC3J;AAAA,IACD;AAAA,EACD;AACD;AACA,MAAM,oBAAoB,CAAC,MAAgB,SAAmB;AACzD,MAAA,KAAK,WAAW,KAAK,QAAQ;AACzB,WAAA;AAAA,EACR;AACA,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AACzB,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AAClB,SAAA,EAAE,MAAM,CAAC,IAAI,UAAU,OAAO,EAAE,KAAK,CAAC;AAC9C;"}
1
+ {"version":3,"file":"2023-10-19-173000-fix-unique.js","sources":["../../../../../packages/engine-system-api/src/migrations/2023-10-19-173000-fix-unique.ts"],"sourcesContent":["import { MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { DatabaseMetadata, wrapIdentifier } from '@contember/database'\nimport { SystemMigrationArgs } from './types'\nimport { getUniqueConstraintColumns } from '@contember/schema-migrations'\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst stages = (await args.connection.query<{schema: string}>('SELECT schema FROM stage')).rows\n\tconst metadataByStage: Record<string, DatabaseMetadata> = {}\n\n\tfor (const entity of Object.values(schema.model.entities)) {\n\t\tif (entity.view) {\n\t\t\tcontinue\n\t\t}\n\n\t\tconst expectedUnique: string[][] = []\n\n\t\tfor (const uniq of entity.unique) {\n\t\t\tconst columns = getUniqueConstraintColumns({\n\t\t\t\tentity,\n\t\t\t\tfields: uniq.fields,\n\t\t\t\tmodel: schema.model,\n\t\t\t})\n\t\t\texpectedUnique.push(columns)\n\t\t}\n\n\n\t\tfor (const stage of stages) {\n\t\t\tconst databaseMetadata = metadataByStage[stage.schema] ??= await args.databaseMetadataResolver(args.connection, stage.schema)\n\n\t\t\tconst existingUniqueConstraints = databaseMetadata.uniqueConstraints.filter({ tableName: entity.tableName }).toArray()\n\t\t\tfor (const constraint of existingUniqueConstraints) {\n\t\t\t\tif (constraint.columnNames.length === 1 || expectedUnique.some(it => stringArrayEquals(it, constraint.columnNames))) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tbuilder.sql(`ALTER TABLE ${wrapIdentifier(stage.schema)}.${wrapIdentifier(entity.tableName)} DROP CONSTRAINT ${wrapIdentifier(constraint.constraintName)}`)\n\t\t\t}\n\t\t}\n\t}\n}\nconst stringArrayEquals = (colA: string[], colB: string[]) => {\n\tif (colA.length !== colB.length) {\n\t\treturn false\n\t}\n\tconst a = [...colA].sort()\n\tconst b = [...colB].sort()\n\treturn a.every((it, index) => it === b[index])\n}\n"],"names":[],"mappings":";;AAKA,eAAA,yBAA+B,SAA2B,MAA0C;AALpG,MAAA;AAMC,QAAM,UAAU,MAAM,KAAK,eAAe,KAAK,UAAU,GAAG;AAC5D,QAAM,UAAU,MAAM,KAAK,WAAW,MAAwB,0BAA0B,GAAG;AAC3F,QAAM,kBAAoD,CAAA;AAE1D,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,QAAI,OAAO,MAAM;AAChB;AAAA,IACD;AAEA,UAAM,iBAA6B,CAAA;AAExB,eAAA,QAAQ,OAAO,QAAQ;AACjC,YAAM,UAAU,2BAA2B;AAAA,QAC1C;AAAA,QACA,QAAQ,KAAK;AAAA,QACb,OAAO,OAAO;AAAA,MAAA,CACd;AACD,qBAAe,KAAK,OAAO;AAAA,IAC5B;AAGA,eAAW,SAAS,QAAQ;AACrB,YAAA,mBAAmB,gBAAgB,KAAA,MAAM,MAAtB,MAAA,gBAAA,EAAA,IAAkC,MAAM,KAAK,yBAAyB,KAAK,YAAY,MAAM,MAAM;AAEtH,YAAA,4BAA4B,iBAAiB,kBAAkB,OAAO,EAAE,WAAW,OAAO,UAAA,CAAW,EAAE;AAC7G,iBAAW,cAAc,2BAA2B;AACnD,YAAI,WAAW,YAAY,WAAW,KAAK,eAAe,KAAK,CAAM,OAAA,kBAAkB,IAAI,WAAW,WAAW,CAAC,GAAG;AACpH;AAAA,QACD;AACA,gBAAQ,IAAI,eAAe,eAAe,MAAM,MAAM,CAAC,IAAI,eAAe,OAAO,SAAS,CAAC,oBAAoB,eAAe,WAAW,cAAc,CAAC,EAAE;AAAA,MAC3J;AAAA,IACD;AAAA,EACD;AACD;AACA,MAAM,oBAAoB,CAAC,MAAgB,SAAmB;AACzD,MAAA,KAAK,WAAW,KAAK,QAAQ;AACzB,WAAA;AAAA,EACR;AACA,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AACzB,QAAM,IAAI,CAAC,GAAG,IAAI,EAAE,KAAK;AAClB,SAAA,EAAE,MAAM,CAAC,IAAI,UAAU,OAAO,EAAE,KAAK,CAAC;AAC9C;"}
@@ -0,0 +1,18 @@
1
+ "use strict";
2
+ const sql = `
3
+ CREATE TYPE SCHEMA_SINGLE AS ENUM ('single');
4
+ CREATE TABLE "schema"
5
+ (
6
+ id SCHEMA_SINGLE NOT NULL PRIMARY KEY DEFAULT 'single',
7
+ schema JSON NOT NULL,
8
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
9
+ checksum CHAR(32) NOT NULL,
10
+ version VARCHAR(20) NOT NULL,
11
+ migration_id INT NOT NULL REFERENCES schema_migration(id) DEFERRABLE INITIALLY DEFERRED
12
+ );
13
+ `;
14
+ async function _20240628153000schema(builder) {
15
+ builder.sql(sql);
16
+ }
17
+ module.exports = _20240628153000schema;
18
+ //# sourceMappingURL=2024-06-28-153000-schema.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"2024-06-28-153000-schema.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2024-06-28-153000-schema.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\n\n// deliberately using \"JSON\" instead of \"JSONB\" to preserve the order of keys\n\nconst sql = `\nCREATE TYPE SCHEMA_SINGLE AS ENUM ('single');\nCREATE TABLE \"schema\"\n(\n\tid SCHEMA_SINGLE NOT NULL PRIMARY KEY DEFAULT 'single',\n\tschema JSON NOT NULL,\n\tupdated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n\tchecksum CHAR(32) NOT NULL,\n\tversion VARCHAR(20) NOT NULL,\n\tmigration_id INT NOT NULL REFERENCES schema_migration(id) DEFERRABLE INITIALLY DEFERRED\n);\n`\n\nexport default async function (builder: MigrationBuilder) {\n\tbuilder.sql(sql)\n}\n"],"names":[],"mappings":";AAIA,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaZ,eAAA,sBAA+B,SAA2B;AACzD,UAAQ,IAAI,GAAG;AAChB;;"}
@@ -0,0 +1,19 @@
1
+ const sql = `
2
+ CREATE TYPE SCHEMA_SINGLE AS ENUM ('single');
3
+ CREATE TABLE "schema"
4
+ (
5
+ id SCHEMA_SINGLE NOT NULL PRIMARY KEY DEFAULT 'single',
6
+ schema JSON NOT NULL,
7
+ updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
8
+ checksum CHAR(32) NOT NULL,
9
+ version VARCHAR(20) NOT NULL,
10
+ migration_id INT NOT NULL REFERENCES schema_migration(id) DEFERRABLE INITIALLY DEFERRED
11
+ );
12
+ `;
13
+ async function _20240628153000schema(builder) {
14
+ builder.sql(sql);
15
+ }
16
+ export {
17
+ _20240628153000schema as default
18
+ };
19
+ //# sourceMappingURL=2024-06-28-153000-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"2024-06-28-153000-schema.js","sources":["../../../../../packages/engine-system-api/src/migrations/2024-06-28-153000-schema.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\n\n// deliberately using \"JSON\" instead of \"JSONB\" to preserve the order of keys\n\nconst sql = `\nCREATE TYPE SCHEMA_SINGLE AS ENUM ('single');\nCREATE TABLE \"schema\"\n(\n\tid SCHEMA_SINGLE NOT NULL PRIMARY KEY DEFAULT 'single',\n\tschema JSON NOT NULL,\n\tupdated_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),\n\tchecksum CHAR(32) NOT NULL,\n\tversion VARCHAR(20) NOT NULL,\n\tmigration_id INT NOT NULL REFERENCES schema_migration(id) DEFERRABLE INITIALLY DEFERRED\n);\n`\n\nexport default async function (builder: MigrationBuilder) {\n\tbuilder.sql(sql)\n}\n"],"names":[],"mappings":"AAIA,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAaZ,eAAA,sBAA+B,SAA2B;AACzD,UAAQ,IAAI,GAAG;AAChB;"}
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+ const databaseMigrations = require("@contember/database-migrations");
3
+ async function _20240628153001schemainit(builder, args) {
4
+ const schema = await args.schemaResolver(args.connection);
5
+ if (!schema.meta.id) {
6
+ return;
7
+ }
8
+ builder.sql(`INSERT INTO schema(schema, checksum, version, migration_id)
9
+ VALUES(${databaseMigrations.escapeValue(JSON.stringify(schema))}, ${databaseMigrations.escapeValue(schema.meta.checksum)}, ${databaseMigrations.escapeValue(schema.meta.version)}, ${schema.meta.id})`);
10
+ }
11
+ module.exports = _20240628153001schemainit;
12
+ //# sourceMappingURL=2024-06-28-153001-schema-init.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"2024-06-28-153001-schema-init.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2024-06-28-153001-schema-init.ts"],"sourcesContent":["import { escapeValue, MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tif (!schema.meta.id) {\n\t\treturn\n\t}\n\tbuilder.sql(`INSERT INTO schema(schema, checksum, version, migration_id) \nVALUES(${escapeValue(JSON.stringify(schema))}, ${escapeValue(schema.meta.checksum)}, ${escapeValue(schema.meta.version)}, ${schema.meta.id})`)\n}\n"],"names":["escapeValue"],"mappings":";;AAIA,eAAA,0BAA+B,SAA2B,MAA0C;AACnG,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AACpD,MAAA,CAAC,OAAO,KAAK,IAAI;AACpB;AAAA,EACD;AACA,UAAQ,IAAI;AAAA,SACJA,+BAAY,KAAK,UAAU,MAAM,CAAC,CAAC,KAAKA,+BAAY,OAAO,KAAK,QAAQ,CAAC,KAAKA,mBAAAA,YAAY,OAAO,KAAK,OAAO,CAAC,KAAK,OAAO,KAAK,EAAE,GAAG;AAC7I;;"}
@@ -0,0 +1,13 @@
1
+ import { escapeValue } from "@contember/database-migrations";
2
+ async function _20240628153001schemainit(builder, args) {
3
+ const schema = await args.schemaResolver(args.connection);
4
+ if (!schema.meta.id) {
5
+ return;
6
+ }
7
+ builder.sql(`INSERT INTO schema(schema, checksum, version, migration_id)
8
+ VALUES(${escapeValue(JSON.stringify(schema))}, ${escapeValue(schema.meta.checksum)}, ${escapeValue(schema.meta.version)}, ${schema.meta.id})`);
9
+ }
10
+ export {
11
+ _20240628153001schemainit as default
12
+ };
13
+ //# sourceMappingURL=2024-06-28-153001-schema-init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"2024-06-28-153001-schema-init.js","sources":["../../../../../packages/engine-system-api/src/migrations/2024-06-28-153001-schema-init.ts"],"sourcesContent":["import { escapeValue, MigrationArgs, MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tif (!schema.meta.id) {\n\t\treturn\n\t}\n\tbuilder.sql(`INSERT INTO schema(schema, checksum, version, migration_id) \nVALUES(${escapeValue(JSON.stringify(schema))}, ${escapeValue(schema.meta.checksum)}, ${escapeValue(schema.meta.version)}, ${schema.meta.id})`)\n}\n"],"names":[],"mappings":";AAIA,eAAA,0BAA+B,SAA2B,MAA0C;AACnG,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AACpD,MAAA,CAAC,OAAO,KAAK,IAAI;AACpB;AAAA,EACD;AACA,UAAQ,IAAI;AAAA,SACJ,YAAY,KAAK,UAAU,MAAM,CAAC,CAAC,KAAK,YAAY,OAAO,KAAK,QAAQ,CAAC,KAAK,YAAY,OAAO,KAAK,OAAO,CAAC,KAAK,OAAO,KAAK,EAAE,GAAG;AAC7I;"}
@@ -0,0 +1,11 @@
1
+ "use strict";
2
+ const sql = `
3
+ CREATE INDEX IF NOT EXISTS system_event_data_row_id_0 ON event_data USING btree ((row_ids -> 0));
4
+ CREATE INDEX IF NOT EXISTS system_event_data_row_id_1 ON event_data USING btree ((row_ids -> 1));
5
+ DROP INDEX IF EXISTS system_event_row_id;
6
+ `;
7
+ async function _20240729150000eventdataindex(builder) {
8
+ builder.sql(sql);
9
+ }
10
+ module.exports = _20240729150000eventdataindex;
11
+ //# sourceMappingURL=2024-07-29-150000-event-data-index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"2024-07-29-150000-event-data-index.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2024-07-29-150000-event-data-index.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\n\nconst sql = `\nCREATE INDEX IF NOT EXISTS system_event_data_row_id_0 ON event_data USING btree ((row_ids -> 0));\nCREATE INDEX IF NOT EXISTS system_event_data_row_id_1 ON event_data USING btree ((row_ids -> 1));\nDROP INDEX IF EXISTS system_event_row_id;\n`\n\nexport default async function (builder: MigrationBuilder) {\n\tbuilder.sql(sql)\n}\n"],"names":[],"mappings":";AAEA,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;AAMZ,eAAA,8BAA+B,SAA2B;AACzD,UAAQ,IAAI,GAAG;AAChB;;"}
@@ -0,0 +1,12 @@
1
+ const sql = `
2
+ CREATE INDEX IF NOT EXISTS system_event_data_row_id_0 ON event_data USING btree ((row_ids -> 0));
3
+ CREATE INDEX IF NOT EXISTS system_event_data_row_id_1 ON event_data USING btree ((row_ids -> 1));
4
+ DROP INDEX IF EXISTS system_event_row_id;
5
+ `;
6
+ async function _20240729150000eventdataindex(builder) {
7
+ builder.sql(sql);
8
+ }
9
+ export {
10
+ _20240729150000eventdataindex as default
11
+ };
12
+ //# sourceMappingURL=2024-07-29-150000-event-data-index.js.map