pg_eventstore 2.0.0 → 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 (303) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -1
  3. data/CHANGELOG.md +186 -20
  4. data/README.md +25 -15
  5. data/db/migrations/10_setup_pg_cron.rb +1 -23
  6. data/db/migrations/15_create_streams_global_index.sql +17 -0
  7. data/db/migrations/16_populate_streams_global_index.rb +150 -0
  8. data/db/migrations/17_create_events_global_index.sql +62 -0
  9. data/db/migrations/18_populate_events_global_index.rb +124 -0
  10. data/db/migrations/19_populate_events_global_index_p2.rb +25 -0
  11. data/db/migrations/20_migrate_subscriptions_current_position.sql +19 -0
  12. data/db/migrations/21_create_partitions_stats.sql +2 -0
  13. data/db/migrations/22_drop_streams_sql_view.sql +2 -0
  14. data/db/migrations/23_adjust_partitions_indexes.sql +5 -0
  15. data/db/migrations/24_drop_legacy_events_indexes.sql +3 -0
  16. data/db/migrations/25_add_parent_partitions_info_to_partitions.sql +16 -0
  17. data/db/migrations/26_change_events_stream_revision_type.rb +35 -0
  18. data/db/migrations/27_drop_events_horizon.sql +3 -0
  19. data/db/migrations/28_create_maintenance_tasks.sql +8 -0
  20. data/db/migrations/29_create_event_markers.sql +35 -0
  21. data/db/migrations/30_improve_partitions_search_in_admin_ui.rb +24 -0
  22. data/db/migrations/31_drop_events_id_default_value.sql +1 -0
  23. data/db/migrations/32_create_parittions_triggers.sql +101 -0
  24. data/docs/AGENTS.fragment.md +696 -0
  25. data/docs/admin_ui.md +3 -1
  26. data/docs/appending_events.md +110 -49
  27. data/docs/configuration.md +69 -36
  28. data/docs/event_tracing.md +55 -0
  29. data/docs/events_and_streams.md +54 -30
  30. data/docs/how_it_works.md +57 -16
  31. data/docs/linking_events.md +2 -1
  32. data/docs/maintenance.md +14 -5
  33. data/docs/multiple_commands.md +17 -8
  34. data/docs/reading_events.md +208 -43
  35. data/docs/reading_streams.md +50 -0
  36. data/docs/replication.md +99 -0
  37. data/docs/subscriptions.md +165 -35
  38. data/docs/writing_middleware.md +25 -8
  39. data/ext/pg_eventstore_ext/extconf.rb +5 -0
  40. data/ext/pg_eventstore_ext/pg_eventstore_ext.c +74 -0
  41. data/lib/pg_eventstore/async_runner.rb +63 -0
  42. data/lib/pg_eventstore/basic_config.rb +15 -0
  43. data/lib/pg_eventstore/chunks/chunk.rb +31 -0
  44. data/lib/pg_eventstore/chunks/read_api_events_index_chunk.rb +83 -0
  45. data/lib/pg_eventstore/chunks/replica_events_index_chunk.rb +35 -0
  46. data/lib/pg_eventstore/chunks/repository.rb +73 -0
  47. data/lib/pg_eventstore/chunks/subscription_checkpoint_chunk.rb +48 -0
  48. data/lib/pg_eventstore/chunks/subscription_events_index_chunk.rb +99 -0
  49. data/lib/pg_eventstore/chunks.rb +14 -0
  50. data/lib/pg_eventstore/client.rb +163 -50
  51. data/lib/pg_eventstore/commands/append.rb +62 -43
  52. data/lib/pg_eventstore/commands/delete_event.rb +7 -8
  53. data/lib/pg_eventstore/commands/delete_stream.rb +3 -3
  54. data/lib/pg_eventstore/commands/event_modifiers/prepare_link_event.rb +9 -7
  55. data/lib/pg_eventstore/commands/event_modifiers/prepare_regular_event.rb +12 -7
  56. data/lib/pg_eventstore/commands/link_to.rb +5 -5
  57. data/lib/pg_eventstore/commands/read.rb +23 -5
  58. data/lib/pg_eventstore/commands/read_grouped.rb +46 -0
  59. data/lib/pg_eventstore/commands/read_streams.rb +18 -0
  60. data/lib/pg_eventstore/commands/read_streams_paginated.rb +56 -0
  61. data/lib/pg_eventstore/commands/regular_stream_read_paginated.rb +4 -4
  62. data/lib/pg_eventstore/commands/revision_check/current_revision.rb +51 -0
  63. data/lib/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rb +46 -0
  64. data/lib/pg_eventstore/commands/revision_check/expected_revision.rb +135 -0
  65. data/lib/pg_eventstore/commands/revision_check/stream_revision_check.rb +98 -0
  66. data/lib/pg_eventstore/commands/revision_check/stream_revision_comparison.rb +36 -0
  67. data/lib/pg_eventstore/commands/stream_revision.rb +14 -0
  68. data/lib/pg_eventstore/commands/system_stream_read_paginated.rb +4 -4
  69. data/lib/pg_eventstore/commands.rb +4 -2
  70. data/lib/pg_eventstore/config.rb +30 -9
  71. data/lib/pg_eventstore/connection.rb +21 -2
  72. data/lib/pg_eventstore/errors.rb +136 -10
  73. data/lib/pg_eventstore/event.rb +34 -2
  74. data/lib/pg_eventstore/event_deserializer.rb +5 -4
  75. data/lib/pg_eventstore/event_global_index.rb +118 -0
  76. data/lib/pg_eventstore/event_marker.rb +16 -0
  77. data/lib/pg_eventstore/event_marker_index.rb +25 -0
  78. data/lib/pg_eventstore/event_serializer.rb +6 -0
  79. data/lib/pg_eventstore/extensions/acts_as_configurable.rb +88 -0
  80. data/lib/pg_eventstore/extensions/options_defaults.rb +25 -0
  81. data/lib/pg_eventstore/extensions/options_extension.rb +2 -2
  82. data/lib/pg_eventstore/feature_marker.rb +18 -0
  83. data/lib/pg_eventstore/maintenance.rb +11 -6
  84. data/lib/pg_eventstore/middleware/event_tracing.rb +53 -0
  85. data/lib/pg_eventstore/partition.rb +6 -0
  86. data/lib/pg_eventstore/pg_connection.rb +70 -14
  87. data/lib/pg_eventstore/queries/event_marker_queries.rb +74 -0
  88. data/lib/pg_eventstore/queries/event_queries.rb +7 -93
  89. data/lib/pg_eventstore/queries/events_global_index_queries.rb +131 -0
  90. data/lib/pg_eventstore/queries/index_filtering_queries.rb +179 -0
  91. data/lib/pg_eventstore/queries/links_resolver.rb +4 -4
  92. data/lib/pg_eventstore/queries/maintenance_queries.rb +159 -42
  93. data/lib/pg_eventstore/queries/partition_queries.rb +45 -103
  94. data/lib/pg_eventstore/queries/replica_queries.rb +110 -0
  95. data/lib/pg_eventstore/queries/streams_global_index_queries.rb +163 -0
  96. data/lib/pg_eventstore/queries/transaction_queries.rb +52 -10
  97. data/lib/pg_eventstore/queries.rb +29 -1
  98. data/lib/pg_eventstore/query_builders/basic_filtering.rb +38 -5
  99. data/lib/pg_eventstore/query_builders/event_markers_filtering.rb +47 -0
  100. data/lib/pg_eventstore/query_builders/event_markers_index_filtering.rb +275 -0
  101. data/lib/pg_eventstore/query_builders/event_subscription_positions_filtering.rb +37 -0
  102. data/lib/pg_eventstore/query_builders/events_filtering.rb +15 -164
  103. data/lib/pg_eventstore/query_builders/events_global_index_filtering.rb +227 -0
  104. data/lib/pg_eventstore/query_builders/filters/collection.rb +324 -0
  105. data/lib/pg_eventstore/query_builders/filters/event_type_filter.rb +37 -0
  106. data/lib/pg_eventstore/query_builders/filters/filter_row.rb +54 -0
  107. data/lib/pg_eventstore/query_builders/filters/marker_filter.rb +20 -0
  108. data/lib/pg_eventstore/query_builders/filters/marker_filter_row.rb +49 -0
  109. data/lib/pg_eventstore/query_builders/filters/stream_filter.rb +48 -0
  110. data/lib/pg_eventstore/query_builders/index_based_events_filtering.rb +260 -0
  111. data/lib/pg_eventstore/query_builders/partitions_filtering.rb +175 -51
  112. data/lib/pg_eventstore/query_builders/read_cursor/stream_cursor.rb +122 -0
  113. data/lib/pg_eventstore/query_builders/streams_global_index_filtering.rb +83 -0
  114. data/lib/pg_eventstore/query_builders/subscription_events_filtering.rb +79 -0
  115. data/lib/pg_eventstore/query_strategy/async.rb +64 -0
  116. data/lib/pg_eventstore/query_strategy/foreground.rb +25 -0
  117. data/lib/pg_eventstore/query_strategy.rb +19 -0
  118. data/lib/pg_eventstore/raw_event.rb +46 -0
  119. data/lib/pg_eventstore/rspec/test_helpers.rb +21 -8
  120. data/lib/pg_eventstore/sql_builder.rb +87 -8
  121. data/lib/pg_eventstore/stream.rb +13 -16
  122. data/lib/pg_eventstore/stream_global_index.rb +28 -0
  123. data/lib/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rb +5 -17
  124. data/lib/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rb +36 -0
  125. data/lib/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rb +12 -0
  126. data/lib/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rb +21 -7
  127. data/lib/pg_eventstore/subscriptions/events_processor.rb +20 -18
  128. data/lib/pg_eventstore/subscriptions/events_processor_consumer/multiple.rb +63 -0
  129. data/lib/pg_eventstore/subscriptions/events_processor_consumer/replica.rb +68 -0
  130. data/lib/pg_eventstore/subscriptions/events_processor_consumer/single.rb +62 -0
  131. data/lib/pg_eventstore/subscriptions/events_processor_consumer.rb +44 -0
  132. data/lib/pg_eventstore/subscriptions/events_subscription_position_worker.rb +68 -0
  133. data/lib/pg_eventstore/subscriptions/queries/event_subscription_position_queries.rb +177 -0
  134. data/lib/pg_eventstore/subscriptions/queries/subscription_queries.rb +78 -54
  135. data/lib/pg_eventstore/subscriptions/replica_subscription_handler.rb +140 -0
  136. data/lib/pg_eventstore/subscriptions/replica_subscription_runner.rb +9 -0
  137. data/lib/pg_eventstore/subscriptions/subscription.rb +2 -1
  138. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/collection.rb +36 -0
  139. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/index_read_strategy.rb +82 -0
  140. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/replication_strategy.rb +75 -0
  141. data/lib/pg_eventstore/subscriptions/subscription_feed_strategy.rb +31 -0
  142. data/lib/pg_eventstore/subscriptions/subscription_feeder.rb +24 -0
  143. data/lib/pg_eventstore/subscriptions/subscription_handler_performance.rb +4 -2
  144. data/lib/pg_eventstore/subscriptions/subscription_runner.rb +20 -9
  145. data/lib/pg_eventstore/subscriptions/subscription_runner_commands/reset_position.rb +1 -1
  146. data/lib/pg_eventstore/subscriptions/subscription_runners_feeder.rb +9 -18
  147. data/lib/pg_eventstore/subscriptions/subscriptions_lifecycle.rb +0 -12
  148. data/lib/pg_eventstore/subscriptions/subscriptions_manager.rb +74 -14
  149. data/lib/pg_eventstore/{subscriptions/synchronized_array.rb → synchronized_array.rb} +15 -0
  150. data/lib/pg_eventstore/tasks/setup.rake +2 -2
  151. data/lib/pg_eventstore/utils.rb +31 -0
  152. data/lib/pg_eventstore/version.rb +1 -1
  153. data/lib/pg_eventstore/web/application.rb +100 -16
  154. data/lib/pg_eventstore/web/paginator/base_collection.rb +5 -1
  155. data/lib/pg_eventstore/web/paginator/event_types_collection.rb +14 -4
  156. data/lib/pg_eventstore/web/paginator/events_collection.rb +29 -33
  157. data/lib/pg_eventstore/web/paginator/helpers.rb +16 -9
  158. data/lib/pg_eventstore/web/paginator/markers_collection.rb +48 -0
  159. data/lib/pg_eventstore/web/paginator/stream_contexts_collection.rb +13 -2
  160. data/lib/pg_eventstore/web/paginator/stream_ids_collection.rb +21 -11
  161. data/lib/pg_eventstore/web/paginator/stream_names_collection.rb +18 -4
  162. data/lib/pg_eventstore/web/paginator/streams_collection.rb +95 -0
  163. data/lib/pg_eventstore/web/public/javascripts/pg_eventstore.js +49 -22
  164. data/lib/pg_eventstore/web/subscriptions/set_collection.rb +1 -1
  165. data/lib/pg_eventstore/web/subscriptions/subscriptions.rb +1 -1
  166. data/lib/pg_eventstore/web/subscriptions/with_state/set_collection.rb +1 -1
  167. data/lib/pg_eventstore/web/subscriptions/with_state/subscriptions.rb +1 -1
  168. data/lib/pg_eventstore/web/views/home/dashboard.erb +11 -9
  169. data/lib/pg_eventstore/web/views/home/partials/event_filter.erb +18 -5
  170. data/lib/pg_eventstore/web/views/home/partials/events.erb +38 -1
  171. data/lib/pg_eventstore/web/views/home/partials/markers_filter.erb +18 -0
  172. data/lib/pg_eventstore/web/views/layouts/application.erb +6 -0
  173. data/lib/pg_eventstore/web/views/streams/index.erb +110 -0
  174. data/lib/pg_eventstore/web/views/streams/partials/streams.erb +11 -0
  175. data/lib/pg_eventstore/web/views/subscriptions/index.erb +4 -1
  176. data/lib/pg_eventstore/web.rb +2 -0
  177. data/lib/pg_eventstore.rb +23 -60
  178. data/pg_eventstore.gemspec +6 -4
  179. data/sig/interfaces/_raw_events_handler.rbs +3 -0
  180. data/sig/interfaces/subscription_handler.rbs +1 -1
  181. data/sig/pg/result.rbs +9 -0
  182. data/sig/pg_eventstore/async_runner.rbs +13 -0
  183. data/sig/pg_eventstore/basic_config.rbs +9 -0
  184. data/sig/pg_eventstore/chunks/chunk.rbs +13 -0
  185. data/sig/pg_eventstore/chunks/read_api_events_index_chunk.rbs +30 -0
  186. data/sig/pg_eventstore/chunks/replica_events_index_chunk.rbs +11 -0
  187. data/sig/pg_eventstore/chunks/repository.rbs +22 -0
  188. data/sig/pg_eventstore/chunks/subscription_checkpoint_chunk.rbs +18 -0
  189. data/sig/pg_eventstore/chunks/subscription_events_index_chunk.rbs +37 -0
  190. data/sig/pg_eventstore/client.rbs +40 -42
  191. data/sig/pg_eventstore/commands/append.rbs +11 -25
  192. data/sig/pg_eventstore/commands/event_modifiers/prepare_link_event.rbs +9 -12
  193. data/sig/pg_eventstore/commands/event_modifiers/prepare_regular_event.rbs +5 -4
  194. data/sig/pg_eventstore/commands/link_to.rbs +6 -11
  195. data/sig/pg_eventstore/commands/read.rbs +2 -5
  196. data/sig/pg_eventstore/commands/read_grouped.rbs +7 -0
  197. data/sig/pg_eventstore/commands/read_streams.rbs +7 -0
  198. data/sig/pg_eventstore/commands/read_streams_paginated.rbs +16 -0
  199. data/sig/pg_eventstore/commands/regular_stream_read_paginated.rbs +9 -17
  200. data/sig/pg_eventstore/commands/revision_check/current_revision.rbs +25 -0
  201. data/sig/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rbs +14 -0
  202. data/sig/pg_eventstore/commands/revision_check/expected_revision.rbs +67 -0
  203. data/sig/pg_eventstore/commands/revision_check/stream_revision_check.rbs +20 -0
  204. data/sig/pg_eventstore/commands/revision_check/stream_revision_comparison.rbs +9 -0
  205. data/sig/pg_eventstore/commands/stream_revision.rbs +7 -0
  206. data/sig/pg_eventstore/commands/system_stream_read_paginated.rbs +9 -14
  207. data/sig/pg_eventstore/config.rbs +15 -6
  208. data/sig/pg_eventstore/connection.rbs +11 -18
  209. data/sig/pg_eventstore/errors.rbs +64 -34
  210. data/sig/pg_eventstore/event.rbs +16 -2
  211. data/sig/pg_eventstore/event_deserializer.rbs +5 -10
  212. data/sig/pg_eventstore/event_global_index.rbs +60 -0
  213. data/sig/pg_eventstore/event_marker.rbs +9 -0
  214. data/sig/pg_eventstore/event_marker_index.rbs +12 -0
  215. data/sig/pg_eventstore/extensions/acts_as_configurable.rbs +29 -0
  216. data/sig/pg_eventstore/extensions/options_defaults.rbs +7 -0
  217. data/sig/pg_eventstore/feature_marker.rbs +10 -0
  218. data/sig/pg_eventstore/maintenance.rbs +12 -8
  219. data/sig/pg_eventstore/middleware/event_trace.rbs +14 -0
  220. data/sig/pg_eventstore/partition.rbs +2 -4
  221. data/sig/pg_eventstore/pg_connection.rbs +8 -0
  222. data/sig/pg_eventstore/queries/event_marker_queries.rbs +21 -0
  223. data/sig/pg_eventstore/queries/event_queries.rbs +4 -36
  224. data/sig/pg_eventstore/queries/events_global_index_queries.rbs +37 -0
  225. data/sig/pg_eventstore/queries/index_filtering_queries.rbs +50 -0
  226. data/sig/pg_eventstore/queries/links_resolver.rbs +5 -9
  227. data/sig/pg_eventstore/queries/maintenance_queries.rbs +12 -9
  228. data/sig/pg_eventstore/queries/partition_queries.rbs +32 -67
  229. data/sig/pg_eventstore/queries/replica_queries.rbs +31 -0
  230. data/sig/pg_eventstore/queries/streams_global_index_queries.rbs +39 -0
  231. data/sig/pg_eventstore/queries/transaction_queries.rbs +2 -0
  232. data/sig/pg_eventstore/queries.rbs +11 -21
  233. data/sig/pg_eventstore/query_builders/basic_filtering.rbs +10 -3
  234. data/sig/pg_eventstore/query_builders/event_markers_filtering.rbs +17 -0
  235. data/sig/pg_eventstore/query_builders/event_markers_index_filtering.rbs +69 -0
  236. data/sig/pg_eventstore/query_builders/event_subscription_positions_filtering.rbs +15 -0
  237. data/sig/pg_eventstore/query_builders/events_filtering_query.rbs +9 -51
  238. data/sig/pg_eventstore/query_builders/events_global_index_filtering.rbs +68 -0
  239. data/sig/pg_eventstore/query_builders/filters/collection.rbs +84 -0
  240. data/sig/pg_eventstore/query_builders/filters/event_type_filter.rbs +19 -0
  241. data/sig/pg_eventstore/query_builders/filters/filter_row.rbs +21 -0
  242. data/sig/pg_eventstore/query_builders/filters/marker_filter.rbs +13 -0
  243. data/sig/pg_eventstore/query_builders/filters/marker_filter_row.rbs +19 -0
  244. data/sig/pg_eventstore/query_builders/filters/stream_filter.rbs +24 -0
  245. data/sig/pg_eventstore/query_builders/index_based_events_filtering.rbs +60 -0
  246. data/sig/pg_eventstore/query_builders/partitions_filtering.rbs +29 -10
  247. data/sig/pg_eventstore/query_builders/read_cursor/stream_cursor.rbs +47 -0
  248. data/sig/pg_eventstore/query_builders/streams_global_index_filtering.rbs +27 -0
  249. data/sig/pg_eventstore/query_builders/subscription_events_filtering.rbs +26 -0
  250. data/sig/pg_eventstore/query_strategy/async.rbs +17 -0
  251. data/sig/pg_eventstore/query_strategy/foreground.rbs +11 -0
  252. data/sig/pg_eventstore/query_strategy.rbs +7 -0
  253. data/sig/pg_eventstore/raw_event.rbs +20 -0
  254. data/sig/pg_eventstore/sql_builder.rbs +32 -10
  255. data/sig/pg_eventstore/stream.rbs +10 -18
  256. data/sig/pg_eventstore/stream_global_index.rbs +14 -0
  257. data/sig/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rbs +5 -4
  258. data/sig/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rbs +9 -0
  259. data/sig/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rbs +17 -12
  260. data/sig/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rbs +17 -6
  261. data/sig/pg_eventstore/subscriptions/event_subscription_position_queries.rbs +30 -0
  262. data/sig/pg_eventstore/subscriptions/events_processor.rbs +12 -5
  263. data/sig/pg_eventstore/subscriptions/events_processor_consumer/multiple.rbs +17 -0
  264. data/sig/pg_eventstore/subscriptions/events_processor_consumer/replica.rbs +17 -0
  265. data/sig/pg_eventstore/subscriptions/events_processor_consumer/single.rbs +17 -0
  266. data/sig/pg_eventstore/subscriptions/events_processor_consumer.rbs +14 -0
  267. data/sig/pg_eventstore/subscriptions/events_subscription_position_worker.rbs +28 -0
  268. data/sig/pg_eventstore/subscriptions/queries/subscription_queries.rbs +7 -39
  269. data/sig/pg_eventstore/subscriptions/replica_subscription_handler.rbs +33 -0
  270. data/sig/pg_eventstore/subscriptions/replica_subscription_runner.rbs +4 -0
  271. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/collection.rbs +14 -0
  272. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/index_read_strategy.rbs +23 -0
  273. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/replication_strategy.rbs +23 -0
  274. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy.rbs +11 -0
  275. data/sig/pg_eventstore/subscriptions/subscription_feeder.rbs +13 -10
  276. data/sig/pg_eventstore/subscriptions/subscription_handler_performance.rbs +1 -1
  277. data/sig/pg_eventstore/subscriptions/subscription_runner.rbs +13 -2
  278. data/sig/pg_eventstore/subscriptions/subscription_runners_feeder.rbs +1 -8
  279. data/sig/pg_eventstore/subscriptions/subscriptions_lifecycle.rbs +4 -6
  280. data/sig/pg_eventstore/subscriptions/subscriptions_manager.rbs +29 -43
  281. data/sig/pg_eventstore/synchronized_array.rbs +4 -0
  282. data/sig/pg_eventstore/utils.rbs +10 -11
  283. data/sig/pg_eventstore/web/application.rbs +13 -3
  284. data/sig/pg_eventstore/web/paginator/base_collection.rbs +2 -0
  285. data/sig/pg_eventstore/web/paginator/event_types_collection.rbs +4 -0
  286. data/sig/pg_eventstore/web/paginator/events_collection.rbs +11 -11
  287. data/sig/pg_eventstore/web/paginator/helpers.rbs +6 -15
  288. data/sig/pg_eventstore/web/paginator/markers_collection.rbs +13 -0
  289. data/sig/pg_eventstore/web/paginator/stream_contexts_collection.rbs +4 -0
  290. data/sig/pg_eventstore/web/paginator/stream_names_collection.rbs +4 -0
  291. data/sig/pg_eventstore/web/paginator/streams_collection.rbs +30 -0
  292. data/sig/pg_eventstore.rbs +8 -26
  293. metadata +175 -20
  294. data/Dockerfile +0 -3
  295. data/lib/pg_eventstore/commands/all_stream_read_grouped.rb +0 -69
  296. data/lib/pg_eventstore/commands/regular_stream_read_grouped.rb +0 -31
  297. data/lib/pg_eventstore/subscriptions/queries/subscription_service_queries.rb +0 -78
  298. data/lib/pg_eventstore/web/views/home/partials/system_stream_filter.erb +0 -15
  299. data/sig/pg_eventstore/commands/all_stream_read_grouped.rbs +0 -16
  300. data/sig/pg_eventstore/commands/regular_stream_read_grouped.rbs +0 -8
  301. data/sig/pg_eventstore/subscriptions/queries/subscription_service_queries.rbs +0 -19
  302. data/sig/pg_eventstore/subscriptions/synchronized_array.rbs +0 -4
  303. /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: 2.0.0
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,13 +68,13 @@ 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"
69
76
  - CHANGELOG.md
