pg_eventstore 1.13.4 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (319) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +11 -2
  3. data/CHANGELOG.md +195 -16
  4. data/README.md +33 -10
  5. data/db/migrations/10_setup_pg_cron.rb +1 -0
  6. data/db/migrations/11_add_events_link_global_position.sql +1 -0
  7. data/db/migrations/12_migrate_legacy_links.rb +83 -0
  8. data/db/migrations/13_remove_events_link_id.sql +6 -0
  9. data/db/migrations/14_remove_ids_events_id_index.sql +1 -0
  10. data/db/migrations/15_create_streams_global_index.sql +17 -0
  11. data/db/migrations/16_populate_streams_global_index.rb +150 -0
  12. data/db/migrations/17_create_events_global_index.sql +62 -0
  13. data/db/migrations/18_populate_events_global_index.rb +124 -0
  14. data/db/migrations/19_populate_events_global_index_p2.rb +25 -0
  15. data/db/migrations/20_migrate_subscriptions_current_position.sql +19 -0
  16. data/db/migrations/21_create_partitions_stats.sql +2 -0
  17. data/db/migrations/22_drop_streams_sql_view.sql +2 -0
  18. data/db/migrations/23_adjust_partitions_indexes.sql +5 -0
  19. data/db/migrations/24_drop_legacy_events_indexes.sql +3 -0
  20. data/db/migrations/25_add_parent_partitions_info_to_partitions.sql +16 -0
  21. data/db/migrations/26_change_events_stream_revision_type.rb +35 -0
  22. data/db/migrations/27_drop_events_horizon.sql +3 -0
  23. data/db/migrations/28_create_maintenance_tasks.sql +8 -0
  24. data/db/migrations/29_create_event_markers.sql +35 -0
  25. data/db/migrations/30_improve_partitions_search_in_admin_ui.rb +24 -0
  26. data/db/migrations/31_drop_events_id_default_value.sql +1 -0
  27. data/db/migrations/32_create_parittions_triggers.sql +101 -0
  28. data/db/migrations/9_create_events_horizon.sql +21 -0
  29. data/docs/AGENTS.fragment.md +696 -0
  30. data/docs/admin_ui.md +3 -1
  31. data/docs/appending_events.md +110 -49
  32. data/docs/configuration.md +69 -36
  33. data/docs/event_tracing.md +55 -0
  34. data/docs/events_and_streams.md +54 -30
  35. data/docs/how_it_works.md +57 -16
  36. data/docs/linking_events.md +2 -1
  37. data/docs/maintenance.md +14 -5
  38. data/docs/multiple_commands.md +30 -6
  39. data/docs/reading_events.md +208 -43
  40. data/docs/reading_streams.md +50 -0
  41. data/docs/replication.md +99 -0
  42. data/docs/subscriptions.md +165 -35
  43. data/docs/writing_middleware.md +25 -8
  44. data/ext/pg_eventstore_ext/extconf.rb +5 -0
  45. data/ext/pg_eventstore_ext/pg_eventstore_ext.c +74 -0
  46. data/lib/pg_eventstore/async_runner.rb +63 -0
  47. data/lib/pg_eventstore/basic_config.rb +15 -0
  48. data/lib/pg_eventstore/callbacks.rb +7 -5
  49. data/lib/pg_eventstore/chunks/chunk.rb +31 -0
  50. data/lib/pg_eventstore/chunks/read_api_events_index_chunk.rb +83 -0
  51. data/lib/pg_eventstore/chunks/replica_events_index_chunk.rb +35 -0
  52. data/lib/pg_eventstore/chunks/repository.rb +73 -0
  53. data/lib/pg_eventstore/chunks/subscription_checkpoint_chunk.rb +48 -0
  54. data/lib/pg_eventstore/chunks/subscription_events_index_chunk.rb +99 -0
  55. data/lib/pg_eventstore/chunks.rb +14 -0
  56. data/lib/pg_eventstore/cli/try_to_delete_subscriptions_set.rb +2 -2
  57. data/lib/pg_eventstore/client.rb +167 -52
  58. data/lib/pg_eventstore/commands/append.rb +62 -43
  59. data/lib/pg_eventstore/commands/delete_event.rb +7 -8
  60. data/lib/pg_eventstore/commands/delete_stream.rb +3 -3
  61. data/lib/pg_eventstore/commands/event_modifiers/prepare_link_event.rb +11 -6
  62. data/lib/pg_eventstore/commands/event_modifiers/prepare_regular_event.rb +12 -7
  63. data/lib/pg_eventstore/commands/link_to.rb +9 -9
  64. data/lib/pg_eventstore/commands/multiple.rb +2 -2
  65. data/lib/pg_eventstore/commands/read.rb +23 -5
  66. data/lib/pg_eventstore/commands/read_grouped.rb +46 -0
  67. data/lib/pg_eventstore/commands/read_streams.rb +18 -0
  68. data/lib/pg_eventstore/commands/read_streams_paginated.rb +56 -0
  69. data/lib/pg_eventstore/commands/regular_stream_read_paginated.rb +4 -4
  70. data/lib/pg_eventstore/commands/revision_check/current_revision.rb +51 -0
  71. data/lib/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rb +46 -0
  72. data/lib/pg_eventstore/commands/revision_check/expected_revision.rb +135 -0
  73. data/lib/pg_eventstore/commands/revision_check/stream_revision_check.rb +98 -0
  74. data/lib/pg_eventstore/commands/revision_check/stream_revision_comparison.rb +36 -0
  75. data/lib/pg_eventstore/commands/stream_revision.rb +14 -0
  76. data/lib/pg_eventstore/commands/system_stream_read_paginated.rb +4 -4
  77. data/lib/pg_eventstore/commands.rb +4 -2
  78. data/lib/pg_eventstore/config.rb +30 -9
  79. data/lib/pg_eventstore/connection.rb +22 -37
  80. data/lib/pg_eventstore/errors.rb +137 -11
  81. data/lib/pg_eventstore/event.rb +39 -7
  82. data/lib/pg_eventstore/event_deserializer.rb +5 -4
  83. data/lib/pg_eventstore/event_global_index.rb +118 -0
  84. data/lib/pg_eventstore/event_marker.rb +16 -0
  85. data/lib/pg_eventstore/event_marker_index.rb +25 -0
  86. data/lib/pg_eventstore/event_serializer.rb +6 -0
  87. data/lib/pg_eventstore/extensions/acts_as_configurable.rb +88 -0
  88. data/lib/pg_eventstore/extensions/options_defaults.rb +25 -0
  89. data/lib/pg_eventstore/extensions/options_extension.rb +42 -13
  90. data/lib/pg_eventstore/feature_marker.rb +18 -0
  91. data/lib/pg_eventstore/maintenance.rb +11 -6
  92. data/lib/pg_eventstore/middleware/event_tracing.rb +53 -0
  93. data/lib/pg_eventstore/partition.rb +6 -0
  94. data/lib/pg_eventstore/pg_connection.rb +70 -14
  95. data/lib/pg_eventstore/queries/event_marker_queries.rb +74 -0
  96. data/lib/pg_eventstore/queries/event_queries.rb +9 -95
  97. data/lib/pg_eventstore/queries/events_global_index_queries.rb +131 -0
  98. data/lib/pg_eventstore/queries/index_filtering_queries.rb +179 -0
  99. data/lib/pg_eventstore/queries/links_resolver.rb +10 -7
  100. data/lib/pg_eventstore/queries/maintenance_queries.rb +159 -42
  101. data/lib/pg_eventstore/queries/partition_queries.rb +46 -104
  102. data/lib/pg_eventstore/queries/replica_queries.rb +110 -0
  103. data/lib/pg_eventstore/queries/streams_global_index_queries.rb +163 -0
  104. data/lib/pg_eventstore/queries/transaction_queries.rb +58 -10
  105. data/lib/pg_eventstore/queries.rb +29 -1
  106. data/lib/pg_eventstore/query_builders/basic_filtering.rb +38 -5
  107. data/lib/pg_eventstore/query_builders/event_markers_filtering.rb +47 -0
  108. data/lib/pg_eventstore/query_builders/event_markers_index_filtering.rb +275 -0
  109. data/lib/pg_eventstore/query_builders/event_subscription_positions_filtering.rb +37 -0
  110. data/lib/pg_eventstore/query_builders/events_filtering.rb +15 -164
  111. data/lib/pg_eventstore/query_builders/events_global_index_filtering.rb +227 -0
  112. data/lib/pg_eventstore/query_builders/filters/collection.rb +324 -0
  113. data/lib/pg_eventstore/query_builders/filters/event_type_filter.rb +37 -0
  114. data/lib/pg_eventstore/query_builders/filters/filter_row.rb +54 -0
  115. data/lib/pg_eventstore/query_builders/filters/marker_filter.rb +20 -0
  116. data/lib/pg_eventstore/query_builders/filters/marker_filter_row.rb +49 -0
  117. data/lib/pg_eventstore/query_builders/filters/stream_filter.rb +48 -0
  118. data/lib/pg_eventstore/query_builders/index_based_events_filtering.rb +260 -0
  119. data/lib/pg_eventstore/query_builders/partitions_filtering.rb +175 -51
  120. data/lib/pg_eventstore/query_builders/read_cursor/stream_cursor.rb +122 -0
  121. data/lib/pg_eventstore/query_builders/streams_global_index_filtering.rb +83 -0
  122. data/lib/pg_eventstore/query_builders/subscription_events_filtering.rb +79 -0
  123. data/lib/pg_eventstore/query_strategy/async.rb +64 -0
  124. data/lib/pg_eventstore/query_strategy/foreground.rb +25 -0
  125. data/lib/pg_eventstore/query_strategy.rb +19 -0
  126. data/lib/pg_eventstore/raw_event.rb +46 -0
  127. data/lib/pg_eventstore/rspec/test_helpers.rb +21 -8
  128. data/lib/pg_eventstore/sql_builder.rb +87 -8
  129. data/lib/pg_eventstore/stream.rb +14 -17
  130. data/lib/pg_eventstore/stream_global_index.rb +28 -0
  131. data/lib/pg_eventstore/subscriptions/basic_runner.rb +4 -4
  132. data/lib/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rb +5 -17
  133. data/lib/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rb +36 -0
  134. data/lib/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rb +13 -1
  135. data/lib/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rb +19 -14
  136. data/lib/pg_eventstore/subscriptions/events_processor.rb +21 -19
  137. data/lib/pg_eventstore/subscriptions/events_processor_consumer/multiple.rb +63 -0
  138. data/lib/pg_eventstore/subscriptions/events_processor_consumer/replica.rb +68 -0
  139. data/lib/pg_eventstore/subscriptions/events_processor_consumer/single.rb +62 -0
  140. data/lib/pg_eventstore/subscriptions/events_processor_consumer.rb +44 -0
  141. data/lib/pg_eventstore/subscriptions/events_subscription_position_worker.rb +68 -0
  142. data/lib/pg_eventstore/subscriptions/queries/event_subscription_position_queries.rb +177 -0
  143. data/lib/pg_eventstore/subscriptions/queries/subscription_command_queries.rb +5 -5
  144. data/lib/pg_eventstore/subscriptions/queries/subscription_queries.rb +80 -56
  145. data/lib/pg_eventstore/subscriptions/queries/subscriptions_set_command_queries.rb +2 -2
  146. data/lib/pg_eventstore/subscriptions/queries/subscriptions_set_queries.rb +1 -1
  147. data/lib/pg_eventstore/subscriptions/replica_subscription_handler.rb +140 -0
  148. data/lib/pg_eventstore/subscriptions/replica_subscription_runner.rb +9 -0
  149. data/lib/pg_eventstore/subscriptions/subscription.rb +9 -7
  150. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/collection.rb +36 -0
  151. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/index_read_strategy.rb +82 -0
  152. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/replication_strategy.rb +75 -0
  153. data/lib/pg_eventstore/subscriptions/subscription_feed_strategy.rb +31 -0
  154. data/lib/pg_eventstore/subscriptions/subscription_feeder.rb +26 -2
  155. data/lib/pg_eventstore/subscriptions/subscription_handler_performance.rb +5 -5
  156. data/lib/pg_eventstore/subscriptions/subscription_runner.rb +20 -22
  157. data/lib/pg_eventstore/subscriptions/subscription_runner_commands/reset_position.rb +1 -1
  158. data/lib/pg_eventstore/subscriptions/subscription_runners_feeder.rb +10 -11
  159. data/lib/pg_eventstore/subscriptions/subscriptions_lifecycle.rb +0 -12
  160. data/lib/pg_eventstore/subscriptions/subscriptions_manager.rb +84 -29
  161. data/lib/pg_eventstore/{subscriptions/synchronized_array.rb → synchronized_array.rb} +15 -0
  162. data/lib/pg_eventstore/tasks/setup.rake +32 -33
  163. data/lib/pg_eventstore/utils.rb +39 -0
  164. data/lib/pg_eventstore/version.rb +1 -1
  165. data/lib/pg_eventstore/web/application.rb +104 -20
  166. data/lib/pg_eventstore/web/paginator/base_collection.rb +5 -1
  167. data/lib/pg_eventstore/web/paginator/event_types_collection.rb +14 -4
  168. data/lib/pg_eventstore/web/paginator/events_collection.rb +29 -33
  169. data/lib/pg_eventstore/web/paginator/helpers.rb +19 -12
  170. data/lib/pg_eventstore/web/paginator/markers_collection.rb +48 -0
  171. data/lib/pg_eventstore/web/paginator/stream_contexts_collection.rb +13 -2
  172. data/lib/pg_eventstore/web/paginator/stream_ids_collection.rb +21 -11
  173. data/lib/pg_eventstore/web/paginator/stream_names_collection.rb +18 -4
  174. data/lib/pg_eventstore/web/paginator/streams_collection.rb +95 -0
  175. data/lib/pg_eventstore/web/public/javascripts/pg_eventstore.js +49 -22
  176. data/lib/pg_eventstore/web/subscriptions/helpers.rb +2 -2
  177. data/lib/pg_eventstore/web/subscriptions/set_collection.rb +1 -1
  178. data/lib/pg_eventstore/web/subscriptions/subscriptions.rb +1 -1
  179. data/lib/pg_eventstore/web/subscriptions/with_state/set_collection.rb +1 -1
  180. data/lib/pg_eventstore/web/subscriptions/with_state/subscriptions.rb +1 -1
  181. data/lib/pg_eventstore/web/views/home/dashboard.erb +11 -9
  182. data/lib/pg_eventstore/web/views/home/partials/event_filter.erb +18 -5
  183. data/lib/pg_eventstore/web/views/home/partials/events.erb +38 -1
  184. data/lib/pg_eventstore/web/views/home/partials/markers_filter.erb +18 -0
  185. data/lib/pg_eventstore/web/views/layouts/application.erb +6 -0
  186. data/lib/pg_eventstore/web/views/streams/index.erb +110 -0
  187. data/lib/pg_eventstore/web/views/streams/partials/streams.erb +11 -0
  188. data/lib/pg_eventstore/web/views/subscriptions/index.erb +4 -1
  189. data/lib/pg_eventstore/web.rb +2 -0
  190. data/lib/pg_eventstore.rb +26 -63
  191. data/pg_eventstore.gemspec +6 -4
  192. data/sig/interfaces/_raw_events_handler.rbs +3 -0
  193. data/sig/interfaces/subscription_handler.rbs +1 -1
  194. data/sig/pg/result.rbs +9 -0
  195. data/sig/pg_eventstore/async_runner.rbs +13 -0
  196. data/sig/pg_eventstore/basic_config.rbs +9 -0
  197. data/sig/pg_eventstore/chunks/chunk.rbs +13 -0
  198. data/sig/pg_eventstore/chunks/read_api_events_index_chunk.rbs +30 -0
  199. data/sig/pg_eventstore/chunks/replica_events_index_chunk.rbs +11 -0
  200. data/sig/pg_eventstore/chunks/repository.rbs +22 -0
  201. data/sig/pg_eventstore/chunks/subscription_checkpoint_chunk.rbs +18 -0
  202. data/sig/pg_eventstore/chunks/subscription_events_index_chunk.rbs +37 -0
  203. data/sig/pg_eventstore/client.rbs +41 -43
  204. data/sig/pg_eventstore/commands/append.rbs +11 -25
  205. data/sig/pg_eventstore/commands/event_modifiers/prepare_link_event.rbs +9 -12
  206. data/sig/pg_eventstore/commands/event_modifiers/prepare_regular_event.rbs +5 -4
  207. data/sig/pg_eventstore/commands/link_to.rbs +6 -11
  208. data/sig/pg_eventstore/commands/multiple.rbs +1 -1
  209. data/sig/pg_eventstore/commands/read.rbs +2 -5
  210. data/sig/pg_eventstore/commands/read_grouped.rbs +7 -0
  211. data/sig/pg_eventstore/commands/read_streams.rbs +7 -0
  212. data/sig/pg_eventstore/commands/read_streams_paginated.rbs +16 -0
  213. data/sig/pg_eventstore/commands/regular_stream_read_paginated.rbs +9 -17
  214. data/sig/pg_eventstore/commands/revision_check/current_revision.rbs +25 -0
  215. data/sig/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rbs +14 -0
  216. data/sig/pg_eventstore/commands/revision_check/expected_revision.rbs +67 -0
  217. data/sig/pg_eventstore/commands/revision_check/stream_revision_check.rbs +20 -0
  218. data/sig/pg_eventstore/commands/revision_check/stream_revision_comparison.rbs +9 -0
  219. data/sig/pg_eventstore/commands/stream_revision.rbs +7 -0
  220. data/sig/pg_eventstore/commands/system_stream_read_paginated.rbs +9 -14
  221. data/sig/pg_eventstore/config.rbs +15 -6
  222. data/sig/pg_eventstore/connection.rbs +11 -18
  223. data/sig/pg_eventstore/errors.rbs +64 -34
  224. data/sig/pg_eventstore/event.rbs +20 -6
  225. data/sig/pg_eventstore/event_deserializer.rbs +5 -10
  226. data/sig/pg_eventstore/event_global_index.rbs +60 -0
  227. data/sig/pg_eventstore/event_marker.rbs +9 -0
  228. data/sig/pg_eventstore/event_marker_index.rbs +12 -0
  229. data/sig/pg_eventstore/extensions/acts_as_configurable.rbs +29 -0
  230. data/sig/pg_eventstore/extensions/options_defaults.rbs +7 -0
  231. data/sig/pg_eventstore/extensions/options_extension.rbs +9 -1
  232. data/sig/pg_eventstore/feature_marker.rbs +10 -0
  233. data/sig/pg_eventstore/maintenance.rbs +12 -8
  234. data/sig/pg_eventstore/middleware/event_trace.rbs +14 -0
  235. data/sig/pg_eventstore/partition.rbs +2 -4
  236. data/sig/pg_eventstore/pg_connection.rbs +8 -0
  237. data/sig/pg_eventstore/queries/event_marker_queries.rbs +21 -0
  238. data/sig/pg_eventstore/queries/event_queries.rbs +6 -38
  239. data/sig/pg_eventstore/queries/events_global_index_queries.rbs +37 -0
  240. data/sig/pg_eventstore/queries/index_filtering_queries.rbs +50 -0
  241. data/sig/pg_eventstore/queries/links_resolver.rbs +7 -11
  242. data/sig/pg_eventstore/queries/maintenance_queries.rbs +12 -9
  243. data/sig/pg_eventstore/queries/partition_queries.rbs +32 -67
  244. data/sig/pg_eventstore/queries/replica_queries.rbs +31 -0
  245. data/sig/pg_eventstore/queries/streams_global_index_queries.rbs +39 -0
  246. data/sig/pg_eventstore/queries/transaction_queries.rbs +4 -2
  247. data/sig/pg_eventstore/queries.rbs +11 -21
  248. data/sig/pg_eventstore/query_builders/basic_filtering.rbs +10 -3
  249. data/sig/pg_eventstore/query_builders/event_markers_filtering.rbs +17 -0
  250. data/sig/pg_eventstore/query_builders/event_markers_index_filtering.rbs +69 -0
  251. data/sig/pg_eventstore/query_builders/event_subscription_positions_filtering.rbs +15 -0
  252. data/sig/pg_eventstore/query_builders/events_filtering_query.rbs +9 -51
  253. data/sig/pg_eventstore/query_builders/events_global_index_filtering.rbs +68 -0
  254. data/sig/pg_eventstore/query_builders/filters/collection.rbs +84 -0
  255. data/sig/pg_eventstore/query_builders/filters/event_type_filter.rbs +19 -0
  256. data/sig/pg_eventstore/query_builders/filters/filter_row.rbs +21 -0
  257. data/sig/pg_eventstore/query_builders/filters/marker_filter.rbs +13 -0
  258. data/sig/pg_eventstore/query_builders/filters/marker_filter_row.rbs +19 -0
  259. data/sig/pg_eventstore/query_builders/filters/stream_filter.rbs +24 -0
  260. data/sig/pg_eventstore/query_builders/index_based_events_filtering.rbs +60 -0
  261. data/sig/pg_eventstore/query_builders/partitions_filtering.rbs +29 -10
  262. data/sig/pg_eventstore/query_builders/read_cursor/stream_cursor.rbs +47 -0
  263. data/sig/pg_eventstore/query_builders/streams_global_index_filtering.rbs +27 -0
  264. data/sig/pg_eventstore/query_builders/subscription_events_filtering.rbs +26 -0
  265. data/sig/pg_eventstore/query_strategy/async.rbs +17 -0
  266. data/sig/pg_eventstore/query_strategy/foreground.rbs +11 -0
  267. data/sig/pg_eventstore/query_strategy.rbs +7 -0
  268. data/sig/pg_eventstore/raw_event.rbs +20 -0
  269. data/sig/pg_eventstore/sql_builder.rbs +32 -10
  270. data/sig/pg_eventstore/stream.rbs +10 -18
  271. data/sig/pg_eventstore/stream_global_index.rbs +14 -0
  272. data/sig/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rbs +5 -4
  273. data/sig/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rbs +9 -0
  274. data/sig/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rbs +17 -12
  275. data/sig/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rbs +16 -8
  276. data/sig/pg_eventstore/subscriptions/event_subscription_position_queries.rbs +30 -0
  277. data/sig/pg_eventstore/subscriptions/events_processor.rbs +12 -5
  278. data/sig/pg_eventstore/subscriptions/events_processor_consumer/multiple.rbs +17 -0
  279. data/sig/pg_eventstore/subscriptions/events_processor_consumer/replica.rbs +17 -0
  280. data/sig/pg_eventstore/subscriptions/events_processor_consumer/single.rbs +17 -0
  281. data/sig/pg_eventstore/subscriptions/events_processor_consumer.rbs +14 -0
  282. data/sig/pg_eventstore/subscriptions/events_subscription_position_worker.rbs +28 -0
  283. data/sig/pg_eventstore/subscriptions/queries/subscription_queries.rbs +18 -50
  284. data/sig/pg_eventstore/subscriptions/replica_subscription_handler.rbs +33 -0
  285. data/sig/pg_eventstore/subscriptions/replica_subscription_runner.rbs +4 -0
  286. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/collection.rbs +14 -0
  287. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/index_read_strategy.rbs +23 -0
  288. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/replication_strategy.rbs +23 -0
  289. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy.rbs +11 -0
  290. data/sig/pg_eventstore/subscriptions/subscription_feeder.rbs +13 -10
  291. data/sig/pg_eventstore/subscriptions/subscription_handler_performance.rbs +1 -1
  292. data/sig/pg_eventstore/subscriptions/subscription_runner.rbs +13 -5
  293. data/sig/pg_eventstore/subscriptions/subscription_runners_feeder.rbs +5 -5
  294. data/sig/pg_eventstore/subscriptions/subscriptions_lifecycle.rbs +4 -6
  295. data/sig/pg_eventstore/subscriptions/subscriptions_manager.rbs +29 -43
  296. data/sig/pg_eventstore/synchronized_array.rbs +4 -0
  297. data/sig/pg_eventstore/utils.rbs +18 -11
  298. data/sig/pg_eventstore/web/application.rbs +13 -3
  299. data/sig/pg_eventstore/web/paginator/base_collection.rbs +2 -0
  300. data/sig/pg_eventstore/web/paginator/event_types_collection.rbs +4 -0
  301. data/sig/pg_eventstore/web/paginator/events_collection.rbs +11 -11
  302. data/sig/pg_eventstore/web/paginator/helpers.rbs +6 -15
  303. data/sig/pg_eventstore/web/paginator/markers_collection.rbs +13 -0
  304. data/sig/pg_eventstore/web/paginator/stream_contexts_collection.rbs +4 -0
  305. data/sig/pg_eventstore/web/paginator/stream_names_collection.rbs +4 -0
  306. data/sig/pg_eventstore/web/paginator/streams_collection.rbs +30 -0
  307. data/sig/pg_eventstore.rbs +8 -26
  308. metadata +181 -21
  309. data/lib/pg_eventstore/commands/all_stream_read_grouped.rb +0 -69
  310. data/lib/pg_eventstore/commands/regular_stream_read_grouped.rb +0 -31
  311. data/lib/pg_eventstore/subscriptions/queries/service_queries.rb +0 -73
  312. data/lib/pg_eventstore/subscriptions/subscription_position_evaluation.rb +0 -195
  313. data/lib/pg_eventstore/web/views/home/partials/system_stream_filter.erb +0 -15
  314. data/sig/pg_eventstore/commands/all_stream_read_grouped.rbs +0 -16
  315. data/sig/pg_eventstore/commands/regular_stream_read_grouped.rbs +0 -8
  316. data/sig/pg_eventstore/subscriptions/queries/service_queries.rbs +0 -15
  317. data/sig/pg_eventstore/subscriptions/subscription_position_evaluation.rbs +0 -53
  318. data/sig/pg_eventstore/subscriptions/synchronized_array.rbs +0 -4
  319. /data/sig/interfaces/{_raw_event_handler.rbs → raw_event_handler.rbs} +0 -0
