@contember/engine-system-api 1.1.0-alpha.2 → 1.1.0-alpha.5

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 (225) hide show
  1. package/dist/src/SystemContainer.d.ts +16 -21
  2. package/dist/src/SystemContainer.d.ts.map +1 -1
  3. package/dist/src/SystemContainer.js +14 -9
  4. package/dist/src/SystemContainer.js.map +1 -1
  5. package/dist/src/index.d.ts +1 -1
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js.map +1 -1
  8. package/dist/src/migrations/2020-03-27-130000-project-migrations.d.ts +4 -0
  9. package/dist/src/migrations/2020-03-27-130000-project-migrations.d.ts.map +1 -0
  10. package/{migrations → dist/src/migrations}/2020-03-27-130000-project-migrations.js +2 -2
  11. package/dist/src/migrations/2020-03-27-130000-project-migrations.js.map +1 -0
  12. package/dist/src/migrations/2020-05-06-150000-composed-primary.d.ts +4 -0
  13. package/dist/src/migrations/2020-05-06-150000-composed-primary.d.ts.map +1 -0
  14. package/{migrations → dist/src/migrations}/2020-05-06-150000-composed-primary.js +13 -13
  15. package/dist/src/migrations/2020-05-06-150000-composed-primary.js.map +1 -0
  16. package/dist/src/migrations/2020-06-01-103000-event-trigger-perf.d.ts +4 -0
  17. package/dist/src/migrations/2020-06-01-103000-event-trigger-perf.d.ts.map +1 -0
  18. package/{migrations → dist/src/migrations}/2020-06-01-103000-event-trigger-perf.js +9 -8
  19. package/dist/src/migrations/2020-06-01-103000-event-trigger-perf.js.map +1 -0
  20. package/dist/src/migrations/2021-05-07-155800-event-log-rework.d.ts +4 -0
  21. package/dist/src/migrations/2021-05-07-155800-event-log-rework.d.ts.map +1 -0
  22. package/{migrations → dist/src/migrations}/2021-05-07-155800-event-log-rework.js +34 -33
  23. package/dist/src/migrations/2021-05-07-155800-event-log-rework.js.map +1 -0
  24. package/dist/src/migrations/2021-05-19-1232000-event-log-fix-constraint.d.ts +4 -0
  25. package/dist/src/migrations/2021-05-19-1232000-event-log-fix-constraint.d.ts.map +1 -0
  26. package/{migrations → dist/src/migrations}/2021-05-19-1232000-event-log-fix-constraint.js +4 -3
  27. package/dist/src/migrations/2021-05-19-1232000-event-log-fix-constraint.js.map +1 -0
  28. package/dist/src/migrations/index.d.ts +3 -0
  29. package/dist/src/migrations/index.d.ts.map +1 -0
  30. package/dist/src/{model/dependencies/content → migrations}/index.js +2 -1
  31. package/dist/src/migrations/index.js.map +1 -0
  32. package/dist/src/migrations/runner.d.ts +3 -0
  33. package/dist/src/migrations/runner.d.ts.map +1 -0
  34. package/{migrations/index.js → dist/src/migrations/runner.js} +5 -3
  35. package/dist/src/migrations/runner.js.map +1 -0
  36. package/dist/src/migrations/types.d.ts +7 -0
  37. package/dist/src/migrations/types.d.ts.map +1 -0
  38. package/dist/src/{migrations.js → migrations/types.js} +1 -1
  39. package/dist/src/migrations/types.js.map +1 -0
  40. package/dist/src/model/ProjectInitializer.d.ts.map +1 -1
  41. package/dist/src/model/ProjectInitializer.js +11 -13
  42. package/dist/src/model/ProjectInitializer.js.map +1 -1
  43. package/dist/src/model/ProjectTruncateExecutor.d.ts.map +1 -1
  44. package/dist/src/model/ProjectTruncateExecutor.js +4 -3
  45. package/dist/src/model/ProjectTruncateExecutor.js.map +1 -1
  46. package/dist/src/model/commands/stages/CreateStageCommand.d.ts +8 -0
  47. package/dist/src/model/commands/stages/CreateStageCommand.d.ts.map +1 -0
  48. package/dist/src/model/commands/stages/{CreateOrUpdateStageCommand.js → CreateStageCommand.js} +9 -10
  49. package/dist/src/model/commands/stages/CreateStageCommand.js.map +1 -0
  50. package/dist/src/model/commands/stages/index.d.ts +1 -1
  51. package/dist/src/model/commands/stages/index.d.ts.map +1 -1
  52. package/dist/src/model/commands/stages/index.js +1 -1
  53. package/dist/src/model/commands/stages/index.js.map +1 -1
  54. package/dist/src/model/database/DatabaseContext.d.ts +1 -1
  55. package/dist/src/model/database/DatabaseContext.d.ts.map +1 -1
  56. package/dist/src/model/database/DatabaseContext.js +4 -8
  57. package/dist/src/model/database/DatabaseContext.js.map +1 -1
  58. package/dist/src/model/dependencies/index.d.ts +0 -1
  59. package/dist/src/model/dependencies/index.d.ts.map +1 -1
  60. package/dist/src/model/dependencies/index.js +0 -1
  61. package/dist/src/model/dependencies/index.js.map +1 -1
  62. package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts +1 -2
  63. package/dist/src/model/dependencies/tenant/IdentityFetcher.d.ts.map +1 -1
  64. package/dist/src/model/dtos/Stage.d.ts +2 -4
  65. package/dist/src/model/dtos/Stage.d.ts.map +1 -1
  66. package/dist/src/model/events/EventResponseBuilder.d.ts +1 -2
  67. package/dist/src/model/events/EventResponseBuilder.d.ts.map +1 -1
  68. package/dist/src/model/events/EventResponseBuilder.js +2 -2
  69. package/dist/src/model/events/EventResponseBuilder.js.map +1 -1
  70. package/dist/src/model/migrations/ProjectMigrator.d.ts +2 -2
  71. package/dist/src/model/migrations/ProjectMigrator.d.ts.map +1 -1
  72. package/dist/src/model/migrations/ProjectMigrator.js +6 -7
  73. package/dist/src/model/migrations/ProjectMigrator.js.map +1 -1
  74. package/dist/src/model/migrations/index.d.ts +0 -1
  75. package/dist/src/model/migrations/index.d.ts.map +1 -1
  76. package/dist/src/model/migrations/index.js +0 -1
  77. package/dist/src/model/migrations/index.js.map +1 -1
  78. package/dist/src/model/queries/stages/StageBySlugQuery.d.ts +2 -2
  79. package/dist/src/model/queries/stages/StageBySlugQuery.d.ts.map +1 -1
  80. package/dist/src/model/queries/stages/StageBySlugQuery.js.map +1 -1
  81. package/dist/src/model/queries/stages/StageQueryFactory.d.ts +2 -2
  82. package/dist/src/model/queries/stages/StageQueryFactory.d.ts.map +1 -1
  83. package/dist/src/model/queries/stages/StageQueryFactory.js +2 -1
  84. package/dist/src/model/queries/stages/StageQueryFactory.js.map +1 -1
  85. package/dist/src/model/queries/stages/StagesQuery.d.ts +1 -1
  86. package/dist/src/model/queries/stages/StagesQuery.d.ts.map +1 -1
  87. package/dist/src/model/queries/stages/StagesQuery.js +2 -5
  88. package/dist/src/model/queries/stages/StagesQuery.js.map +1 -1
  89. package/dist/src/model/stages/StageCreator.d.ts.map +1 -1
  90. package/dist/src/model/stages/StageCreator.js +3 -2
  91. package/dist/src/model/stages/StageCreator.js.map +1 -1
  92. package/dist/src/resolvers/{ResolverContext.d.ts → SystemResolverContext.d.ts} +5 -8
  93. package/dist/src/resolvers/SystemResolverContext.d.ts.map +1 -0
  94. package/dist/src/resolvers/{ResolverContext.js → SystemResolverContext.js} +5 -6
  95. package/dist/src/resolvers/{ResolverContext.js.map → SystemResolverContext.js.map} +1 -1
  96. package/dist/src/resolvers/index.d.ts +1 -1
  97. package/dist/src/resolvers/index.d.ts.map +1 -1
  98. package/dist/src/resolvers/index.js +1 -1
  99. package/dist/src/resolvers/index.js.map +1 -1
  100. package/dist/src/resolvers/mutation/MigrateMutationResolver.d.ts +3 -3
  101. package/dist/src/resolvers/mutation/MigrateMutationResolver.d.ts.map +1 -1
  102. package/dist/src/resolvers/mutation/MigrateMutationResolver.js +5 -4
  103. package/dist/src/resolvers/mutation/MigrateMutationResolver.js.map +1 -1
  104. package/dist/src/resolvers/mutation/MigrationAlterMutationResolver.d.ts +3 -3
  105. package/dist/src/resolvers/mutation/MigrationAlterMutationResolver.d.ts.map +1 -1
  106. package/dist/src/resolvers/mutation/MigrationAlterMutationResolver.js.map +1 -1
  107. package/dist/src/resolvers/mutation/TruncateMutationResolver.d.ts +2 -2
  108. package/dist/src/resolvers/mutation/TruncateMutationResolver.d.ts.map +1 -1
  109. package/dist/src/resolvers/mutation/TruncateMutationResolver.js.map +1 -1
  110. package/dist/src/resolvers/query/EventsQueryResolver.d.ts +2 -2
  111. package/dist/src/resolvers/query/EventsQueryResolver.d.ts.map +1 -1
  112. package/dist/src/resolvers/query/EventsQueryResolver.js +1 -1
  113. package/dist/src/resolvers/query/EventsQueryResolver.js.map +1 -1
  114. package/dist/src/resolvers/query/ExecutedMigrationsQueryResolver.d.ts +2 -2
  115. package/dist/src/resolvers/query/ExecutedMigrationsQueryResolver.d.ts.map +1 -1
  116. package/dist/src/resolvers/query/ExecutedMigrationsQueryResolver.js.map +1 -1
  117. package/dist/src/resolvers/query/StagesQueryResolver.d.ts +2 -2
  118. package/dist/src/resolvers/query/StagesQueryResolver.d.ts.map +1 -1
  119. package/dist/src/resolvers/query/StagesQueryResolver.js.map +1 -1
  120. package/dist/src/resolvers/types/EventOldValuesResolver.d.ts +3 -3
  121. package/dist/src/resolvers/types/EventOldValuesResolver.d.ts.map +1 -1
  122. package/dist/src/resolvers/types/EventOldValuesResolver.js.map +1 -1
  123. package/dist/src/tsconfig.tsbuildinfo +1 -1
  124. package/dist/src/types.d.ts +1 -0
  125. package/dist/src/types.d.ts.map +1 -1
  126. package/{migrations → dist/tests/cases/migrations}/2020-05-06-150000-composed-primary.test.d.ts +0 -0
  127. package/dist/tests/cases/migrations/2020-05-06-150000-composed-primary.test.d.ts.map +1 -0
  128. package/{migrations → dist/tests/cases/migrations}/2020-05-06-150000-composed-primary.test.js +12 -12
  129. package/dist/tests/cases/migrations/2020-05-06-150000-composed-primary.test.js.map +1 -0
  130. package/{migrations → dist/tests/cases/migrations}/2020-06-01-103000-event-trigger-perf.test.d.ts +0 -0
  131. package/dist/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.d.ts.map +1 -0
  132. package/{migrations → dist/tests/cases/migrations}/2020-06-01-103000-event-trigger-perf.test.js +7 -7
  133. package/dist/tests/cases/migrations/2020-06-01-103000-event-trigger-perf.test.js.map +1 -0
  134. package/dist/tests/tsconfig.tsbuildinfo +1 -1
  135. package/package.json +15 -15
  136. package/src/SystemContainer.ts +21 -27
  137. package/src/index.ts +1 -0
  138. package/{migrations → src/migrations}/2018-08-04-102200-init.sql +9 -9
  139. package/{migrations → src/migrations}/2018-08-05-130501-trigger-event-function.sql +9 -9
  140. package/{migrations → src/migrations}/2019-01-14-143432-event-trx-id.sql +4 -4
  141. package/{migrations → src/migrations}/2019-02-04-154500-event-rebase.sql +6 -6
  142. package/{migrations → src/migrations}/2019-03-18-104147-event-run-migration-struct.sql +1 -1
  143. package/{migrations → src/migrations}/2019-07-29-103000-trigger-event-function-fix.sql +6 -6
  144. package/{migrations → src/migrations}/2019-11-28-100000-missing-setting-fallback.sql +2 -2
  145. package/{migrations → src/migrations}/2020-03-27-130000-project-migrations.ts +3 -4
  146. package/{migrations → src/migrations}/2020-05-06-150000-composed-primary.ts +13 -13
  147. package/{migrations → src/migrations}/2020-06-01-103000-event-trigger-perf.ts +9 -8
  148. package/{migrations → src/migrations}/2021-03-23-110000-timestamp-fix.sql +2 -2
  149. package/{migrations → src/migrations}/2021-05-07-155800-event-log-rework.ts +34 -33
  150. package/{migrations → src/migrations}/2021-05-19-1232000-event-log-fix-constraint.ts +4 -3
  151. package/src/migrations/2021-12-21-155500-events-up.sql +6 -0
  152. package/src/migrations/2022-02-08-132600-fn-search-path.sql +7 -0
  153. package/src/migrations/2022-02-08-140500-drop-deadcode.sql +2 -0
  154. package/src/migrations/2022-02-08-144400-dynamic-stage-schema.sql +41 -0
  155. package/src/migrations/index.ts +2 -0
  156. package/{migrations/index.ts → src/migrations/runner.ts} +2 -2
  157. package/src/migrations/types.ts +7 -0
  158. package/src/model/ProjectInitializer.ts +13 -14
  159. package/src/model/ProjectTruncateExecutor.ts +5 -4
  160. package/src/model/commands/stages/{CreateOrUpdateStageCommand.ts → CreateStageCommand.ts} +8 -11
  161. package/src/model/commands/stages/index.ts +1 -1
  162. package/src/model/database/DatabaseContext.ts +3 -8
  163. package/src/model/dependencies/index.ts +0 -1
  164. package/src/model/dependencies/tenant/IdentityFetcher.ts +1 -1
  165. package/src/model/dtos/Stage.ts +2 -5
  166. package/src/model/events/EventResponseBuilder.ts +2 -3
  167. package/src/model/migrations/ProjectMigrator.ts +10 -9
  168. package/src/model/migrations/index.ts +0 -1
  169. package/src/model/queries/stages/StageBySlugQuery.ts +2 -2
  170. package/src/model/queries/stages/StageQueryFactory.ts +3 -2
  171. package/src/model/queries/stages/StagesQuery.ts +4 -7
  172. package/src/model/stages/StageCreator.ts +4 -3
  173. package/src/resolvers/{ResolverContext.ts → SystemResolverContext.ts} +4 -9
  174. package/src/resolvers/index.ts +1 -1
  175. package/src/resolvers/mutation/MigrateMutationResolver.ts +9 -8
  176. package/src/resolvers/mutation/MigrationAlterMutationResolver.ts +3 -3
  177. package/src/resolvers/mutation/TruncateMutationResolver.ts +2 -2
  178. package/src/resolvers/query/EventsQueryResolver.ts +3 -3
  179. package/src/resolvers/query/ExecutedMigrationsQueryResolver.ts +2 -2
  180. package/src/resolvers/query/StagesQueryResolver.ts +2 -2
  181. package/src/resolvers/types/EventOldValuesResolver.ts +3 -3
  182. package/src/types.ts +1 -0
  183. package/{migrations → tests/cases/migrations}/2020-05-06-150000-composed-primary.test.ts +11 -12
  184. package/{migrations → tests/cases/migrations}/2020-06-01-103000-event-trigger-perf.test.ts +6 -7
  185. package/tests/tsconfig.json +0 -3
  186. package/tsconfig.json +0 -3
  187. package/dist/src/migrations.d.ts +0 -10
  188. package/dist/src/migrations.d.ts.map +0 -1
  189. package/dist/src/migrations.js.map +0 -1
  190. package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.d.ts +0 -8
  191. package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.d.ts.map +0 -1
  192. package/dist/src/model/commands/stages/CreateOrUpdateStageCommand.js.map +0 -1
  193. package/dist/src/model/dependencies/content/EntitiesSelector.d.ts +0 -28
  194. package/dist/src/model/dependencies/content/EntitiesSelector.d.ts.map +0 -1
  195. package/dist/src/model/dependencies/content/EntitiesSelector.js +0 -3
  196. package/dist/src/model/dependencies/content/EntitiesSelector.js.map +0 -1
  197. package/dist/src/model/dependencies/content/index.d.ts +0 -2
  198. package/dist/src/model/dependencies/content/index.d.ts.map +0 -1
  199. package/dist/src/model/dependencies/content/index.js.map +0 -1
  200. package/dist/src/model/migrations/MigrationExecutor.d.ts +0 -10
  201. package/dist/src/model/migrations/MigrationExecutor.d.ts.map +0 -1
  202. package/dist/src/model/migrations/MigrationExecutor.js +0 -25
  203. package/dist/src/model/migrations/MigrationExecutor.js.map +0 -1
  204. package/dist/src/resolvers/ResolverContext.d.ts.map +0 -1
  205. package/migrations/2020-03-27-130000-project-migrations.d.ts +0 -4
  206. package/migrations/2020-03-27-130000-project-migrations.d.ts.map +0 -1
  207. package/migrations/2020-05-06-150000-composed-primary.d.ts +0 -4
  208. package/migrations/2020-05-06-150000-composed-primary.d.ts.map +0 -1
  209. package/migrations/2020-05-06-150000-composed-primary.test.d.ts.map +0 -1
  210. package/migrations/2020-06-01-103000-event-trigger-perf.d.ts +0 -4
  211. package/migrations/2020-06-01-103000-event-trigger-perf.d.ts.map +0 -1
  212. package/migrations/2020-06-01-103000-event-trigger-perf.test.d.ts.map +0 -1
  213. package/migrations/2021-05-07-155800-event-log-rework.d.ts +0 -4
  214. package/migrations/2021-05-07-155800-event-log-rework.d.ts.map +0 -1
  215. package/migrations/2021-05-19-1232000-event-log-fix-constraint.d.ts +0 -4
  216. package/migrations/2021-05-19-1232000-event-log-fix-constraint.d.ts.map +0 -1
  217. package/migrations/2021-12-21-155500-events-up.sql +0 -6
  218. package/migrations/index.d.ts +0 -3
  219. package/migrations/index.d.ts.map +0 -1
  220. package/migrations/tsconfig.json +0 -15
  221. package/migrations/tsconfig.tsbuildinfo +0 -1
  222. package/src/migrations.ts +0 -10
  223. package/src/model/dependencies/content/EntitiesSelector.ts +0 -32
  224. package/src/model/dependencies/content/index.ts +0 -1
  225. package/src/model/migrations/MigrationExecutor.ts +0 -33