70
77
  - CODE_OF_CONDUCT.md
71
- - Dockerfile
72
78
  - LICENSE.txt
73
79
  - README.md
74
80
  - db/migrations/0_create_extensions.sql
@@ -77,8 +83,26 @@ files:
77
83
  - db/migrations/12_migrate_legacy_links.rb
78
84
  - db/migrations/13_remove_events_link_id.sql
79
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
80
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
81
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
82
106
  - db/migrations/3_create_subscription_commands.sql
83
107
  - db/migrations/4_create_subscriptions_set_commands.sql
84
108
  - db/migrations/5_partitions.sql
@@ -86,21 +110,36 @@ files:
86
110
  - db/migrations/7_support_reading_streams_system_stream.sql
87
111
  - db/migrations/8_improve_0_revision_partial_index.sql
88
112
  - db/migrations/9_create_events_horizon.sql
113
+ - docs/AGENTS.fragment.md
89
114
  - docs/admin_ui.md
90
115
  - docs/appending_events.md
91
116
  - docs/configuration.md
117
+ - docs/event_tracing.md
92
118
  - docs/events_and_streams.md
93
119
  - docs/how_it_works.md
94
120
  - docs/linking_events.md
95
121
  - docs/maintenance.md
96
122
  - docs/multiple_commands.md
