pg_eventstore 1.13.4 → 3.0.0

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 (319) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +11 -2
  3. data/CHANGELOG.md +195 -16
  4. data/README.md +33 -10
  5. data/db/migrations/10_setup_pg_cron.rb +1 -0
  6. data/db/migrations/11_add_events_link_global_position.sql +1 -0
  7. data/db/migrations/12_migrate_legacy_links.rb +83 -0
  8. data/db/migrations/13_remove_events_link_id.sql +6 -0
  9. data/db/migrations/14_remove_ids_events_id_index.sql +1 -0
  10. data/db/migrations/15_create_streams_global_index.sql +17 -0
  11. data/db/migrations/16_populate_streams_global_index.rb +150 -0
  12. data/db/migrations/17_create_events_global_index.sql +62 -0
  13. data/db/migrations/18_populate_events_global_index.rb +124 -0
  14. data/db/migrations/19_populate_events_global_index_p2.rb +25 -0
  15. data/db/migrations/20_migrate_subscriptions_current_position.sql +19 -0
  16. data/db/migrations/21_create_partitions_stats.sql +2 -0
  17. data/db/migrations/22_drop_streams_sql_view.sql +2 -0
  18. data/db/migrations/23_adjust_partitions_indexes.sql +5 -0
  19. data/db/migrations/24_drop_legacy_events_indexes.sql +3 -0
  20. data/db/migrations/25_add_parent_partitions_info_to_partitions.sql +16 -0
  21. data/db/migrations/26_change_events_stream_revision_type.rb +35 -0
  22. data/db/migrations/27_drop_events_horizon.sql +3 -0
  23. data/db/migrations/28_create_maintenance_tasks.sql +8 -0
  24. data/db/migrations/29_create_event_markers.sql +35 -0
  25. data/db/migrations/30_improve_partitions_search_in_admin_ui.rb +24 -0
  26. data/db/migrations/31_drop_events_id_default_value.sql +1 -0
  27. data/db/migrations/32_create_parittions_triggers.sql +101 -0
  28. data/db/migrations/9_create_events_horizon.sql +21 -0
  29. data/docs/AGENTS.fragment.md +696 -0
  30. data/docs/admin_ui.md +3 -1
  31. data/docs/appending_events.md +110 -49
  32. data/docs/configuration.md +69 -36
  33. data/docs/event_tracing.md +55 -0
  34. data/docs/events_and_streams.md +54 -30
  35. data/docs/how_it_works.md +57 -16
  36. data/docs/linking_events.md +2 -1
  37. data/docs/maintenance.md +14 -5
  38. data/docs/multiple_commands.md +30 -6
  39. data/docs/reading_events.md +208 -43
  40. data/docs/reading_streams.md +50 -0
  41. data/docs/replication.md +99 -0
  42. data/docs/subscriptions.md +165 -35
  43. data/docs/writing_middleware.md +25 -8
  44. data/ext/pg_eventstore_ext/extconf.rb +5 -0
  45. data/ext/pg_eventstore_ext/pg_eventstore_ext.c +74 -0
  46. data/lib/pg_eventstore/async_runner.rb +63 -0
  47. data/lib/pg_eventstore/basic_config.rb +15 -0
  48. data/lib/pg_eventstore/callbacks.rb +7 -5
  49. data/lib/pg_eventstore/chunks/chunk.rb +31 -0
  50. data/lib/pg_eventstore/chunks/read_api_events_index_chunk.rb +83 -0
  51. data/lib/pg_eventstore/chunks/replica_events_index_chunk.rb +35 -0
  52. data/lib/pg_eventstore/chunks/repository.rb +73 -0
  53. data/lib/pg_eventstore/chunks/subscription_checkpoint_chunk.rb +48 -0
  54. data/lib/pg_eventstore/chunks/subscription_events_index_chunk.rb +99 -0
  55. data/lib/pg_eventstore/chunks.rb +14 -0
  56. data/lib/pg_eventstore/cli/try_to_delete_subscriptions_set.rb +2 -2
  57. data/lib/pg_eventstore/client.rb +167 -52
  58. data/lib/pg_eventstore/commands/append.rb +62 -43
  59. data/lib/pg_eventstore/commands/delete_event.rb +7 -8
  60. data/lib/pg_eventstore/commands/delete_stream.rb +3 -3
  61. data/lib/pg_eventstore/commands/event_modifiers/prepare_link_event.rb +11 -6
  62. data/lib/pg_eventstore/commands/event_modifiers/prepare_regular_event.rb +12 -7
  63. data/lib/pg_eventstore/commands/link_to.rb +9 -9
  64. data/lib/pg_eventstore/commands/multiple.rb +2 -2
  65. data/lib/pg_eventstore/commands/read.rb +23 -5
  66. data/lib/pg_eventstore/commands/read_grouped.rb +46 -0
  67. data/lib/pg_eventstore/commands/read_streams.rb +18 -0
  68. data/lib/pg_eventstore/commands/read_streams_paginated.rb +56 -0
  69. data/lib/pg_eventstore/commands/regular_stream_read_paginated.rb +4 -4
  70. data/lib/pg_eventstore/commands/revision_check/current_revision.rb +51 -0
  71. data/lib/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rb +46 -0
  72. data/lib/pg_eventstore/commands/revision_check/expected_revision.rb +135 -0
  73. data/lib/pg_eventstore/commands/revision_check/stream_revision_check.rb +98 -0
  74. data/lib/pg_eventstore/commands/revision_check/stream_revision_comparison.rb +36 -0
  75. data/lib/pg_eventstore/commands/stream_revision.rb +14 -0
  76. data/lib/pg_eventstore/commands/system_stream_read_paginated.rb +4 -4
  77. data/lib/pg_eventstore/commands.rb +4 -2
  78. data/lib/pg_eventstore/config.rb +30 -9
  79. data/lib/pg_eventstore/connection.rb +22 -37
  80. data/lib/pg_eventstore/errors.rb +137 -11
  81. data/lib/pg_eventstore/event.rb +39 -7
  82. data/lib/pg_eventstore/event_deserializer.rb +5 -4
  83. data/lib/pg_eventstore/event_global_index.rb +118 -0
  84. data/lib/pg_eventstore/event_marker.rb +16 -0
  85. data/lib/pg_eventstore/event_marker_index.rb +25 -0
  86. data/lib/pg_eventstore/event_serializer.rb +6 -0
  87. data/lib/pg_eventstore/extensions/acts_as_configurable.rb +88 -0
  88. data/lib/pg_eventstore/extensions/options_defaults.rb +25 -0
  89. data/lib/pg_eventstore/extensions/options_extension.rb +42 -13
  90. data/lib/pg_eventstore/feature_marker.rb +18 -0
  91. data/lib/pg_eventstore/maintenance.rb +11 -6
  92. data/lib/pg_eventstore/middleware/event_tracing.rb +53 -0
  93. data/lib/pg_eventstore/partition.rb +6 -0
  94. data/lib/pg_eventstore/pg_connection.rb +70 -14
  95. data/lib/pg_eventstore/queries/event_marker_queries.rb +74 -0
  96. data/lib/pg_eventstore/queries/event_queries.rb +9 -95
  97. data/lib/pg_eventstore/queries/events_global_index_queries.rb +131 -0
  98. data/lib/pg_eventstore/queries/index_filtering_queries.rb +179 -0
  99. data/lib/pg_eventstore/queries/links_resolver.rb +10 -7
  100. data/lib/pg_eventstore/queries/maintenance_queries.rb +159 -42
  101. data/lib/pg_eventstore/queries/partition_queries.rb +46 -104
  102. data/lib/pg_eventstore/queries/replica_queries.rb +110 -0
  103. data/lib/pg_eventstore/queries/streams_global_index_queries.rb +163 -0
  104. data/lib/pg_eventstore/queries/transaction_queries.rb +58 -10
  105. data/lib/pg_eventstore/queries.rb +29 -1
  106. data/lib/pg_eventstore/query_builders/basic_filtering.rb +38 -5
  107. data/lib/pg_eventstore/query_builders/event_markers_filtering.rb +47 -0
  108. data/lib/pg_eventstore/query_builders/event_markers_index_filtering.rb +275 -0
  109. data/lib/pg_eventstore/query_builders/event_subscription_positions_filtering.rb +37 -0
  110. data/lib/pg_eventstore/query_builders/events_filtering.rb +15 -164
  111. data/lib/pg_eventstore/query_builders/events_global_index_filtering.rb +227 -0
  112. data/lib/pg_eventstore/query_builders/filters/collection.rb +324 -0
  113. data/lib/pg_eventstore/query_builders/filters/event_type_filter.rb +37 -0
  114. data/lib/pg_eventstore/query_builders/filters/filter_row.rb +54 -0
  115. data/lib/pg_eventstore/query_builders/filters/marker_filter.rb +20 -0
  116. data/lib/pg_eventstore/query_builders/filters/marker_filter_row.rb +49 -0
  117. data/lib/pg_eventstore/query_builders/filters/stream_filter.rb +48 -0
  118. data/lib/pg_eventstore/query_builders/index_based_events_filtering.rb +260 -0
  119. data/lib/pg_eventstore/query_builders/partitions_filtering.rb +175 -51
  120. data/lib/pg_eventstore/query_builders/read_cursor/stream_cursor.rb +122 -0
  121. data/lib/pg_eventstore/query_builders/streams_global_index_filtering.rb +83 -0
  122. data/lib/pg_eventstore/query_builders/subscription_events_filtering.rb +79 -0
  123. data/lib/pg_eventstore/query_strategy/async.rb +64 -0
  124. data/lib/pg_eventstore/query_strategy/foreground.rb +25 -0
  125. data/lib/pg_eventstore/query_strategy.rb +19 -0
  126. data/lib/pg_eventstore/raw_event.rb +46 -0
  127. data/lib/pg_eventstore/rspec/test_helpers.rb +21 -8
  128. data/lib/pg_eventstore/sql_builder.rb +87 -8
  129. data/lib/pg_eventstore/stream.rb +14 -17
  130. data/lib/pg_eventstore/stream_global_index.rb +28 -0
  131. data/lib/pg_eventstore/subscriptions/basic_runner.rb +4 -4
  132. data/lib/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rb +5 -17
  133. data/lib/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rb +36 -0
  134. data/lib/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rb +13 -1
  135. data/lib/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rb +19 -14
  136. data/lib/pg_eventstore/subscriptions/events_processor.rb +21 -19
  137. data/lib/pg_eventstore/subscriptions/events_processor_consumer/multiple.rb +63 -0
  138. data/lib/pg_eventstore/subscriptions/events_processor_consumer/replica.rb +68 -0
  139. data/lib/pg_eventstore/subscriptions/events_processor_consumer/single.rb +62 -0
  140. data/lib/pg_eventstore/subscriptions/events_processor_consumer.rb +44 -0
  141. data/lib/pg_eventstore/subscriptions/events_subscription_position_worker.rb +68 -0
  142. data/lib/pg_eventstore/subscriptions/queries/event_subscription_position_queries.rb +177 -0
  143. data/lib/pg_eventstore/subscriptions/queries/subscription_command_queries.rb +5 -5
  144. data/lib/pg_eventstore/subscriptions/queries/subscription_queries.rb +80 -56
  145. data/lib/pg_eventstore/subscriptions/queries/subscriptions_set_command_queries.rb +2 -2
  146. data/lib/pg_eventstore/subscriptions/queries/subscriptions_set_queries.rb +1 -1
  147. data/lib/pg_eventstore/subscriptions/replica_subscription_handler.rb +140 -0
  148. data/lib/pg_eventstore/subscriptions/replica_subscription_runner.rb +9 -0
  149. data/lib/pg_eventstore/subscriptions/subscription.rb +9 -7
  150. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/collection.rb +36 -0
  151. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/index_read_strategy.rb +82 -0
  152. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/replication_strategy.rb +75 -0
  153. data/lib/pg_eventstore/subscriptions/subscription_feed_strategy.rb +31 -0
  154. data/lib/pg_eventstore/subscriptions/subscription_feeder.rb +26 -2
  155. data/lib/pg_eventstore/subscriptions/subscription_handler_performance.rb +5 -5
  156. data/lib/pg_eventstore/subscriptions/subscription_runner.rb +20 -22
  157. data/lib/pg_eventstore/subscriptions/subscription_runner_commands/reset_position.rb +1 -1
  158. data/lib/pg_eventstore/subscriptions/subscription_runners_feeder.rb +10 -11
  159. data/lib/pg_eventstore/subscriptions/subscriptions_lifecycle.rb +0 -12
  160. data/lib/pg_eventstore/subscriptions/subscriptions_manager.rb +84 -29
  161. data/lib/pg_eventstore/{subscriptions/synchronized_array.rb → synchronized_array.rb} +15 -0
  162. data/lib/pg_eventstore/tasks/setup.rake +32 -33
  163. data/lib/pg_eventstore/utils.rb +39 -0
  164. data/lib/pg_eventstore/version.rb +1 -1
  165. data/lib/pg_eventstore/web/application.rb +104 -20
  166. data/lib/pg_eventstore/web/paginator/base_collection.rb +5 -1
  167. data/lib/pg_eventstore/web/paginator/event_types_collection.rb +14 -4
  168. data/lib/pg_eventstore/web/paginator/events_collection.rb +29 -33
  169. data/lib/pg_eventstore/web/paginator/helpers.rb +19 -12
  170. data/lib/pg_eventstore/web/paginator/markers_collection.rb +48 -0
  171. data/lib/pg_eventstore/web/paginator/stream_contexts_collection.rb +13 -2
  172. data/lib/pg_eventstore/web/paginator/stream_ids_collection.rb +21 -11
  173. data/lib/pg_eventstore/web/paginator/stream_names_collection.rb +18 -4
  174. data/lib/pg_eventstore/web/paginator/streams_collection.rb +95 -0
  175. data/lib/pg_eventstore/web/public/javascripts/pg_eventstore.js +49 -22
  176. data/lib/pg_eventstore/web/subscriptions/helpers.rb +2 -2
  177. data/lib/pg_eventstore/web/subscriptions/set_collection.rb +1 -1
  178. data/lib/pg_eventstore/web/subscriptions/subscriptions.rb +1 -1
  179. data/lib/pg_eventstore/web/subscriptions/with_state/set_collection.rb +1 -1
  180. data/lib/pg_eventstore/web/subscriptions/with_state/subscriptions.rb +1 -1
  181. data/lib/pg_eventstore/web/views/home/dashboard.erb +11 -9
  182. data/lib/pg_eventstore/web/views/home/partials/event_filter.erb +18 -5
  183. data/lib/pg_eventstore/web/views/home/partials/events.erb +38 -1
  184. data/lib/pg_eventstore/web/views/home/partials/markers_filter.erb +18 -0
  185. data/lib/pg_eventstore/web/views/layouts/application.erb +6 -0
  186. data/lib/pg_eventstore/web/views/streams/index.erb +110 -0
  187. data/lib/pg_eventstore/web/views/streams/partials/streams.erb +11 -0
  188. data/lib/pg_eventstore/web/views/subscriptions/index.erb +4 -1
  189. data/lib/pg_eventstore/web.rb +2 -0
  190. data/lib/pg_eventstore.rb +26 -63
  191. data/pg_eventstore.gemspec +6 -4
  192. data/sig/interfaces/_raw_events_handler.rbs +3 -0
  193. data/sig/interfaces/subscription_handler.rbs +1 -1
  194. data/sig/pg/result.rbs +9 -0
  195. data/sig/pg_eventstore/async_runner.rbs +13 -0
  196. data/sig/pg_eventstore/basic_config.rbs +9 -0
  197. data/sig/pg_eventstore/chunks/chunk.rbs +13 -0
  198. data/sig/pg_eventstore/chunks/read_api_events_index_chunk.rbs +30 -0
  199. data/sig/pg_eventstore/chunks/replica_events_index_chunk.rbs +11 -0
  200. data/sig/pg_eventstore/chunks/repository.rbs +22 -0
  201. data/sig/pg_eventstore/chunks/subscription_checkpoint_chunk.rbs +18 -0
  202. data/sig/pg_eventstore/chunks/subscription_events_index_chunk.rbs +37 -0
  203. data/sig/pg_eventstore/client.rbs +41 -43
  204. data/sig/pg_eventstore/commands/append.rbs +11 -25
  205. data/sig/pg_eventstore/commands/event_modifiers/prepare_link_event.rbs +9 -12
  206. data/sig/pg_eventstore/commands/event_modifiers/prepare_regular_event.rbs +5 -4
  207. data/sig/pg_eventstore/commands/link_to.rbs +6 -11
  208. data/sig/pg_eventstore/commands/multiple.rbs +1 -1
  209. data/sig/pg_eventstore/commands/read.rbs +2 -5
  210. data/sig/pg_eventstore/commands/read_grouped.rbs +7 -0
  211. data/sig/pg_eventstore/commands/read_streams.rbs +7 -0
  212. data/sig/pg_eventstore/commands/read_streams_paginated.rbs +16 -0
  213. data/sig/pg_eventstore/commands/regular_stream_read_paginated.rbs +9 -17
  214. data/sig/pg_eventstore/commands/revision_check/current_revision.rbs +25 -0
  215. data/sig/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rbs +14 -0
  216. data/sig/pg_eventstore/commands/revision_check/expected_revision.rbs +67 -0
  217. data/sig/pg_eventstore/commands/revision_check/stream_revision_check.rbs +20 -0
  218. data/sig/pg_eventstore/commands/revision_check/stream_revision_comparison.rbs +9 -0
  219. data/sig/pg_eventstore/commands/stream_revision.rbs +7 -0
  220. data/sig/pg_eventstore/commands/system_stream_read_paginated.rbs +9 -14
  221. data/sig/pg_eventstore/config.rbs +15 -6
  222. data/sig/pg_eventstore/connection.rbs +11 -18
  223. data/sig/pg_eventstore/errors.rbs +64 -34
  224. data/sig/pg_eventstore/event.rbs +20 -6
  225. data/sig/pg_eventstore/event_deserializer.rbs +5 -10
  226. data/sig/pg_eventstore/event_global_index.rbs +60 -0
  227. data/sig/pg_eventstore/event_marker.rbs +9 -0
  228. data/sig/pg_eventstore/event_marker_index.rbs +12 -0
  229. data/sig/pg_eventstore/extensions/acts_as_configurable.rbs +29 -0
  230. data/sig/pg_eventstore/extensions/options_defaults.rbs +7 -0
  231. data/sig/pg_eventstore/extensions/options_extension.rbs +9 -1
  232. data/sig/pg_eventstore/feature_marker.rbs +10 -0
  233. data/sig/pg_eventstore/maintenance.rbs +12 -8
  234. data/sig/pg_eventstore/middleware/event_trace.rbs +14 -0
  235. data/sig/pg_eventstore/partition.rbs +2 -4
  236. data/sig/pg_eventstore/pg_connection.rbs +8 -0
  237. data/sig/pg_eventstore/queries/event_marker_queries.rbs +21 -0
  238. data/sig/pg_eventstore/queries/event_queries.rbs +6 -38
  239. data/sig/pg_eventstore/queries/events_global_index_queries.rbs +37 -0
  240. data/sig/pg_eventstore/queries/index_filtering_queries.rbs +50 -0
  241. data/sig/pg_eventstore/queries/links_resolver.rbs +7 -11
  242. data/sig/pg_eventstore/queries/maintenance_queries.rbs +12 -9
  243. data/sig/pg_eventstore/queries/partition_queries.rbs +32 -67
  244. data/sig/pg_eventstore/queries/replica_queries.rbs +31 -0
  245. data/sig/pg_eventstore/queries/streams_global_index_queries.rbs +39 -0
  246. data/sig/pg_eventstore/queries/transaction_queries.rbs +4 -2
  247. data/sig/pg_eventstore/queries.rbs +11 -21
  248. data/sig/pg_eventstore/query_builders/basic_filtering.rbs +10 -3
  249. data/sig/pg_eventstore/query_builders/event_markers_filtering.rbs +17 -0
  250. data/sig/pg_eventstore/query_builders/event_markers_index_filtering.rbs +69 -0
  251. data/sig/pg_eventstore/query_builders/event_subscription_positions_filtering.rbs +15 -0
  252. data/sig/pg_eventstore/query_builders/events_filtering_query.rbs +9 -51
  253. data/sig/pg_eventstore/query_builders/events_global_index_filtering.rbs +68 -0
  254. data/sig/pg_eventstore/query_builders/filters/collection.rbs +84 -0
  255. data/sig/pg_eventstore/query_builders/filters/event_type_filter.rbs +19 -0
  256. data/sig/pg_eventstore/query_builders/filters/filter_row.rbs +21 -0
  257. data/sig/pg_eventstore/query_builders/filters/marker_filter.rbs +13 -0
  258. data/sig/pg_eventstore/query_builders/filters/marker_filter_row.rbs +19 -0
  259. data/sig/pg_eventstore/query_builders/filters/stream_filter.rbs +24 -0
  260. data/sig/pg_eventstore/query_builders/index_based_events_filtering.rbs +60 -0
  261. data/sig/pg_eventstore/query_builders/partitions_filtering.rbs +29 -10
  262. data/sig/pg_eventstore/query_builders/read_cursor/stream_cursor.rbs +47 -0
  263. data/sig/pg_eventstore/query_builders/streams_global_index_filtering.rbs +27 -0
  264. data/sig/pg_eventstore/query_builders/subscription_events_filtering.rbs +26 -0
  265. data/sig/pg_eventstore/query_strategy/async.rbs +17 -0
  266. data/sig/pg_eventstore/query_strategy/foreground.rbs +11 -0
  267. data/sig/pg_eventstore/query_strategy.rbs +7 -0
  268. data/sig/pg_eventstore/raw_event.rbs +20 -0
  269. data/sig/pg_eventstore/sql_builder.rbs +32 -10
  270. data/sig/pg_eventstore/stream.rbs +10 -18
  271. data/sig/pg_eventstore/stream_global_index.rbs +14 -0
  272. data/sig/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rbs +5 -4
  273. data/sig/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rbs +9 -0
  274. data/sig/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rbs +17 -12
  275. data/sig/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rbs +16 -8
  276. data/sig/pg_eventstore/subscriptions/event_subscription_position_queries.rbs +30 -0
  277. data/sig/pg_eventstore/subscriptions/events_processor.rbs +12 -5
  278. data/sig/pg_eventstore/subscriptions/events_processor_consumer/multiple.rbs +17 -0
  279. data/sig/pg_eventstore/subscriptions/events_processor_consumer/replica.rbs +17 -0
  280. data/sig/pg_eventstore/subscriptions/events_processor_consumer/single.rbs +17 -0
  281. data/sig/pg_eventstore/subscriptions/events_processor_consumer.rbs +14 -0
  282. data/sig/pg_eventstore/subscriptions/events_subscription_position_worker.rbs +28 -0
  283. data/sig/pg_eventstore/subscriptions/queries/subscription_queries.rbs +18 -50
  284. data/sig/pg_eventstore/subscriptions/replica_subscription_handler.rbs +33 -0
  285. data/sig/pg_eventstore/subscriptions/replica_subscription_runner.rbs +4 -0
  286. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/collection.rbs +14 -0
  287. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/index_read_strategy.rbs +23 -0
  288. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/replication_strategy.rbs +23 -0
  289. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy.rbs +11 -0
  290. data/sig/pg_eventstore/subscriptions/subscription_feeder.rbs +13 -10
  291. data/sig/pg_eventstore/subscriptions/subscription_handler_performance.rbs +1 -1
  292. data/sig/pg_eventstore/subscriptions/subscription_runner.rbs +13 -5
  293. data/sig/pg_eventstore/subscriptions/subscription_runners_feeder.rbs +5 -5
  294. data/sig/pg_eventstore/subscriptions/subscriptions_lifecycle.rbs +4 -6
  295. data/sig/pg_eventstore/subscriptions/subscriptions_manager.rbs +29 -43
  296. data/sig/pg_eventstore/synchronized_array.rbs +4 -0
  297. data/sig/pg_eventstore/utils.rbs +18 -11
  298. data/sig/pg_eventstore/web/application.rbs +13 -3
  299. data/sig/pg_eventstore/web/paginator/base_collection.rbs +2 -0
  300. data/sig/pg_eventstore/web/paginator/event_types_collection.rbs +4 -0
  301. data/sig/pg_eventstore/web/paginator/events_collection.rbs +11 -11
  302. data/sig/pg_eventstore/web/paginator/helpers.rbs +6 -15
  303. data/sig/pg_eventstore/web/paginator/markers_collection.rbs +13 -0
  304. data/sig/pg_eventstore/web/paginator/stream_contexts_collection.rbs +4 -0
  305. data/sig/pg_eventstore/web/paginator/stream_names_collection.rbs +4 -0
  306. data/sig/pg_eventstore/web/paginator/streams_collection.rbs +30 -0
  307. data/sig/pg_eventstore.rbs +8 -26
  308. metadata +181 -21
  309. data/lib/pg_eventstore/commands/all_stream_read_grouped.rb +0 -69
  310. data/lib/pg_eventstore/commands/regular_stream_read_grouped.rb +0 -31
  311. data/lib/pg_eventstore/subscriptions/queries/service_queries.rb +0 -73
  312. data/lib/pg_eventstore/subscriptions/subscription_position_evaluation.rb +0 -195
  313. data/lib/pg_eventstore/web/views/home/partials/system_stream_filter.erb +0 -15
  314. data/sig/pg_eventstore/commands/all_stream_read_grouped.rbs +0 -16
  315. data/sig/pg_eventstore/commands/regular_stream_read_grouped.rbs +0 -8
  316. data/sig/pg_eventstore/subscriptions/queries/service_queries.rbs +0 -15
  317. data/sig/pg_eventstore/subscriptions/subscription_position_evaluation.rbs +0 -53
  318. data/sig/pg_eventstore/subscriptions/synchronized_array.rbs +0 -4
  319. /data/sig/interfaces/{_raw_event_handler.rbs → raw_event_handler.rbs} +0 -0
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_eventstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.13.4
4
+ version: 3.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Dzyzenko
@@ -13,30 +13,36 @@ dependencies:
13
13
  name: connection_pool