@@ -1,21 +1,24 @@
1
1
  module PgEventstore
2
2
  class MaintenanceQueries
3
- attr_reader connection: PgEventstore::Connection
3
+ EVENT_INDEXES_TO_REMOVE_PER_QUERY: Integer
4
+ EVENT_INDEXES_TO_UPDATE_PER_QUERY: Integer
4
5
 
5
- def initialize: (PgEventstore::Connection connection)-> untyped
6
+ attr_reader connection: Connection
6
7
 
7
- def adjust_stream_revisions: (PgEventstore::Stream stream, Integer after_revision)-> void
8
+ def initialize: (Connection connection) -> untyped
8
9
 
9
- def delete_event: (PgEventstore::Event event)-> Integer
10
+ def delete_event: (Event event) -> void
10
11
 
11
- def delete_stream: (PgEventstore::Stream stream)-> Integer
12
+ def delete_stream: (Stream stream) -> Integer
12
13
 
13
- def events_to_lock_count: (PgEventstore::Stream stream, Integer after_revision)-> Integer
14
-
15
- def reload_event: (PgEventstore::Event event)-> PgEventstore::Event?
14
+ def events_to_lock_count: (Stream stream, Integer after_revision) -> Integer
16
15
 
17
16
  private
18
17
 
19
- def basic_deserializer: -> PgEventstore::EventDeserializer
18
+ def partition_queries: -> PartitionQueries
19
+
20
+ def streams_global_index_queries: -> StreamsGlobalIndexQueries
21
+
22
+ def transaction_queries: -> TransactionQueries
20
23
  end