97
123
  - docs/reading_events.md
124
+ - docs/reading_streams.md
125
+ - docs/replication.md
98
126
  - docs/subscriptions.md
99
127
  - docs/writing_middleware.md
100
128
  - exe/pg-eventstore
129
+ - ext/pg_eventstore_ext/extconf.rb
130
+ - ext/pg_eventstore_ext/pg_eventstore_ext.c
101
131
  - lib/pg_eventstore.rb
102
132
  - lib/pg_eventstore/abstract_command.rb
133
+ - lib/pg_eventstore/async_runner.rb
134
+ - lib/pg_eventstore/basic_config.rb
103
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
104
143
  - lib/pg_eventstore/cli.rb
105
144
  - lib/pg_eventstore/cli/commands.rb
106
145
  - lib/pg_eventstore/cli/commands/base_command.rb
@@ -123,7 +162,6 @@ files:
123
162
  - lib/pg_eventstore/cli/wait_for_subscriptions_set_shutdown.rb
124
163
  - lib/pg_eventstore/client.rb
125
164
  - lib/pg_eventstore/commands.rb
126
- - lib/pg_eventstore/commands/all_stream_read_grouped.rb
127
165
  - lib/pg_eventstore/commands/append.rb
128
166
  - lib/pg_eventstore/commands/delete_event.rb