14
14
  requirement: !ruby/object:Gem::Requirement
15
15
  requirements:
16
- - - "~>"
16
+ - - ">="
17
+ - !ruby/object:Gem::Version
18
+ version: 2.5.4
19
+ - - "<"
17
20
  - !ruby/object:Gem::Version
18
- version: '2.4'
21
+ version: '4'
19
22
  type: :runtime
20
23
  prerelease: false
21
24
  version_requirements: !ruby/object:Gem::Requirement
22
25
  requirements:
23
- - - "~>"
26
+ - - ">="
27
+ - !ruby/object:Gem::Version
28
+ version: 2.5.4
29
+ - - "<"
24
30
  - !ruby/object:Gem::Version
25
- version: '2.4'
31
+ version: '4'
26
32
  - !ruby/object:Gem::Dependency
27
33
  name: pg
28
34
  requirement: !ruby/object:Gem::Requirement
29
35
  requirements:
30
36
  - - "~>"
31
37
  - !ruby/object:Gem::Version
32
- version: '1.5'
38
+ version: '1'
33
39
  type: :runtime
34
40
  prerelease: false
35
41
  version_requirements: !ruby/object:Gem::Requirement
36
42
  requirements:
37
43
  - - "~>"
38
44
  - !ruby/object:Gem::Version