21
24
  end
@@ -1,78 +1,43 @@
1
1
  module PgEventstore
2
2
  class PartitionQueries
3
- # _@param_ `connection`
4
- def initialize: (PgEventstore::Connection connection) -> void
5
-
6
- # _@param_ `stream`
7
- #
8
- # _@return_ — partition attributes
9
- def create_context_partition: (PgEventstore::Stream stream) -> ::Hash[untyped, untyped]
10
-
11
- # _@param_ `stream`
12
- #
13
- # _@param_ `context_partition_name`
14
- #
15
- # _@return_ — partition attributes
16
- def create_stream_name_partition: (PgEventstore::Stream stream, String context_partition_name) -> ::Hash[untyped, untyped]
17
-
18
- # _@param_ `stream`
19
- #
20
- # _@param_ `event_type`
21
- #
22
- # _@param_ `stream_name_partition_name`
23
- #
24
- # _@return_ — partition attributes
25
- def create_event_type_partition: (PgEventstore::Stream stream, String event_type, String stream_name_partition_name) -> ::Hash[untyped, untyped]
26
-
27
- # _@param_ `stream`
28
- #
29
- # _@param_ `event_type`
30
- def partition_required?: (PgEventstore::Stream stream, String event_type) -> bool
31
-
32
- # _@param_ `stream`
33
- #
34
- # _@param_ `event_type`
35
- def create_partitions: (PgEventstore::Stream stream, String event_type) -> void
36
-
37
- # _@param_ `stream`
38
- #
39
- # _@return_ — partition attributes
40
- def context_partition: (PgEventstore::Stream stream) -> ::Hash[untyped, untyped]?
41
-
42
- def partitions: (Array[Hash[Symbol, String | nil]] stream_filters, Array[String] event_filters,
43
- ?scope: Symbol) -> Array[Partition]
44
-
45
- # _@param_ `stream`
46
- #
47
- # _@return_ — partition attributes
48
- def stream_name_partition: (PgEventstore::Stream stream) -> ::Hash[untyped, untyped]?
49
-
50
- # _@param_ `stream`
51
- #
52
- # _@param_ `event_type`
53
- #
54
- # _@return_ — partition attributes
55
- def event_type_partition: (PgEventstore::Stream stream, String event_type) -> ::Hash[untyped, untyped]?
56
-
57
- # _@param_ `table_name`
3
+ @query_strategy: QueryStrategy
4
+
5
+ attr_accessor connection: Connection
6
+
7
+ def initialize: (Connection connection, ?QueryStrategy query_strategy) -> void
8
+
9
+ def attach_event_type_partition: (Partition partition) -> void
10
+
11
+ def create_context_partition: (Stream stream) -> ::Hash[untyped, untyped]
12
+
13
+ def create_stream_name_partition: (Stream stream, Integer context_partition_id) -> ::Hash[untyped, untyped]
14
+
15
+ def create_event_type_partition: (Stream stream, String event_type,
16
+ Integer context_partition_id, Integer stream_name_partition_id) -> ::Hash[untyped, untyped]
17
+
18
+ def detach_event_type_partition: (Partition partition) -> void
19
+
20
+ def partition_required?: (Stream stream, String event_type) -> bool
21
+
22
+ def create_partitions: (Stream stream, String event_type) -> void
23
+
24
+ def context_partition: (Stream stream) -> ::Hash[untyped, untyped]?
25
+
26
+ def partitions: (QueryBuilders::Filters::Collection filters_collection, ?scope: Symbol) -> Array[Partition]
27
+
28
+ def stream_name_partition: (Stream stream) -> ::Hash[untyped, untyped]?
29
+
30
+ def event_type_partition: (Stream stream, String event_type) -> ::Hash[untyped, untyped]?
31
+
58
32
  def partition_name_taken?: (String table_name) -> bool