129
167
  - lib/pg_eventstore/commands/delete_stream.rb
@@ -132,8 +170,16 @@ files:
132
170
  - lib/pg_eventstore/commands/link_to.rb
133
171
  - lib/pg_eventstore/commands/multiple.rb
134
172
  - lib/pg_eventstore/commands/read.rb
135
- - 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
136
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
137
183
  - lib/pg_eventstore/commands/system_stream_read_paginated.rb
138
184
  - lib/pg_eventstore/config.rb
139
185
  - lib/pg_eventstore/connection.rb
@@ -141,44 +187,83 @@ files:
141
187
  - lib/pg_eventstore/event.rb
142
188
  - lib/pg_eventstore/event_class_resolver.rb
143
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
144
193
  - lib/pg_eventstore/event_serializer.rb
194
+ - lib/pg_eventstore/extensions/acts_as_configurable.rb
145
195
  - lib/pg_eventstore/extensions/callback_handlers_extension.rb
146
196
  - lib/pg_eventstore/extensions/callbacks_extension.rb
197
+ - lib/pg_eventstore/extensions/options_defaults.rb
147
198
  - lib/pg_eventstore/extensions/options_extension.rb
148
199
  - lib/pg_eventstore/extensions/using_connection_extension.rb
200
+ - lib/pg_eventstore/feature_marker.rb
149
201
  - lib/pg_eventstore/maintenance.rb