39
- version: '1.5'
45
+ version: '1'
40
46
  - !ruby/object:Gem::Dependency
41
47
  name: sinatra
42
48
  requirement: !ruby/object:Gem::Requirement
@@ -62,7 +68,8 @@ email:
62
68
  - ivan.dzyzenko@gmail.com
63
69
  executables:
64
70
  - pg-eventstore
65
- extensions: []
71
+ extensions:
72
+ - ext/pg_eventstore_ext/extconf.rb
66
73
  extra_rdoc_files: []
67
74
  files:
68
75
  - ".rubocop.yml"
@@ -71,29 +78,68 @@ files:
71
78
  - LICENSE.txt
72
79
  - README.md
73
80
  - db/migrations/0_create_extensions.sql
81
+ - db/migrations/10_setup_pg_cron.rb
82
+ - db/migrations/11_add_events_link_global_position.sql
83
+ - db/migrations/12_migrate_legacy_links.rb
84
+ - db/migrations/13_remove_events_link_id.sql
85
+ - db/migrations/14_remove_ids_events_id_index.sql
86
+ - db/migrations/15_create_streams_global_index.sql
87
+ - db/migrations/16_populate_streams_global_index.rb
88
+ - db/migrations/17_create_events_global_index.sql
89
+ - db/migrations/18_populate_events_global_index.rb
90
+ - db/migrations/19_populate_events_global_index_p2.rb
74
91
  - db/migrations/1_create_events.sql