59
33
 
60
- # _@param_ `ids`
61
34
  def find_by_ids: (::Array[Integer] ids) -> ::Array[::Hash[untyped, untyped]]
62
35
 
63
- # _@param_ `stream`
64
- def context_partition_name: (PgEventstore::Stream stream) -> String
65
-
66
- # _@param_ `stream`
67
- def stream_name_partition_name: (PgEventstore::Stream stream) -> String
36
+ def context_partition_name: (Stream stream) -> String
68
37
 
69
- # _@param_ `stream`
70
- #
71
- # _@param_ `event_type`
72
- def event_type_partition_name: (PgEventstore::Stream stream, String event_type) -> String
38
+ def stream_name_partition_name: (Stream stream) -> String
73
39
 
74
- # Returns the value of attribute connection.
75
- attr_accessor connection: PgEventstore::Connection
40
+ def event_type_partition_name: (Stream stream, String event_type) -> String
76
41
 
77
42
  private
78
43
 
@@ -0,0 +1,31 @@
1
+ module PgEventstore
2
+ class ReplicaQueries
3
+ MAX_PARTITIONS_TO_RESOLVE_PER_CALL: Integer
4
+
5
+ @query_strategy: QueryStrategy
6
+
7
+ attr_reader connection: Connection
8
+
9
+ def initialize: (Connection connection, QueryStrategy query_strategy) -> void
10
+
11
+ def load_event_markers_index: (Array[EventGlobalIndex::SubscriptionRepr] indexes) -> Array[EventMarkerIndex]
12
+
13
+ def load_events: (Array[EventGlobalIndex::SubscriptionRepr] indexes) -> Array[RawEvent]
14
+
15
+ def load_events_global_index: (Array[EventGlobalIndex::SubscriptionRepr] indexes) -> Array[EventGlobalIndex]
16
+
17
+ def load_markers: (Array[EventMarkerIndex] indexes) -> Array[EventMarker]
18
+
19
+ def load_partitions: (Array[EventGlobalIndex] indexes) -> Array[Partition]
20
+
21
+ def load_streams_global_index: (Array[EventGlobalIndex] indexes) -> Array[StreamGlobalIndex]
22
+
23
+ def load_subscription_positions: (Array[EventGlobalIndex::SubscriptionRepr] indexes) -> Array[Integer]
24
+
25
+ private
26
+
27
+ def events_global_index_queries: -> EventsGlobalIndexQueries
28
+
29
+ def partition_queries: -> PartitionQueries
30
+ end
31
+ end
@@ -0,0 +1,39 @@
1
+ module PgEventstore
2
+ class StreamsGlobalIndexQueries
3
+ @query_strategy: QueryStrategy
4
+
5
+ attr_reader connection: Connection
6
+
7
+ def initialize: (Connection connection, QueryStrategy query_strategy) -> void
8
+
9
+ def create: (Stream stream) -> StreamGlobalIndex
10
+
11
+ def delete: (Integer id) -> bool
12
+
13
+ def find_by: (Stream stream) -> StreamGlobalIndex?
14
+
15
+ def find_by!: (Stream stream) -> StreamGlobalIndex
16
+
17
+ def find_or_create_by: (Stream stream) -> StreamGlobalIndex
18
+
19
+ def resolve_indexes: (Array[StreamGlobalIndex] indexes) -> Array[Stream]
20
+
21
+ def stream_exists?: (Stream stream) -> bool
22
+
23
+ def stream_revision: (Stream stream) -> Integer?
24
+
25
+ def streams_global_index: (Hash[Symbol, untyped]) -> Array[StreamGlobalIndex]
26
+
27
+ def update: (Integer id, **untyped attrs) -> void
28
+
29
+ private
30
+
31
+ def deserialize_many: (PG::Result pg_result) -> Array[StreamGlobalIndex]
32
+
33
+ def deserialize_one: (PG::Result pg_result) -> StreamGlobalIndex?
34
+
35
+ def partition_queries: -> PartitionQueries
36
+
37
+ def transaction_queries: -> TransactionQueries
38
+ end
39
+ end
@@ -2,16 +2,18 @@ module PgEventstore
2
2
  class TransactionQueries