150
202
  - lib/pg_eventstore/middleware.rb
203
+ - lib/pg_eventstore/middleware/event_tracing.rb
151
204
  - lib/pg_eventstore/partition.rb
152
205
  - lib/pg_eventstore/pg_connection.rb
153
206
  - lib/pg_eventstore/queries.rb
207
+ - lib/pg_eventstore/queries/event_marker_queries.rb
154
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
155
211
  - lib/pg_eventstore/queries/links_resolver.rb
156
212
  - lib/pg_eventstore/queries/maintenance_queries.rb
157
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
158
216
  - lib/pg_eventstore/queries/transaction_queries.rb
159
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
160
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
161
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
162
238
  - lib/pg_eventstore/rspec/has_option_matcher.rb
163
239
  - lib/pg_eventstore/rspec/test_helpers.rb
164
240
  - lib/pg_eventstore/sql_builder.rb
165
241
  - lib/pg_eventstore/stream.rb
242
+ - lib/pg_eventstore/stream_global_index.rb
166
243
  - lib/pg_eventstore/subscriptions/basic_runner.rb
167
244
  - lib/pg_eventstore/subscriptions/callback_handlers/commands_handler_handlers.rb
168
245
  - lib/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rb
246
+ - lib/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rb
169
247
  - lib/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rb