92
+ - db/migrations/20_migrate_subscriptions_current_position.sql
93
+ - db/migrations/21_create_partitions_stats.sql
94
+ - db/migrations/22_drop_streams_sql_view.sql
95
+ - db/migrations/23_adjust_partitions_indexes.sql
96
+ - db/migrations/24_drop_legacy_events_indexes.sql
97
+ - db/migrations/25_add_parent_partitions_info_to_partitions.sql
98
+ - db/migrations/26_change_events_stream_revision_type.rb
99
+ - db/migrations/27_drop_events_horizon.sql
100
+ - db/migrations/28_create_maintenance_tasks.sql
101
+ - db/migrations/29_create_event_markers.sql
75
102
  - db/migrations/2_create_subscriptions.sql
103
+ - db/migrations/30_improve_partitions_search_in_admin_ui.rb
104
+ - db/migrations/31_drop_events_id_default_value.sql
105
+ - db/migrations/32_create_parittions_triggers.sql
76
106
  - db/migrations/3_create_subscription_commands.sql
77
107
  - db/migrations/4_create_subscriptions_set_commands.sql
78
108
  - db/migrations/5_partitions.sql
79
109
  - db/migrations/6_add_commands_data.sql
80
110
  - db/migrations/7_support_reading_streams_system_stream.sql
81
111
  - db/migrations/8_improve_0_revision_partial_index.sql
112
+ - db/migrations/9_create_events_horizon.sql
113
+ - docs/AGENTS.fragment.md
82
114
  - docs/admin_ui.md
83
115
  - docs/appending_events.md
84
116
  - docs/configuration.md
117
+ - docs/event_tracing.md
85
118
  - docs/events_and_streams.md
86
119
  - docs/how_it_works.md
87
120
  - docs/linking_events.md
88
121
  - docs/maintenance.md
89
122
  - docs/multiple_commands.md
90
123
  - docs/reading_events.md
124
+ - docs/reading_streams.md
125
+ - docs/replication.md
91
126
  - docs/subscriptions.md
92
127
  - docs/writing_middleware.md
93
128
  - exe/pg-eventstore
129
+ - ext/pg_eventstore_ext/extconf.rb
130
+ - ext/pg_eventstore_ext/pg_eventstore_ext.c
94
131
  - lib/pg_eventstore.rb
95
132
  - lib/pg_eventstore/abstract_command.rb
133
+ - lib/pg_eventstore/async_runner.rb
134
+ - lib/pg_eventstore/basic_config.rb
96
135
  - lib/pg_eventstore/callbacks.rb
136
+ - lib/pg_eventstore/chunks.rb
137
+ - lib/pg_eventstore/chunks/chunk.rb
138
+ - lib/pg_eventstore/chunks/read_api_events_index_chunk.rb
139
+ - lib/pg_eventstore/chunks/replica_events_index_chunk.rb
140
+ - lib/pg_eventstore/chunks/repository.rb
141
+ - lib/pg_eventstore/chunks/subscription_checkpoint_chunk.rb
142
+ - lib/pg_eventstore/chunks/subscription_events_index_chunk.rb
97
143
  - lib/pg_eventstore/cli.rb
98
144
  - lib/pg_eventstore/cli/commands.rb
99
145
  - lib/pg_eventstore/cli/commands/base_command.rb
@@ -116,7 +162,6 @@ files:
116
162
  - lib/pg_eventstore/cli/wait_for_subscriptions_set_shutdown.rb
117
163
  - lib/pg_eventstore/client.rb
118
164
  - lib/pg_eventstore/commands.rb
119
- - lib/pg_eventstore/commands/all_stream_read_grouped.rb
120
165
  - lib/pg_eventstore/commands/append.rb
121
166
  - lib/pg_eventstore/commands/delete_event.rb
