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
@@ -0,0 +1,84 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ module Filters
4
+ class Collection
5
+ @compiled: Array[FilterRow]?
6
+ @event_types: Set[EventTypeFilter]
7
+ @incomplete_markers_filter: bool
8
+ @incomplete_stream_filter: bool
9
+ @markers: Set[MarkerFilter]
10
+ @streams: Index
11
+ @prefix_filter: bool
12
+
13
+ def self.from_options: (Hash[untyped, untyped] options) -> Collection
14
+
15
+ def self.from_stream_and_options: (Stream stream, Hash[untyped, untyped] options) -> Collection
16
+
17
+ def add_event_type: (EventTypeFilter event_type_filter) -> untyped
18
+
19
+ def add_marker: (MarkerFilter marker_filter) -> void
20
+
21
+ def add_stream: (StreamFilter stream_filter) -> void
22
+
23
+ def collection: -> Array[FilterRow | MarkerFilterRow]
24
+
25
+ def empty?: -> bool
26
+
27
+ def has_event_types?: -> bool
28
+
29
+ def has_incomplete_markers_filter?: -> bool
30
+
31
+ def has_incomplete_stream_filter?: -> bool
32
+
33
+ def has_markers?: -> bool
34
+
35
+ def has_prefix_filter?: -> bool
36
+
37
+ private
38
+
39
+ def self.extract_event_types_filter: (
40
+ Collection instance,
41
+ Array[String | Hash[untyped, untyped]] event_types
42
+ ) -> void
43
+
44
+ def self.extract_streams_filter: (Collection instance, Array[Hash[Symbol, untyped]]? streams) -> void
45
+
46
+ def self.unsupported_filter_warning: (untyped stream_attrs) -> void
47
+
48
+ class Index
49
+
50
+ attr_reader path: Hash[String, Index]
51
+
52
+ attr_accessor stream_filter: QueryBuilders::Filters::StreamFilter?
53
+
54
+ def empty?: -> bool
55
+
56
+ def find_non_overlapping: (?Index root) -> Array[QueryBuilders::Filters::StreamFilter]
57
+
58
+ def index: (StreamFilter stream_filter) -> void
59
+ end
60
+
61
+ def compile: -> void
62
+
63
+ def marker_filter_overlaps_with_event_type_filter?: (
64
+ MarkerFilter marker_filter,
65
+ Array[EventTypeFilter] prefix_filters
66
+ ) -> bool
67
+
68
+ def marker_filter_overlaps_with_prefix_filter?: (
69
+ MarkerFilter marker_filter,
70
+ Array[EventTypeFilter] prefix_filters
71
+ ) -> bool
72
+
73
+ def non_overlapping_event_types: -> Array[Array[EventTypeFilter]]
74
+
75
+ def non_overlapping_markers: (
76
+ Array[EventTypeFilter] event_types_with_prefixes,
77
+ Array[EventTypeFilter] event_types_without_prefixes
78
+ ) -> Array[MarkerFilter]
79
+
80
+ def reset: -> void
81
+ end
82
+ end
83
+ end
84
+ end
@@ -0,0 +1,19 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ module Filters
4
+ class EventTypeFilter
5
+ include Extensions::OptionsExtension
6
+ include Extensions::OptionsDefaults
7
+
8
+ attr_accessor event_type: String?
9
+ attr_accessor prefix: bool
10
+
11
+ def self.null_filter: -> EventTypeFilter
12
+
13
+ def prefix?: -> bool
14
+
15
+ def to_sql_value: -> String?
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,21 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ module Filters
4
+ class FilterRow
5
+ include Extensions::OptionsExtension
6
+ include Extensions::OptionsDefaults
7
+
8
+ def self.null_filter_row: -> FilterRow
9
+
10
+ attr_accessor stream_filter: StreamFilter?
11
+ attr_accessor event_type_filters: Array[EventTypeFilter]
12
+
13
+ def ambiguous_event_type?: -> bool
14
+
15
+ def collapsable_into_event_types_only?: -> bool
16
+
17
+ def flatten: -> Array[FilterRow]
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,13 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ module Filters
4
+ class MarkerFilter
5
+ include Extensions::OptionsExtension
6
+ include Extensions::OptionsDefaults
7
+
8
+ attr_accessor markers: Array[String]
9
+ attr_accessor event_type: String?
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,19 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ module Filters
4
+ class MarkerFilterRow
5
+ include Extensions::OptionsExtension
6
+ include Extensions::OptionsDefaults
7
+
8
+ attr_accessor stream_filter: QueryBuilders::Filters::StreamFilter?
9
+ attr_accessor marker_filter: QueryBuilders::Filters::MarkerFilter
10
+
11
+ def ambiguous_event_type?: -> bool
12
+
13
+ def flatten: -> Array[QueryBuilders::Filters::MarkerFilterRow]
14
+
15
+ def to_filter_row: -> FilterRow
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,24 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ module Filters
4
+ class StreamFilter
5
+ include Extensions::OptionsExtension
6
+ include Extensions::OptionsDefaults
7
+
8
+ attr_accessor context: String
9
+ attr_accessor stream_name: String?
10
+ attr_accessor stream_id: String?
11
+
12
+ def context?: -> bool
13
+
14
+ def stream?: -> bool
15
+
16
+ def stream_name?: -> bool
17
+
18
+ def to_h: -> Hash[Symbol, String]
19
+
20
+ def to_partition_h: -> Hash[Symbol, String?]
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,60 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ class IndexBasedEventsFiltering
4
+ include BasicFiltering
5
+
6
+ ABSTRACT_TABLE_NAME: String
7
+ DEFAULT_LIMIT: Integer
8
+
9
+ @sql_builder: SQLBuilder
10
+
11
+ def self.sql_builder_for_estimate_count: (
12
+ Array[Filters::FilterRow | Filters::MarkerFilterRow] filter_rows
13
+ ) -> SQLBuilder
14
+
15
+ def self.sql_builder_for_event_type_revision_validation: (
16
+ Stream stream,
17
+ Commands::RevisionCheck::ExpectedRevision::EventTypeRevision expected_revision
18
+ ) -> SQLBuilder
19
+
20
+ def self.sql_builder_for_event_type_with_markers_revision_validation: (
21
+ Stream stream,
22
+ Commands::RevisionCheck::ExpectedRevision::EventTypeRevisionWithMarkers expected_revision
23
+ ) -> SQLBuilder
24
+
25
+ def self.sql_builder_for_markers_revision_validation: (
26
+ Stream stream,
27
+ Commands::RevisionCheck::ExpectedRevision::MarkersRevision expected_revision
28
+ ) -> SQLBuilder
29
+
30
+ def self.sql_builder_for_read_common: (
31
+ Array[Filters::FilterRow | Filters::MarkerFilterRow] filter_rows,
32
+ ReadCursor::StreamCursor cursor
33
+ ) -> SQLBuilder
34
+
35
+ def self.sql_builder_for_read_grouped: (
36
+ Array[Filters::FilterRow | Filters::MarkerFilterRow] filter_rows,
37
+ ReadCursor::StreamCursor cursor
38
+ ) -> SQLBuilder
39
+
40
+ def self.sql_builder_for_subscriptions: (
41
+ Array[Filters::FilterRow | Filters::MarkerFilterRow] filter_rows
42
+ ) -> SQLBuilder
43
+
44
+ def add_global_position_direction: ((String | Symbol)? direction) -> void
45
+
46
+ def add_limit: (Integer? limit) -> void
47
+
48
+ private
49
+
50
+ def self.finalize_subscription_builders: (Array[SQLBuilder] builders) -> SQLBuilder
51
+
52
+ def self.union_builders: (
53
+ Array[SQLBuilder] builders,
54
+ QueryBuilders::ReadCursor::StreamCursor cursor,
55
+ mode: Symbol,
56
+ ?requires_limit: bool
57
+ ) -> SQLBuilder
58
+ end
59
+ end
60
+ end
@@ -1,25 +1,44 @@
1
1
  module PgEventstore