170
248
  - lib/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rb
171
249
  - lib/pg_eventstore/subscriptions/command_handlers/subscription_feeder_commands.rb
172
250
  - lib/pg_eventstore/subscriptions/command_handlers/subscription_runners_commands.rb
173
251
  - lib/pg_eventstore/subscriptions/commands_handler.rb
174
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
175
258
  - lib/pg_eventstore/subscriptions/extensions/base_command_extension.rb
176
259
  - lib/pg_eventstore/subscriptions/extensions/command_class_lookup_extension.rb
260
+ - lib/pg_eventstore/subscriptions/queries/event_subscription_position_queries.rb
177
261
  - lib/pg_eventstore/subscriptions/queries/subscription_command_queries.rb
178
262
  - lib/pg_eventstore/subscriptions/queries/subscription_queries.rb
179
- - lib/pg_eventstore/subscriptions/queries/subscription_service_queries.rb
180
263
  - lib/pg_eventstore/subscriptions/queries/subscriptions_set_command_queries.rb
181
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
182
267
  - lib/pg_eventstore/subscriptions/runner_recovery_strategies.rb
183
268
  - lib/pg_eventstore/subscriptions/runner_recovery_strategies/restore_connection.rb
184
269
  - lib/pg_eventstore/subscriptions/runner_recovery_strategies/restore_subscription_feeder.rb
@@ -186,6 +271,10 @@ files:
186
271
  - lib/pg_eventstore/subscriptions/runner_recovery_strategy.rb
187
272
  - lib/pg_eventstore/subscriptions/runner_state.rb
188
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
189
278
  - lib/pg_eventstore/subscriptions/subscription_feeder.rb
190
279
  - lib/pg_eventstore/subscriptions/subscription_feeder_commands.rb
191
280
  - lib/pg_eventstore/subscriptions/subscription_feeder_commands/base.rb
@@ -207,7 +296,7 @@ files:
207
296
  - lib/pg_eventstore/subscriptions/subscriptions_manager.rb
208
297
  - lib/pg_eventstore/subscriptions/subscriptions_set.rb
209
298
  - lib/pg_eventstore/subscriptions/subscriptions_set_lifecycle.rb
210
- - lib/pg_eventstore/subscriptions/synchronized_array.rb
299
+ - lib/pg_eventstore/synchronized_array.rb
211
300
  - lib/pg_eventstore/tasks/setup.rake
212
301
  - lib/pg_eventstore/utils.rb
213
302
  - lib/pg_eventstore/version.rb
@@ -217,9 +306,11 @@ files:
217
306
  - lib/pg_eventstore/web/paginator/event_types_collection.rb
218
307
  - lib/pg_eventstore/web/paginator/events_collection.rb
219
308
  - lib/pg_eventstore/web/paginator/helpers.rb
309
+ - lib/pg_eventstore/web/paginator/markers_collection.rb
220
310
  - lib/pg_eventstore/web/paginator/stream_contexts_collection.rb
221
311
  - lib/pg_eventstore/web/paginator/stream_ids_collection.rb
222
312
  - lib/pg_eventstore/web/paginator/stream_names_collection.rb
313
+ - lib/pg_eventstore/web/paginator/streams_collection.rb
223
314
  - lib/pg_eventstore/web/public/fonts/vendor/FontAwesome.otf
224
315
  - lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.eot
225
316
  - lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.svg
@@ -251,28 +342,40 @@ files:
251
342
  - lib/pg_eventstore/web/views/home/dashboard.erb
252
343
  - lib/pg_eventstore/web/views/home/partials/event_filter.erb
253
344
  - lib/pg_eventstore/web/views/home/partials/events.erb
345
+ - lib/pg_eventstore/web/views/home/partials/markers_filter.erb
254
346
  - lib/pg_eventstore/web/views/home/partials/pagination_links.erb
255
347
  - lib/pg_eventstore/web/views/home/partials/stream_filter.erb
256
- - lib/pg_eventstore/web/views/home/partials/system_stream_filter.erb
257
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
258
351
  - lib/pg_eventstore/web/views/subscriptions/index.erb
259
352
  - pg_eventstore.gemspec
260
353
  - rbs_collection.lock.yaml
261
354
  - rbs_collection.yaml
262
- - sig/interfaces/_raw_event_handler.rbs
355
+ - sig/interfaces/_raw_events_handler.rbs
263
356
  - sig/interfaces/callback.rbs
264
357
  - sig/interfaces/event_class_resolver.rbs