122
167
  - lib/pg_eventstore/commands/delete_stream.rb
@@ -125,8 +170,16 @@ files:
125
170
  - lib/pg_eventstore/commands/link_to.rb
126
171
  - lib/pg_eventstore/commands/multiple.rb
127
172
  - lib/pg_eventstore/commands/read.rb
128
- - lib/pg_eventstore/commands/regular_stream_read_grouped.rb
173
+ - lib/pg_eventstore/commands/read_grouped.rb
174
+ - lib/pg_eventstore/commands/read_streams.rb
175
+ - lib/pg_eventstore/commands/read_streams_paginated.rb
129
176
  - lib/pg_eventstore/commands/regular_stream_read_paginated.rb
177
+ - lib/pg_eventstore/commands/revision_check/current_revision.rb
178
+ - lib/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rb
179
+ - lib/pg_eventstore/commands/revision_check/expected_revision.rb
180
+ - lib/pg_eventstore/commands/revision_check/stream_revision_check.rb
181
+ - lib/pg_eventstore/commands/revision_check/stream_revision_comparison.rb
182
+ - lib/pg_eventstore/commands/stream_revision.rb
130
183
  - lib/pg_eventstore/commands/system_stream_read_paginated.rb
131
184
  - lib/pg_eventstore/config.rb
132
185
  - lib/pg_eventstore/connection.rb
@@ -134,44 +187,83 @@ files:
134
187
  - lib/pg_eventstore/event.rb
135
188
  - lib/pg_eventstore/event_class_resolver.rb
136
189
  - lib/pg_eventstore/event_deserializer.rb
190
+ - lib/pg_eventstore/event_global_index.rb
191
+ - lib/pg_eventstore/event_marker.rb
192
+ - lib/pg_eventstore/event_marker_index.rb
137
193
  - lib/pg_eventstore/event_serializer.rb
194
+ - lib/pg_eventstore/extensions/acts_as_configurable.rb
138
195
  - lib/pg_eventstore/extensions/callback_handlers_extension.rb
139
196
  - lib/pg_eventstore/extensions/callbacks_extension.rb
197
+ - lib/pg_eventstore/extensions/options_defaults.rb
140
198
  - lib/pg_eventstore/extensions/options_extension.rb
141
199
  - lib/pg_eventstore/extensions/using_connection_extension.rb
200
+ - lib/pg_eventstore/feature_marker.rb
142
201
  - lib/pg_eventstore/maintenance.rb
143
202
  - lib/pg_eventstore/middleware.rb
203
+ - lib/pg_eventstore/middleware/event_tracing.rb
144
204
  - lib/pg_eventstore/partition.rb
145
205
  - lib/pg_eventstore/pg_connection.rb
146
206
  - lib/pg_eventstore/queries.rb
207
+ - lib/pg_eventstore/queries/event_marker_queries.rb
147
208
  - lib/pg_eventstore/queries/event_queries.rb
209
+ - lib/pg_eventstore/queries/events_global_index_queries.rb
210
+ - lib/pg_eventstore/queries/index_filtering_queries.rb
148
211
  - lib/pg_eventstore/queries/links_resolver.rb
149
212
  - lib/pg_eventstore/queries/maintenance_queries.rb
150
213
  - lib/pg_eventstore/queries/partition_queries.rb
214
+ - lib/pg_eventstore/queries/replica_queries.rb
215
+ - lib/pg_eventstore/queries/streams_global_index_queries.rb
151
216
  - lib/pg_eventstore/queries/transaction_queries.rb
152
217
  - lib/pg_eventstore/query_builders/basic_filtering.rb
218
+ - lib/pg_eventstore/query_builders/event_markers_filtering.rb
219
+ - lib/pg_eventstore/query_builders/event_markers_index_filtering.rb
220
+ - lib/pg_eventstore/query_builders/event_subscription_positions_filtering.rb
153
221
  - lib/pg_eventstore/query_builders/events_filtering.rb
222
+ - lib/pg_eventstore/query_builders/events_global_index_filtering.rb
223
+ - lib/pg_eventstore/query_builders/filters/collection.rb
224
+ - lib/pg_eventstore/query_builders/filters/event_type_filter.rb
225
+ - lib/pg_eventstore/query_builders/filters/filter_row.rb
226
+ - lib/pg_eventstore/query_builders/filters/marker_filter.rb
227
+ - lib/pg_eventstore/query_builders/filters/marker_filter_row.rb
228
+ - lib/pg_eventstore/query_builders/filters/stream_filter.rb
229
+ - lib/pg_eventstore/query_builders/index_based_events_filtering.rb
154
230
  - lib/pg_eventstore/query_builders/partitions_filtering.rb
231
+ - lib/pg_eventstore/query_builders/read_cursor/stream_cursor.rb
232
+ - lib/pg_eventstore/query_builders/streams_global_index_filtering.rb
233
+ - lib/pg_eventstore/query_builders/subscription_events_filtering.rb
234
+ - lib/pg_eventstore/query_strategy.rb
235
+ - lib/pg_eventstore/query_strategy/async.rb
236
+ - lib/pg_eventstore/query_strategy/foreground.rb
237
+ - lib/pg_eventstore/raw_event.rb
155
238
  - lib/pg_eventstore/rspec/has_option_matcher.rb
156
239
  - lib/pg_eventstore/rspec/test_helpers.rb
157
240
  - lib/pg_eventstore/sql_builder.rb
158
241
  - lib/pg_eventstore/stream.rb
242
+ - lib/pg_eventstore/stream_global_index.rb
159
243
  - lib/pg_eventstore/subscriptions/basic_runner.rb
160
244
  - lib/pg_eventstore/subscriptions/callback_handlers/commands_handler_handlers.rb
161
245
  - lib/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rb
246
+ - lib/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rb
162
247
  - lib/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rb
163
248
  - lib/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rb
164
249
  - lib/pg_eventstore/subscriptions/command_handlers/subscription_feeder_commands.rb
165
250
  - lib/pg_eventstore/subscriptions/command_handlers/subscription_runners_commands.rb
166
251
  - lib/pg_eventstore/subscriptions/commands_handler.rb
167
252
  - lib/pg_eventstore/subscriptions/events_processor.rb
253
+ - lib/pg_eventstore/subscriptions/events_processor_consumer.rb
254
+ - lib/pg_eventstore/subscriptions/events_processor_consumer/multiple.rb
255
+ - lib/pg_eventstore/subscriptions/events_processor_consumer/replica.rb
256
+ - lib/pg_eventstore/subscriptions/events_processor_consumer/single.rb
257
+ - lib/pg_eventstore/subscriptions/events_subscription_position_worker.rb
168
258
  - lib/pg_eventstore/subscriptions/extensions/base_command_extension.rb
169
259
  - lib/pg_eventstore/subscriptions/extensions/command_class_lookup_extension.rb
170
- - lib/pg_eventstore/subscriptions/queries/service_queries.rb
260
+ - lib/pg_eventstore/subscriptions/queries/event_subscription_position_queries.rb
171
261
  - lib/pg_eventstore/subscriptions/queries/subscription_command_queries.rb
172
262
  - lib/pg_eventstore/subscriptions/queries/subscription_queries.rb
173
263
  - lib/pg_eventstore/subscriptions/queries/subscriptions_set_command_queries.rb
174
264
  - lib/pg_eventstore/subscriptions/queries/subscriptions_set_queries.rb
265
+ - lib/pg_eventstore/subscriptions/replica_subscription_handler.rb
266
+ - lib/pg_eventstore/subscriptions/replica_subscription_runner.rb
175
267
  - lib/pg_eventstore/subscriptions/runner_recovery_strategies.rb
176
268
  - lib/pg_eventstore/subscriptions/runner_recovery_strategies/restore_connection.rb
177
269
  - lib/pg_eventstore/subscriptions/runner_recovery_strategies/restore_subscription_feeder.rb
@@ -179,6 +271,10 @@ files:
179
271
  - lib/pg_eventstore/subscriptions/runner_recovery_strategy.rb
180
272
  - lib/pg_eventstore/subscriptions/runner_state.rb
181
273
  - lib/pg_eventstore/subscriptions/subscription.rb
