@contember/engine-system-api 2.0.0-alpha.9 → 2.0.0-beta.2

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 (533) 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 +5 -4
  6. package/dist/development/src/SystemContainer.js.map +1 -1
  7. package/dist/development/src/migrations/2020-03-27-130000-project-migrations.cjs.map +1 -1
  8. package/dist/development/src/migrations/2020-03-27-130000-project-migrations.js.map +1 -1
  9. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.cjs +1 -2
  10. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.cjs.map +1 -1
  11. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.js +1 -2
  12. package/dist/development/src/migrations/2020-05-06-150000-composed-primary.js.map +1 -1
  13. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.cjs +1 -2
  14. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.cjs.map +1 -1
  15. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.js +1 -2
  16. package/dist/development/src/migrations/2020-06-01-103000-event-trigger-perf.js.map +1 -1
  17. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.cjs +1 -2
  18. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.cjs.map +1 -1
  19. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.js +1 -2
  20. package/dist/development/src/migrations/2021-05-07-155800-event-log-rework.js.map +1 -1
  21. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs +1 -2
  22. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs.map +1 -1
  23. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js +1 -2
  24. package/dist/development/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js.map +1 -1
  25. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.cjs +1 -1
  26. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.cjs.map +1 -1
  27. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.js +1 -1
  28. package/dist/development/src/migrations/2022-10-03-110000-table-on-delete.js.map +1 -1
  29. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.cjs +1 -1
  30. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.cjs.map +1 -1
  31. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.js +1 -1
  32. package/dist/development/src/migrations/2023-09-11-174000-fix-on-delete.js.map +1 -1
  33. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.cjs +1 -1
  34. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.cjs.map +1 -1
  35. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.js +1 -1
  36. package/dist/development/src/migrations/2023-10-19-173000-fix-unique.js.map +1 -1
  37. package/dist/development/src/migrations/2024-06-28-153000-schema.cjs +18 -0
  38. package/dist/development/src/migrations/2024-06-28-153000-schema.cjs.map +1 -0
  39. package/dist/development/src/migrations/2024-06-28-153000-schema.js +19 -0
  40. package/dist/development/src/migrations/2024-06-28-153000-schema.js.map +1 -0
  41. package/dist/development/src/migrations/2024-06-28-153001-schema-init.cjs +12 -0
  42. package/dist/development/src/migrations/2024-06-28-153001-schema-init.cjs.map +1 -0
  43. package/dist/development/src/migrations/2024-06-28-153001-schema-init.js +13 -0
  44. package/dist/development/src/migrations/2024-06-28-153001-schema-init.js.map +1 -0
  45. package/dist/development/src/migrations/2024-07-29-150000-event-data-index.cjs +11 -0
  46. package/dist/development/src/migrations/2024-07-29-150000-event-data-index.cjs.map +1 -0
  47. package/dist/development/src/migrations/2024-07-29-150000-event-data-index.js +12 -0
  48. package/dist/development/src/migrations/2024-07-29-150000-event-data-index.js.map +1 -0
  49. package/dist/development/src/migrations/runner.cjs +11 -5
  50. package/dist/development/src/migrations/runner.cjs.map +1 -1
  51. package/dist/development/src/migrations/runner.js +11 -5
  52. package/dist/development/src/migrations/runner.js.map +1 -1
  53. package/dist/development/src/migrations/snapshot-factory.cjs +1 -1
  54. package/dist/development/src/migrations/snapshot-factory.cjs.map +1 -1
  55. package/dist/development/src/migrations/snapshot-factory.js +1 -1
  56. package/dist/development/src/migrations/snapshot-factory.js.map +1 -1
  57. package/dist/development/src/migrations/snapshot.cjs +17 -1
  58. package/dist/development/src/migrations/snapshot.cjs.map +1 -1
  59. package/dist/development/src/migrations/snapshot.js +17 -1
  60. package/dist/development/src/migrations/snapshot.js.map +1 -1
  61. package/dist/development/src/model/ProjectInitializer.cjs.map +1 -1
  62. package/dist/development/src/model/ProjectInitializer.js.map +1 -1
  63. package/dist/development/src/model/ProjectTruncateExecutor.cjs.map +1 -1
  64. package/dist/development/src/model/ProjectTruncateExecutor.js.map +1 -1
  65. package/dist/development/src/model/authorization/AuthorizationActions.cjs +1 -0
  66. package/dist/development/src/model/authorization/AuthorizationActions.cjs.map +1 -1
  67. package/dist/development/src/model/authorization/AuthorizationActions.js +1 -0
  68. package/dist/development/src/model/authorization/AuthorizationActions.js.map +1 -1
  69. package/dist/development/src/model/authorization/Identity.cjs.map +1 -1
  70. package/dist/development/src/model/authorization/Identity.js.map +1 -1
  71. package/dist/development/src/model/authorization/PermissionsFactory.cjs +1 -0
  72. package/dist/development/src/model/authorization/PermissionsFactory.cjs.map +1 -1
  73. package/dist/development/src/model/authorization/PermissionsFactory.js +1 -0
  74. package/dist/development/src/model/authorization/PermissionsFactory.js.map +1 -1
  75. package/dist/development/src/model/authorization/StagePermissionsFactory.cjs +4 -5
  76. package/dist/development/src/model/authorization/StagePermissionsFactory.cjs.map +1 -1
  77. package/dist/development/src/model/authorization/StagePermissionsFactory.js +4 -5
  78. package/dist/development/src/model/authorization/StagePermissionsFactory.js.map +1 -1
  79. package/dist/development/src/model/authorization/StageScope.cjs +2 -2
  80. package/dist/development/src/model/authorization/StageScope.cjs.map +1 -1
  81. package/dist/development/src/model/authorization/StageScope.js +2 -2
  82. package/dist/development/src/model/authorization/StageScope.js.map +1 -1
  83. package/dist/development/src/model/authorization/SwitchEvaluatorNode.cjs.map +1 -1
  84. package/dist/development/src/model/authorization/SwitchEvaluatorNode.js.map +1 -1
  85. package/dist/development/src/model/commands/CommandBus.cjs.map +1 -1
  86. package/dist/development/src/model/commands/CommandBus.js.map +1 -1
  87. package/dist/development/src/model/commands/events/TruncateEventsCommand.cjs.map +1 -1
  88. package/dist/development/src/model/commands/events/TruncateEventsCommand.js.map +1 -1
  89. package/dist/development/src/model/commands/migrations/DeleteMigrationCommand.cjs.map +1 -1
  90. package/dist/development/src/model/commands/migrations/DeleteMigrationCommand.js.map +1 -1
  91. package/dist/development/src/model/commands/migrations/ModifyMigrationCommand.cjs.map +1 -1
  92. package/dist/development/src/model/commands/migrations/ModifyMigrationCommand.js.map +1 -1
  93. package/dist/development/src/model/commands/migrations/SaveMigrationCommand.cjs.map +1 -1
  94. package/dist/development/src/model/commands/migrations/SaveMigrationCommand.js.map +1 -1
  95. package/dist/development/src/model/commands/schema/SaveSchemaCommand.cjs +28 -0
  96. package/dist/development/src/model/commands/schema/SaveSchemaCommand.cjs.map +1 -0
  97. package/dist/development/src/model/commands/schema/SaveSchemaCommand.js +28 -0
  98. package/dist/development/src/model/commands/schema/SaveSchemaCommand.js.map +1 -0
  99. package/dist/development/src/model/commands/stages/CreateStageCommand.cjs.map +1 -1
  100. package/dist/development/src/model/commands/stages/CreateStageCommand.js.map +1 -1
  101. package/dist/development/src/model/database/DatabaseContext.cjs.map +1 -1
  102. package/dist/development/src/model/database/DatabaseContext.js.map +1 -1
  103. package/dist/development/src/model/dtos/ExecutedMigration.cjs.map +1 -1
  104. package/dist/development/src/model/dtos/ExecutedMigration.js.map +1 -1
  105. package/dist/development/src/model/events/EventResponseBuilder.cjs.map +1 -1
  106. package/dist/development/src/model/events/EventResponseBuilder.js.map +1 -1
  107. package/dist/development/src/model/events/EventResponseHelper.cjs.map +1 -1
  108. package/dist/development/src/model/events/EventResponseHelper.js.map +1 -1
  109. package/dist/development/src/model/events/identityUtils.cjs.map +1 -1
  110. package/dist/development/src/model/events/identityUtils.js.map +1 -1
  111. package/dist/development/src/model/events/types.cjs.map +1 -1
  112. package/dist/development/src/model/events/types.js.map +1 -1
  113. package/dist/development/src/model/helpers/modelHelpers.cjs.map +1 -1
  114. package/dist/development/src/model/helpers/modelHelpers.js.map +1 -1
  115. package/dist/development/src/model/metadata/SchemaDatabaseMetadataResolverStore.cjs.map +1 -1
  116. package/dist/development/src/model/metadata/SchemaDatabaseMetadataResolverStore.js.map +1 -1
  117. package/dist/development/src/model/migrations/ExecutedMigrationsResolver.cjs.map +1 -1
  118. package/dist/development/src/model/migrations/ExecutedMigrationsResolver.js.map +1 -1
  119. package/dist/development/src/model/migrations/MigrationAlterer.cjs +10 -0
  120. package/dist/development/src/model/migrations/MigrationAlterer.cjs.map +1 -1
  121. package/dist/development/src/model/migrations/MigrationAlterer.js +10 -0
  122. package/dist/development/src/model/migrations/MigrationAlterer.js.map +1 -1
  123. package/dist/development/src/model/migrations/ProjectMigrator.cjs +29 -10
  124. package/dist/development/src/model/migrations/ProjectMigrator.cjs.map +1 -1
  125. package/dist/development/src/model/migrations/ProjectMigrator.js +30 -11
  126. package/dist/development/src/model/migrations/ProjectMigrator.js.map +1 -1
  127. package/dist/development/src/model/migrations/SchemaProvider.cjs +58 -0
  128. package/dist/development/src/model/migrations/SchemaProvider.cjs.map +1 -0
  129. package/dist/development/src/model/migrations/SchemaProvider.js +58 -0
  130. package/dist/development/src/model/migrations/SchemaProvider.js.map +1 -0
  131. package/dist/development/src/model/queries/events/EventQueryHelpers.cjs.map +1 -1
  132. package/dist/development/src/model/queries/events/EventQueryHelpers.js.map +1 -1
  133. package/dist/development/src/model/queries/events/EventsQuery.cjs +10 -14
  134. package/dist/development/src/model/queries/events/EventsQuery.cjs.map +1 -1
  135. package/dist/development/src/model/queries/events/EventsQuery.js +10 -14
  136. package/dist/development/src/model/queries/events/EventsQuery.js.map +1 -1
  137. package/dist/development/src/model/queries/events/LatestTransactionIdByStageQuery.cjs.map +1 -1
  138. package/dist/development/src/model/queries/events/LatestTransactionIdByStageQuery.js.map +1 -1
  139. package/dist/development/src/model/queries/events/OldValuesQuery.cjs.map +1 -1
  140. package/dist/development/src/model/queries/events/OldValuesQuery.js.map +1 -1
  141. package/dist/development/src/model/queries/migrations/ExecutedMigrationByVersionQuery.cjs.map +1 -1
  142. package/dist/development/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js.map +1 -1
  143. package/dist/development/src/model/queries/migrations/ExecutedMigrationsQuery.cjs.map +1 -1
  144. package/dist/development/src/model/queries/migrations/ExecutedMigrationsQuery.js.map +1 -1
  145. package/dist/development/src/model/queries/schema/SchemaQuery.cjs +34 -0
  146. package/dist/development/src/model/queries/schema/SchemaQuery.cjs.map +1 -0
  147. package/dist/development/src/model/queries/schema/SchemaQuery.js +34 -0
  148. package/dist/development/src/model/queries/schema/SchemaQuery.js.map +1 -0
  149. package/dist/development/src/model/queries/stages/StageBySlugQuery.cjs.map +1 -1
  150. package/dist/development/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
  151. package/dist/development/src/model/queries/stages/StagesQuery.cjs.map +1 -1
  152. package/dist/development/src/model/queries/stages/StagesQuery.js.map +1 -1
  153. package/dist/development/src/model/stages/StageCreator.cjs.map +1 -1
  154. package/dist/development/src/model/stages/StageCreator.js.map +1 -1
  155. package/dist/development/src/resolvers/ResolverFactory.cjs +6 -2
  156. package/dist/development/src/resolvers/ResolverFactory.cjs.map +1 -1
  157. package/dist/development/src/resolvers/ResolverFactory.js +7 -3
  158. package/dist/development/src/resolvers/ResolverFactory.js.map +1 -1
  159. package/dist/development/src/resolvers/SystemResolverContext.cjs +5 -5
  160. package/dist/development/src/resolvers/SystemResolverContext.cjs.map +1 -1
  161. package/dist/development/src/resolvers/SystemResolverContext.js +5 -5
  162. package/dist/development/src/resolvers/SystemResolverContext.js.map +1 -1
  163. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.cjs +0 -1
  164. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.cjs.map +1 -1
  165. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.js +0 -1
  166. package/dist/development/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
  167. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.cjs +0 -1
  168. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.cjs.map +1 -1
  169. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.js +0 -1
  170. package/dist/development/src/resolvers/mutation/MigrationAlterMutationResolver.js.map +1 -1
  171. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.cjs +1 -1
  172. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.cjs.map +1 -1
  173. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.js +1 -1
  174. package/dist/development/src/resolvers/mutation/TruncateMutationResolver.js.map +1 -1
  175. package/dist/development/src/resolvers/query/EventsQueryResolver.cjs +0 -1
  176. package/dist/development/src/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  177. package/dist/development/src/resolvers/query/EventsQueryResolver.js +0 -1
  178. package/dist/development/src/resolvers/query/EventsQueryResolver.js.map +1 -1
  179. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs +0 -1
  180. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs.map +1 -1
  181. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.js +0 -1
  182. package/dist/development/src/resolvers/query/ExecutedMigrationsQueryResolver.js.map +1 -1
  183. package/dist/development/src/resolvers/query/SchemaQueryResolver.cjs +23 -0
  184. package/dist/development/src/resolvers/query/SchemaQueryResolver.cjs.map +1 -0
  185. package/dist/development/src/resolvers/query/SchemaQueryResolver.js +23 -0
  186. package/dist/development/src/resolvers/query/SchemaQueryResolver.js.map +1 -0
  187. package/dist/development/src/resolvers/query/StagesQueryResolver.cjs +0 -1
  188. package/dist/development/src/resolvers/query/StagesQueryResolver.cjs.map +1 -1
  189. package/dist/development/src/resolvers/query/StagesQueryResolver.js +0 -1
  190. package/dist/development/src/resolvers/query/StagesQueryResolver.js.map +1 -1
  191. package/dist/development/src/resolvers/types/EventOldValuesResolver.cjs.map +1 -1
  192. package/dist/development/src/resolvers/types/EventOldValuesResolver.js.map +1 -1
  193. package/dist/development/src/resolvers/types/OldValuesHelpers.cjs +0 -1
  194. package/dist/development/src/resolvers/types/OldValuesHelpers.cjs.map +1 -1
  195. package/dist/development/src/resolvers/types/OldValuesHelpers.js +0 -1
  196. package/dist/development/src/resolvers/types/OldValuesHelpers.js.map +1 -1
  197. package/dist/development/src/schema/dev.graphql.cjs.map +1 -1
  198. package/dist/development/src/schema/system.graphql.cjs +3 -1
  199. package/dist/development/src/schema/system.graphql.cjs.map +1 -1
  200. package/dist/development/src/schema/system.graphql.js +3 -1
  201. package/dist/development/src/schema/system.graphql.js.map +1 -1
  202. package/dist/development/src/schema/types.cjs.map +1 -1
  203. package/dist/development/src/schema/types.js.map +1 -1
  204. package/dist/development/src/utils/MapSet.cjs.map +1 -1
  205. package/dist/development/src/utils/MapSet.js.map +1 -1
  206. package/dist/development/src/utils/Response.cjs.map +1 -1
  207. package/dist/development/src/utils/Response.js.map +1 -1
  208. package/dist/development/src/utils/batchQuery.cjs.map +1 -1
  209. package/dist/development/src/utils/batchQuery.js.map +1 -1
  210. package/dist/production/index.cjs +2 -2
  211. package/dist/production/index.js +2 -2
  212. package/dist/production/src/SystemContainer.cjs +4 -3
  213. package/dist/production/src/SystemContainer.cjs.map +1 -1
  214. package/dist/production/src/SystemContainer.js +5 -4
  215. package/dist/production/src/SystemContainer.js.map +1 -1
  216. package/dist/production/src/migrations/2020-03-27-130000-project-migrations.cjs.map +1 -1
  217. package/dist/production/src/migrations/2020-03-27-130000-project-migrations.js.map +1 -1
  218. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.cjs +1 -2
  219. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.cjs.map +1 -1
  220. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.js +1 -2
  221. package/dist/production/src/migrations/2020-05-06-150000-composed-primary.js.map +1 -1
  222. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.cjs +1 -2
  223. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.cjs.map +1 -1
  224. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.js +1 -2
  225. package/dist/production/src/migrations/2020-06-01-103000-event-trigger-perf.js.map +1 -1
  226. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.cjs +1 -2
  227. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.cjs.map +1 -1
  228. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.js +1 -2
  229. package/dist/production/src/migrations/2021-05-07-155800-event-log-rework.js.map +1 -1
  230. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs +1 -2
  231. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.cjs.map +1 -1
  232. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js +1 -2
  233. package/dist/production/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js.map +1 -1
  234. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.cjs +1 -1
  235. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.cjs.map +1 -1
  236. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.js +1 -1
  237. package/dist/production/src/migrations/2022-10-03-110000-table-on-delete.js.map +1 -1
  238. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.cjs +1 -1
  239. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.cjs.map +1 -1
  240. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.js +1 -1
  241. package/dist/production/src/migrations/2023-09-11-174000-fix-on-delete.js.map +1 -1
  242. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.cjs +1 -1
  243. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.cjs.map +1 -1
  244. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.js +1 -1
  245. package/dist/production/src/migrations/2023-10-19-173000-fix-unique.js.map +1 -1
  246. package/dist/production/src/migrations/2024-06-28-153000-schema.cjs +18 -0
  247. package/dist/production/src/migrations/2024-06-28-153000-schema.cjs.map +1 -0
  248. package/dist/production/src/migrations/2024-06-28-153000-schema.js +19 -0
  249. package/dist/production/src/migrations/2024-06-28-153000-schema.js.map +1 -0
  250. package/dist/production/src/migrations/2024-06-28-153001-schema-init.cjs +12 -0
  251. package/dist/production/src/migrations/2024-06-28-153001-schema-init.cjs.map +1 -0
  252. package/dist/production/src/migrations/2024-06-28-153001-schema-init.js +13 -0
  253. package/dist/production/src/migrations/2024-06-28-153001-schema-init.js.map +1 -0
  254. package/dist/production/src/migrations/2024-07-29-150000-event-data-index.cjs +11 -0
  255. package/dist/production/src/migrations/2024-07-29-150000-event-data-index.cjs.map +1 -0
  256. package/dist/production/src/migrations/2024-07-29-150000-event-data-index.js +12 -0
  257. package/dist/production/src/migrations/2024-07-29-150000-event-data-index.js.map +1 -0
  258. package/dist/production/src/migrations/runner.cjs +11 -5
  259. package/dist/production/src/migrations/runner.cjs.map +1 -1
  260. package/dist/production/src/migrations/runner.js +11 -5
  261. package/dist/production/src/migrations/runner.js.map +1 -1
  262. package/dist/production/src/migrations/snapshot-factory.cjs +1 -1
  263. package/dist/production/src/migrations/snapshot-factory.cjs.map +1 -1
  264. package/dist/production/src/migrations/snapshot-factory.js +1 -1
  265. package/dist/production/src/migrations/snapshot-factory.js.map +1 -1
  266. package/dist/production/src/migrations/snapshot.cjs +17 -1
  267. package/dist/production/src/migrations/snapshot.cjs.map +1 -1
  268. package/dist/production/src/migrations/snapshot.js +17 -1
  269. package/dist/production/src/migrations/snapshot.js.map +1 -1
  270. package/dist/production/src/model/ProjectInitializer.cjs.map +1 -1
  271. package/dist/production/src/model/ProjectInitializer.js.map +1 -1
  272. package/dist/production/src/model/ProjectTruncateExecutor.cjs.map +1 -1
  273. package/dist/production/src/model/ProjectTruncateExecutor.js.map +1 -1
  274. package/dist/production/src/model/authorization/AuthorizationActions.cjs +1 -0
  275. package/dist/production/src/model/authorization/AuthorizationActions.cjs.map +1 -1
  276. package/dist/production/src/model/authorization/AuthorizationActions.js +1 -0
  277. package/dist/production/src/model/authorization/AuthorizationActions.js.map +1 -1
  278. package/dist/production/src/model/authorization/Identity.cjs.map +1 -1
  279. package/dist/production/src/model/authorization/Identity.js.map +1 -1
  280. package/dist/production/src/model/authorization/PermissionsFactory.cjs +1 -0
  281. package/dist/production/src/model/authorization/PermissionsFactory.cjs.map +1 -1
  282. package/dist/production/src/model/authorization/PermissionsFactory.js +1 -0
  283. package/dist/production/src/model/authorization/PermissionsFactory.js.map +1 -1
  284. package/dist/production/src/model/authorization/StagePermissionsFactory.cjs +4 -5
  285. package/dist/production/src/model/authorization/StagePermissionsFactory.cjs.map +1 -1
  286. package/dist/production/src/model/authorization/StagePermissionsFactory.js +4 -5
  287. package/dist/production/src/model/authorization/StagePermissionsFactory.js.map +1 -1
  288. package/dist/production/src/model/authorization/StageScope.cjs +2 -2
  289. package/dist/production/src/model/authorization/StageScope.cjs.map +1 -1
  290. package/dist/production/src/model/authorization/StageScope.js +2 -2
  291. package/dist/production/src/model/authorization/StageScope.js.map +1 -1
  292. package/dist/production/src/model/authorization/SwitchEvaluatorNode.cjs.map +1 -1
  293. package/dist/production/src/model/authorization/SwitchEvaluatorNode.js.map +1 -1
  294. package/dist/production/src/model/commands/CommandBus.cjs.map +1 -1
  295. package/dist/production/src/model/commands/CommandBus.js.map +1 -1
  296. package/dist/production/src/model/commands/events/TruncateEventsCommand.cjs.map +1 -1
  297. package/dist/production/src/model/commands/events/TruncateEventsCommand.js.map +1 -1
  298. package/dist/production/src/model/commands/migrations/DeleteMigrationCommand.cjs.map +1 -1
  299. package/dist/production/src/model/commands/migrations/DeleteMigrationCommand.js.map +1 -1
  300. package/dist/production/src/model/commands/migrations/ModifyMigrationCommand.cjs.map +1 -1
  301. package/dist/production/src/model/commands/migrations/ModifyMigrationCommand.js.map +1 -1
  302. package/dist/production/src/model/commands/migrations/SaveMigrationCommand.cjs.map +1 -1
  303. package/dist/production/src/model/commands/migrations/SaveMigrationCommand.js.map +1 -1
  304. package/dist/production/src/model/commands/schema/SaveSchemaCommand.cjs +28 -0
  305. package/dist/production/src/model/commands/schema/SaveSchemaCommand.cjs.map +1 -0
  306. package/dist/production/src/model/commands/schema/SaveSchemaCommand.js +28 -0
  307. package/dist/production/src/model/commands/schema/SaveSchemaCommand.js.map +1 -0
  308. package/dist/production/src/model/commands/stages/CreateStageCommand.cjs.map +1 -1
  309. package/dist/production/src/model/commands/stages/CreateStageCommand.js.map +1 -1
  310. package/dist/production/src/model/database/DatabaseContext.cjs.map +1 -1
  311. package/dist/production/src/model/database/DatabaseContext.js.map +1 -1
  312. package/dist/production/src/model/dtos/ExecutedMigration.cjs.map +1 -1
  313. package/dist/production/src/model/dtos/ExecutedMigration.js.map +1 -1
  314. package/dist/production/src/model/events/EventResponseBuilder.cjs.map +1 -1
  315. package/dist/production/src/model/events/EventResponseBuilder.js.map +1 -1
  316. package/dist/production/src/model/events/EventResponseHelper.cjs.map +1 -1
  317. package/dist/production/src/model/events/EventResponseHelper.js.map +1 -1
  318. package/dist/production/src/model/events/identityUtils.cjs.map +1 -1
  319. package/dist/production/src/model/events/identityUtils.js.map +1 -1
  320. package/dist/production/src/model/events/types.cjs.map +1 -1
  321. package/dist/production/src/model/events/types.js.map +1 -1
  322. package/dist/production/src/model/helpers/modelHelpers.cjs.map +1 -1
  323. package/dist/production/src/model/helpers/modelHelpers.js.map +1 -1
  324. package/dist/production/src/model/metadata/SchemaDatabaseMetadataResolverStore.cjs.map +1 -1
  325. package/dist/production/src/model/metadata/SchemaDatabaseMetadataResolverStore.js.map +1 -1
  326. package/dist/production/src/model/migrations/ExecutedMigrationsResolver.cjs.map +1 -1
  327. package/dist/production/src/model/migrations/ExecutedMigrationsResolver.js.map +1 -1
  328. package/dist/production/src/model/migrations/MigrationAlterer.cjs +10 -0
  329. package/dist/production/src/model/migrations/MigrationAlterer.cjs.map +1 -1
  330. package/dist/production/src/model/migrations/MigrationAlterer.js +10 -0
  331. package/dist/production/src/model/migrations/MigrationAlterer.js.map +1 -1
  332. package/dist/production/src/model/migrations/ProjectMigrator.cjs +29 -10
  333. package/dist/production/src/model/migrations/ProjectMigrator.cjs.map +1 -1
  334. package/dist/production/src/model/migrations/ProjectMigrator.js +30 -11
  335. package/dist/production/src/model/migrations/ProjectMigrator.js.map +1 -1
  336. package/dist/production/src/model/migrations/SchemaProvider.cjs +58 -0
  337. package/dist/production/src/model/migrations/SchemaProvider.cjs.map +1 -0
  338. package/dist/production/src/model/migrations/SchemaProvider.js +58 -0
  339. package/dist/production/src/model/migrations/SchemaProvider.js.map +1 -0
  340. package/dist/production/src/model/queries/events/EventQueryHelpers.cjs.map +1 -1
  341. package/dist/production/src/model/queries/events/EventQueryHelpers.js.map +1 -1
  342. package/dist/production/src/model/queries/events/EventsQuery.cjs +10 -14
  343. package/dist/production/src/model/queries/events/EventsQuery.cjs.map +1 -1
  344. package/dist/production/src/model/queries/events/EventsQuery.js +10 -14
  345. package/dist/production/src/model/queries/events/EventsQuery.js.map +1 -1
  346. package/dist/production/src/model/queries/events/LatestTransactionIdByStageQuery.cjs.map +1 -1
  347. package/dist/production/src/model/queries/events/LatestTransactionIdByStageQuery.js.map +1 -1
  348. package/dist/production/src/model/queries/events/OldValuesQuery.cjs.map +1 -1
  349. package/dist/production/src/model/queries/events/OldValuesQuery.js.map +1 -1
  350. package/dist/production/src/model/queries/migrations/ExecutedMigrationByVersionQuery.cjs.map +1 -1
  351. package/dist/production/src/model/queries/migrations/ExecutedMigrationByVersionQuery.js.map +1 -1
  352. package/dist/production/src/model/queries/migrations/ExecutedMigrationsQuery.cjs.map +1 -1
  353. package/dist/production/src/model/queries/migrations/ExecutedMigrationsQuery.js.map +1 -1
  354. package/dist/production/src/model/queries/schema/SchemaQuery.cjs +34 -0
  355. package/dist/production/src/model/queries/schema/SchemaQuery.cjs.map +1 -0
  356. package/dist/production/src/model/queries/schema/SchemaQuery.js +34 -0
  357. package/dist/production/src/model/queries/schema/SchemaQuery.js.map +1 -0
  358. package/dist/production/src/model/queries/stages/StageBySlugQuery.cjs.map +1 -1
  359. package/dist/production/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
  360. package/dist/production/src/model/queries/stages/StagesQuery.cjs.map +1 -1
  361. package/dist/production/src/model/queries/stages/StagesQuery.js.map +1 -1
  362. package/dist/production/src/model/stages/StageCreator.cjs.map +1 -1
  363. package/dist/production/src/model/stages/StageCreator.js.map +1 -1
  364. package/dist/production/src/resolvers/ResolverFactory.cjs +6 -2
  365. package/dist/production/src/resolvers/ResolverFactory.cjs.map +1 -1
  366. package/dist/production/src/resolvers/ResolverFactory.js +7 -3
  367. package/dist/production/src/resolvers/ResolverFactory.js.map +1 -1
  368. package/dist/production/src/resolvers/SystemResolverContext.cjs +5 -5
  369. package/dist/production/src/resolvers/SystemResolverContext.cjs.map +1 -1
  370. package/dist/production/src/resolvers/SystemResolverContext.js +5 -5
  371. package/dist/production/src/resolvers/SystemResolverContext.js.map +1 -1
  372. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.cjs +0 -1
  373. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.cjs.map +1 -1
  374. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.js +0 -1
  375. package/dist/production/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
  376. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.cjs +0 -1
  377. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.cjs.map +1 -1
  378. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.js +0 -1
  379. package/dist/production/src/resolvers/mutation/MigrationAlterMutationResolver.js.map +1 -1
  380. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.cjs +1 -1
  381. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.cjs.map +1 -1
  382. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.js +1 -1
  383. package/dist/production/src/resolvers/mutation/TruncateMutationResolver.js.map +1 -1
  384. package/dist/production/src/resolvers/query/EventsQueryResolver.cjs +0 -1
  385. package/dist/production/src/resolvers/query/EventsQueryResolver.cjs.map +1 -1
  386. package/dist/production/src/resolvers/query/EventsQueryResolver.js +0 -1
  387. package/dist/production/src/resolvers/query/EventsQueryResolver.js.map +1 -1
  388. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs +0 -1
  389. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.cjs.map +1 -1
  390. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.js +0 -1
  391. package/dist/production/src/resolvers/query/ExecutedMigrationsQueryResolver.js.map +1 -1
  392. package/dist/production/src/resolvers/query/SchemaQueryResolver.cjs +23 -0
  393. package/dist/production/src/resolvers/query/SchemaQueryResolver.cjs.map +1 -0
  394. package/dist/production/src/resolvers/query/SchemaQueryResolver.js +23 -0
  395. package/dist/production/src/resolvers/query/SchemaQueryResolver.js.map +1 -0
  396. package/dist/production/src/resolvers/query/StagesQueryResolver.cjs +0 -1
  397. package/dist/production/src/resolvers/query/StagesQueryResolver.cjs.map +1 -1
  398. package/dist/production/src/resolvers/query/StagesQueryResolver.js +0 -1
  399. package/dist/production/src/resolvers/query/StagesQueryResolver.js.map +1 -1
  400. package/dist/production/src/resolvers/types/EventOldValuesResolver.cjs.map +1 -1
  401. package/dist/production/src/resolvers/types/EventOldValuesResolver.js.map +1 -1
  402. package/dist/production/src/resolvers/types/OldValuesHelpers.cjs +0 -1
  403. package/dist/production/src/resolvers/types/OldValuesHelpers.cjs.map +1 -1
  404. package/dist/production/src/resolvers/types/OldValuesHelpers.js +0 -1
  405. package/dist/production/src/resolvers/types/OldValuesHelpers.js.map +1 -1
  406. package/dist/production/src/schema/dev.graphql.cjs.map +1 -1
  407. package/dist/production/src/schema/system.graphql.cjs +3 -1
  408. package/dist/production/src/schema/system.graphql.cjs.map +1 -1
  409. package/dist/production/src/schema/system.graphql.js +3 -1
  410. package/dist/production/src/schema/system.graphql.js.map +1 -1
  411. package/dist/production/src/schema/types.cjs.map +1 -1
  412. package/dist/production/src/schema/types.js.map +1 -1
  413. package/dist/production/src/utils/MapSet.cjs.map +1 -1
  414. package/dist/production/src/utils/MapSet.js.map +1 -1
  415. package/dist/production/src/utils/Response.cjs.map +1 -1
  416. package/dist/production/src/utils/Response.js.map +1 -1
  417. package/dist/production/src/utils/batchQuery.cjs.map +1 -1
  418. package/dist/production/src/utils/batchQuery.js.map +1 -1
  419. package/dist/tests/cases/unit/eventsQuery.test.d.ts +2 -0
  420. package/dist/tests/cases/unit/eventsQuery.test.d.ts.map +1 -0
  421. package/dist/tests/src/uuid.d.ts +3 -0
  422. package/dist/tests/src/uuid.d.ts.map +1 -0
  423. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  424. package/dist/types/SystemContainer.d.ts +8 -6
  425. package/dist/types/SystemContainer.d.ts.map +1 -1
  426. package/dist/types/index.d.ts +1 -1
  427. package/dist/types/index.d.ts.map +1 -1
  428. package/dist/types/migrations/2024-06-28-153000-schema.d.ts +3 -0
  429. package/dist/types/migrations/2024-06-28-153000-schema.d.ts.map +1 -0
  430. package/dist/types/migrations/2024-06-28-153001-schema-init.d.ts +4 -0
  431. package/dist/types/migrations/2024-06-28-153001-schema-init.d.ts.map +1 -0
  432. package/dist/types/migrations/2024-07-29-150000-event-data-index.d.ts +3 -0
  433. package/dist/types/migrations/2024-07-29-150000-event-data-index.d.ts.map +1 -0
  434. package/dist/types/migrations/runner.d.ts +3 -3
  435. package/dist/types/migrations/runner.d.ts.map +1 -1
  436. package/dist/types/migrations/snapshot.d.ts.map +1 -1
  437. package/dist/types/migrations/types.d.ts +2 -2
  438. package/dist/types/migrations/types.d.ts.map +1 -1
  439. package/dist/types/model/SchemaGetter.d.ts +6 -0
  440. package/dist/types/model/SchemaGetter.d.ts.map +1 -0
  441. package/dist/types/model/authorization/AuthorizationActions.d.ts +5 -0
  442. package/dist/types/model/authorization/AuthorizationActions.d.ts.map +1 -1
  443. package/dist/types/model/authorization/PermissionsFactory.d.ts.map +1 -1
  444. package/dist/types/model/authorization/StagePermissionsFactory.d.ts +4 -4
  445. package/dist/types/model/authorization/StagePermissionsFactory.d.ts.map +1 -1
  446. package/dist/types/model/authorization/StageScope.d.ts.map +1 -1
  447. package/dist/types/model/commands/schema/SaveSchemaCommand.d.ts +8 -0
  448. package/dist/types/model/commands/schema/SaveSchemaCommand.d.ts.map +1 -0
  449. package/dist/types/model/dependencies/content/ContentQueryExecutor.d.ts +3 -2
  450. package/dist/types/model/dependencies/content/ContentQueryExecutor.d.ts.map +1 -1
  451. package/dist/types/model/migrations/MigrationAlterer.d.ts +4 -0
  452. package/dist/types/model/migrations/MigrationAlterer.d.ts.map +1 -1
  453. package/dist/types/model/migrations/ProjectMigrator.d.ts +3 -3
  454. package/dist/types/model/migrations/ProjectMigrator.d.ts.map +1 -1
  455. package/dist/types/model/migrations/SchemaProvider.d.ts +28 -0
  456. package/dist/types/model/migrations/SchemaProvider.d.ts.map +1 -0
  457. package/dist/types/model/migrations/index.d.ts +1 -1
  458. package/dist/types/model/migrations/index.d.ts.map +1 -1
  459. package/dist/types/model/queries/events/EventsQuery.d.ts.map +1 -1
  460. package/dist/types/model/queries/index.d.ts +1 -0
  461. package/dist/types/model/queries/index.d.ts.map +1 -1
  462. package/dist/types/model/queries/schema/SchemaQuery.d.ts +8 -0
  463. package/dist/types/model/queries/schema/SchemaQuery.d.ts.map +1 -0
  464. package/dist/types/model/queries/schema/index.d.ts +2 -0
  465. package/dist/types/model/queries/schema/index.d.ts.map +1 -0
  466. package/dist/types/resolvers/ResolverFactory.d.ts +3 -1
  467. package/dist/types/resolvers/ResolverFactory.d.ts.map +1 -1
  468. package/dist/types/resolvers/SystemResolverContext.d.ts +4 -4
  469. package/dist/types/resolvers/SystemResolverContext.d.ts.map +1 -1
  470. package/dist/types/resolvers/query/SchemaQueryResolver.d.ts +7 -0
  471. package/dist/types/resolvers/query/SchemaQueryResolver.d.ts.map +1 -0
  472. package/dist/types/schema/system.graphql.d.ts.map +1 -1
  473. package/dist/types/schema/types.d.ts +14 -2
  474. package/dist/types/schema/types.d.ts.map +1 -1
  475. package/dist/types/tsconfig.tsbuildinfo +1 -1
  476. package/graphql.codegen.yml +3 -1
  477. package/package.json +17 -24
  478. package/src/SystemContainer.ts +14 -13
  479. package/src/bin/runMigrations.ts +4 -4
  480. package/src/index.ts +3 -2
  481. package/src/migrations/2020-05-06-150000-composed-primary.ts +1 -1
  482. package/src/migrations/2020-06-01-103000-event-trigger-perf.ts +1 -1
  483. package/src/migrations/2021-05-07-155800-event-log-rework.ts +1 -1
  484. package/src/migrations/2021-05-19-1232000-event-log-fix-constraint.ts +1 -1
  485. package/src/migrations/2022-10-03-110000-table-on-delete.ts +1 -1
  486. package/src/migrations/2023-09-11-174000-fix-on-delete.ts +1 -1
  487. package/src/migrations/2023-10-19-173000-fix-unique.ts +1 -1
  488. package/src/migrations/2024-06-28-153000-schema.ts +20 -0
  489. package/src/migrations/2024-06-28-153001-schema-init.ts +12 -0
  490. package/src/migrations/2024-07-29-150000-event-data-index.ts +11 -0
  491. package/src/migrations/runner.ts +10 -4
  492. package/src/migrations/snapshot-factory.ts +1 -1
  493. package/src/migrations/snapshot.ts +17 -1
  494. package/src/migrations/types.ts +2 -2
  495. package/src/model/SchemaGetter.ts +3 -0
  496. package/src/model/authorization/AuthorizationActions.ts +1 -0
  497. package/src/model/authorization/PermissionsFactory.ts +1 -0
  498. package/src/model/authorization/StagePermissionsFactory.ts +5 -5
  499. package/src/model/authorization/StageScope.ts +2 -2
  500. package/src/model/commands/schema/SaveSchemaCommand.ts +31 -0
  501. package/src/model/dependencies/content/ContentQueryExecutor.ts +3 -2
  502. package/src/model/migrations/MigrationAlterer.ts +14 -0
  503. package/src/model/migrations/ProjectMigrator.ts +34 -12
  504. package/src/model/migrations/SchemaProvider.ts +77 -0
  505. package/src/model/migrations/index.ts +1 -1
  506. package/src/model/queries/events/EventsQuery.ts +15 -17
  507. package/src/model/queries/index.ts +1 -0
  508. package/src/model/queries/schema/SchemaQuery.ts +48 -0
  509. package/src/model/queries/schema/index.ts +1 -0
  510. package/src/resolvers/ResolverFactory.ts +9 -1
  511. package/src/resolvers/SystemResolverContext.ts +8 -13
  512. package/src/resolvers/mutation/TruncateMutationResolver.ts +1 -1
  513. package/src/resolvers/query/SchemaQueryResolver.ts +19 -0
  514. package/src/schema/system.graphql.ts +3 -1
  515. package/src/schema/types.ts +13 -3
  516. package/tests/cases/migrations/2020-05-06-150000-composed-primary.test.ts +12 -3
  517. package/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.ts +12 -3
  518. package/tests/cases/migrations/2022-10-03-110000-table-on-delete.test.ts +20 -8
  519. package/tests/cases/migrations/2023-09-11-174000-fix-on-delete.test.ts +37 -16
  520. package/tests/cases/migrations/2023-10-19-173000-fix-unique.test.ts +12 -3
  521. package/tests/cases/unit/eventsQuery.test.ts +39 -0
  522. package/tests/src/uuid.ts +4 -0
  523. package/dist/development/src/model/migrations/SchemaVersionBuilder.cjs +0 -37
  524. package/dist/development/src/model/migrations/SchemaVersionBuilder.cjs.map +0 -1
  525. package/dist/development/src/model/migrations/SchemaVersionBuilder.js +0 -37
  526. package/dist/development/src/model/migrations/SchemaVersionBuilder.js.map +0 -1
  527. package/dist/production/src/model/migrations/SchemaVersionBuilder.cjs +0 -37
  528. package/dist/production/src/model/migrations/SchemaVersionBuilder.cjs.map +0 -1
  529. package/dist/production/src/model/migrations/SchemaVersionBuilder.js +0 -37
  530. package/dist/production/src/model/migrations/SchemaVersionBuilder.js.map +0 -1
  531. package/dist/types/model/migrations/SchemaVersionBuilder.d.ts +0 -37
  532. package/dist/types/model/migrations/SchemaVersionBuilder.d.ts.map +0 -1
  533. package/src/model/migrations/SchemaVersionBuilder.ts +0 -43