3
3
  ISOLATION_LEVELS: ::Hash[Symbol, String]
4
4
 
5
+ MAX_NUMBER_OF_UNIQUE_CONSTRAINTS_ERROR_RETRIES: Integer
6
+
5
7
  # _@param_ `connection`
6
8
  def initialize: (PgEventstore::Connection connection) -> void
7
9
 
8
10
  # _@param_ `level` — transaction isolation level
9
- def transaction: (?Symbol level) { () -> untyped } -> void
11
+ def transaction: (?Symbol level, ?read_only: bool) { () -> untyped } -> void
10
12
 
11
13
  # _@param_ `level` — PostgreSQL transaction isolation level
12
14
  #
13
15
  # _@param_ `pg_connection`
14
- def pg_transaction: (String level, PG::Connection pg_connection) { () -> untyped } -> void
16
+ def pg_transaction: (String level, bool read_only, PG::Connection pg_connection) { () -> untyped } -> void
15
17
 
16
18
  def partition_queries: () -> PgEventstore::PartitionQueries
17
19
 
@@ -1,25 +1,15 @@
1
1
  module PgEventstore
2
2
  class Queries
3
- include PgEventstore::Extensions::OptionsExtension
4
-
5
- attr_accessor events: PgEventstore::EventQueries?
6
-
7
- attr_accessor partitions: PgEventstore::PartitionQueries?
8
-
9
- attr_accessor transactions: PgEventstore::TransactionQueries?
10
-
11
- attr_accessor maintenance: PgEventstore::MaintenanceQueries?
12
-
13
- def initialize: (**untyped options) -> void
14
-
15
- def options_hash: () -> ::Hash[untyped, untyped]
16
-
17
- def readonly!: (Symbol opt_name) -> bool
18
-
19
- def readonly?: (Symbol opt_name) -> bool
20
-
21
- def readonly_error: (Symbol opt_name) -> void
22
-
23
- def init_default_values: (::Hash[untyped, untyped] options) -> void
3
+ include Extensions::OptionsExtension
4
+
5
+ attr_accessor events: EventQueries?
6
+ attr_accessor partitions: PartitionQueries?
7
+ attr_accessor transactions: TransactionQueries?
8
+ attr_accessor maintenance: MaintenanceQueries?
9
+ attr_accessor events_global_index: EventsGlobalIndexQueries?
10
+ attr_accessor streams_global_index: StreamsGlobalIndexQueries?
11
+ attr_accessor event_subscription_positions: EventSubscriptionPositionQueries?
12
+ attr_accessor event_markers: EventMarkerQueries?
13
+ attr_accessor index_filtering: IndexFilteringQueries?
24
14
  end