274
+ - lib/pg_eventstore/subscriptions/subscription_feed_strategies/collection.rb
275
+ - lib/pg_eventstore/subscriptions/subscription_feed_strategies/index_read_strategy.rb
276
+ - lib/pg_eventstore/subscriptions/subscription_feed_strategies/replication_strategy.rb
277
+ - lib/pg_eventstore/subscriptions/subscription_feed_strategy.rb
182
278
  - lib/pg_eventstore/subscriptions/subscription_feeder.rb
183
279
  - lib/pg_eventstore/subscriptions/subscription_feeder_commands.rb
184
280
  - lib/pg_eventstore/subscriptions/subscription_feeder_commands/base.rb
@@ -188,7 +284,6 @@ files:
188
284
  - lib/pg_eventstore/subscriptions/subscription_feeder_commands/stop.rb
189
285
  - lib/pg_eventstore/subscriptions/subscription_feeder_commands/stop_all.rb
190
286
  - lib/pg_eventstore/subscriptions/subscription_handler_performance.rb
191
- - lib/pg_eventstore/subscriptions/subscription_position_evaluation.rb
192
287
  - lib/pg_eventstore/subscriptions/subscription_runner.rb
193
288
  - lib/pg_eventstore/subscriptions/subscription_runner_commands.rb
194
289
  - lib/pg_eventstore/subscriptions/subscription_runner_commands/base.rb
@@ -201,7 +296,7 @@ files:
201
296
  - lib/pg_eventstore/subscriptions/subscriptions_manager.rb
202
297
  - lib/pg_eventstore/subscriptions/subscriptions_set.rb
203
298
  - lib/pg_eventstore/subscriptions/subscriptions_set_lifecycle.rb
204
- - lib/pg_eventstore/subscriptions/synchronized_array.rb
299
+ - lib/pg_eventstore/synchronized_array.rb
205
300
  - lib/pg_eventstore/tasks/setup.rake
206
301
  - lib/pg_eventstore/utils.rb
207
302
  - lib/pg_eventstore/version.rb
@@ -211,9 +306,11 @@ files:
211
306
  - lib/pg_eventstore/web/paginator/event_types_collection.rb
212
307
  - lib/pg_eventstore/web/paginator/events_collection.rb
213
308
  - lib/pg_eventstore/web/paginator/helpers.rb
309
+ - lib/pg_eventstore/web/paginator/markers_collection.rb
214
310
  - lib/pg_eventstore/web/paginator/stream_contexts_collection.rb
215
311
  - lib/pg_eventstore/web/paginator/stream_ids_collection.rb
216
312
  - lib/pg_eventstore/web/paginator/stream_names_collection.rb
313
+ - lib/pg_eventstore/web/paginator/streams_collection.rb
217
314
  - lib/pg_eventstore/web/public/fonts/vendor/FontAwesome.otf
218
315
  - lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.eot
219
316
  - lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.svg
@@ -245,28 +342,40 @@ files:
245
342
  - lib/pg_eventstore/web/views/home/dashboard.erb
246
343
  - lib/pg_eventstore/web/views/home/partials/event_filter.erb
247
344
  - lib/pg_eventstore/web/views/home/partials/events.erb
345
+ - lib/pg_eventstore/web/views/home/partials/markers_filter.erb
248
346
  - lib/pg_eventstore/web/views/home/partials/pagination_links.erb
249
347
  - lib/pg_eventstore/web/views/home/partials/stream_filter.erb
250
- - lib/pg_eventstore/web/views/home/partials/system_stream_filter.erb
251
348
  - lib/pg_eventstore/web/views/layouts/application.erb
349
+ - lib/pg_eventstore/web/views/streams/index.erb
350
+ - lib/pg_eventstore/web/views/streams/partials/streams.erb
252
351
  - lib/pg_eventstore/web/views/subscriptions/index.erb
253
352
  - pg_eventstore.gemspec
254
353
  - rbs_collection.lock.yaml
255
354
  - rbs_collection.yaml
256
- - sig/interfaces/_raw_event_handler.rbs
355
+ - sig/interfaces/_raw_events_handler.rbs
257
356
  - sig/interfaces/callback.rbs
258
357
  - sig/interfaces/event_class_resolver.rbs
259
358
  - sig/interfaces/event_modifier.rbs
260
359
  - sig/interfaces/failed_subscription_notifier.rbs
360
+ - sig/interfaces/raw_event_handler.rbs
261
361
  - sig/interfaces/restart_terminator.rbs
262
362
  - sig/interfaces/subscription_handler.rbs
263
363
  - sig/manifest.yaml
264
364
  - sig/pg/basic_type_registry.rbs
265
365
  - sig/pg/connection.rbs
266
366
  - sig/pg/constants.rbs
367
+ - sig/pg/result.rbs
267
368
  - sig/pg_eventstore.rbs
268
369
  - sig/pg_eventstore/abstract_command.rbs
370
+ - sig/pg_eventstore/async_runner.rbs
371
+ - sig/pg_eventstore/basic_config.rbs
269
372
  - sig/pg_eventstore/callbacks.rbs
373
+ - sig/pg_eventstore/chunks/chunk.rbs
374
+ - sig/pg_eventstore/chunks/read_api_events_index_chunk.rbs
375
+ - sig/pg_eventstore/chunks/replica_events_index_chunk.rbs
376
+ - sig/pg_eventstore/chunks/repository.rbs
377
+ - sig/pg_eventstore/chunks/subscription_checkpoint_chunk.rbs
378
+ - sig/pg_eventstore/chunks/subscription_events_index_chunk.rbs
270
379
  - sig/pg_eventstore/cli.rbs
271
380
  - sig/pg_eventstore/cli/commands/base_command.rbs
272
381
  - sig/pg_eventstore/cli/commands/callback_handlers/start_cmd_handlers.rbs
@@ -285,7 +394,6 @@ files:
285
394
  - sig/pg_eventstore/cli/try_unlock_subscriptions_set.rbs
286
395
  - sig/pg_eventstore/cli/wait_for_subscriptions_set_shutdown.rbs
287
396
  - sig/pg_eventstore/client.rbs
288
- - sig/pg_eventstore/commands/all_stream_read_grouped.rbs
289
397
  - sig/pg_eventstore/commands/append.rbs
290
398
  - sig/pg_eventstore/commands/delete_event.rbs
291
399
  - sig/pg_eventstore/commands/delete_stream.rbs
@@ -294,8 +402,16 @@ files:
294
402
  - sig/pg_eventstore/commands/link_to.rbs
295
403
  - sig/pg_eventstore/commands/multiple.rbs
296
404
  - sig/pg_eventstore/commands/read.rbs
297
- - sig/pg_eventstore/commands/regular_stream_read_grouped.rbs
405
+ - sig/pg_eventstore/commands/read_grouped.rbs
406
+ - sig/pg_eventstore/commands/read_streams.rbs
407
+ - sig/pg_eventstore/commands/read_streams_paginated.rbs
298
408
  - sig/pg_eventstore/commands/regular_stream_read_paginated.rbs
409
+ - sig/pg_eventstore/commands/revision_check/current_revision.rbs
410
+ - sig/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rbs
411
+ - sig/pg_eventstore/commands/revision_check/expected_revision.rbs
412
+ - sig/pg_eventstore/commands/revision_check/stream_revision_check.rbs
413
+ - sig/pg_eventstore/commands/revision_check/stream_revision_comparison.rbs
414
+ - sig/pg_eventstore/commands/stream_revision.rbs
299
415
  - sig/pg_eventstore/commands/system_stream_read_paginated.rbs
300
416
  - sig/pg_eventstore/config.rbs
301
417
  - sig/pg_eventstore/connection.rbs
@@ -303,48 +419,91 @@ files:
303
419
  - sig/pg_eventstore/event.rbs
304
420
  - sig/pg_eventstore/event_class_resolver.rbs
305
421
  - sig/pg_eventstore/event_deserializer.rbs
422
+ - sig/pg_eventstore/event_global_index.rbs
423
+ - sig/pg_eventstore/event_marker.rbs
424
+ - sig/pg_eventstore/event_marker_index.rbs
306
425
  - sig/pg_eventstore/event_serializer.rbs
426
+ - sig/pg_eventstore/extensions/acts_as_configurable.rbs
307
427
  - sig/pg_eventstore/extensions/callback_handlers_extension.rbs