@@ -1,6 +1,6 @@
1
1
  import { AccessEvaluator, Authorizator } from "@contember/authorization";
2
2
  import { Builder } from "@contember/dic";
3
- import { SchemaMigrator, SchemaDiffer, MigrationDescriber } from "@contember/schema-migrations";
3
+ import { SchemaMigrator, MigrationDescriber } from "@contember/schema-migrations";
4
4
  import "./model/authorization/AuthorizationActions.js";
5
5
  import { PermissionsFactory } from "./model/authorization/PermissionsFactory.js";
6
6
  import { DatabaseMetadataResolver } from "@contember/database";
@@ -10,7 +10,7 @@ import { MigrationsDatabaseMetadataResolverStoreFactory } from "./model/metadata
10
10
  import { ExecutedMigrationsResolver } from "./model/migrations/ExecutedMigrationsResolver.js";
11
11
  import { MigrationAlterer } from "./model/migrations/MigrationAlterer.js";
12
12
  import { ProjectMigrator } from "./model/migrations/ProjectMigrator.js";
13
- import { SchemaVersionBuilder } from "./model/migrations/SchemaVersionBuilder.js";
13
+ import { SchemaProvider } from "./model/migrations/SchemaProvider.js";
14
14
  import "./schema/dev.graphql.js";