25
15
  end
@@ -1,9 +1,16 @@
1
1
  module PgEventstore
2
2
  module QueryBuilders
3
- class BasicFiltering
4
- @sql_builder: SQLBuilder
3
+ module BasicFiltering
4
+ module ClassMethods
5
5
 
6
- def initialize: -> void
6
+ def ascending?: ((String | Symbol)? order) -> bool
7
+
8
+ def descending?: ((String | Symbol)? order) -> bool
9
+
10
+ def reverse_order: ((String | Symbol)? order) -> Symbol
11
+ end
12
+
13
+ SQL_DIRECTIONS: Hash[String | Symbol, String]
7
14
 
8
15
  def to_exec_params: -> [String, Array[untyped]]
9
16
 
@@ -0,0 +1,17 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ class EventMarkersFiltering
4
+ PRIMARY_TABLE_NAME: String
5
+
6
+ include BasicFiltering
7
+
8
+ @sql_builder: SQLBuilder
9
+
10
+ def self.sql_builder_by_names: (Array[String] names) -> SQLBuilder
11
+
12
+ def add_name: (String name) -> void
13
+
14
+ def add_names: (Array[String] names) -> void
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,69 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ class EventMarkersIndexFiltering
4
+ DEFAULT_LIMIT: Integer
5
+ PRIMARY_TABLE_NAME: String
6
+
7
+ include BasicFiltering
8
+
9
+ @sql_builder: SQLBuilder
10
+
11
+ def self.for_read_common: (
12
+ Filters::MarkerFilterRow marker_filter_row,
13
+ ReadCursor::StreamCursor cursor
14
+ ) -> SQLBuilder
15
+
16
+ def self.for_read_grouped: (
17
+ Filters::MarkerFilterRow marker_filter_row,
18
+ ReadCursor::StreamCursor cursor
19
+ ) -> SQLBuilder
20
+
21
+ def self.for_revision_validation_per_type: (
22
+ Filters::MarkerFilterRow marker_filter_row,
23
+ ReadCursor::StreamCursor cursor,
24
+ Integer seq_num
25
+ ) -> SQLBuilder
26
+
27
+ def add_global_position_direction: ((String | Symbol)? direction) -> void
28
+
29
+ def add_limit: (Integer? limit) -> void
30
+
31
+ def add_marker_filter_row: (Filters::MarkerFilterRow marker_filter_row) -> void
32
+
33
+ def add_stream_revision_direction: ((String | Symbol)? direction) -> void
34
+
35
+ def for_subscription: -> void
36
+
37
+ def from_position: (Integer? position, (String | Symbol)? direction) -> void
38
+
39
+ def from_revision: ((Integer | SQLBuilder)? revision, (String | Symbol)? direction) -> void
40
+
41
+ def to_position: (Integer? position, (String | Symbol)? direction) -> void
42
+
43
+ def to_revision: ((Integer | SQLBuilder)? revision, (String | Symbol)? direction) -> void
44
+
45
+ private
46
+
47
+ def self.add_direction_and_limit: (
48
+ EventMarkersIndexFiltering index_filtering,
49
+ ReadCursor::StreamCursor cursor
50
+ )-> void
51
+
52
+ def self.default_filtering: (ReadCursor::StreamCursor cursor) -> EventMarkersIndexFiltering
53
+
54
+ def self.filtering_from_filter_row: (
55
+ Filters::MarkerFilterRow marker_filter_row,
56
+ ReadCursor::StreamCursor cursor
57
+ ) -> EventMarkersIndexFiltering
58
+
59
+ def self.stream_revision_based_filtering: (
60
+ ReadCursor::StreamCursor cursor,
61
+ Filters::MarkerFilterRow marker_filter_row
62
+ ) -> EventMarkersIndexFiltering
63
+
64
+ def direction_operator_from: ((String | Symbol)? direction) -> String
65
+
66
+ def direction_operator_to: ((String | Symbol)? direction) -> String
67
+ end
68
+ end
69
+ end
@@ -0,0 +1,15 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ class EventSubscriptionPositionsFiltering
4
+ include BasicFiltering
5
+
6
+ PRIMARY_TABLE_NAME: String
7
+
8
+ @sql_builder: SQLBuilder
9
+
10
+ def by_global_positions: (Array[Integer] positions)-> void
11
+
12
+ def max_subscription_position: -> void
13
+ end
14
+ end
15
+ end
@@ -1,68 +1,26 @@
1
1
  module PgEventstore