308
428
  - sig/pg_eventstore/extensions/callbacks_extension.rbs
429
+ - sig/pg_eventstore/extensions/options_defaults.rbs
309
430
  - sig/pg_eventstore/extensions/options_extension.rbs
310
431
  - sig/pg_eventstore/extensions/using_connection_extension.rbs
432
+ - sig/pg_eventstore/feature_marker.rbs
311
433
  - sig/pg_eventstore/maintenance.rbs
312
434
  - sig/pg_eventstore/middleware.rbs
435
+ - sig/pg_eventstore/middleware/event_trace.rbs
313
436
  - sig/pg_eventstore/partition.rbs
314
437
  - sig/pg_eventstore/pg_connection.rbs
315
438
  - sig/pg_eventstore/queries.rbs
439
+ - sig/pg_eventstore/queries/event_marker_queries.rbs
316
440
  - sig/pg_eventstore/queries/event_queries.rbs
441
+ - sig/pg_eventstore/queries/events_global_index_queries.rbs
442
+ - sig/pg_eventstore/queries/index_filtering_queries.rbs
317
443
  - sig/pg_eventstore/queries/links_resolver.rbs
318
444
  - sig/pg_eventstore/queries/maintenance_queries.rbs
319
445
  - sig/pg_eventstore/queries/partition_queries.rbs
446
+ - sig/pg_eventstore/queries/replica_queries.rbs
447
+ - sig/pg_eventstore/queries/streams_global_index_queries.rbs
320
448
  - sig/pg_eventstore/queries/transaction_queries.rbs
321
449
  - sig/pg_eventstore/query_builders/basic_filtering.rbs
450
+ - sig/pg_eventstore/query_builders/event_markers_filtering.rbs
451
+ - sig/pg_eventstore/query_builders/event_markers_index_filtering.rbs
452
+ - sig/pg_eventstore/query_builders/event_subscription_positions_filtering.rbs
322
453
  - sig/pg_eventstore/query_builders/events_filtering_query.rbs
454
+ - sig/pg_eventstore/query_builders/events_global_index_filtering.rbs
455
+ - sig/pg_eventstore/query_builders/filters/collection.rbs
456
+ - sig/pg_eventstore/query_builders/filters/event_type_filter.rbs
457
+ - sig/pg_eventstore/query_builders/filters/filter_row.rbs
458
+ - sig/pg_eventstore/query_builders/filters/marker_filter.rbs
459
+ - sig/pg_eventstore/query_builders/filters/marker_filter_row.rbs
460
+ - sig/pg_eventstore/query_builders/filters/stream_filter.rbs
461
+ - sig/pg_eventstore/query_builders/index_based_events_filtering.rbs
323
462
  - sig/pg_eventstore/query_builders/partitions_filtering.rbs
463
+ - sig/pg_eventstore/query_builders/read_cursor/stream_cursor.rbs
464
+ - sig/pg_eventstore/query_builders/streams_global_index_filtering.rbs
465
+ - sig/pg_eventstore/query_builders/subscription_events_filtering.rbs
466
+ - sig/pg_eventstore/query_strategy.rbs
467
+ - sig/pg_eventstore/query_strategy/async.rbs
468
+ - sig/pg_eventstore/query_strategy/foreground.rbs
469
+ - sig/pg_eventstore/raw_event.rbs
324
470
  - sig/pg_eventstore/sql_builder.rbs
325
471
  - sig/pg_eventstore/stream.rbs
472
+ - sig/pg_eventstore/stream_global_index.rbs
326
473
  - sig/pg_eventstore/subscriptions/basic_runner.rbs
327
474
  - sig/pg_eventstore/subscriptions/callback_handlers/commands_handler_handlers.rbs
328
475
  - sig/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rbs
476
+ - sig/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rbs
329
477
  - sig/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rbs
330
478
  - sig/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rbs
331
479
  - sig/pg_eventstore/subscriptions/command_handlers/subscription_feeder_commands.rbs
332
480
  - sig/pg_eventstore/subscriptions/command_handlers/subscription_runners_commands.rbs
333
481
  - sig/pg_eventstore/subscriptions/commands_handler.rbs
482
+ - sig/pg_eventstore/subscriptions/event_subscription_position_queries.rbs
334
483
  - sig/pg_eventstore/subscriptions/events_processor.rbs
484
+ - sig/pg_eventstore/subscriptions/events_processor_consumer.rbs
485
+ - sig/pg_eventstore/subscriptions/events_processor_consumer/multiple.rbs
486
+ - sig/pg_eventstore/subscriptions/events_processor_consumer/replica.rbs
487
+ - sig/pg_eventstore/subscriptions/events_processor_consumer/single.rbs
488
+ - sig/pg_eventstore/subscriptions/events_subscription_position_worker.rbs
335
489
  - sig/pg_eventstore/subscriptions/extensions/base_command_extension.rbs
336
490
  - sig/pg_eventstore/subscriptions/extensions/command_class_lookup_extension.rbs
337
- - sig/pg_eventstore/subscriptions/queries/service_queries.rbs
338
491
  - sig/pg_eventstore/subscriptions/queries/subscription_command_queries.rbs
339
492
  - sig/pg_eventstore/subscriptions/queries/subscription_queries.rbs
340
493
  - sig/pg_eventstore/subscriptions/queries/subscriptions_set_command_queries.rbs
341
494
  - sig/pg_eventstore/subscriptions/queries/subscriptions_set_queries.rbs
495
+ - sig/pg_eventstore/subscriptions/replica_subscription_handler.rbs
496
+ - sig/pg_eventstore/subscriptions/replica_subscription_runner.rbs
342
497
  - sig/pg_eventstore/subscriptions/runner_recovery_strategies/restore_connection.rbs
343
498
  - sig/pg_eventstore/subscriptions/runner_recovery_strategies/restore_subscription_feeder.rbs
344
499
  - sig/pg_eventstore/subscriptions/runner_recovery_strategies/restore_subscription_runner.rbs
345
500
  - sig/pg_eventstore/subscriptions/runner_recovery_strategy.rbs
346
501
  - sig/pg_eventstore/subscriptions/runner_state.rbs
347
502
  - sig/pg_eventstore/subscriptions/subscription.rbs
503
+ - sig/pg_eventstore/subscriptions/subscription_feed_strategy.rbs
504
+ - sig/pg_eventstore/subscriptions/subscription_feed_strategy/collection.rbs
505
+ - sig/pg_eventstore/subscriptions/subscription_feed_strategy/index_read_strategy.rbs
506
+ - sig/pg_eventstore/subscriptions/subscription_feed_strategy/replication_strategy.rbs
348
507
  - sig/pg_eventstore/subscriptions/subscription_feeder.rbs
349
508
  - sig/pg_eventstore/subscriptions/subscription_feeder_commands.rbs
350
509
  - sig/pg_eventstore/subscriptions/subscription_feeder_commands/base.rbs
@@ -354,7 +513,6 @@ files:
354
513
  - sig/pg_eventstore/subscriptions/subscription_feeder_commands/stop.rbs
355
514
  - sig/pg_eventstore/subscriptions/subscription_feeder_commands/stop_all.rbs
356
515
  - sig/pg_eventstore/subscriptions/subscription_handler_performance.rbs
357
- - sig/pg_eventstore/subscriptions/subscription_position_evaluation.rbs
358
516
  - sig/pg_eventstore/subscriptions/subscription_runner.rbs
359
517
  - sig/pg_eventstore/subscriptions/subscription_runner_commands.rbs
360
518
  - sig/pg_eventstore/subscriptions/subscription_runner_commands/base.rbs
@@ -367,7 +525,7 @@ files:
367
525
  - sig/pg_eventstore/subscriptions/subscriptions_manager.rbs
368
526
  - sig/pg_eventstore/subscriptions/subscriptions_set.rbs
369
527
  - sig/pg_eventstore/subscriptions/subscriptions_set_lifecycle.rbs
370
- - sig/pg_eventstore/subscriptions/synchronized_array.rbs
528
+ - sig/pg_eventstore/synchronized_array.rbs
371
529
  - sig/pg_eventstore/utils.rbs
372
530
  - sig/pg_eventstore/version.rbs
373
531
  - sig/pg_eventstore/web/application.rbs
@@ -375,9 +533,11 @@ files:
375
533
  - sig/pg_eventstore/web/paginator/event_types_collection.rbs