265
358
  - sig/interfaces/event_modifier.rbs
266
359
  - sig/interfaces/failed_subscription_notifier.rbs
360
+ - sig/interfaces/raw_event_handler.rbs
267
361
  - sig/interfaces/restart_terminator.rbs
268
362
  - sig/interfaces/subscription_handler.rbs
269
363
  - sig/manifest.yaml
270
364
  - sig/pg/basic_type_registry.rbs
271
365
  - sig/pg/connection.rbs
272
366
  - sig/pg/constants.rbs
367
+ - sig/pg/result.rbs
273
368
  - sig/pg_eventstore.rbs
274
369
  - sig/pg_eventstore/abstract_command.rbs
370
+ - sig/pg_eventstore/async_runner.rbs
371
+ - sig/pg_eventstore/basic_config.rbs
275
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
276
379
  - sig/pg_eventstore/cli.rbs
277
380
  - sig/pg_eventstore/cli/commands/base_command.rbs
278
381
  - sig/pg_eventstore/cli/commands/callback_handlers/start_cmd_handlers.rbs
@@ -291,7 +394,6 @@ files:
291
394
  - sig/pg_eventstore/cli/try_unlock_subscriptions_set.rbs
292
395
  - sig/pg_eventstore/cli/wait_for_subscriptions_set_shutdown.rbs
293
396
  - sig/pg_eventstore/client.rbs
294
- - sig/pg_eventstore/commands/all_stream_read_grouped.rbs
295
397
  - sig/pg_eventstore/commands/append.rbs
296
398
  - sig/pg_eventstore/commands/delete_event.rbs
297
399
  - sig/pg_eventstore/commands/delete_stream.rbs
@@ -300,8 +402,16 @@ files:
300
402
  - sig/pg_eventstore/commands/link_to.rbs
301
403
  - sig/pg_eventstore/commands/multiple.rbs
302
404
  - sig/pg_eventstore/commands/read.rbs
303
- - 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
304
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
305
415
  - sig/pg_eventstore/commands/system_stream_read_paginated.rbs
306
416
  - sig/pg_eventstore/config.rbs
307
417
  - sig/pg_eventstore/connection.rbs
@@ -309,48 +419,91 @@ files:
309
419
  - sig/pg_eventstore/event.rbs
310
420
  - sig/pg_eventstore/event_class_resolver.rbs
311
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
312
425
  - sig/pg_eventstore/event_serializer.rbs
426
+ - sig/pg_eventstore/extensions/acts_as_configurable.rbs
313
427
  - sig/pg_eventstore/extensions/callback_handlers_extension.rbs
314
428
  - sig/pg_eventstore/extensions/callbacks_extension.rbs
429
+ - sig/pg_eventstore/extensions/options_defaults.rbs
315
430
  - sig/pg_eventstore/extensions/options_extension.rbs
316
431
  - sig/pg_eventstore/extensions/using_connection_extension.rbs
432
+ - sig/pg_eventstore/feature_marker.rbs
317
433
  - sig/pg_eventstore/maintenance.rbs
318
434
  - sig/pg_eventstore/middleware.rbs
435
+ - sig/pg_eventstore/middleware/event_trace.rbs
319
436
  - sig/pg_eventstore/partition.rbs
320
437
  - sig/pg_eventstore/pg_connection.rbs
321
438
  - sig/pg_eventstore/queries.rbs
439
+ - sig/pg_eventstore/queries/event_marker_queries.rbs
322
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
323
443
  - sig/pg_eventstore/queries/links_resolver.rbs
324
444
  - sig/pg_eventstore/queries/maintenance_queries.rbs
325
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
326
448
  - sig/pg_eventstore/queries/transaction_queries.rbs
327
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
328
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
329
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
330
470
  - sig/pg_eventstore/sql_builder.rbs
331
471
  - sig/pg_eventstore/stream.rbs
472
+ - sig/pg_eventstore/stream_global_index.rbs
332
473
  - sig/pg_eventstore/subscriptions/basic_runner.rbs
333
474
  - sig/pg_eventstore/subscriptions/callback_handlers/commands_handler_handlers.rbs
334
475
  - sig/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rbs
476
+ - sig/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rbs
335
477
  - sig/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rbs
336
478
  - sig/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rbs
337
479
  - sig/pg_eventstore/subscriptions/command_handlers/subscription_feeder_commands.rbs
338
480
  - sig/pg_eventstore/subscriptions/command_handlers/subscription_runners_commands.rbs
339
481
  - sig/pg_eventstore/subscriptions/commands_handler.rbs
482
+ - sig/pg_eventstore/subscriptions/event_subscription_position_queries.rbs
340
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
341
489
  - sig/pg_eventstore/subscriptions/extensions/base_command_extension.rbs
342
490
  - sig/pg_eventstore/subscriptions/extensions/command_class_lookup_extension.rbs
343
491
  - sig/pg_eventstore/subscriptions/queries/subscription_command_queries.rbs
344
492
  - sig/pg_eventstore/subscriptions/queries/subscription_queries.rbs
345
- - sig/pg_eventstore/subscriptions/queries/subscription_service_queries.rbs
346
493
  - sig/pg_eventstore/subscriptions/queries/subscriptions_set_command_queries.rbs
347
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
348
497
  - sig/pg_eventstore/subscriptions/runner_recovery_strategies/restore_connection.rbs
349
498
  - sig/pg_eventstore/subscriptions/runner_recovery_strategies/restore_subscription_feeder.rbs
350
499
  - sig/pg_eventstore/subscriptions/runner_recovery_strategies/restore_subscription_runner.rbs
351
500
  - sig/pg_eventstore/subscriptions/runner_recovery_strategy.rbs
352
501
  - sig/pg_eventstore/subscriptions/runner_state.rbs