2
2
  module QueryBuilders
3
3
  # @!visibility private
4
- class EventsFiltering < BasicFiltering
5
- DEFAULT_LIMIT: Integer
6
- SQL_DIRECTIONS: Hash[String | Symbol, String]
7
- SUBSCRIPTIONS_OPTIONS: ::Array[Symbol]
8
-
9
- TABLE_NAME: String
10
-
11
- def self.events_filtering: (Stream stream, ::Hash[untyped, untyped] options) -> EventsFiltering
12
-
13
- def self.extract_event_types_filter: (Hash[untyped, untyped] options) -> Array[String]
4
+ class EventsFiltering
5
+ include BasicFiltering
14
6
 
15
- def self.extract_streams_filter: (Hash[untyped, untyped] options) -> Array[Hash[untyped, untyped]]
16
-
17
- # _@param_ `options`
18
- def self.subscriptions_events_filtering: (::Hash[untyped, untyped] options) -> EventsFiltering
19
-
20
- # _@param_ `options`
21
- def self.all_stream_filtering: (::Hash[untyped, untyped] options) -> EventsFiltering
22
-
23
- # _@param_ `stream`
24
- #
25
- # _@param_ `options`
26
- def self.specific_stream_filtering: (Stream stream, ::Hash[untyped, untyped] options) -> EventsFiltering
7
+ DEFAULT_LIMIT: Integer
27
8
 