15
15
  import "./schema/system.graphql.js";
16
16
  import "@contember/logger";
@@ -24,6 +24,7 @@ import { StagesQueryResolver } from "./resolvers/query/StagesQueryResolver.js";
24
24
  import { SystemResolverContextFactory } from "./resolvers/SystemResolverContext.js";
25
25
  import { ResolverFactory } from "./resolvers/ResolverFactory.js";
26
26
  import { EventOldValuesResolver } from "./resolvers/types/EventOldValuesResolver.js";
27
+ import { SchemaQueryResolver } from "./resolvers/query/SchemaQueryResolver.js";
27
28
  class SystemContainerFactory {
28
29
  constructor(providers, modificationHandlerFactory, contentQueryExecutor) {
29
30
  this.providers = providers;
@@ -35,11 +36,11 @@ class SystemContainerFactory {
35
36
  "systemResolversFactory",
36
37
  "authorizator",
37
38
  "resolverContextFactory",
38
- "schemaVersionBuilder"
39
+ "schemaProvider"
39
40
  );
40
41
  }
41
42
  createBuilder({ identityFetcher }) {
42
- return new Builder({}).addService("providers", () => this.providers).addService("modificationHandlerFactory", () => this.modificationHandlerFactory).addService("identityFetcher", () => identityFetcher).addService("schemaMigrator", ({ modificationHandlerFactory }) => new SchemaMigrator(modificationHandlerFactory)).addService("executedMigrationsResolver", ({}) => new ExecutedMigrationsResolver()).addService("schemaVersionBuilder", ({ executedMigrationsResolver, schemaMigrator }) => new SchemaVersionBuilder(executedMigrationsResolver, schemaMigrator)).addService("accessEvaluator", ({}) => new AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create())).addService("authorizator", ({ accessEvaluator }) => new Authorizator.Default(accessEvaluator)).addService("schemaDiffer", ({ schemaMigrator }) => new SchemaDiffer(schemaMigrator)).addService("migrationDescriber", ({ modificationHandlerFactory }) => new MigrationDescriber(modificationHandlerFactory)).addService("databaseMetadataResolver", () => new DatabaseMetadataResolver()).addService("migrationsDatabaseMetadataResolverStoreFactory", ({ databaseMetadataResolver }) => new MigrationsDatabaseMetadataResolverStoreFactory(databaseMetadataResolver)).addService("projectMigrator", ({ migrationDescriber, schemaVersionBuilder, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory }) => new ProjectMigrator(migrationDescriber, schemaVersionBuilder, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory, this.contentQueryExecutor)).addService("projectTruncateExecutor", () => new ProjectTruncateExecutor()).addService("migrationAlterer", () => new MigrationAlterer()).addService("eventResponseBuilder", ({ identityFetcher: identityFetcher2 }) => new EventResponseBuilder(identityFetcher2)).addService("stagesQueryResolver", () => new StagesQueryResolver()).addService("executedMigrationsQueryResolver", () => new ExecutedMigrationsQueryResolver()).addService("migrateMutationResolver", ({ projectMigrator }) => new MigrateMutationResolver(projectMigrator)).addService("truncateMutationResolver", ({ projectTruncateExecutor }) => new TruncateMutationResolver(projectTruncateExecutor)).addService("migrationAlterMutationResolver", ({ migrationAlterer }) => new MigrationAlterMutationResolver(migrationAlterer)).addService("eventsQueryResolver", ({ eventResponseBuilder }) => new EventsQueryResolver(eventResponseBuilder)).addService("eventOldValuesResolver", () => new EventOldValuesResolver()).addService("systemResolversFactory", ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver }) => new ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver)).addService("resolverContextFactory", ({ authorizator }) => new SystemResolverContextFactory(authorizator));
43
+ return new Builder({}).addService("providers", () => this.providers).addService("modificationHandlerFactory", () => this.modificationHandlerFactory).addService("identityFetcher", () => identityFetcher).addService("schemaMigrator", ({ modificationHandlerFactory }) => new SchemaMigrator(modificationHandlerFactory)).addService("executedMigrationsResolver", ({}) => new ExecutedMigrationsResolver()).addService("schemaProvider", ({ executedMigrationsResolver, schemaMigrator }) => new SchemaProvider(executedMigrationsResolver, schemaMigrator)).addService("accessEvaluator", ({}) => new AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create())).addService("authorizator", ({ accessEvaluator }) => new Authorizator.Default(accessEvaluator)).addService("migrationDescriber", ({ modificationHandlerFactory }) => new MigrationDescriber(modificationHandlerFactory)).addService("databaseMetadataResolver", () => new DatabaseMetadataResolver()).addService("migrationsDatabaseMetadataResolverStoreFactory", ({ databaseMetadataResolver }) => new MigrationsDatabaseMetadataResolverStoreFactory(databaseMetadataResolver)).addService("projectMigrator", ({ migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory }) => new ProjectMigrator(migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory, this.contentQueryExecutor)).addService("projectTruncateExecutor", () => new ProjectTruncateExecutor()).addService("migrationAlterer", ({ schemaProvider }) => new MigrationAlterer(schemaProvider)).addService("eventResponseBuilder", ({ identityFetcher: identityFetcher2 }) => new EventResponseBuilder(identityFetcher2)).addService("stagesQueryResolver", () => new StagesQueryResolver()).addService("executedMigrationsQueryResolver", () => new ExecutedMigrationsQueryResolver()).addService("migrateMutationResolver", ({ projectMigrator }) => new MigrateMutationResolver(projectMigrator)).addService("truncateMutationResolver", ({ projectTruncateExecutor }) => new TruncateMutationResolver(projectTruncateExecutor)).addService("migrationAlterMutationResolver", ({ migrationAlterer }) => new MigrationAlterMutationResolver(migrationAlterer)).addService("eventsQueryResolver", ({ eventResponseBuilder }) => new EventsQueryResolver(eventResponseBuilder)).addService("eventOldValuesResolver", () => new EventOldValuesResolver()).addService("schemaQueryResolver", () => new SchemaQueryResolver()).addService("systemResolversFactory", ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver }) => new ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver)).addService("resolverContextFactory", ({ authorizator }) => new SystemResolverContextFactory(authorizator));
43
44
  }