376
534
  - sig/pg_eventstore/web/paginator/events_collection.rbs
377
535
  - sig/pg_eventstore/web/paginator/helpers.rbs
536
+ - sig/pg_eventstore/web/paginator/markers_collection.rbs
378
537
  - sig/pg_eventstore/web/paginator/stream_contexts_collection.rbs
379
538
  - sig/pg_eventstore/web/paginator/stream_ids_collection.rbs
380
539
  - sig/pg_eventstore/web/paginator/stream_names_collection.rbs
540
+ - sig/pg_eventstore/web/paginator/streams_collection.rbs
381
541
  - sig/pg_eventstore/web/subscriptions/helpers.rbs
382
542
  - sig/pg_eventstore/web/subscriptions/set_collection.rbs
383
543
  - sig/pg_eventstore/web/subscriptions/subscriptions.rbs
@@ -401,7 +561,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
401
561
  requirements:
402
562
  - - ">="
403
563
  - !ruby/object:Gem::Version
404
- version: '3.0'
564
+ version: '3.3'
405
565
  required_rubygems_version: !ruby/object:Gem::Requirement
406
566
  requirements:
407
567
  - - ">="
@@ -1,69 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PgEventstore
4
- module Commands
5
- # @!visibility private
6
- class AllStreamReadGrouped < AbstractCommand
7
- # @param stream [PgEventstore::Stream]
8
- # @param options [Hash] request options
9
- # @option options [String] :direction read direction
10
- # @option options [Integer, Symbol] :from_position. **Use this option when reading from "all" stream**
11
- # @option options [Boolean] :resolve_link_tos
12
- # @option options [Hash] :filter provide it to filter events
13
- # @return [Array<PgEventstore::Event>]
14
- # @raise [PgEventstore::StreamNotFoundError]
15
- def call(stream, options: {})
16
- event_types = QueryBuilders::PartitionsFiltering.extract_event_types_filter(options)
17
- stream_filters = QueryBuilders::PartitionsFiltering.extract_streams_filter(options)
18
- stream_ids_grouped = group_stream_ids(options)
19
- options_by_event_type =
20
- queries.partitions.partitions(stream_filters, event_types).flat_map do |partition|
21
- stream_ids = stream_ids_grouped[[partition.context, partition.stream_name]]
22
- next build_filter_options_for_streams(partition, stream_ids, options) if stream_ids
23
-
24
- build_filter_options_for_partitions(partition, options)
25
- end
26
- queries.events.grouped_events(stream, options_by_event_type, **options.slice(:resolve_link_tos))
27
- end
28
-
29
- private
30
-
31
- # @param options [Hash]
32
- # @return [Hash]
33
- def group_stream_ids(options)
34
- event_stream_filters = QueryBuilders::EventsFiltering.extract_streams_filter(options)
35
- event_stream_filters.each_with_object({}) do |attrs, res|
36
- next unless attrs[:stream_id]
37
-
38
- res[[attrs[:context], attrs[:stream_name]]] ||= []
39
- res[[attrs[:context], attrs[:stream_name]]].push(attrs[:stream_id])
40
- end
41
- end
42
-
43
- # @param partition [PgEventstore::Partition]
44
- # @param stream_ids [Array<String>]
45
- # @param options [Hash]
46
- # @return [Array<Hash>]
47
- def build_filter_options_for_streams(partition, stream_ids, options)
48
- stream_ids.map do |stream_id|
49
- filter = {
50
- streams: [{ context: partition.context, stream_name: partition.stream_name, stream_id: stream_id }],
51
- event_types: [partition.event_type],
52
- }
53
- options.merge(filter: filter, max_count: 1)
54
- end
55
- end
56
-
57
- # @param partition [PgEventstore::Partition]
58
- # @param options [Hash]
59
- # @return [Hash]
60
- def build_filter_options_for_partitions(partition, options)
61
- filter = {
62
- streams: [{ context: partition.context, stream_name: partition.stream_name }],
63
- event_types: [partition.event_type],
64
- }
65
- options.merge(filter: filter, max_count: 1)
66
- end
67
- end
68
- end
69
- end
@@ -1,31 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PgEventstore
4
- module Commands
5
- # @!visibility private
6
- class RegularStreamReadGrouped < AbstractCommand
7
- # @param stream [PgEventstore::Stream]
8
- # @param options [Hash] request options
9
- # @option options [String] :direction read direction
10
- # @option options [Integer, Symbol] :from_revision. **Use this option when stream name is a normal stream name**
11
- # @option options [Integer, Symbol] :from_position. **Use this option when reading from "all" stream**
12
- # @option options [Boolean] :resolve_link_tos
13
- # @option options [Hash] :filter provide it to filter events
14
- # @return [Array<PgEventstore::Event>]
15
- # @raise [PgEventstore::StreamNotFoundError]
16
- def call(stream, options: {})
17
- queries.events.stream_revision(stream) || raise(StreamNotFoundError, stream)
18
-
19
- event_types = QueryBuilders::PartitionsFiltering.extract_event_types_filter(options)
20
- stream_filters = QueryBuilders::PartitionsFiltering.extract_streams_filter(
21
- filter: { streams: [{ context: stream.context, stream_name: stream.stream_name }] }
22
- )
23
- options_by_event_type = queries.partitions.partitions(stream_filters, event_types).map do |partition|
24
- filter = { event_types: [partition.event_type] }
25
- options.merge(filter: filter, max_count: 1)
26
- end
27
- queries.events.grouped_events(stream, options_by_event_type, **options.slice(:resolve_link_tos))
28
- end
29
- end
30
- end
31
- end
@@ -1,73 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PgEventstore
4
- # @!visibility private
5
- class ServiceQueries
6
- # @param connection [PgEventstore::Connection]
7
- def initialize(connection)
8
- @connection = connection
9
- end
10
-
11
- # @param relation_oids [Array<Integer>]
12
- # @return [Array<String>]
13
- def relation_transaction_ids(relation_oids)
14
- result = @connection.with do |conn|
15
- # Look up transactions that change table's content
16
- conn.exec_params(
17
- <<~SQL,
18
- SELECT virtualtransaction AS trx_id FROM pg_locks
19
- WHERE relation = ANY($1::oid[]) AND mode = 'RowExclusiveLock'
20
- SQL
21
- [relation_oids]
22
- )
23
- end
24
- result.map { _1['trx_id'] }
25
- end
26
-
27
- # @param relation_ids [Array<Integer>]
28
- # @param transaction_ids [Array<String>]
29
- # @return [Boolean]
30
- def transactions_in_progress?(relation_ids:, transaction_ids:)
31
- result = @connection.with do |conn|
32
- conn.exec_params(
33
- <<~SQL,
34
- SELECT 1 as one FROM pg_locks
35
- WHERE virtualtransaction = ANY($1) AND relation = ANY($2::oid[]) AND mode = 'RowExclusiveLock'
36
- LIMIT 1
37
- SQL
38
- [transaction_ids, relation_ids]
39
- )
40
- end
41
- result.any?
42
- end
43
-
44
- # @param table_names [Array<String>] existing table names
45
- # @return [Integer]
46
- def max_global_position(table_names)
47
- return 0 if table_names.empty?
48
-
49
- partition_builds = table_names.map do |table_name|
50
- SQLBuilder.new.select("MAX(#{table_name}.global_position) AS global_position").from(table_name)
51
- end
52
- sql, positional_values = SQLBuilder.union_builders(partition_builds).to_exec_params
53
- result = @connection.with do |conn|
54
- conn.exec_params("SELECT MAX(global_position) AS max_pos FROM (#{sql}) pos", positional_values)
55
- end
56
- result.first['max_pos'] || 0
57
- end
58
-
59
- # @param table_names [Array<String>]
60
- # @return [Hash<String, Integer>]
61
- def relation_ids_by_names(table_names)
62
- result = @connection.with do |conn|
63
- conn.exec_params(
64
- <<~SQL,
65
- SELECT relname, oid FROM pg_class WHERE relname = ANY($1::varchar[])
66
- SQL
67
- [table_names]
68
- )
69
- end
70
- result.each_with_object({}) { |attrs, res| res[attrs['relname']] = attrs['oid'] }
71
- end
72
- end
73
- end