2
2
  module QueryBuilders
3
- class PartitionsFiltering < BasicFiltering
3
+ class PartitionsFiltering
4
+ include BasicFiltering
5
+
4
6
  TABLE_NAME: String
5
7
 
6
- def self.extract_event_types_filter: (Hash[untyped, untyped] options) -> Array[String]
8
+ @has_event_types: Array[bool]
9
+ @has_stream_names: Array[bool]
10
+ @sql_builder: SQLBuilder
11
+ @wants_event_type: bool
12
+ @wants_stream_name: bool
13
+
14
+ def self.assemble_sql_builder: (Filters::Collection filters_collection,
15
+ ?scope: Symbol) -> SQLBuilder
16
+
17
+ def self.from_filter_row: (Filters::FilterRow filter_row,
18
+ ?scope: Symbol) -> SQLBuilder
19
+
20
+ def add_filter_row: (Filters::FilterRow filter_row) -> void
21
+
22
+ def order_by_context: -> void
23
+
24
+ def order_by_event_type: -> void
7
25
 
8
- def self.extract_streams_filter: (Hash[untyped, untyped] options) -> Array[Hash[untyped, untyped]]
26
+ def order_by_stream_name: -> void
9
27
 
10
- def self.correct_stream_filter?: (::Hash[untyped, untyped] stream_attrs) -> bool
28
+ def with_event_types: -> void
11
29
 