353
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
354
507
  - sig/pg_eventstore/subscriptions/subscription_feeder.rbs
355
508
  - sig/pg_eventstore/subscriptions/subscription_feeder_commands.rbs
356
509
  - sig/pg_eventstore/subscriptions/subscription_feeder_commands/base.rbs
@@ -372,7 +525,7 @@ files:
372
525
  - sig/pg_eventstore/subscriptions/subscriptions_manager.rbs
373
526
  - sig/pg_eventstore/subscriptions/subscriptions_set.rbs
374
527
  - sig/pg_eventstore/subscriptions/subscriptions_set_lifecycle.rbs
375
- - sig/pg_eventstore/subscriptions/synchronized_array.rbs
528
+ - sig/pg_eventstore/synchronized_array.rbs
376
529
  - sig/pg_eventstore/utils.rbs
377
530
  - sig/pg_eventstore/version.rbs
378
531
  - sig/pg_eventstore/web/application.rbs
@@ -380,9 +533,11 @@ files:
380
533
  - sig/pg_eventstore/web/paginator/event_types_collection.rbs
381
534
  - sig/pg_eventstore/web/paginator/events_collection.rbs
382
535
  - sig/pg_eventstore/web/paginator/helpers.rbs
536
+ - sig/pg_eventstore/web/paginator/markers_collection.rbs
383
537
  - sig/pg_eventstore/web/paginator/stream_contexts_collection.rbs
384
538
  - sig/pg_eventstore/web/paginator/stream_ids_collection.rbs
385
539
  - sig/pg_eventstore/web/paginator/stream_names_collection.rbs
540
+ - sig/pg_eventstore/web/paginator/streams_collection.rbs
386
541
  - sig/pg_eventstore/web/subscriptions/helpers.rbs
387
542
  - sig/pg_eventstore/web/subscriptions/set_collection.rbs
388
543
  - sig/pg_eventstore/web/subscriptions/subscriptions.rbs
@@ -406,7 +561,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
406
561
  requirements:
407
562
  - - ">="
408
563
  - !ruby/object:Gem::Version
409
- version: '3.2'
564
+ version: '3.3'
410
565
  required_rubygems_version: !ruby/object:Gem::Requirement
411
566
  requirements:
412
567
  - - ">="
data/Dockerfile DELETED
@@ -1,3 +0,0 @@
1
- FROM postgres:18
2
-
3
- RUN apt-get update && apt-get -y install postgresql-18-cron
@@ -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: }],
51
- event_types: [partition.event_type],
52
- }
53
- options.merge(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:, 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:, 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,78 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module PgEventstore
4
- # @!visibility private
5
- class SubscriptionServiceQueries
6
- # @return [Integer]
7
- DEFAULT_SAFE_POSITION = 0
8
- private_constant :DEFAULT_SAFE_POSITION
9
-
10
- # @!attribute connection
11
- # @return [PgEventstore::Connection]
12
- attr_reader :connection
13
- private :connection
14
-
15
- # @param connection [PgEventstore::Connection]
16
- def initialize(connection)
17
- @connection = connection
18
- end
19
-
20
- # @return [Integer]
21
- def safe_global_position
22
- result = transaction_queries.transaction(read_only: true) do
23
- connection.with do |conn|
24
- conn.exec(<<~SQL)
25
- SELECT MAX(global_position) as global_position
26
- FROM events_horizon
27
- WHERE xact_id < pg_snapshot_xmin(pg_current_snapshot())
28
- SQL
29
- end
30
- end
31
-
32
- global_position = result.to_a.first&.dig('global_position')
33
- return global_position if global_position
34
-
35
- if global_position.nil? && !events_horizon_present?
36
- init_events_horizon
37
- return safe_global_position
38
- end
39
- # events_horizon table is not empty, but there is no safe position yet. Thus, we wait for the safe position by
40
- # returning default value which will prevent from fetching events with gaps
41
- DEFAULT_SAFE_POSITION
42
- end
43
-
44
- # @return [Boolean]
45
- def events_horizon_present?
46
- result = connection.with do |conn|
47
- conn.exec(<<~SQL)
48
- SELECT true as presence FROM events_horizon LIMIT 1
49
- SQL
50
- end
51
- result.to_a.first&.dig('presence') || false
52
- end
53
-
54
- # @return [void]
55
- def init_events_horizon
56
- transaction_queries.transaction do
57
- return if events_horizon_present?
58
-
59
- max_pos = connection.with do |conn|
60
- conn.exec('SELECT MAX(global_position) FROM events')
61
- end
62
- max_pos = max_pos.to_a.first&.dig('global_position') || DEFAULT_SAFE_POSITION
63
- connection.with do |conn|
64
- conn.exec_params(<<~SQL, [max_pos])
65
- INSERT INTO events_horizon (global_position, xact_id) VALUES ($1, DEFAULT)
66
- SQL
67
- end
68
- end
69
- end
70
-
71
- private
72
-
73
- # @return [PgEventstore::TransactionQueries]
74
- def transaction_queries
75
- TransactionQueries.new(connection)
76
- end
77
- end
78
- end
@@ -1,15 +0,0 @@
1
- <div class="form-row align-items-center">
2
- <div class="col-3">
3
- <select name="filter[system_stream]" class="form-control mb-2" data-placeholder="Select system stream" autocomplete="off">
4
- <option></option>
5
- <% PgEventstore::Stream::KNOWN_SYSTEM_STREAMS.each do |stream_name| %>
6
- <option value="<%= stream_name %>" <% if stream == stream_name %> selected <% end %>><%= stream_name %></option>
7
- <% end %>
8
- </select>
9
- </div>
10
- <div class="col-1">
11
- <a class="btn btn-default remove-filter" href="javascript: void(0);">
12
- <i class="fa fa-minus-circle"></i>
13
- </a>
14
- </div>
15
- </div>