28
- def self.system_stream_filtering: (Stream stream, Hash[untyped, untyped] options) -> EventsFiltering
9
+ @sql_builder: SQLBuilder
29
10
 
30
- def initialize: () -> void
11
+ def initialize: -> void
31
12
 
32
- def add_stream_attrs: (?context: String?, ?stream_name: String?, ?stream_id: String?) -> void
13
+ def add_stream_attrs: (context: String, stream_name: String) -> void
33
14
 
34
15
  def add_event_types: (::Array[String] event_types) -> void
35
16
 
36
- # _@param_ `revision`
37
- #
38
- # _@param_ `direction`
39
- def add_revision: (Integer? revision, (String | Symbol)? direction) -> void
40
-
41
- # _@param_ `position`
42
- #
43
- # _@param_ `direction`
44
- def add_global_position: (Integer? position, (String | Symbol)? direction) -> void
45
-
46
- # _@param_ `direction`
47
- def add_stream_direction: ((String | Symbol)? direction) -> void
48
-
49
- # _@param_ `direction`
50
- def add_all_stream_direction: ((String | Symbol)? direction) -> void
51
-
52
- # _@param_ `limit`
53
17
  def add_limit: (Integer? limit) -> void
54
18
 
55
- def set_source: (String table_name)-> void
56
-
57
- def to_sql_builder: () -> SQLBuilder
58
-
59
- def to_exec_params: () -> [String, Array[untyped]]
60
-
61
- # _@param_ `stream_attrs`
62
19
  def correct_stream_filter?: (::Hash[untyped, untyped] stream_attrs) -> bool
63
20
 
64
- # _@param_ `direction`
65
- def direction_operator: ((String | Symbol)? direction) -> String
21
+ private
22
+
23
+ def comparison_operator: (Array[String] event_types) -> String
66
24
  end
67
25
  end
68
26
  end
@@ -0,0 +1,68 @@
1
+ module PgEventstore
2
+ module QueryBuilders
3
+ class EventsGlobalIndexFiltering
4
+ include BasicFiltering
5
+
6
+ DEFAULT_LIMIT: Integer
7
+ PRIMARY_TABLE_NAME: String
8
+
9
+ @sql_builder: SQLBuilder
10
+
11
+ def self.default_filtering: (ReadCursor::StreamCursor cursor) -> EventsGlobalIndexFiltering
12
+
13
+ def self.for_read_common: (
14
+ Filters::FilterRow filter_row,
15
+ ReadCursor::StreamCursor cursor
16
+ )-> SQLBuilder
17
+
18
+ def self.for_read_grouped: (
19
+ Filters::FilterRow filter_row,
20
+ ReadCursor::StreamCursor cursor
21
+ )-> SQLBuilder
22
+
23
+ def self.for_revision_validation_per_type: (
24
+ Filters::FilterRow filter_row,
25
+ ReadCursor::StreamCursor cursor,
26
+ Integer seq_num
27
+ )-> SQLBuilder
28
+
29
+ def initialize: -> void
30
+
31
+ def add_filter_row: (Filters::FilterRow filter_row) -> void
32
+
33
+ def add_global_position_direction: (String? | Symbol? direction) -> void
34
+
35
+ def add_limit: (Integer? limit) -> void
36
+
37
+ def add_stream_revision_direction: (String? | Symbol? direction) -> void
38
+
39
+ def for_subscription: -> void
40
+
41
+ def from_position: (Integer? position, String? | Symbol? direction) -> void
42
+
43
+ def from_revision: (Integer? revision, String? | Symbol? direction) -> void
44
+
45
+ def to_position: (Integer? position, String? | Symbol? direction) -> void
46
+
47
+ def to_revision: (Integer? revision, String? | Symbol? direction) -> void
48
+
49
+ private
50
+
51
+ def self.add_direction_and_limit: (
52
+ EventsGlobalIndexFiltering index_filtering,
53
+ ReadCursor::StreamCursor cursor
54
+ ) -> void
55
+
56
+ def self.filtering_from_filter_row: (
57
+ Filters::FilterRow filter_row,
58
+ ReadCursor::StreamCursor cursor
59
+ ) -> EventsGlobalIndexFiltering
60
+
61
+ def direction_operator_from: (String? | Symbol? direction) -> String
62
+
63
+ def direction_operator_to: (String? | Symbol? direction) -> String
64
+
65
+ def event_type_comparison: (Filters::FilterRow filter_row) -> Array[String]
66
+ end
67
+ end
68
+ end
@@ -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