12
- def add_event_types: (::Array[String] event_types) -> SQLBuilder
30
+ def with_stream_names: -> void
13
31
 
14
- def add_stream_attrs: (?context: String?, ?stream_name: String?) -> SQLBuilder
32
+ def without_event_types: -> void
15
33
 
16
- def with_event_types: -> SQLBuilder
34
+ def without_stream_names: -> void
17
35
 
18
- def with_stream_names: -> SQLBuilder
36
+ private
19
37
 
20
- def without_event_types: -> SQLBuilder
38
+ def self.has_stream_name_filter?: (Filters::Collection filters_collection) -> bool
21
39
 
22
- def without_stream_names: -> SQLBuilder
40
+ def self.set_partitions_scope: (PartitionsFiltering partitions_filtering, bool has_stream_name_filters,
41
+ bool has_event_type_filters, Symbol scope) -> untyped
23
42
  end
24
43
  end
25
44
  end
@@ -0,0 +1,47 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ module ReadCursor
4
+ class StreamCursor
5
+ class RegularStreamCursor
6
+ include Extensions::OptionsExtension
7
+ include Extensions::OptionsDefaults
8
+
9
+ attr_accessor from_revision: Integer?
10
+ attr_accessor to_revision: Integer?
11
+ attr_accessor direction: String? | Symbol?
12
+ attr_accessor max_count: Integer?
13
+ end
14
+
15
+ class AllStreamCursor
16
+ include Extensions::OptionsExtension
17
+ include Extensions::OptionsDefaults
18
+
19
+ attr_accessor from_position: Integer?
20
+ attr_accessor to_position: Integer?
21
+ attr_accessor direction: String? | Symbol?
22
+ attr_accessor max_count: Integer?
23
+ end
24
+
25
+ @cursor: RegularStreamCursor | AllStreamCursor
26
+
27
+ def self.from_options: (Hash[untyped, untyped] options) -> StreamCursor
28
+
29
+ def self.from_stream_and_options: (Stream stream, Hash[untyped, untyped] options) -> StreamCursor
30
+
31
+ def initialize: (RegularStreamCursor | AllStreamCursor cursor) -> void
32
+
33
+ def direction: -> (String | Symbol)?
34
+
35
+ def from: -> Integer?
36
+
37
+ def max_count: -> Integer?
38
+
39
+ def max_count=: (Integer? val) -> void
40
+
41
+ def all_stream_cursor?: -> bool
42
+
43
+ def to: -> Integer?
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,27 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ class StreamsGlobalIndexFiltering
4
+ DEFAULT_LIMIT: Integer
5
+
6
+ PRIMARY_TABLE_NAME: String
7
+
8
+ include BasicFiltering
9
+
10
+ @sql_builder: SQLBuilder
11
+
12
+ def self.sql_builder_for_basic_pagination: (Hash[untyped, untyped] options) -> SQLBuilder
13
+
14
+ def add_filter_row: (Filters::FilterRow filter_row) -> void
15
+
16
+ def add_starting_position_direction: (Symbol? | String? direction) -> void
17
+
18
+ def from_position: (Integer? position, Symbol? | String? direction) -> void
19
+
20
+ def limit: (Integer? limit) -> void
21
+
22
+ private
23
+
24
+ def direction_operator_from: (Symbol? | String? direction) -> String
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,26 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ class SubscriptionEventsFiltering
4
+ include BasicFiltering
5
+
6
+ @from_position: Integer
7
+ @max_count: Integer
8
+ @sql_builder: SQLBuilder
9
+ @subscription_id: Integer
10
+ @to_position: Integer
11
+
12
+ def self.build: (
13
+ Integer id,
14
+ { from_position: Integer, to_position: Integer, max_count: Integer } options
15
+ ) -> SubscriptionEventsFiltering
16
+
17
+ def initialize: (Integer subscription_id) -> void
18
+
19
+ def add_limit: (Integer? limit) -> void
20
+
21
+ def from_position: (Integer? position) -> void
22
+
23
+ def to_position: (Integer? position) -> void
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,17 @@
1
+ module PgEventstore
2
+ module QueryStrategy
3
+ class Async
4
+ include QueryStrategy
5
+
6
+ @connection: Connection
7
+
8
+ def initialize: (Connection connection) -> void
9
+
10
+ private
11
+
12
+ def cancel_and_drain: (PG::Connection connection) -> void
13
+
14
+ def run: (Symbol method, *untyped exec_args) -> untyped
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,11 @@
1
+ module PgEventstore
2
+ module QueryStrategy
3
+ class Foreground
4
+ include QueryStrategy
5
+
6
+ @connection: Connection
7
+
8
+ def initialize: (Connection connection) -> void
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ module PgEventstore
2
+ module QueryStrategy
3
+ def exec: (*untyped) -> PG::Result
4
+
5
+ def exec_params: (*untyped) -> PG::Result
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ module PgEventstore
2
+ # @!visibility private
3
+ class RawEvent
4
+ include Extensions::OptionsExtension
5
+ include Extensions::OptionsDefaults
6
+
7
+ attr_accessor id: String
8
+ attr_accessor context: String
9
+ attr_accessor stream_name: String
10
+ attr_accessor stream_id: String
11
+ attr_accessor global_position: Integer
12
+ attr_accessor stream_revision: Integer
13
+ attr_accessor data: Hash[untyped, untyped]
14
+ attr_accessor metadata: Hash[untyped, untyped]
15
+ attr_accessor link_partition_id: Integer?
16
+ attr_accessor created_at: Time
17
+ attr_accessor type: String
18
+ attr_accessor link_global_position: Integer?
19
+ end
20
+ end
@@ -1,5 +1,27 @@
1
1
  module PgEventstore