44
45
  }
45
46
  export {
@@ -1 +1 @@
1
- {"version":3,"file":"SystemContainer.js","sources":["../../../../packages/engine-system-api/src/SystemContainer.ts"],"sourcesContent":["import { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { Builder, Container } from '@contember/dic'\nimport {\n\tMigrationDescriber,\n\tModificationHandlerFactory,\n\tSchemaDiffer,\n\tSchemaMigrator,\n} from '@contember/schema-migrations'\nimport {\n\tContentQueryExecutor,\n\tEventResponseBuilder,\n\tExecutedMigrationsResolver,\n\tIdentityFetcher,\n\tMigrationAlterer,\n\tMigrationsDatabaseMetadataResolverStoreFactory,\n\tPermissionsFactory,\n\tProjectMigrator,\n\tProjectTruncateExecutor,\n\tSchemaVersionBuilder,\n} from './model'\nimport { UuidProvider } from './utils'\nimport {\n\tEventsQueryResolver,\n\tExecutedMigrationsQueryResolver,\n\tMigrateMutationResolver,\n\tMigrationAlterMutationResolver,\n\tResolverFactory,\n\tStagesQueryResolver,\n\tSystemResolverContextFactory,\n\tTruncateMutationResolver,\n} from './resolvers'\nimport { EventOldValuesResolver } from './resolvers/types'\nimport { DatabaseMetadataResolver } from '@contember/database'\n\nexport interface SystemContainer {\n\tsystemResolversFactory: ResolverFactory\n\tauthorizator: Authorizator\n\tresolverContextFactory: SystemResolverContextFactory\n\tschemaVersionBuilder: SchemaVersionBuilder\n}\n\ntype Args = {\n\tidentityFetcher: IdentityFetcher\n}\n\nexport class SystemContainerFactory {\n\tconstructor(\n\t\tprivate readonly providers: UuidProvider,\n\t\tprivate readonly modificationHandlerFactory: ModificationHandlerFactory,\n\t\tprivate readonly contentQueryExecutor: ContentQueryExecutor,\n\t) {\n\t}\n\n\tpublic create(container: Args): Container<SystemContainer> {\n\t\treturn this.createBuilder(container)\n\t\t\t.build()\n\t\t\t.pick(\n\t\t\t\t'systemResolversFactory',\n\t\t\t\t'authorizator',\n\t\t\t\t'resolverContextFactory',\n\t\t\t\t'schemaVersionBuilder',\n\t\t\t)\n\t}\n\tpublic createBuilder({ identityFetcher }: Args) {\n\t\treturn new Builder({})\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('modificationHandlerFactory', () =>\n\t\t\t\tthis.modificationHandlerFactory)\n\t\t\t.addService('identityFetcher', () =>\n\t\t\t\tidentityFetcher)\n\t\t\t.addService('schemaMigrator', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew SchemaMigrator(modificationHandlerFactory))\n\t\t\t.addService('executedMigrationsResolver', ({}) =>\n\t\t\t\tnew ExecutedMigrationsResolver())\n\t\t\t.addService('schemaVersionBuilder', ({ executedMigrationsResolver, schemaMigrator }) =>\n\t\t\t\tnew SchemaVersionBuilder(executedMigrationsResolver, schemaMigrator))\n\t\t\t.addService('accessEvaluator', ({}) =>\n\t\t\t\tnew AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create()))\n\t\t\t.addService('authorizator', ({ accessEvaluator }): Authorizator =>\n\t\t\t\tnew Authorizator.Default(accessEvaluator))\n\t\t\t.addService('schemaDiffer', ({ schemaMigrator }) =>\n\t\t\t\tnew SchemaDiffer(schemaMigrator))\n\t\t\t.addService('migrationDescriber', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew MigrationDescriber(modificationHandlerFactory))\n\t\t\t.addService('databaseMetadataResolver', () =>\n\t\t\t\tnew DatabaseMetadataResolver())\n\t\t\t.addService('migrationsDatabaseMetadataResolverStoreFactory', ({ databaseMetadataResolver }) =>\n\t\t\t\tnew MigrationsDatabaseMetadataResolverStoreFactory(databaseMetadataResolver))\n\t\t\t.addService('projectMigrator', ({ migrationDescriber, schemaVersionBuilder, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory }) =>\n\t\t\t\tnew ProjectMigrator(migrationDescriber, schemaVersionBuilder, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory, this.contentQueryExecutor))\n\t\t\t.addService('projectTruncateExecutor', () =>\n\t\t\t\tnew ProjectTruncateExecutor())\n\t\t\t.addService('migrationAlterer', () =>\n\t\t\t\tnew MigrationAlterer())\n\t\t\t.addService('eventResponseBuilder', ({ identityFetcher }) =>\n\t\t\t\tnew EventResponseBuilder(identityFetcher))\n\t\t\t.addService('stagesQueryResolver', () =>\n\t\t\t\tnew StagesQueryResolver())\n\t\t\t.addService('executedMigrationsQueryResolver', () =>\n\t\t\t\tnew ExecutedMigrationsQueryResolver())\n\t\t\t.addService('migrateMutationResolver', ({ projectMigrator }) =>\n\t\t\t\tnew MigrateMutationResolver(projectMigrator))\n\t\t\t.addService('truncateMutationResolver', ({ projectTruncateExecutor }) =>\n\t\t\t\tnew TruncateMutationResolver(projectTruncateExecutor))\n\t\t\t.addService('migrationAlterMutationResolver', ({ migrationAlterer }) =>\n\t\t\t\tnew MigrationAlterMutationResolver(migrationAlterer))\n\t\t\t.addService('eventsQueryResolver', ({ eventResponseBuilder }) =>\n\t\t\t\tnew EventsQueryResolver(eventResponseBuilder))\n\t\t\t.addService('eventOldValuesResolver', () =>\n\t\t\t\tnew EventOldValuesResolver())\n\t\t\t.addService('systemResolversFactory', ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver }) =>\n\t\t\t\tnew ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver))\n\t\t\t.addService('resolverContextFactory', ({ authorizator }) =>\n\t\t\t\tnew SystemResolverContextFactory(authorizator))\n\t}\n}\n"],"names":["identityFetcher"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AA6CO,MAAM,uBAAuB;AAAA,EACnC,YACkB,WACA,4BACA,sBAChB;AAHgB,SAAA,YAAA;AACA,SAAA,6BAAA;AACA,SAAA,uBAAA;AAAA,EAElB;AAAA,EAEO,OAAO,WAA6C;AAC1D,WAAO,KAAK,cAAc,SAAS,EACjC,MACA,EAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IAAA;AAAA,EAEH;AAAA,EACO,cAAc,EAAE,mBAAyB;AAC/C,WAAO,IAAI,QAAQ,EAAE,EACnB,WAAW,aAAa,MACxB,KAAK,SAAS,EACd,WAAW,8BAA8B,MACzC,KAAK,0BAA0B,EAC/B,WAAW,mBAAmB,MAC9B,eAAe,EACf,WAAW,kBAAkB,CAAC,EAAE,2BAA2B,MAC3D,IAAI,eAAe,0BAA0B,CAAC,EAC9C,WAAW,8BAA8B,CAAC,CAAA,MAC1C,IAAI,4BAA4B,EAChC,WAAW,wBAAwB,CAAC,EAAE,4BAA4B,eAAA,MAClE,IAAI,qBAAqB,4BAA4B,cAAc,CAAC,EACpE,WAAW,mBAAmB,CAAC,OAC/B,IAAI,gBAAgB,oBAAoB,IAAI,mBAAA,EAAqB,OAAA,CAAQ,CAAC,EAC1E,WAAW,gBAAgB,CAAC,EAAE,gBAC9B,MAAA,IAAI,aAAa,QAAQ,eAAe,CAAC,EACzC,WAAW,gBAAgB,CAAC,EAAE,qBAC9B,IAAI,aAAa,cAAc,CAAC,EAChC,WAAW,sBAAsB,CAAC,EAAE,2BAAA,MACpC,IAAI,mBAAmB,0BAA0B,CAAC,EAClD,WAAW,4BAA4B,MACvC,IAAI,yBAA0B,CAAA,EAC9B,WAAW,kDAAkD,CAAC,EAAE,yBAAyB,MACzF,IAAI,+CAA+C,wBAAwB,CAAC,EAC5E,WAAW,mBAAmB,CAAC,EAAE,oBAAoB,sBAAsB,4BAA4B,+CACvG,MAAA,IAAI,gBAAgB,oBAAoB,sBAAsB,4BAA4B,gDAAgD,KAAK,oBAAoB,CAAC,EACpK,WAAW,2BAA2B,MACtC,IAAI,wBAAA,CAAyB,EAC7B,WAAW,oBAAoB,MAC/B,IAAI,iBAAiB,CAAC,EACtB,WAAW,wBAAwB,CAAC,EAAE,iBAAAA,iBAAgB,MACtD,IAAI,qBAAqBA,gBAAe,CAAC,EACzC,WAAW,uBAAuB,MAClC,IAAI,oBAAoB,CAAC,EACzB,WAAW,mCAAmC,MAC9C,IAAI,iCAAiC,EACrC,WAAW,2BAA2B,CAAC,EAAE,sBACzC,IAAI,wBAAwB,eAAe,CAAC,EAC5C,WAAW,4BAA4B,CAAC,EAAE,8BAC1C,IAAI,yBAAyB,uBAAuB,CAAC,EACrD,WAAW,kCAAkC,CAAC,EAAE,uBAChD,IAAI,+BAA+B,gBAAgB,CAAC,EACpD,WAAW,uBAAuB,CAAC,EAAE,2BACrC,IAAI,oBAAoB,oBAAoB,CAAC,EAC7C,WAAW,0BAA0B,MACrC,IAAI,uBAAwB,CAAA,EAC5B,WAAW,0BAA0B,CAAC,EAAE,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,uBAAuB,MAC7N,IAAI,gBAAgB,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,sBAAsB,CAAC,EACzM,WAAW,0BAA0B,CAAC,EAAE,mBACxC,IAAI,6BAA6B,YAAY,CAAC;AAAA,EACjD;AACD;"}
1
+ {"version":3,"file":"SystemContainer.js","sources":["../../../../packages/engine-system-api/src/SystemContainer.ts"],"sourcesContent":["import { AccessEvaluator, Authorizator } from '@contember/authorization'\nimport { Builder, Container } from '@contember/dic'\nimport {\n\tMigrationDescriber,\n\tModificationHandlerFactory,\n\tSchemaDiffer,\n\tSchemaMigrator,\n} from '@contember/schema-migrations'\nimport {\n\tContentQueryExecutor,\n\tEventResponseBuilder,\n\tExecutedMigrationsResolver,\n\tIdentityFetcher,\n\tMigrationAlterer,\n\tMigrationsDatabaseMetadataResolverStoreFactory,\n\tPermissionsFactory,\n\tProjectMigrator,\n\tProjectTruncateExecutor,\n} from './model'\nimport { UuidProvider } from './utils'\nimport {\n\tEventsQueryResolver,\n\tExecutedMigrationsQueryResolver,\n\tMigrateMutationResolver,\n\tMigrationAlterMutationResolver,\n\tResolverFactory,\n\tStagesQueryResolver,\n\tSystemResolverContextFactory,\n\tTruncateMutationResolver,\n} from './resolvers'\nimport { EventOldValuesResolver } from './resolvers/types'\nimport { DatabaseMetadataResolver } from '@contember/database'\nimport { SchemaProvider } from './model'\nimport { SchemaQueryResolver } from './resolvers/query/SchemaQueryResolver'\n\nexport interface SystemContainer {\n\tsystemResolversFactory: ResolverFactory\n\tauthorizator: Authorizator\n\tresolverContextFactory: SystemResolverContextFactory\n\tschemaProvider: SchemaProvider\n}\n\ntype Args = {\n\tidentityFetcher: IdentityFetcher\n}\n\nexport class SystemContainerFactory {\n\tconstructor(\n\t\tprivate readonly providers: UuidProvider,\n\t\tprivate readonly modificationHandlerFactory: ModificationHandlerFactory,\n\t\tprivate readonly contentQueryExecutor: ContentQueryExecutor,\n\t) {\n\t}\n\n\tpublic create(container: Args): Container<SystemContainer> {\n\t\treturn this.createBuilder(container)\n\t\t\t.build()\n\t\t\t.pick(\n\t\t\t\t'systemResolversFactory',\n\t\t\t\t'authorizator',\n\t\t\t\t'resolverContextFactory',\n\t\t\t\t'schemaProvider',\n\t\t\t)\n\t}\n\tpublic createBuilder({ identityFetcher }: Args) {\n\t\treturn new Builder({})\n\t\t\t.addService('providers', () =>\n\t\t\t\tthis.providers)\n\t\t\t.addService('modificationHandlerFactory', () =>\n\t\t\t\tthis.modificationHandlerFactory)\n\t\t\t.addService('identityFetcher', () =>\n\t\t\t\tidentityFetcher)\n\t\t\t.addService('schemaMigrator', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew SchemaMigrator(modificationHandlerFactory))\n\t\t\t.addService('executedMigrationsResolver', ({}) =>\n\t\t\t\tnew ExecutedMigrationsResolver())\n\t\t\t.addService('schemaProvider', ({ executedMigrationsResolver, schemaMigrator }) =>\n\t\t\t\tnew SchemaProvider(executedMigrationsResolver, schemaMigrator))\n\t\t\t.addService('accessEvaluator', ({}) =>\n\t\t\t\tnew AccessEvaluator.PermissionEvaluator(new PermissionsFactory().create()))\n\t\t\t.addService('authorizator', ({ accessEvaluator }): Authorizator =>\n\t\t\t\tnew Authorizator.Default(accessEvaluator))\n\t\t\t.addService('migrationDescriber', ({ modificationHandlerFactory }) =>\n\t\t\t\tnew MigrationDescriber(modificationHandlerFactory))\n\t\t\t.addService('databaseMetadataResolver', () =>\n\t\t\t\tnew DatabaseMetadataResolver())\n\t\t\t.addService('migrationsDatabaseMetadataResolverStoreFactory', ({ databaseMetadataResolver }) =>\n\t\t\t\tnew MigrationsDatabaseMetadataResolverStoreFactory(databaseMetadataResolver))\n\t\t\t.addService('projectMigrator', ({ migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory }) =>\n\t\t\t\tnew ProjectMigrator(migrationDescriber, schemaProvider, executedMigrationsResolver, migrationsDatabaseMetadataResolverStoreFactory, this.contentQueryExecutor))\n\t\t\t.addService('projectTruncateExecutor', () =>\n\t\t\t\tnew ProjectTruncateExecutor())\n\t\t\t.addService('migrationAlterer', ({ schemaProvider }) =>\n\t\t\t\tnew MigrationAlterer(schemaProvider))\n\t\t\t.addService('eventResponseBuilder', ({ identityFetcher }) =>\n\t\t\t\tnew EventResponseBuilder(identityFetcher))\n\t\t\t.addService('stagesQueryResolver', () =>\n\t\t\t\tnew StagesQueryResolver())\n\t\t\t.addService('executedMigrationsQueryResolver', () =>\n\t\t\t\tnew ExecutedMigrationsQueryResolver())\n\t\t\t.addService('migrateMutationResolver', ({ projectMigrator }) =>\n\t\t\t\tnew MigrateMutationResolver(projectMigrator))\n\t\t\t.addService('truncateMutationResolver', ({ projectTruncateExecutor }) =>\n\t\t\t\tnew TruncateMutationResolver(projectTruncateExecutor))\n\t\t\t.addService('migrationAlterMutationResolver', ({ migrationAlterer }) =>\n\t\t\t\tnew MigrationAlterMutationResolver(migrationAlterer))\n\t\t\t.addService('eventsQueryResolver', ({ eventResponseBuilder }) =>\n\t\t\t\tnew EventsQueryResolver(eventResponseBuilder))\n\t\t\t.addService('eventOldValuesResolver', () =>\n\t\t\t\tnew EventOldValuesResolver())\n\t\t\t.addService('schemaQueryResolver', () =>\n\t\t\t\tnew SchemaQueryResolver())\n\t\t\t.addService('systemResolversFactory', ({ stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver }) =>\n\t\t\t\tnew ResolverFactory(stagesQueryResolver, executedMigrationsQueryResolver, migrateMutationResolver, truncateMutationResolver, migrationAlterMutationResolver, eventsQueryResolver, eventOldValuesResolver, schemaQueryResolver))\n\t\t\t.addService('resolverContextFactory', ({ authorizator }) =>\n\t\t\t\tnew SystemResolverContextFactory(authorizator))\n\t}\n}\n"],"names":["identityFetcher"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;AA8CO,MAAM,uBAAuB;AAAA,EACnC,YACkB,WACA,4BACA,sBAChB;AAHgB,SAAA,YAAA;AACA,SAAA,6BAAA;AACA,SAAA,uBAAA;AAAA,EAAA;AAAA,EAIX,OAAO,WAA6C;AAC1D,WAAO,KAAK,cAAc,SAAS,EACjC,MACA,EAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACD;AAAA,EAAA;AAAA,EAEK,cAAc,EAAE,mBAAyB;AAC/C,WAAO,IAAI,QAAQ,EAAE,EACnB,WAAW,aAAa,MACxB,KAAK,SAAS,EACd,WAAW,8BAA8B,MACzC,KAAK,0BAA0B,EAC/B,WAAW,mBAAmB,MAC9B,eAAe,EACf,WAAW,kBAAkB,CAAC,EAAE,2BAA2B,MAC3D,IAAI,eAAe,0BAA0B,CAAC,EAC9C,WAAW,8BAA8B,CAAC,CAAA,MAC1C,IAAI,4BAA4B,EAChC,WAAW,kBAAkB,CAAC,EAAE,4BAA4B,eAAA,MAC5D,IAAI,eAAe,4BAA4B,cAAc,CAAC,EAC9D,WAAW,mBAAmB,CAAC,CAAA,MAC/B,IAAI,gBAAgB,oBAAoB,IAAI,mBAAqB,EAAA,OAAQ,CAAA,CAAC,EAC1E,WAAW,gBAAgB,CAAC,EAAE,sBAC9B,IAAI,aAAa,QAAQ,eAAe,CAAC,EACzC,WAAW,sBAAsB,CAAC,EAAE,2BAA2B,MAC/D,IAAI,mBAAmB,0BAA0B,CAAC,EAClD,WAAW,4BAA4B,MACvC,IAAI,yBAAyB,CAAC,EAC9B,WAAW,kDAAkD,CAAC,EAAE,yBAAA,MAChE,IAAI,+CAA+C,wBAAwB,CAAC,EAC5E,WAAW,mBAAmB,CAAC,EAAE,oBAAoB,gBAAgB,4BAA4B,+CAA+C,MAChJ,IAAI,gBAAgB,oBAAoB,gBAAgB,4BAA4B,gDAAgD,KAAK,oBAAoB,CAAC,EAC9J,WAAW,2BAA2B,MACtC,IAAI,wBAAA,CAAyB,EAC7B,WAAW,oBAAoB,CAAC,EAAE,qBAClC,IAAI,iBAAiB,cAAc,CAAC,EACpC,WAAW,wBAAwB,CAAC,EAAE,iBAAAA,iBAAgB,MACtD,IAAI,qBAAqBA,gBAAe,CAAC,EACzC,WAAW,uBAAuB,MAClC,IAAI,oBAAqB,CAAA,EACzB,WAAW,mCAAmC,MAC9C,IAAI,iCAAiC,EACrC,WAAW,2BAA2B,CAAC,EAAE,gBAAgB,MACzD,IAAI,wBAAwB,eAAe,CAAC,EAC5C,WAAW,4BAA4B,CAAC,EAAE,wBAAwB,MAClE,IAAI,yBAAyB,uBAAuB,CAAC,EACrD,WAAW,kCAAkC,CAAC,EAAE,iBAAiB,MACjE,IAAI,+BAA+B,gBAAgB,CAAC,EACpD,WAAW,uBAAuB,CAAC,EAAE,qBACrC,MAAA,IAAI,oBAAoB,oBAAoB,CAAC,EAC7C,WAAW,0BAA0B,MACrC,IAAI,uBAAwB,CAAA,EAC5B,WAAW,uBAAuB,MAClC,IAAI,oBAAqB,CAAA,EACzB,WAAW,0BAA0B,CAAC,EAAE,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,wBAAwB,0BAC9N,IAAI,gBAAgB,qBAAqB,iCAAiC,yBAAyB,0BAA0B,gCAAgC,qBAAqB,wBAAwB,mBAAmB,CAAC,EAC9N,WAAW,0BAA0B,CAAC,EAAE,aAAa,MACrD,IAAI,6BAA6B,YAAY,CAAC;AAAA,EAAA;AAElD;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2020-03-27-130000-project-migrations.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-03-27-130000-project-migrations.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\nexport default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {\n\tbuilder.createTable(\n\t\t{\n\t\t\tname: 'schema_migration',\n\t\t},\n\t\t{\n\t\t\tid: { notNull: true, type: 'SERIAL4' },\n\t\t\tversion: { notNull: true, type: 'varchar(20)', unique: true },\n\t\t\tname: { notNull: true, type: 'varchar(255)', unique: true },\n\t\t\tmigration: { notNull: true, type: 'json' },\n\t\t\tchecksum: { notNull: true, type: 'char(32)' },\n\t\t\texecuted_at: { notNull: true, type: 'timestamp', default: 'now()' },\n\t\t},\n\t)\n\tbuilder.createIndex({ name: 'schema_migration' }, ['version'], {\n\t\tname: 'system_schema_migration_version',\n\t})\n}\n"],"names":[],"mappings":";AAGA,eAAA,iCAA+B,SAA2B,MAA2B;AAC5E,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,IAAI,EAAE,SAAS,MAAM,MAAM,UAAU;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC5D,MAAM,EAAE,SAAS,MAAM,MAAM,gBAAgB,QAAQ,KAAK;AAAA,MAC1D,WAAW,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,MACzC,UAAU,EAAE,SAAS,MAAM,MAAM,WAAW;AAAA,MAC5C,aAAa,EAAE,SAAS,MAAM,MAAM,aAAa,SAAS,QAAQ;AAAA,IACnE;AAAA,EAAA;AAED,UAAQ,YAAY,EAAE,MAAM,mBAAsB,GAAA,CAAC,SAAS,GAAG;AAAA,IAC9D,MAAM;AAAA,EAAA,CACN;AACF;;"}
1
+ {"version":3,"file":"2020-03-27-130000-project-migrations.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-03-27-130000-project-migrations.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\nexport default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {\n\tbuilder.createTable(\n\t\t{\n\t\t\tname: 'schema_migration',\n\t\t},\n\t\t{\n\t\t\tid: { notNull: true, type: 'SERIAL4' },\n\t\t\tversion: { notNull: true, type: 'varchar(20)', unique: true },\n\t\t\tname: { notNull: true, type: 'varchar(255)', unique: true },\n\t\t\tmigration: { notNull: true, type: 'json' },\n\t\t\tchecksum: { notNull: true, type: 'char(32)' },\n\t\t\texecuted_at: { notNull: true, type: 'timestamp', default: 'now()' },\n\t\t},\n\t)\n\tbuilder.createIndex({ name: 'schema_migration' }, ['version'], {\n\t\tname: 'system_schema_migration_version',\n\t})\n}\n"],"names":[],"mappings":";AAGA,eAAA,iCAA+B,SAA2B,MAA2B;AAC5E,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,IAAI,EAAE,SAAS,MAAM,MAAM,UAAU;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC5D,MAAM,EAAE,SAAS,MAAM,MAAM,gBAAgB,QAAQ,KAAK;AAAA,MAC1D,WAAW,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,MACzC,UAAU,EAAE,SAAS,MAAM,MAAM,WAAW;AAAA,MAC5C,aAAa,EAAE,SAAS,MAAM,MAAM,aAAa,SAAS,QAAQ;AAAA,IAAA;AAAA,EAEpE;AACA,UAAQ,YAAY,EAAE,MAAM,mBAAsB,GAAA,CAAC,SAAS,GAAG;AAAA,IAC9D,MAAM;AAAA,EAAA,CACN;AACF;;"}
@@ -1 +1 @@
1
- {"version":3,"file":"2020-03-27-130000-project-migrations.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-03-27-130000-project-migrations.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\nexport default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {\n\tbuilder.createTable(\n\t\t{\n\t\t\tname: 'schema_migration',\n\t\t},\n\t\t{\n\t\t\tid: { notNull: true, type: 'SERIAL4' },\n\t\t\tversion: { notNull: true, type: 'varchar(20)', unique: true },\n\t\t\tname: { notNull: true, type: 'varchar(255)', unique: true },\n\t\t\tmigration: { notNull: true, type: 'json' },\n\t\t\tchecksum: { notNull: true, type: 'char(32)' },\n\t\t\texecuted_at: { notNull: true, type: 'timestamp', default: 'now()' },\n\t\t},\n\t)\n\tbuilder.createIndex({ name: 'schema_migration' }, ['version'], {\n\t\tname: 'system_schema_migration_version',\n\t})\n}\n"],"names":[],"mappings":"AAGA,eAAA,iCAA+B,SAA2B,MAA2B;AAC5E,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,IAAI,EAAE,SAAS,MAAM,MAAM,UAAU;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC5D,MAAM,EAAE,SAAS,MAAM,MAAM,gBAAgB,QAAQ,KAAK;AAAA,MAC1D,WAAW,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,MACzC,UAAU,EAAE,SAAS,MAAM,MAAM,WAAW;AAAA,MAC5C,aAAa,EAAE,SAAS,MAAM,MAAM,aAAa,SAAS,QAAQ;AAAA,IACnE;AAAA,EAAA;AAED,UAAQ,YAAY,EAAE,MAAM,mBAAsB,GAAA,CAAC,SAAS,GAAG;AAAA,IAC9D,MAAM;AAAA,EAAA,CACN;AACF;"}
1
+ {"version":3,"file":"2020-03-27-130000-project-migrations.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-03-27-130000-project-migrations.ts"],"sourcesContent":["import { MigrationBuilder } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\n\nexport default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {\n\tbuilder.createTable(\n\t\t{\n\t\t\tname: 'schema_migration',\n\t\t},\n\t\t{\n\t\t\tid: { notNull: true, type: 'SERIAL4' },\n\t\t\tversion: { notNull: true, type: 'varchar(20)', unique: true },\n\t\t\tname: { notNull: true, type: 'varchar(255)', unique: true },\n\t\t\tmigration: { notNull: true, type: 'json' },\n\t\t\tchecksum: { notNull: true, type: 'char(32)' },\n\t\t\texecuted_at: { notNull: true, type: 'timestamp', default: 'now()' },\n\t\t},\n\t)\n\tbuilder.createIndex({ name: 'schema_migration' }, ['version'], {\n\t\tname: 'system_schema_migration_version',\n\t})\n}\n"],"names":[],"mappings":"AAGA,eAAA,iCAA+B,SAA2B,MAA2B;AAC5E,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,IAAI,EAAE,SAAS,MAAM,MAAM,UAAU;AAAA,MACrC,SAAS,EAAE,SAAS,MAAM,MAAM,eAAe,QAAQ,KAAK;AAAA,MAC5D,MAAM,EAAE,SAAS,MAAM,MAAM,gBAAgB,QAAQ,KAAK;AAAA,MAC1D,WAAW,EAAE,SAAS,MAAM,MAAM,OAAO;AAAA,MACzC,UAAU,EAAE,SAAS,MAAM,MAAM,WAAW;AAAA,MAC5C,aAAa,EAAE,SAAS,MAAM,MAAM,aAAa,SAAS,QAAQ;AAAA,IAAA;AAAA,EAEpE;AACA,UAAQ,YAAY,EAAE,MAAM,mBAAsB,GAAA,CAAC,SAAS,GAAG;AAAA,IAC9D,MAAM;AAAA,EAAA,CACN;AACF;"}
@@ -10,7 +10,6 @@ require("../schema/dev.graphql.cjs");
10
10
  require("../schema/system.graphql.cjs");
11
11
  require("@contember/schema-utils");
12
12
  require("@contember/logger");
13
- require("../model/migrations/SchemaVersionBuilder.cjs");
14
13
  const createEventTrigger = (builder, tableName, primaryColumns) => {
15
14
  builder.createTrigger(tableName, "log_event", {
16
15
  when: "AFTER",
@@ -64,7 +63,7 @@ const migrateEvents = (builder, tableName, primaryKeys) => {
64
63
  `);
65
64
  };
66
65
  async function _20200506150000composedprimary(builder, args) {
67
- const schema = await args.schemaResolver(args.connection);
66
+ const schema = (await args.schemaResolver(args.connection)).schema;
68
67
  const tablesToMigrate = modelHelpers.getJunctionTables(schema.model);
69
68
  const schemas = args.project.stages.map((it) => `stage_${it.slug}`);
70
69
  for (const table of tablesToMigrate) {
@@ -1 +1 @@
1
- {"version":3,"file":"2020-05-06-150000-composed-primary.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-05-06-150000-composed-primary.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {\n\tbuilder.createTrigger(tableName, 'log_event', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event',\n\t\t},\n\t\tfunctionParams: primaryColumns,\n\t})\n}\n\nconst migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys: [string, string]) => {\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\t\trecent_events(id, type, previous_id, data, created_at, stage) AS (\n\t\t\t\tSELECT event.id, type, previous_id, data, created_at, stage.slug\n\t\t\t\tFROM event\n\t\t\t\tJOIN stage ON stage.event_id = event.id\n\n\t\t\t\tUNION ALL\n\n\t\t\t\tSELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage\n\t\t\t\tFROM event, recent_events\n\t\t\t\tWHERE event.id = recent_events.previous_id\n\t\t\t),\n\t\t\taffected_events AS (\n\t\t\t\tSELECT\n\t\t\t\t\tdelete_event.id AS delete_id,\n\t\t\t\t\tcreate_event.id AS create_id,\n\t\t\t\t\tjson_build_array(\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[0])},\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[1])}\n\t\t\t\t\t) AS id\n\t\t\t\tFROM recent_events AS create_event\n\t\t\t\tLEFT JOIN recent_events AS delete_event\n\t\t\t\t\tON\n\t\t\t\t\t\tdelete_event.data ->> 'rowId' = create_event.data ->> 'rowId'\n\t\t\t\t\t\tAND delete_event.type = 'delete'\n\t\t\t\t\t\tAND delete_event.data ->> 'tableName' = create_event.data ->> 'tableName'\n\t\t\t\tWHERE create_event.type = 'create' AND create_event.data ->> 'tableName' = ${escapeValue(tableName)}\n\t\t\t)\n\t\tUPDATE event\n\t\tSET\n\t\t\tdata = event.data || jsonb_build_object('rowId', affected_events.id)\n\t\tFROM affected_events\n\t\tWHERE\n\t\t event.id = affected_events.create_id\n\t\t OR event.id = affected_events.delete_id\n\t\tRETURNING event.data\n`)\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst tablesToMigrate = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tfor (const table of tablesToMigrate) {\n\t\tconst primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropColumn({ name: table.tableName, schema }, 'id')\n\t\t\tbuilder.dropConstraint(\n\t\t\t\t{ name: table.tableName, schema },\n\t\t\t\ttable.tableName + '_uniq_' + table.joiningColumn.columnName + '_' + table.inverseJoiningColumn.columnName,\n\t\t\t)\n\t\t\tbuilder.addConstraint({ name: table.tableName, schema }, null, {\n\t\t\t\tprimaryKey: [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName],\n\t\t\t})\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: table.tableName, schema }, primaryColumns)\n\t\t}\n\t\tmigrateEvents(builder, table.tableName, primaryColumns)\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')\n\t\t\tcreateEventTrigger(builder, { name: entity.tableName, schema }, [entity.primaryColumn])\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tUPDATE event\n\t\tSET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))\n\t\tWHERE jsonb_typeof(data -> 'rowId') = 'string'\n\t`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n$$\n\nDECLARE\n\tnew_event_id UUID := uuid_generate_v4();\n\tDECLARE new_event_type TEXT;\n\tDECLARE new_event_data JSONB;\n\tDECLARE current_stage RECORD;\n\tDECLARE update_diff JSONB;\n\tDECLARE primary_values JSONB;\n\tDECLARE old_row JSONB;\n\tDECLARE new_row JSONB;\nBEGIN\n\told_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\tprimary_values = (\n\t\tSELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n\t\tFROM jsonb_each(COALESCE(old_row, new_row))\n\t\tWHERE key = ANY (TG_ARGV)\n\t);\n\n\tCASE TG_OP\n\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\tnew_event_type := 'create';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', COALESCE((\n\t\t\t\t SELECT jsonb_object_agg(key, value)\n\t\t\t\t FROM jsonb_each(new_row)\n\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n\t\t\t ), '{}'::JSONB)\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\tupdate_diff := (\n\t\t\t\tSELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n\t\t\t\tFROM jsonb_each(old_row) o\n\t\t\t\t\t\t FULL OUTER JOIN\n\t\t\t\tjsonb_each(new_row) n ON n.key = o.key\n\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t);\n\t\t\tIF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n\t\t\t\tRETURN NULL;\n\t\t\t\tEND IF;\n\t\t\tnew_event_type := 'update';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', update_diff\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\tnew_event_type := 'delete';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values\n\t\t\t\t);\n\t\tEND;\n\t\tELSE RAISE\n\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\tEND CASE;\n\n\tSELECT \"id\", \"event_id\"\n\tFROM \"stage\"\n\tWHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n\t\tFOR NO KEY UPDATE\n\tINTO current_stage;\n\n\tINSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n\tVALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);\n\n\tUPDATE \"stage\"\n\tSET \"event_id\" = new_event_id\n\tWHERE \"id\" = current_stage.id;\n\n\tRETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql;\n`)\n\tbuilder.dropFunction(\n\t\t{\n\t\t\tname: 'make_diff',\n\t\t},\n\t\t[\n\t\t\t{ name: 'old', type: 'jsonb' },\n\t\t\t{ name: 'new', type: 'jsonb' },\n\t\t],\n\t)\n}\n"],"names":["escapeValue","getJunctionTables","schema"],"mappings":"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"}
1
+ {"version":3,"file":"2020-05-06-150000-composed-primary.cjs","sources":["../../../../../packages/engine-system-api/src/migrations/2020-05-06-150000-composed-primary.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {\n\tbuilder.createTrigger(tableName, 'log_event', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event',\n\t\t},\n\t\tfunctionParams: primaryColumns,\n\t})\n}\n\nconst migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys: [string, string]) => {\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\t\trecent_events(id, type, previous_id, data, created_at, stage) AS (\n\t\t\t\tSELECT event.id, type, previous_id, data, created_at, stage.slug\n\t\t\t\tFROM event\n\t\t\t\tJOIN stage ON stage.event_id = event.id\n\n\t\t\t\tUNION ALL\n\n\t\t\t\tSELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage\n\t\t\t\tFROM event, recent_events\n\t\t\t\tWHERE event.id = recent_events.previous_id\n\t\t\t),\n\t\t\taffected_events AS (\n\t\t\t\tSELECT\n\t\t\t\t\tdelete_event.id AS delete_id,\n\t\t\t\t\tcreate_event.id AS create_id,\n\t\t\t\t\tjson_build_array(\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[0])},\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[1])}\n\t\t\t\t\t) AS id\n\t\t\t\tFROM recent_events AS create_event\n\t\t\t\tLEFT JOIN recent_events AS delete_event\n\t\t\t\t\tON\n\t\t\t\t\t\tdelete_event.data ->> 'rowId' = create_event.data ->> 'rowId'\n\t\t\t\t\t\tAND delete_event.type = 'delete'\n\t\t\t\t\t\tAND delete_event.data ->> 'tableName' = create_event.data ->> 'tableName'\n\t\t\t\tWHERE create_event.type = 'create' AND create_event.data ->> 'tableName' = ${escapeValue(tableName)}\n\t\t\t)\n\t\tUPDATE event\n\t\tSET\n\t\t\tdata = event.data || jsonb_build_object('rowId', affected_events.id)\n\t\tFROM affected_events\n\t\tWHERE\n\t\t event.id = affected_events.create_id\n\t\t OR event.id = affected_events.delete_id\n\t\tRETURNING event.data\n`)\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst tablesToMigrate = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tfor (const table of tablesToMigrate) {\n\t\tconst primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropColumn({ name: table.tableName, schema }, 'id')\n\t\t\tbuilder.dropConstraint(\n\t\t\t\t{ name: table.tableName, schema },\n\t\t\t\ttable.tableName + '_uniq_' + table.joiningColumn.columnName + '_' + table.inverseJoiningColumn.columnName,\n\t\t\t)\n\t\t\tbuilder.addConstraint({ name: table.tableName, schema }, null, {\n\t\t\t\tprimaryKey: [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName],\n\t\t\t})\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: table.tableName, schema }, primaryColumns)\n\t\t}\n\t\tmigrateEvents(builder, table.tableName, primaryColumns)\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')\n\t\t\tcreateEventTrigger(builder, { name: entity.tableName, schema }, [entity.primaryColumn])\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tUPDATE event\n\t\tSET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))\n\t\tWHERE jsonb_typeof(data -> 'rowId') = 'string'\n\t`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n$$\n\nDECLARE\n\tnew_event_id UUID := uuid_generate_v4();\n\tDECLARE new_event_type TEXT;\n\tDECLARE new_event_data JSONB;\n\tDECLARE current_stage RECORD;\n\tDECLARE update_diff JSONB;\n\tDECLARE primary_values JSONB;\n\tDECLARE old_row JSONB;\n\tDECLARE new_row JSONB;\nBEGIN\n\told_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\tprimary_values = (\n\t\tSELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n\t\tFROM jsonb_each(COALESCE(old_row, new_row))\n\t\tWHERE key = ANY (TG_ARGV)\n\t);\n\n\tCASE TG_OP\n\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\tnew_event_type := 'create';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', COALESCE((\n\t\t\t\t SELECT jsonb_object_agg(key, value)\n\t\t\t\t FROM jsonb_each(new_row)\n\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n\t\t\t ), '{}'::JSONB)\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\tupdate_diff := (\n\t\t\t\tSELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n\t\t\t\tFROM jsonb_each(old_row) o\n\t\t\t\t\t\t FULL OUTER JOIN\n\t\t\t\tjsonb_each(new_row) n ON n.key = o.key\n\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t);\n\t\t\tIF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n\t\t\t\tRETURN NULL;\n\t\t\t\tEND IF;\n\t\t\tnew_event_type := 'update';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', update_diff\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\tnew_event_type := 'delete';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values\n\t\t\t\t);\n\t\tEND;\n\t\tELSE RAISE\n\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\tEND CASE;\n\n\tSELECT \"id\", \"event_id\"\n\tFROM \"stage\"\n\tWHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n\t\tFOR NO KEY UPDATE\n\tINTO current_stage;\n\n\tINSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n\tVALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);\n\n\tUPDATE \"stage\"\n\tSET \"event_id\" = new_event_id\n\tWHERE \"id\" = current_stage.id;\n\n\tRETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql;\n`)\n\tbuilder.dropFunction(\n\t\t{\n\t\t\tname: 'make_diff',\n\t\t},\n\t\t[\n\t\t\t{ name: 'old', type: 'jsonb' },\n\t\t\t{ name: 'new', type: 'jsonb' },\n\t\t],\n\t)\n}\n"],"names":["escapeValue","getJunctionTables","schema"],"mappings":"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"}
@@ -9,7 +9,6 @@ import "../schema/dev.graphql.js";
9
9
  import "../schema/system.graphql.js";
10
10
  import "@contember/schema-utils";
11
11
  import "@contember/logger";
12
- import "../model/migrations/SchemaVersionBuilder.js";
13
12
  const createEventTrigger = (builder, tableName, primaryColumns) => {
14
13
  builder.createTrigger(tableName, "log_event", {
15
14
  when: "AFTER",
@@ -63,7 +62,7 @@ const migrateEvents = (builder, tableName, primaryKeys) => {
63
62
  `);
64
63
  };
65
64
  async function _20200506150000composedprimary(builder, args) {
66
- const schema = await args.schemaResolver(args.connection);
65
+ const schema = (await args.schemaResolver(args.connection)).schema;
67
66
  const tablesToMigrate = getJunctionTables(schema.model);
68
67
  const schemas = args.project.stages.map((it) => `stage_${it.slug}`);
69
68
  for (const table of tablesToMigrate) {
@@ -1 +1 @@
1
- {"version":3,"file":"2020-05-06-150000-composed-primary.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-05-06-150000-composed-primary.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {\n\tbuilder.createTrigger(tableName, 'log_event', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event',\n\t\t},\n\t\tfunctionParams: primaryColumns,\n\t})\n}\n\nconst migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys: [string, string]) => {\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\t\trecent_events(id, type, previous_id, data, created_at, stage) AS (\n\t\t\t\tSELECT event.id, type, previous_id, data, created_at, stage.slug\n\t\t\t\tFROM event\n\t\t\t\tJOIN stage ON stage.event_id = event.id\n\n\t\t\t\tUNION ALL\n\n\t\t\t\tSELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage\n\t\t\t\tFROM event, recent_events\n\t\t\t\tWHERE event.id = recent_events.previous_id\n\t\t\t),\n\t\t\taffected_events AS (\n\t\t\t\tSELECT\n\t\t\t\t\tdelete_event.id AS delete_id,\n\t\t\t\t\tcreate_event.id AS create_id,\n\t\t\t\t\tjson_build_array(\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[0])},\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[1])}\n\t\t\t\t\t) AS id\n\t\t\t\tFROM recent_events AS create_event\n\t\t\t\tLEFT JOIN recent_events AS delete_event\n\t\t\t\t\tON\n\t\t\t\t\t\tdelete_event.data ->> 'rowId' = create_event.data ->> 'rowId'\n\t\t\t\t\t\tAND delete_event.type = 'delete'\n\t\t\t\t\t\tAND delete_event.data ->> 'tableName' = create_event.data ->> 'tableName'\n\t\t\t\tWHERE create_event.type = 'create' AND create_event.data ->> 'tableName' = ${escapeValue(tableName)}\n\t\t\t)\n\t\tUPDATE event\n\t\tSET\n\t\t\tdata = event.data || jsonb_build_object('rowId', affected_events.id)\n\t\tFROM affected_events\n\t\tWHERE\n\t\t event.id = affected_events.create_id\n\t\t OR event.id = affected_events.delete_id\n\t\tRETURNING event.data\n`)\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = await args.schemaResolver(args.connection)\n\tconst tablesToMigrate = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tfor (const table of tablesToMigrate) {\n\t\tconst primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropColumn({ name: table.tableName, schema }, 'id')\n\t\t\tbuilder.dropConstraint(\n\t\t\t\t{ name: table.tableName, schema },\n\t\t\t\ttable.tableName + '_uniq_' + table.joiningColumn.columnName + '_' + table.inverseJoiningColumn.columnName,\n\t\t\t)\n\t\t\tbuilder.addConstraint({ name: table.tableName, schema }, null, {\n\t\t\t\tprimaryKey: [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName],\n\t\t\t})\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: table.tableName, schema }, primaryColumns)\n\t\t}\n\t\tmigrateEvents(builder, table.tableName, primaryColumns)\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')\n\t\t\tcreateEventTrigger(builder, { name: entity.tableName, schema }, [entity.primaryColumn])\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tUPDATE event\n\t\tSET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))\n\t\tWHERE jsonb_typeof(data -> 'rowId') = 'string'\n\t`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n$$\n\nDECLARE\n\tnew_event_id UUID := uuid_generate_v4();\n\tDECLARE new_event_type TEXT;\n\tDECLARE new_event_data JSONB;\n\tDECLARE current_stage RECORD;\n\tDECLARE update_diff JSONB;\n\tDECLARE primary_values JSONB;\n\tDECLARE old_row JSONB;\n\tDECLARE new_row JSONB;\nBEGIN\n\told_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\tprimary_values = (\n\t\tSELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n\t\tFROM jsonb_each(COALESCE(old_row, new_row))\n\t\tWHERE key = ANY (TG_ARGV)\n\t);\n\n\tCASE TG_OP\n\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\tnew_event_type := 'create';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', COALESCE((\n\t\t\t\t SELECT jsonb_object_agg(key, value)\n\t\t\t\t FROM jsonb_each(new_row)\n\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n\t\t\t ), '{}'::JSONB)\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\tupdate_diff := (\n\t\t\t\tSELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n\t\t\t\tFROM jsonb_each(old_row) o\n\t\t\t\t\t\t FULL OUTER JOIN\n\t\t\t\tjsonb_each(new_row) n ON n.key = o.key\n\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t);\n\t\t\tIF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n\t\t\t\tRETURN NULL;\n\t\t\t\tEND IF;\n\t\t\tnew_event_type := 'update';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', update_diff\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\tnew_event_type := 'delete';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values\n\t\t\t\t);\n\t\tEND;\n\t\tELSE RAISE\n\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\tEND CASE;\n\n\tSELECT \"id\", \"event_id\"\n\tFROM \"stage\"\n\tWHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n\t\tFOR NO KEY UPDATE\n\tINTO current_stage;\n\n\tINSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n\tVALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);\n\n\tUPDATE \"stage\"\n\tSET \"event_id\" = new_event_id\n\tWHERE \"id\" = current_stage.id;\n\n\tRETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql;\n`)\n\tbuilder.dropFunction(\n\t\t{\n\t\t\tname: 'make_diff',\n\t\t},\n\t\t[\n\t\t\t{ name: 'old', type: 'jsonb' },\n\t\t\t{ name: 'new', type: 'jsonb' },\n\t\t],\n\t)\n}\n"],"names":["schema"],"mappings":";;;;;;;;;;;;AAKA,MAAM,qBAAqB,CAAC,SAA2B,WAAiB,mBAA6B;AAC5F,UAAA,cAAc,WAAW,aAAa;AAAA,IAC7C,MAAM;AAAA,IACN,WAAW,CAAC,UAAU,UAAU,QAAQ;AAAA,IACxC,OAAO;AAAA,IACP,UAAU;AAAA,MACT,QAAQ;AAAA,MACR,MAAM;AAAA,IACP;AAAA,IACA,gBAAgB;AAAA,EAAA,CAChB;AACF;AAEA,MAAM,gBAAgB,CAAC,SAA2B,WAAmB,gBAAkC;AACtG,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0CAkB6B,YAAY,YAAY,CAAC,CAAC,CAAC;AAAA,0CAC3B,YAAY,YAAY,CAAC,CAAC,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iFAQY,YAAY,SAAS,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAUtG;AACD;AAEA,eAAA,+BAA+B,SAA2B,MAA0C;AACnG,QAAM,SAAS,MAAM,KAAK,eAAe,KAAK,UAAU;AAClD,QAAA,kBAAkB,kBAAkB,OAAO,KAAK;AAChD,QAAA,UAAU,KAAK,QAAQ,OAAO,IAAI,CAAM,OAAA,SAAS,GAAG,IAAI,EAAE;AAChE,aAAW,SAAS,iBAAiB;AACpC,UAAM,iBAAmC,CAAC,MAAM,cAAc,YAAY,MAAM,qBAAqB,UAAU;AAC/G,eAAWA,WAAU,SAAS;AACrB,cAAA,WAAW,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,IAAI;AAClD,cAAA;AAAA,QACP,EAAE,MAAM,MAAM,WAAW,QAAAA,QAAO;AAAA,QAChC,MAAM,YAAY,WAAW,MAAM,cAAc,aAAa,MAAM,MAAM,qBAAqB;AAAA,MAAA;AAExF,cAAA,cAAc,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,MAAM;AAAA,QAC9D,YAAY,CAAC,MAAM,cAAc,YAAY,MAAM,qBAAqB,UAAU;AAAA,MAAA,CAClF;AACO,cAAA,YAAY,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,WAAW;AAC/C,yBAAA,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,WAAU,cAAc;AAAA,IAC9E;AACc,kBAAA,SAAS,MAAM,WAAW,cAAc;AAAA,EACvD;AACA,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AACrB,cAAA,YAAY,EAAE,MAAM,OAAO,WAAW,QAAAA,WAAU,WAAW;AAChD,yBAAA,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,WAAU,CAAC,OAAO,aAAa,CAAC;AAAA,IACvF;AAAA,EACD;AACA,UAAQ,IAAI;AAAA;AAAA;AAAA;AAAA,EAIX;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;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,CAgFZ;AACQ,UAAA;AAAA,IACP;AAAA,MACC,MAAM;AAAA,IACP;AAAA,IACA;AAAA,MACC,EAAE,MAAM,OAAO,MAAM,QAAQ;AAAA,MAC7B,EAAE,MAAM,OAAO,MAAM,QAAQ;AAAA,IAC9B;AAAA,EAAA;AAEF;"}
1
+ {"version":3,"file":"2020-05-06-150000-composed-primary.js","sources":["../../../../../packages/engine-system-api/src/migrations/2020-05-06-150000-composed-primary.ts"],"sourcesContent":["import { escapeValue, MigrationBuilder, Name } from '@contember/database-migrations'\nimport { SystemMigrationArgs } from './types'\nimport { getJunctionTables } from '../model'\nimport { MigrationArgs } from '@contember/database-migrations'\n\nconst createEventTrigger = (builder: MigrationBuilder, tableName: Name, primaryColumns: string[]) => {\n\tbuilder.createTrigger(tableName, 'log_event', {\n\t\twhen: 'AFTER',\n\t\toperation: ['INSERT', 'UPDATE', 'DELETE'],\n\t\tlevel: 'ROW',\n\t\tfunction: {\n\t\t\tschema: 'system',\n\t\t\tname: 'trigger_event',\n\t\t},\n\t\tfunctionParams: primaryColumns,\n\t})\n}\n\nconst migrateEvents = (builder: MigrationBuilder, tableName: string, primaryKeys: [string, string]) => {\n\tbuilder.sql(`\n\t\tWITH RECURSIVE\n\t\t\trecent_events(id, type, previous_id, data, created_at, stage) AS (\n\t\t\t\tSELECT event.id, type, previous_id, data, created_at, stage.slug\n\t\t\t\tFROM event\n\t\t\t\tJOIN stage ON stage.event_id = event.id\n\n\t\t\t\tUNION ALL\n\n\t\t\t\tSELECT event.id, event.type, event.previous_id, event.data, event.created_at, recent_events.stage\n\t\t\t\tFROM event, recent_events\n\t\t\t\tWHERE event.id = recent_events.previous_id\n\t\t\t),\n\t\t\taffected_events AS (\n\t\t\t\tSELECT\n\t\t\t\t\tdelete_event.id AS delete_id,\n\t\t\t\t\tcreate_event.id AS create_id,\n\t\t\t\t\tjson_build_array(\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[0])},\n\t\t\t\t\t\tcreate_event.data -> 'values' ->> ${escapeValue(primaryKeys[1])}\n\t\t\t\t\t) AS id\n\t\t\t\tFROM recent_events AS create_event\n\t\t\t\tLEFT JOIN recent_events AS delete_event\n\t\t\t\t\tON\n\t\t\t\t\t\tdelete_event.data ->> 'rowId' = create_event.data ->> 'rowId'\n\t\t\t\t\t\tAND delete_event.type = 'delete'\n\t\t\t\t\t\tAND delete_event.data ->> 'tableName' = create_event.data ->> 'tableName'\n\t\t\t\tWHERE create_event.type = 'create' AND create_event.data ->> 'tableName' = ${escapeValue(tableName)}\n\t\t\t)\n\t\tUPDATE event\n\t\tSET\n\t\t\tdata = event.data || jsonb_build_object('rowId', affected_events.id)\n\t\tFROM affected_events\n\t\tWHERE\n\t\t event.id = affected_events.create_id\n\t\t OR event.id = affected_events.delete_id\n\t\tRETURNING event.data\n`)\n}\n\nexport default async function (builder: MigrationBuilder, args: MigrationArgs<SystemMigrationArgs>) {\n\tconst schema = (await args.schemaResolver(args.connection)).schema\n\tconst tablesToMigrate = getJunctionTables(schema.model)\n\tconst schemas = args.project.stages.map(it => `stage_${it.slug}`)\n\tfor (const table of tablesToMigrate) {\n\t\tconst primaryColumns: [string, string] = [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName]\n\t\tfor (const schema of schemas) {\n\t\t\tbuilder.dropColumn({ name: table.tableName, schema }, 'id')\n\t\t\tbuilder.dropConstraint(\n\t\t\t\t{ name: table.tableName, schema },\n\t\t\t\ttable.tableName + '_uniq_' + table.joiningColumn.columnName + '_' + table.inverseJoiningColumn.columnName,\n\t\t\t)\n\t\t\tbuilder.addConstraint({ name: table.tableName, schema }, null, {\n\t\t\t\tprimaryKey: [table.joiningColumn.columnName, table.inverseJoiningColumn.columnName],\n\t\t\t})\n\t\t\tbuilder.dropTrigger({ name: table.tableName, schema }, 'log_event')\n\t\t\tcreateEventTrigger(builder, { name: table.tableName, schema }, primaryColumns)\n\t\t}\n\t\tmigrateEvents(builder, table.tableName, primaryColumns)\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')\n\t\t\tcreateEventTrigger(builder, { name: entity.tableName, schema }, [entity.primaryColumn])\n\t\t}\n\t}\n\tbuilder.sql(`\n\t\tUPDATE event\n\t\tSET data = data || jsonb_build_object('rowId', json_build_array(data ->> 'rowId'))\n\t\tWHERE jsonb_typeof(data -> 'rowId') = 'string'\n\t`)\n\tbuilder.sql(`CREATE OR REPLACE FUNCTION \"trigger_event\"() RETURNS TRIGGER AS\n$$\n\nDECLARE\n\tnew_event_id UUID := uuid_generate_v4();\n\tDECLARE new_event_type TEXT;\n\tDECLARE new_event_data JSONB;\n\tDECLARE current_stage RECORD;\n\tDECLARE update_diff JSONB;\n\tDECLARE primary_values JSONB;\n\tDECLARE old_row JSONB;\n\tDECLARE new_row JSONB;\nBEGIN\n\told_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\tprimary_values = (\n\t\tSELECT jsonb_agg(value ORDER BY array_position(TG_ARGV, key))\n\t\tFROM jsonb_each(COALESCE(old_row, new_row))\n\t\tWHERE key = ANY (TG_ARGV)\n\t);\n\n\tCASE TG_OP\n\t\tWHEN 'INSERT' THEN BEGIN\n\t\t\tnew_event_type := 'create';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', COALESCE((\n\t\t\t\t SELECT jsonb_object_agg(key, value)\n\t\t\t\t FROM jsonb_each(new_row)\n\t\t\t\t WHERE NOT (key = ANY (TG_ARGV))\n\t\t\t ), '{}'::JSONB)\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'UPDATE' THEN BEGIN\n\t\t\tupdate_diff := (\n\t\t\t\tSELECT jsonb_object_agg(coalesce(n.key, o.key), n.value)\n\t\t\t\tFROM jsonb_each(old_row) o\n\t\t\t\t\t\t FULL OUTER JOIN\n\t\t\t\tjsonb_each(new_row) n ON n.key = o.key\n\t\t\t\tWHERE n.value IS DISTINCT FROM o.value\n\t\t\t);\n\t\t\tIF (SELECT count(*) FROM jsonb_object_keys(update_diff)) = 0 THEN\n\t\t\t\tRETURN NULL;\n\t\t\t\tEND IF;\n\t\t\tnew_event_type := 'update';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values,\n\t\t\t 'values', update_diff\n\t\t\t\t);\n\t\tEND;\n\t\tWHEN 'DELETE' THEN BEGIN\n\t\t\tnew_event_type := 'delete';\n\t\t\tnew_event_data := jsonb_build_object(\n\t\t\t 'tableName', TG_TABLE_NAME,\n\t\t\t 'rowId', primary_values\n\t\t\t\t);\n\t\tEND;\n\t\tELSE RAISE\n\t\t\tEXCEPTION 'Unknown TG_OP value %', TG_OP;\n\t\tEND CASE;\n\n\tSELECT \"id\", \"event_id\"\n\tFROM \"stage\"\n\tWHERE \"slug\" = right(TG_TABLE_SCHEMA, -length('stage_'))\n\t\tFOR NO KEY UPDATE\n\tINTO current_stage;\n\n\tINSERT INTO \"event\" (\"id\", \"type\", \"data\", \"previous_id\")\n\tVALUES (new_event_id, new_event_type, new_event_data, current_stage.event_id);\n\n\tUPDATE \"stage\"\n\tSET \"event_id\" = new_event_id\n\tWHERE \"id\" = current_stage.id;\n\n\tRETURN NULL;\nEND;\n\n$$ LANGUAGE plpgsql;\n`)\n\tbuilder.dropFunction(\n\t\t{\n\t\t\tname: 'make_diff',\n\t\t},\n\t\t[\n\t\t\t{ name: 'old', type: 'jsonb' },\n\t\t\t{ name: 'new', type: 'jsonb' },\n\t\t],\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 createEventStatementTrigger = (builder, tableName) => {
14
13
  builder.createTrigger(tableName, "log_event_statement", {
15
14
  when: "AFTER",
@@ -22,7 +21,7 @@ const createEventStatementTrigger = (builder, tableName) => {
22
21
  });
23
22
  };
24
23
  async function _20200601103000eventtriggerperf(builder, args) {
25
- const schema = await args.schemaResolver(args.connection);
24
+ const schema = (await args.schemaResolver(args.connection)).schema;
26
25
  const junctionTables = modelHelpers.getJunctionTables(schema.model);
27
26
  const schemas = args.project.stages.map((it) => `stage_${it.slug}`);
28
27
  builder.sql(`CREATE OR REPLACE FUNCTION "trigger_event"() RETURNS TRIGGER AS $$
@@ -1 +1 @@
1
- {"version":3,"file":"2020-06-01-103000-event-trigger-perf.cjs","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":["getJunctionTables","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,iBAAiBA,aAAAA,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,eAAWC,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.cjs","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":["getJunctionTables","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,IAAA;AAAA,EACP,CACA;AACF;AAEA,eAAA,gCAA+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;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,eAAWC,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,MAAM,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EACvE;AAED,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EACxE;AAEF;;"}
@@ -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 createEventStatementTrigger = (builder, tableName) => {
13
12
  builder.createTrigger(tableName, "log_event_statement", {
14
13
  when: "AFTER",
@@ -21,7 +20,7 @@ const createEventStatementTrigger = (builder, tableName) => {
21
20
  });
22
21
  };
23
22
  async function _20200601103000eventtriggerperf(builder, args) {
24
- const schema = await args.schemaResolver(args.connection);
23
+ const schema = (await args.schemaResolver(args.connection)).schema;
25
24
  const junctionTables = getJunctionTables(schema.model);
26
25
  const schemas = args.project.stages.map((it) => `stage_${it.slug}`);
27
26
  builder.sql(`CREATE OR REPLACE FUNCTION "trigger_event"() RETURNS TRIGGER AS $$
@@ -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,IAAA;AAAA,EACP,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,IAAA;AAAA,EACvE;AAED,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,kCAA4B,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EACxE;AAEF;"}
@@ -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":"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"}
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,IAAA;AAAA,EACP,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,IAAA;AAAA,EAC3D;AAED,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EAC5D;AAEF;;"}
@@ -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,IAAA;AAAA,EACP,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,IAAA;AAAA,EAC3D;AAED,aAAW,UAAU,OAAO,OAAO,OAAO,MAAM,QAAQ,GAAG;AAC1D,eAAWA,WAAU,SAAS;AAC7B,sBAAgB,SAAS,EAAE,MAAM,OAAO,WAAW,QAAAA,SAAQ;AAAA,IAAA;AAAA,EAC5D;AAEF;"}
@@ -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)) {