@@ -1,5 +1,6 @@
1
1
  import { MigrationBuilder, Name } from '@contember/database-migrations'
2
- import { formatSchemaName, getJunctionTables, MigrationArgs } from '..'
2
+ import { SystemMigrationArgs } from './types'
3
+ import { getJunctionTables } from '../model'
3
4
 
4
5
  const createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {
5
6
  builder.createTrigger(tableName, 'log_event_trx', {
@@ -15,13 +16,13 @@ const createTrxEvent = (builder: MigrationBuilder, tableName: Name) => {
15
16
  })
16
17
  }
17
18
 
18
- export default async function (builder: MigrationBuilder, args: MigrationArgs) {
19
+ export default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {
19
20
  const schema = await args.schemaResolver()
20
21
  const junctionTables = getJunctionTables(schema.model)
21
- const schemas = args.project.stages.map(formatSchemaName)
22
- builder.sql(`LOCK TABLE system.event`)
22
+ const schemas = args.project.stages.map(it => `stage_${it.slug}`)
23
+ builder.sql(`LOCK TABLE event`)
23
24
  builder.sql(`
24
- ALTER TABLE system.schema_migration
25
+ ALTER TABLE schema_migration
25
26
  ADD PRIMARY KEY (id)
26
27
  `)
27
28
  builder.sql(`
@@ -29,40 +30,40 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
29
30
  CONSTRAINT event_data_type_check CHECK (VALUE = ANY (ARRAY ['create', 'update', 'delete']));
30
31
  `)
31
32
  builder.sql(`
32
- CREATE TABLE system.event_data (
33
+ CREATE TABLE event_data (
33
34
  id UUID NOT NULL CONSTRAINT event_data_pkey PRIMARY KEY,
34
- type system.event_data_type NOT NULL,
35
+ type event_data_type NOT NULL,
35
36
  table_name TEXT NOT NULL,
36
37
  row_ids JSONB NOT NULL,
37
38
  values JSONB DEFAULT NULL,
38
39
  created_at TIMESTAMP WITH TIME ZONE DEFAULT CLOCK_TIMESTAMP() NOT NULL,
39
- schema_id INTEGER NOT NULL REFERENCES system.schema_migration(id),
40
+ schema_id INTEGER NOT NULL REFERENCES schema_migration(id),
40
41
  identity_id UUID NOT NULL,
41
42
  transaction_id UUID DEFAULT COALESCE(
42
43
  (NULLIF(CURRENT_SETTING('system.transaction_id'::TEXT, TRUE), ''::TEXT))::UUID,
43
- (SET_CONFIG('system.transaction_id'::TEXT, (system.uuid_generate_v4())::TEXT, TRUE))::UUID) NOT NULL
44
+ (SET_CONFIG('system.transaction_id'::TEXT, (uuid_generate_v4())::TEXT, TRUE))::UUID) NOT NULL
44
45
  )
45
46
  `)
46
47
  builder.sql(`
47
48
  CREATE INDEX system_event_row_id
48
- ON system.event_data(row_ids)
49
+ ON event_data(row_ids)
49
50
  `)
50
51
  builder.sql(`
51
52
  CREATE INDEX system_event2_table_name
52
- ON system.event_data(table_name)
53
+ ON event_data(table_name)
53
54
  `)
54
55
  builder.sql(`
55
56
  CREATE INDEX system_event2_type
56
- ON system.event_data(type)
57
+ ON event_data(type)
57
58
  `)
58
59
  builder.sql(`
59
60
  CREATE INDEX system_event2_transaction
60
- ON system.event_data(transaction_id)
61
+ ON event_data(transaction_id)
61
62
  `)
62
63
  builder.sql(`
63
- CREATE TABLE system.stage_transaction (
64
+ CREATE TABLE stage_transaction (
64
65
  transaction_id UUID NOT NULL,
65
- stage_id UUID NOT NULL REFERENCES system.stage(id) ON DELETE CASCADE,
66
+ stage_id UUID NOT NULL REFERENCES stage(id) ON DELETE CASCADE,
66
67
  applied_at TIMESTAMPTZ NOT NULL,
67
68
  PRIMARY KEY (transaction_id, stage_id)
68
69
  )
@@ -72,23 +73,23 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
72
73
  events AS (
73
74
  SELECT
74
75
  e.*,
75
- (SELECT MAX(id) FROM system.schema_migration) AS schema_id,
76
+ (SELECT MAX(id) FROM schema_migration) AS schema_id,
76
77
  1 AS index,
77
78
  stage.id AS stage_id
78
- FROM system.stage
79
- JOIN system.event e ON stage.event_id = e.id
79
+ FROM stage
80
+ JOIN event e ON stage.event_id = e.id
80
81
  UNION ALL
81
82
  SELECT
82
83
  event.*,
83
84
  COALESCE(
84
85
  CASE WHEN event.type = 'run_migration' THEN
85
- (SELECT id FROM system.schema_migration WHERE version = event.data ->> 'version')
86
+ (SELECT id FROM schema_migration WHERE version = event.data ->> 'version')
86
87
  END,
87
88
  events.schema_id
88
89
  ),
89
90
  index + 1,
90
91
  stage_id
91
- FROM system.event
92
+ FROM event
92
93
  JOIN events
93
94
  ON events.previous_id = event.id
94
95
  ),
@@ -102,7 +103,7 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
102
103
  FROM events
103
104
  )
104
105
  INSERT
105
- INTO system.event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)
106
+ INTO event_data (id, type, table_name, row_ids, values, created_at, schema_id, identity_id, transaction_id)
106
107
  SELECT
107
108
  id,
108
109
  type,
@@ -124,14 +125,14 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
124
125
  e.*,
125
126
  1 AS index,
126
127
  stage.id AS stage_id
127
- FROM system.stage
128
- JOIN system.event e ON stage.event_id = e.id
128
+ FROM stage
129
+ JOIN event e ON stage.event_id = e.id
129
130
  UNION ALL
130
131
  SELECT
131
132
  event.*,
132
133
  index + 1,
133
134
  stage_id
134
- FROM system.event
135
+ FROM event
135
136
  JOIN events ON events.previous_id = event.id
136
137
  ),
137
138
  transaction_times AS (
@@ -145,12 +146,12 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
145
146
  ORDER BY transaction_id
146
147
  )
147
148
  INSERT
148
- INTO system.stage_transaction (transaction_id, stage_id, applied_at)
149
+ INTO stage_transaction (transaction_id, stage_id, applied_at)
149
150
  SELECT transaction_id, stage_id, created_at
150
151
  FROM transaction_times
151
152
  `)
152
153
  builder.sql(`
153
- CREATE OR REPLACE FUNCTION "system"."trigger_event"() RETURNS TRIGGER AS
154
+ CREATE OR REPLACE FUNCTION "trigger_event"() RETURNS TRIGGER AS
154
155
  $$
155
156
  DECLARE new_event_type TEXT;
156
157
  DECLARE table_name TEXT;
@@ -201,14 +202,14 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
201
202
  END CASE;
202
203
 
203
204
  CASE WHEN NULLIF(CURRENT_SETTING('system.schema_id', true), '') IS NULL THEN
204
- PERFORM SET_CONFIG('system.schema_id', (select MAX("id")::TEXT from system.schema_migration), TRUE);
205
+ PERFORM SET_CONFIG('system.schema_id', (select MAX("id")::TEXT from schema_migration), TRUE);
205
206
  ELSE
206
207
  -- do nothing
207
208
  END CASE;
208
209
 
209
- INSERT INTO "system"."event_data" ("id", "type", "table_name", "row_ids", "values", "created_at", schema_id, identity_id)
210
+ INSERT INTO "event_data" ("id", "type", "table_name", "row_ids", "values", "created_at", schema_id, identity_id)
210
211
  VALUES (
211
- system.uuid_generate_v4(),
212
+ uuid_generate_v4(),
212
213
  new_event_type,
213
214
  table_name,
214
215
  primary_values,
@@ -233,12 +234,12 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
233
234
  NULLIF(CURRENT_SETTING('system.transaction_id', true), '') IS NOT NULL
234
235
  AND NULLIF(CURRENT_SETTING('system.transaction_inserted', true), '') IS NULL
235
236
  THEN
236
- INSERT INTO system.stage_transaction(transaction_id, stage_id, applied_at)
237
+ INSERT INTO stage_transaction(transaction_id, stage_id, applied_at)
237
238
  VALUES (
238
239
  CURRENT_SETTING('system.transaction_id')::UUID,
239
240
  (
240
241
  SELECT id
241
- FROM "system"."stage"
242
+ FROM "stage"
242
243
  WHERE "slug" = RIGHT(TG_TABLE_SCHEMA, - LENGTH('stage_'))
243
244
  ),
244
245
  CLOCK_TIMESTAMP()
@@ -268,11 +269,11 @@ export default async function (builder: MigrationBuilder, args: MigrationArgs) {
268
269
  }
269
270
  }
270
271
  builder.sql(`
271
- ALTER TABLE system.stage
272
+ ALTER TABLE stage
272
273
  ALTER event_id DROP NOT NULL
273
274
  `)
274
275
  builder.sql(`
275
- ALTER TABLE system.event
276
+ ALTER TABLE event
276
277
  RENAME TO event_bak
277
278
  `)
278
279
  }
@@ -1,5 +1,6 @@
1
1
  import { MigrationBuilder, Name } from '@contember/database-migrations'
2
- import { formatSchemaName, getJunctionTables, MigrationArgs } from '..'
2
+ import { SystemMigrationArgs } from './types'
3
+ import { getJunctionTables } from '../model'
3
4
 
4
5
  const recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {
5
6
  builder.dropTrigger(tableName, 'log_event_trx', { ifExists: true })
@@ -18,10 +19,10 @@ const recreateTrigger = (builder: MigrationBuilder, tableName: Name) => {
18
19
  })
19
20
  }
20
21
 
21
- export default async function (builder: MigrationBuilder, args: MigrationArgs) {
22
+ export default async function (builder: MigrationBuilder, args: SystemMigrationArgs) {
22
23
  const schema = await args.schemaResolver()
23
24
  const junctionTables = getJunctionTables(schema.model)
24
- const schemas = args.project.stages.map(formatSchemaName)
25
+ const schemas = args.project.stages.map(it => `stage_${it.slug}`)
25
26
 
26
27
  for (const table of junctionTables) {
27
28
  for (const schema of schemas) {
@@ -0,0 +1,6 @@
1
+ CREATE INDEX event_data_created ON event_data (created_at);
2
+ CREATE INDEX transaction_applied ON stage_transaction (applied_at);
3
+
4
+ ALTER TABLE stage
5
+ DROP event_id;
6
+ DROP TABLE event_bak;
@@ -0,0 +1,7 @@
1
+ DO LANGUAGE plpgsql
2
+ $$
3
+ BEGIN
4
+ EXECUTE FORMAT('ALTER FUNCTION trigger_event_commit() SET SEARCH_PATH = %s', QUOTE_IDENT(CURRENT_SCHEMA()));
5
+ EXECUTE FORMAT('ALTER FUNCTION trigger_event() SET SEARCH_PATH = %s', QUOTE_IDENT(CURRENT_SCHEMA()));
6
+ END
7
+ $$
@@ -0,0 +1,2 @@
1
+ DROP FUNCTION rebase_events_unsafe(head UUID, oldbase UUID, newbase UUID, appliedevents UUID[]);
2
+ DROP FUNCTION statement_trigger_event();
@@ -0,0 +1,41 @@
1
+ ALTER TABLE stage
2
+ ADD COLUMN schema TEXT UNIQUE;
3
+ UPDATE stage
4
+ SET schema = 'stage_' || slug;
5
+ ALTER TABLE stage
6
+ ALTER schema SET NOT NULL;
7
+
8
+ CREATE OR REPLACE FUNCTION trigger_event_commit() RETURNS TRIGGER AS
9
+ $$
10
+ BEGIN
11
+ PERFORM PG_ADVISORY_XACT_LOCK(5218230332970456493); -- well-known random number
12
+
13
+ CASE WHEN
14
+ NULLIF(CURRENT_SETTING('system.transaction_id', TRUE), '') IS NOT NULL
15
+ AND NULLIF(CURRENT_SETTING('system.transaction_inserted', TRUE), '') IS NULL
16
+ THEN
17
+ INSERT INTO stage_transaction(transaction_id, stage_id, applied_at)
18
+ VALUES (CURRENT_SETTING('system.transaction_id')::UUID,
19
+ (
20
+ SELECT id
21
+ FROM stage
22
+ WHERE schema = TG_TABLE_SCHEMA
23
+ ),
24
+ CLOCK_TIMESTAMP())
25
+ ON CONFLICT DO NOTHING;
26
+
27
+ PERFORM SET_CONFIG('system.transaction_inserted', '1', TRUE);
28
+ ELSE
29
+ -- do nothing
30
+ END CASE;
31
+
32
+ RETURN NULL;
33
+ END
34
+ $$ LANGUAGE plpgsql;
35
+
36
+ DO LANGUAGE plpgsql
37
+ $$
38
+ BEGIN
39
+ EXECUTE FORMAT('ALTER FUNCTION trigger_event_commit() SET SEARCH_PATH = %s', QUOTE_IDENT(CURRENT_SCHEMA()));
40
+ END
41
+ $$
@@ -0,0 +1,2 @@
1
+ export * from './runner'
2
+ export * from './types'
@@ -1,11 +1,11 @@
1
- import { Migration, loadMigrations } from '@contember/database-migrations'
1
+ import { loadMigrations, Migration } from '@contember/database-migrations'
2
2
  import projectMigrations from './2020-03-27-130000-project-migrations'
3
3
  import composedPrimary from './2020-05-06-150000-composed-primary'
4
4
  import eventTriggerPerf from './2020-06-01-103000-event-trigger-perf'
5
5
  import eventLogRework from './2021-05-07-155800-event-log-rework'
6
6
  import eventLogFixConstraint from './2021-05-19-1232000-event-log-fix-constraint'
7
7
 
8
- export default function (): Promise<Migration[]> {
8
+ export const getSystemMigrations = (): Promise<Migration[]> => {
9
9
  return loadMigrations(process.env.CONTEMBER_SYSTEM_MIGRATIONS_DIR || __dirname, [
10
10
  new Migration('2020-03-27-130000-project-migrations', projectMigrations),
11
11
  new Migration('2020-05-06-150000-composed-primary', composedPrimary),
@@ -0,0 +1,7 @@
1
+ import { Schema } from '@contember/schema'
2
+ import { ProjectConfig } from '../types'
3
+
4
+ export interface SystemMigrationArgs {
5
+ schemaResolver: () => Promise<Schema>
6
+ project: ProjectConfig
7
+ }
@@ -1,19 +1,18 @@
1
- import { unnamedIdentity } from './helpers'
2
- import { ProjectConfig, StageConfig } from '../types'
1
+ import { ProjectConfig } from '../types'
3
2
  import { ProjectMigrator, SchemaVersionBuilder } from './migrations'
4
3
  import { StageCreator } from './stages'
5
4
  import { DatabaseContext, DatabaseContextFactory } from './database'
6
5
  import { SystemDbMigrationsRunnerFactory } from '../SystemContainer'
7
6
  import {
8
7
  Connection,
8
+ createDatabaseIfNotExists,
9
9
  DatabaseCredentials,
10
- EventManager,
11
10
  retryTransaction,
12
11
  SingleConnection,
13
12
  } from '@contember/database'
14
- import { createDatabaseIfNotExists, createPgClient } from '@contember/database-migrations'
15
13
  import { Logger } from '@contember/engine-common'
16
14
  import { Migration } from '@contember/schema-migrations'
15
+ import { StagesQuery } from './queries'
17
16
 
18
17
  export class ProjectInitializer {
19
18
  constructor(
@@ -29,28 +28,26 @@ export class ProjectInitializer {
29
28
  logger: Logger,
30
29
  migrations?: Migration[],
31
30
  ) {
32
- const dbContext = databaseContextFactory.create(unnamedIdentity)
31
+ const dbContext = databaseContextFactory.create()
33
32
  if (project.db) {
34
33
  // todo: use dbContext
35
34
  logger.group(`Executing system schema migration`)
36
35
  await createDatabaseIfNotExists(project.db, logger.write.bind(logger))
37
- const pgClient = await createPgClient(project.db)
38
- await pgClient.connect()
39
- const singleConnection = new SingleConnection(pgClient, {}, new EventManager(), true)
36
+ const singleConnection = new SingleConnection(project.db, {})
37
+ const systemSchema = dbContext.client.schema
40
38
  const dbContextMigrations = databaseContextFactory
41
- .withClient(singleConnection.createClient('system', { module: 'system' }))
42
- .create(unnamedIdentity)
39
+ .withClient(singleConnection.createClient(systemSchema, { module: 'system' }))
40
+ .create()
43
41
 
44
42
  const schemaResolver = () => this.schemaVersionBuilder.buildSchema(dbContextMigrations)
45
- await this.systemDbMigrationsRunnerFactory(project.db, pgClient).migrate(
43
+ await this.systemDbMigrationsRunnerFactory(singleConnection, systemSchema).migrate(
46
44
  logger.write.bind(logger),
47
45
  {
48
46
  schemaResolver,
49
47
  project,
50
- queryHandler: dbContextMigrations.queryHandler,
51
48
  },
52
49
  )
53
- await pgClient.end()
50
+ await singleConnection.end()
54
51
  logger.groupEnd()
55
52
  }
56
53
  return await retryTransaction(() =>
@@ -68,6 +65,7 @@ export class ProjectInitializer {
68
65
  ) {
69
66
 
70
67
  logger.group(`Creating stages`)
68
+
71
69
  for (const stage of project.stages) {
72
70
  const created = await this.stageCreator.createStage(db, stage)
73
71
  if (created) {
@@ -80,7 +78,8 @@ export class ProjectInitializer {
80
78
  logger.groupEnd()
81
79
  if (migrations) {
82
80
  logger.group(`Executing project migrations`)
83
- await this.projectMigrator.migrate(db, project, migrations, logger.write.bind(logger))
81
+ const stages = await db.queryHandler.fetch(new StagesQuery())
82
+ await this.projectMigrator.migrate(db, stages, migrations, logger.write.bind(logger))
84
83
  logger.groupEnd()
85
84
  }
86
85
  }
@@ -1,9 +1,10 @@
1
1
  import { DatabaseContext } from './database'
2
2
  import { ProjectConfig } from '../types'
3
3
  import { TruncateEventsCommand } from './commands'
4
- import { formatSchemaName, getJunctionTables } from './helpers'
4
+ import { getJunctionTables } from './helpers'
5
5
  import { Schema } from '@contember/schema'
6
6
  import { wrapIdentifier } from '@contember/database'
7
+ import { StagesQuery } from './queries'
7
8
 
8
9
  export class ProjectTruncateExecutor {
9
10
  public async truncateProject(db: DatabaseContext, project: ProjectConfig, schema: Schema) {
@@ -12,9 +13,9 @@ export class ProjectTruncateExecutor {
12
13
  const tableNames = Object.values(schema.model.entities).filter(it => !it.view).map(it => it.tableName)
13
14
  const junctionTableNames = getJunctionTables(schema.model).map(it => it.tableName)
14
15
  const allTableNames = [...tableNames, ...junctionTableNames]
15
- for (const stage of project.stages) {
16
- const schemaName = formatSchemaName(stage)
17
- const wrappedNames = allTableNames.map(it => `${wrapIdentifier(schemaName)}.${wrapIdentifier(it)}`)
16
+ const stages = await db.queryHandler.fetch(new StagesQuery())
17
+ for (const stage of stages) {
18
+ const wrappedNames = allTableNames.map(it => `${wrapIdentifier(stage.schema)}.${wrapIdentifier(it)}`)
18
19
  await trx.client.query(`TRUNCATE ${wrappedNames}`)
19
20
  }
20
21
  await trx.client.query('SET CONSTRAINTS ALL IMMEDIATE')
@@ -1,26 +1,23 @@
1
- import { ConflictActionType, InsertBuilder, wrapIdentifier } from '@contember/database'
2
- import { formatSchemaName } from '../../helpers'
1
+ import { InsertBuilder, wrapIdentifier } from '@contember/database'
3
2
  import { StageConfig } from '../../../types'
4
3
  import { Command } from '../Command'
4
+ import { formatSchemaName } from '../../helpers'
5
5
 
6
- export class CreateOrUpdateStageCommand implements Command<boolean> {
6
+ export class CreateStageCommand implements Command<void> {
7
7
  constructor(private readonly stage: StageConfig) {}
8
8
 
9
- public async execute({ db, providers }: Command.Args): Promise<boolean> {
10
- const result = await InsertBuilder.create()
9
+ public async execute({ db, providers }: Command.Args): Promise<void> {
10
+ const schemaName = this.stage.schema ?? formatSchemaName(this.stage)
11
+ await InsertBuilder.create()
11
12
  .into('stage')
12
13
  .values({
13
14
  id: providers.uuid(),
14
15
  name: this.stage.name,
15
16
  slug: this.stage.slug,
16
- })
17
- .onConflict(ConflictActionType.update, ['slug'], {
18
- name: this.stage.name,
17
+ schema: schemaName,
19
18
  })
20
19
  .execute(db)
21
20
 
22
- await db.query('CREATE SCHEMA IF NOT EXISTS ' + wrapIdentifier(formatSchemaName(this.stage)))
23
-
24
- return result > 0
21
+ await db.query('CREATE SCHEMA IF NOT EXISTS ' + wrapIdentifier(schemaName))
25
22
  }
26
23
  }
@@ -1,2 +1,2 @@
1
- export * from './CreateOrUpdateStageCommand'
1
+ export * from './CreateStageCommand'
2
2
  export * from './TruncateStagesCommand'
@@ -2,7 +2,6 @@ import { Client, Connection, DatabaseQueryable } from '@contember/database'
2
2
  import { QueryHandler } from '@contember/queryable'
3
3
  import { UuidProvider } from '../../utils'
4
4
  import { CommandBus } from '../commands'
5
- import { setupSystemVariables } from '../helpers'
6
5
 
7
6
  export interface DatabaseContext<ConnectionType extends Connection.ConnectionLike = Connection.ConnectionLike> {
8
7
  client: Client<ConnectionType>
@@ -14,8 +13,8 @@ export interface DatabaseContext<ConnectionType extends Connection.ConnectionLik
14
13
  export class DatabaseContextFactory {
15
14
  constructor(private readonly client: Client, private readonly providers: UuidProvider) {}
16
15
 
17
- public create(identityId: string | undefined): DatabaseContext {
18
- return createDatabaseContext(this.client, identityId, this.providers)
16
+ public create(): DatabaseContext {
17
+ return createDatabaseContext(this.client, this.providers)
19
18
  }
20
19
 
21
20
  public withClient(client: Client) {
@@ -25,7 +24,6 @@ export class DatabaseContextFactory {
25
24
 
26
25
  const createDatabaseContext = <ConnectionType extends Connection.ConnectionLike = Connection.ConnectionLike>(
27
26
  client: Client<ConnectionType>,
28
- identityId: string | undefined,
29
27
  providers: UuidProvider,
30
28
  ): DatabaseContext<ConnectionType> => ({
31
29
  client,
@@ -33,10 +31,7 @@ const createDatabaseContext = <ConnectionType extends Connection.ConnectionLike
33
31
  transaction: cb =>
34
32
  client.transaction(async client => {
35
33
  await client.query(Connection.REPEATABLE_READ)
36
- if (identityId) {
37
- await setupSystemVariables(client, identityId, providers)
38
- }
39
- return cb(createDatabaseContext(client, undefined, providers))
34
+ return cb(createDatabaseContext(client, providers))
40
35
  }),
41
36
  commandBus: new CommandBus(client, providers),
42
37
  })
@@ -1,2 +1 @@
1
- export * from './content'
2
1
  export * from './tenant'
@@ -1,7 +1,7 @@
1
1
  import { Client } from '@contember/database'
2
2
 
3
3
  export interface IdentityFetcher {
4
- fetchIdentities(client: Client, ids: string[]): Promise<TenantIdentity[]>
4
+ fetchIdentities(ids: string[]): Promise<TenantIdentity[]>
5
5
  }
6
6
 
7
7
  export type TenantIdentity = PersonIdentity | ApiKeyIdentity
@@ -1,10 +1,7 @@
1
1
  export interface Stage {
2
+ readonly id: string
2
3
  readonly name: string
3
4
  readonly slug: string
5
+ readonly schema: string
4
6
  }
5
7
 
6
- export interface StageWithId extends Stage {
7
- readonly id: string
8
- }
9
-
10
- export type StageWithoutEvent = Pick<Stage, Exclude<keyof Stage, 'event_id'>>
@@ -4,19 +4,18 @@ import { assertNever } from '../../utils'
4
4
  import { IdentityFetcher } from '../dependencies'
5
5
  import { formatIdentity } from './identityUtils'
6
6
  import { appendCreateSpecificData, appendDeleteSpecificData, appendUpdateSpecificData } from './EventResponseHelper'
7
- import { Client } from '@contember/database'
8
7
 
9
8
  export class EventResponseBuilder {
10
9
  constructor(private readonly identityFetcher: IdentityFetcher) {}
11
10
 
12
- public async buildResponse(tenantDb: Client, events: AnyEvent[]): Promise<(CreateEvent | DeleteEvent | UpdateEvent)[]> {
11
+ public async buildResponse(events: AnyEvent[]): Promise<(CreateEvent | DeleteEvent | UpdateEvent)[]> {
13
12
  const apiEventTypeMapping = {
14
13
  [EventType.create]: ApiEventType.Create,
15
14
  [EventType.update]: ApiEventType.Update,
16
15
  [EventType.delete]: ApiEventType.Delete,
17
16
  }
18
17
  const identityIds = events.map(it => it.identityId).filter((it, index, ids) => ids.indexOf(it) === index)
19
- const identities = await this.identityFetcher.fetchIdentities(tenantDb, identityIds)
18
+ const identities = await this.identityFetcher.fetchIdentities(identityIds)
20
19
  const identitiesMap = Object.fromEntries(identities.map(it => [it.identityId, it]))
21
20
 
22
21
  return events.map(it => {
@@ -3,11 +3,10 @@ import { Client, QueryError, wrapIdentifier } from '@contember/database'
3
3
  import { formatSchemaName } from '../helpers'
4
4
  import { Schema } from '@contember/schema'
5
5
  import { SaveMigrationCommand } from '../commands'
6
- import { StageWithoutEvent } from '../dtos'
6
+ import { Stage } from '../dtos'
7
7
  import { DatabaseContext } from '../database'
8
8
  import { ExecutedMigrationsResolver } from './ExecutedMigrationsResolver'
9
9
  import { MigrateErrorCode } from '../../schema'
10
- import { ProjectConfig } from '../../types'
11
10
  import { SchemaVersionBuilder } from './SchemaVersionBuilder'
12
11
 
13
12
  export class ProjectMigrator {
@@ -19,7 +18,7 @@ export class ProjectMigrator {
19
18
 
20
19
  public async migrate(
21
20
  db: DatabaseContext,
22
- project: ProjectConfig,
21
+ stages: Stage[],
23
22
  migrationsToExecute: readonly Migration[],
24
23
  logger: (message: string) => void,
25
24
  ignoreOrder: boolean = false,
@@ -39,11 +38,12 @@ export class ProjectMigrator {
39
38
  for (const modification of migration.modifications) {
40
39
  [schema] = await this.applyModification(
41
40
  db.client,
42
- project.stages,
41
+ stages,
43
42
  schema,
44
43
  modification,
45
44
  formatVersion,
46
45
  migration.version,
46
+ db.client.schema,
47
47
  )
48
48
  }
49
49
  await db.commandBus.execute(new SaveMigrationCommand(migration))
@@ -68,7 +68,7 @@ export class ProjectMigrator {
68
68
  if (migration.version < version && !ignoreOrder) {
69
69
  throw new MustFollowLatestMigrationError(migration.version, `Must follow latest executed migration ${version}`)
70
70
  }
71
- const described = await this.migrationDescriber.describeModifications(schema, migration)
71
+ const described = await this.migrationDescriber.describeModifications(schema, migration, 'system') // system schema name not important here
72
72
  if (described.length === 0) {
73
73
  continue
74
74
  }
@@ -86,25 +86,26 @@ export class ProjectMigrator {
86
86
 
87
87
  private async applyModification(
88
88
  db: Client,
89
- stages: StageWithoutEvent[],
89
+ stages: Stage[],
90
90
  schema: Schema,
91
91
  modification: Migration.Modification,
92
92
  formatVersion: number,
93
93
  migrationVersion: string,
94
+ systemSchema: string,
94
95
  ): Promise<[Schema]> {
95
96
  const {
96
97
  sql,
97
98
  schema: newSchema,
98
99
  handler,
99
- } = await this.migrationDescriber.describeModification(schema, modification, formatVersion)
100
+ } = await this.migrationDescriber.describeModification(schema, modification, { systemSchema, formatVersion })
100
101
  for (const stage of stages) {
101
102
  await this.executeOnStage(db, stage, sql, migrationVersion)
102
103
  }
103
104
  return [newSchema]
104
105
  }
105
106
 
106
- private async executeOnStage(db: Client, stage: StageWithoutEvent, sql: string, migrationVersion: string) {
107
- await db.query('SET search_path TO ' + wrapIdentifier(formatSchemaName(stage)))
107
+ private async executeOnStage(db: Client, stage: Stage, sql: string, migrationVersion: string) {
108
+ await db.query('SET search_path TO ' + wrapIdentifier(stage.schema))
108
109
  try {
109
110
  await db.query(sql)
110
111
  } catch (e) {
@@ -1,5 +1,4 @@
1
1
  export * from './ExecutedMigrationsResolver'
2
2
  export * from './MigrationAlterer'
3
- export * from './MigrationExecutor'
4
3
  export * from './ProjectMigrator'
5
4
  export * from './SchemaVersionBuilder'
@@ -1,6 +1,6 @@
1
1
  import { DatabaseQuery, DatabaseQueryable } from '@contember/database'
2
- import { StageWithId } from '../../dtos'
3
2
  import { prepareStageQueryBuilder } from './StageQueryFactory'
3
+ import { Stage } from '../../dtos'
4
4
 
5
5
  class StageBySlugQuery extends DatabaseQuery<StageBySlugQuery.Result> {
6
6
  constructor(private readonly slug: string) {
@@ -17,7 +17,7 @@ class StageBySlugQuery extends DatabaseQuery<StageBySlugQuery.Result> {
17
17
  }
18
18
 
19
19
  namespace StageBySlugQuery {
20
- export type Result = null | StageWithId
20
+ export type Result = null | Stage
21
21
  }
22
22
 
23
23
  export { StageBySlugQuery }
@@ -1,10 +1,11 @@
1
1
  import { SelectBuilder } from '@contember/database'
2
- import { StageWithId } from '../../dtos'
2
+ import { Stage } from '../../dtos'
3
3
 
4
4
  export const prepareStageQueryBuilder = () => {
5
- return SelectBuilder.create<StageWithId>() //
5
+ return SelectBuilder.create<Stage>()
6
6
  .select('id')
7
7
  .select('name')
8
8
  .select('slug')
9
+ .select('schema')
9
10
  .from('stage')
10
11
  }