2
2
  class SQLBuilder
3
+ UNION_MODES: Array[Symbol]
4
+
5
+ @from_value: (String | SQLBuilder)?
6
+ @group_values: Array[String]
7
+ @join_values: Array[untyped]
8
+ @limit_value: String? | Integer?
9
+ @offset_value: Integer?
10
+ @order_values: Array[String]
11
+ @select_values: Array[String]
12
+ @union_mode: Symbol
13
+ @union_values: Array[SQLBuilder]
14
+ @where_values: Hash[String, Array[untyped]]
15
+
16
+ def self.union_builders: (Array[SQLBuilder] builders, ?mode: Symbol) -> SQLBuilder
17
+
18
+ def self.wrap_union_builder: (SQLBuilder builder) -> SQLBuilder
19
+
20
+ attr_reader positional_values: Array[untyped]
21
+ attr_reader table_alias: String?
22
+
23
+ attr_writer positional_values_size: Integer
24
+
3
25
  def initialize: () -> void
4
26
 
5
27
  def from_sql: -> String
@@ -7,6 +29,12 @@ module PgEventstore
7
29
  # _@param_ `sql`
8
30
  def select: (String sql) -> self
9
31
 
32
+ def select_id_only: -> self
33
+
34
+ def union_builder?: -> bool
35
+
36
+ def union_mode=: (Symbol val) -> void
37
+
10
38
  def unselect: () -> self
11
39
 
12
40
  # _@param_ `sql`
@@ -19,8 +47,7 @@ module PgEventstore
19
47
  # _@param_ `arguments` — positional values
20
48
  def where_or: (String sql, *Object arguments) -> self
21
49
 
22
- # _@param_ `table_name`
23
- def from: (String | SQLBuilder table_name) -> self
50
+ def from: (String | SQLBuilder table_name, ?table_alias: String?) -> self
24
51
 
25
52
  # _@param_ `sql`
26
53
  #
@@ -33,7 +60,7 @@ module PgEventstore
33
60
  def remove_order: () -> self
34
61
 
35
62
  # _@param_ `limit`
36
- def limit: (Integer limit) -> self
63
+ def limit: (String | Integer limit) -> self
37
64
 
38
65
  def remove_limit: () -> self
39
66
 
@@ -41,7 +68,7 @@ module PgEventstore
41
68
  def offset: (Integer offset) -> self
42
69
 
43
70
  # _@param_ `another_builder`
44
- def union: (PgEventstore::SQLBuilder another_builder) -> self
71
+ def union: (SQLBuilder another_builder) -> self
45
72
 
46
73
  # _@param_ `sql`
47
74
  def group: (String sql) -> self
@@ -50,11 +77,6 @@ module PgEventstore
50
77
 
51
78
  def to_exec_params: () -> [String, ::Array[untyped]]
52
79
 
53
- def positional_values: () -> ::Array[Object]
54
-
55
- # _@param_ `val`
56
- def positional_values_size=: (Integer val) -> Integer
57
-
58
80
  def _to_exec_params: () -> [String, ::Array[untyped]]
59
81
 
60
82
  def single_query_sql: () -> String
@@ -75,6 +97,6 @@ module PgEventstore
75
97
 
76
98
  private
77
99
 
78
- def merge: (SQLBuilder builder)-> String
100
+ def merge: (SQLBuilder builder) -> String
79
101
  end
80
102
  end
@@ -1,19 +1,20 @@
1
1
  module PgEventstore
2
2
  class Stream
3
3
  KNOWN_SYSTEM_STREAMS: Array[String]
4
- SYSTEM_STREAM_PREFIX: String
5
4
  NON_EXISTING_STREAM_REVISION: Integer
6
5
 
7
- def self.all_stream: () -> PgEventstore::Stream
6
+ def self.all_stream: () -> Stream
8
7
 
9
- def self.system_stream: (String) -> PgEventstore::Stream
8
+ def self.system_stream: (String) -> Stream
10
9
 
11
- # _@param_ `context`
12
- #
13
- # _@param_ `stream_name`
14
- #
15
- # _@param_ `stream_id`
16
- def initialize: (context: String, stream_name: String, stream_id: String) -> void
10
+ attr_reader context: String
11
+ attr_reader stream_name: String
12
+ attr_reader stream_id: String
13
+ attr_reader stream_revision: Integer?
14
+ attr_reader starting_position: Integer?
15
+
16
+ def initialize: (context: String, stream_name: String, stream_id: String, ?stream_revision: Integer?,
17
+ ?starting_position: Integer?) -> void
17
18
 
18
19
  def all_stream?: () -> bool
19
20
 
@@ -21,23 +22,14 @@ module PgEventstore
21
22
 
22
23
  def deconstruct: () -> ::Array[untyped]
23
24
 
24
- # _@param_ `keys`
25
25
  def deconstruct_keys: (::Array[Symbol]? keys) -> ::Hash[Symbol, String]
26
26
 
27
27
  def to_hash: () -> ::Hash[untyped, untyped]
28
28
 
29
29
  def hash: () -> Integer
30
30
 
31
- # _@param_ `another`
32
31
  def eql?: (untyped another) -> bool
33
32
 
34
- # _@param_ `other_stream`
35
33
  def ==: (untyped other_stream) -> bool
36
-
37
- attr_accessor context: String
38
-
39
- attr_accessor stream_name: String
40
-
41
- attr_accessor stream_id: String
42
34
  end
43
35
  end
@@ -0,0 +1,14 @@
1
+ module PgEventstore
2
+ class StreamGlobalIndex
3
+ include Extensions::OptionsExtension
4
+ include Extensions::OptionsDefaults
5
+
6
+ INITIAL_STARTING_POSITION: Integer
7
+
8
+ attr_accessor id: Integer
9
+ attr_accessor partition_id: Integer
10
+ attr_accessor stream_id: String
11
+ attr_accessor stream_revision: Integer
12
+ attr_accessor starting_position: Integer
13
+ end
14
+ end
@@ -1,12 +1,13 @@
1
1
  module PgEventstore
2
2
  class EventsProcessorHandlers
3
- def self.process_event: (PgEventstore::Callbacks callbacks, _RawEventHandler handler, SynchronizedArray raw_events,
3
+ def self.consume_events: (EventsProcessorConsumer consumer, Callbacks callbacks,
4
+ Chunks::Repository events_repository,
4
5
  MonitorMixin::ConditionVariable raw_events_cond) -> void
5
6
 
6
- def self.after_runner_died: (PgEventstore::Callbacks callbacks, StandardError error) -> void
7
+ def self.after_runner_died: (Callbacks callbacks, StandardError error) -> void
7
8
 
8
- def self.before_runner_restored: (PgEventstore::Callbacks callbacks) -> void
9
+ def self.before_runner_restored: (Callbacks callbacks) -> void
9
10
 
10
- def self.change_state: (PgEventstore::Callbacks callbacks, String state) -> void
11
+ def self.change_state: (Callbacks callbacks, String state) -> void
11
12
  end
12
13
  end
@@ -0,0 +1,9 @@
1
+ module PgEventstore
2
+ class EventsSubscriptionPositionWorkerHandlers
3
+ def self.assign_subscription_position: (EventSubscriptionPositionQueries event_subscription_position_queries,
4
+ Integer | Float update_interval) -> void
5
+
6
+ def self.reindex: (EventSubscriptionPositionQueries event_subscription_position_queries,
7
+ EventsSubscriptionPositionWorker::ReindexTime next_reindex_at) -> void
8
+ end
9
+ end