pigeonhole-db 1.1.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 (1256) hide show
  1. checksums.yaml +7 -0
  2. data/Cargo.lock +899 -0
  3. data/Cargo.toml +45 -0
  4. data/LICENSE +21 -0
  5. data/README.md +22 -0
  6. data/extconf.rb +12 -0
  7. data/lib/pigeonhole/api.rb +615 -0
  8. data/lib/pigeonhole/index.rb +208 -0
  9. data/lib/pigeonhole/memory.rb +507 -0
  10. data/lib/pigeonhole/version.rb +6 -0
  11. data/lib/pigeonhole-db.rb +6 -0
  12. data/lib/pigeonhole.rb +47 -0
  13. data/sig/pigeonhole.rbs +1484 -0
  14. data/src/budget.rs +205 -0
  15. data/src/classes.rs +279 -0
  16. data/src/convert.rs +192 -0
  17. data/src/db.rs +685 -0
  18. data/src/error.rs +151 -0
  19. data/src/feed.rs +316 -0
  20. data/src/fork.rs +64 -0
  21. data/src/gvl.rs +112 -0
  22. data/src/index.rs +1157 -0
  23. data/src/lib.rs +534 -0
  24. data/src/memory.rs +2178 -0
  25. data/src/read.rs +312 -0
  26. data/src/table.rs +1161 -0
  27. data/src/vector.rs +262 -0
  28. data/src/walk.rs +406 -0
  29. data/vendor/bundle/ruby/3.4.0/bin/minitest +29 -0
  30. data/vendor/bundle/ruby/3.4.0/bin/rake +29 -0
  31. data/vendor/bundle/ruby/3.4.0/bin/rake-compiler +29 -0
  32. data/vendor/bundle/ruby/3.4.0/bin/rake-compiler-dock +29 -0
  33. data/vendor/bundle/ruby/3.4.0/bin/rb-sys-dock +29 -0
  34. data/vendor/bundle/ruby/3.4.0/bin/rbs +29 -0
  35. data/vendor/bundle/ruby/3.4.0/cache/drb-2.2.3.gem +0 -0
  36. data/vendor/bundle/ruby/3.4.0/cache/logger-1.7.0.gem +0 -0
  37. data/vendor/bundle/ruby/3.4.0/cache/minitest-6.0.6.gem +0 -0
  38. data/vendor/bundle/ruby/3.4.0/cache/prism-1.9.0.gem +0 -0
  39. data/vendor/bundle/ruby/3.4.0/cache/rake-13.4.2.gem +0 -0
  40. data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-1.3.2.gem +0 -0
  41. data/vendor/bundle/ruby/3.4.0/cache/rake-compiler-dock-1.12.0.gem +0 -0
  42. data/vendor/bundle/ruby/3.4.0/cache/rb_sys-0.9.130.gem +0 -0
  43. data/vendor/bundle/ruby/3.4.0/cache/rbs-4.2.0.gem +0 -0
  44. data/vendor/bundle/ruby/3.4.0/cache/toml-rb-6.0.0.gem +0 -0
  45. data/vendor/bundle/ruby/3.4.0/cache/tsort-0.2.0.gem +0 -0
  46. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem.build_complete +0 -0
  47. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/gem_make.out +44 -0
  48. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/mkmf.log +74 -0
  49. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/prism-1.9.0/prism/prism.so +0 -0
  50. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem.build_complete +0 -0
  51. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/gem_make.out +41 -0
  52. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/mkmf.log +102 -0
  53. data/vendor/bundle/ruby/3.4.0/extensions/x86_64-linux/3.4.0/rbs-4.2.0/rbs_extension.so +0 -0
  54. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/LICENSE.txt +22 -0
  55. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/drb.gemspec +42 -0
  56. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/acl.rb +239 -0
  57. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/drb.rb +1993 -0
  58. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/eq.rb +15 -0
  59. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extserv.rb +44 -0
  60. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/extservm.rb +94 -0
  61. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/gw.rb +161 -0
  62. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/observer.rb +26 -0
  63. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/ssl.rb +354 -0
  64. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/timeridconv.rb +97 -0
  65. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/unix.rb +118 -0
  66. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/version.rb +3 -0
  67. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb/weakidconv.rb +31 -0
  68. data/vendor/bundle/ruby/3.4.0/gems/drb-2.2.3/lib/drb.rb +3 -0
  69. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/BSDL +22 -0
  70. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/COPYING +56 -0
  71. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/README.md +104 -0
  72. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/errors.rb +9 -0
  73. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/formatter.rb +36 -0
  74. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/log_device.rb +265 -0
  75. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/period.rb +47 -0
  76. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/severity.rb +38 -0
  77. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger/version.rb +5 -0
  78. data/vendor/bundle/ruby/3.4.0/gems/logger-1.7.0/lib/logger.rb +789 -0
  79. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/History.rdoc +1860 -0
  80. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Manifest.txt +41 -0
  81. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/README.rdoc +763 -0
  82. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/Rakefile +89 -0
  83. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/bin/minitest +5 -0
  84. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/design_rationale.rb +54 -0
  85. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/hoe/minitest.rb +30 -0
  86. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/assertions.rb +821 -0
  87. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/autorun.rb +5 -0
  88. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/benchmark.rb +452 -0
  89. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/bisect.rb +304 -0
  90. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/complete.rb +56 -0
  91. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/compress.rb +94 -0
  92. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/error_on_warning.rb +11 -0
  93. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/expectations.rb +321 -0
  94. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/find_minimal_combination.rb +127 -0
  95. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/hell.rb +11 -0
  96. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/manual_plugins.rb +4 -0
  97. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/parallel.rb +72 -0
  98. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/path_expander.rb +432 -0
  99. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride.rb +4 -0
  100. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/pride_plugin.rb +135 -0
  101. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server.rb +49 -0
  102. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/server_plugin.rb +88 -0
  103. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/spec.rb +324 -0
  104. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint.rb +105 -0
  105. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/sprint_plugin.rb +39 -0
  106. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test.rb +232 -0
  107. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest/test_task.rb +331 -0
  108. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/lib/minitest.rb +1232 -0
  109. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/metametameta.rb +150 -0
  110. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_bisect.rb +249 -0
  111. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_find_minimal_combination.rb +138 -0
  112. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_assertions.rb +1729 -0
  113. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_benchmark.rb +151 -0
  114. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_reporter.rb +437 -0
  115. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_spec.rb +1095 -0
  116. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test.rb +1295 -0
  117. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_minitest_test_task.rb +57 -0
  118. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_path_expander.rb +229 -0
  119. data/vendor/bundle/ruby/3.4.0/gems/minitest-6.0.6/test/minitest/test_server.rb +146 -0
  120. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/BSDmakefile +58 -0
  121. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CHANGELOG.md +786 -0
  122. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CODE_OF_CONDUCT.md +76 -0
  123. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/CONTRIBUTING.md +58 -0
  124. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/LICENSE.md +7 -0
  125. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/Makefile +116 -0
  126. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/README.md +143 -0
  127. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/config.yml +4739 -0
  128. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/build_system.md +119 -0
  129. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/configuration.md +68 -0
  130. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/cruby_compilation.md +27 -0
  131. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/design.md +53 -0
  132. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/encoding.md +121 -0
  133. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/fuzzing.md +88 -0
  134. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/heredocs.md +36 -0
  135. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/javascript.md +118 -0
  136. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/local_variable_depth.md +229 -0
  137. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/mapping.md +117 -0
  138. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parser_translation.md +24 -0
  139. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/parsing_rules.md +22 -0
  140. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/releasing.md +75 -0
  141. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/relocation.md +34 -0
  142. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ripper_translation.md +63 -0
  143. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_api.md +45 -0
  144. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/ruby_parser_translation.md +19 -0
  145. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/serialization.md +233 -0
  146. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/docs/testing.md +55 -0
  147. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/Makefile +273 -0
  148. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_node.c +6945 -0
  149. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/api_pack.c +276 -0
  150. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extconf.rb +127 -0
  151. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.c +1427 -0
  152. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/ext/prism/extension.h +19 -0
  153. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/ast.h +8254 -0
  154. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/defines.h +260 -0
  155. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/diagnostic.h +458 -0
  156. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/encoding.h +283 -0
  157. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/node.h +129 -0
  158. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/options.h +488 -0
  159. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/pack.h +163 -0
  160. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/parser.h +936 -0
  161. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/prettyprint.h +34 -0
  162. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/regexp.h +43 -0
  163. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/static_literals.h +121 -0
  164. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_buffer.h +236 -0
  165. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_char.h +204 -0
  166. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_constant_pool.h +218 -0
  167. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_integer.h +130 -0
  168. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_list.h +103 -0
  169. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_memchr.h +29 -0
  170. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_newline_list.h +113 -0
  171. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_string.h +200 -0
  172. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strncasecmp.h +32 -0
  173. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/util/pm_strpbrk.h +46 -0
  174. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism/version.h +29 -0
  175. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/include/prism.h +408 -0
  176. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/compiler.rb +801 -0
  177. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/desugar_compiler.rb +392 -0
  178. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dispatcher.rb +2210 -0
  179. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dot_visitor.rb +4767 -0
  180. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/dsl.rb +1003 -0
  181. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/ffi.rb +578 -0
  182. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/inspect_visitor.rb +2393 -0
  183. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/lex_compat.rb +911 -0
  184. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/mutation_compiler.rb +772 -0
  185. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node.rb +19966 -0
  186. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/node_ext.rb +511 -0
  187. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pack.rb +230 -0
  188. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/comments.rb +188 -0
  189. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/errors.rb +66 -0
  190. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result/newlines.rb +155 -0
  191. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/parse_result.rb +907 -0
  192. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/pattern.rb +269 -0
  193. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/append_as_bytes.rb +15 -0
  194. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/byteindex.rb +13 -0
  195. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/scan_byte.rb +14 -0
  196. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/unpack1.rb +14 -0
  197. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/polyfill/warn.rb +36 -0
  198. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/prism.so +0 -0
  199. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/reflection.rb +416 -0
  200. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/relocation.rb +505 -0
  201. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/serialize.rb +2400 -0
  202. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/string_query.rb +31 -0
  203. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/builder.rb +62 -0
  204. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/compiler.rb +2234 -0
  205. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser/lexer.rb +820 -0
  206. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser.rb +376 -0
  207. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_current.rb +26 -0
  208. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/parser_versions.rb +36 -0
  209. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/filter.rb +53 -0
  210. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/lexer.rb +135 -0
  211. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/sexp.rb +126 -0
  212. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper/shim.rb +5 -0
  213. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ripper.rb +3520 -0
  214. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation/ruby_parser.rb +1964 -0
  215. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/translation.rb +18 -0
  216. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism/visitor.rb +813 -0
  217. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/lib/prism.rb +98 -0
  218. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/prism.gemspec +172 -0
  219. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/compiler.rbi +12 -0
  220. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/dsl.rbi +524 -0
  221. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/inspect_visitor.rbi +12 -0
  222. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node.rbi +8750 -0
  223. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/node_ext.rbi +107 -0
  224. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/parse_result.rbi +404 -0
  225. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/reflection.rbi +58 -0
  226. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/string_query.rbi +12 -0
  227. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser.rbi +11 -0
  228. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/parser_versions.rbi +23 -0
  229. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/translation/ripper.rbi +15 -0
  230. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism/visitor.rbi +473 -0
  231. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/rbi/prism.rbi +63 -0
  232. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/compiler.rbs +9 -0
  233. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dispatcher.rbs +19 -0
  234. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dot_visitor.rbs +6 -0
  235. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/dsl.rbs +351 -0
  236. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/inspect_visitor.rbs +22 -0
  237. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/lex_compat.rbs +10 -0
  238. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/mutation_compiler.rbs +159 -0
  239. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node.rbs +4042 -0
  240. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/node_ext.rbs +149 -0
  241. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pack.rbs +43 -0
  242. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result/comments.rbs +38 -0
  243. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/parse_result.rbs +197 -0
  244. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/pattern.rbs +13 -0
  245. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/reflection.rbs +50 -0
  246. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/relocation.rbs +185 -0
  247. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/serialize.rbs +8 -0
  248. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/string_query.rbs +11 -0
  249. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism/visitor.rbs +169 -0
  250. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/sig/prism.rbs +272 -0
  251. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/diagnostic.c +854 -0
  252. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/encoding.c +5340 -0
  253. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/node.c +8685 -0
  254. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/options.c +338 -0
  255. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/pack.c +509 -0
  256. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prettyprint.c +8957 -0
  257. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/prism.c +22679 -0
  258. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/regexp.c +790 -0
  259. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/serialize.c +2274 -0
  260. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/static_literals.c +617 -0
  261. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/token_type.c +703 -0
  262. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_buffer.c +357 -0
  263. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_char.c +318 -0
  264. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_constant_pool.c +342 -0
  265. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_integer.c +670 -0
  266. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_list.c +49 -0
  267. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_memchr.c +35 -0
  268. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_newline_list.c +125 -0
  269. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_string.c +381 -0
  270. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strncasecmp.c +36 -0
  271. data/vendor/bundle/ruby/3.4.0/gems/prism-1.9.0/src/util/pm_strpbrk.c +206 -0
  272. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/History.rdoc +2454 -0
  273. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/MIT-LICENSE +21 -0
  274. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/README.rdoc +155 -0
  275. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/command_line_usage.rdoc +171 -0
  276. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile1 +38 -0
  277. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/Rakefile2 +35 -0
  278. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/a.c +6 -0
  279. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/b.c +6 -0
  280. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/example/main.c +11 -0
  281. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/glossary.rdoc +42 -0
  282. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/jamis.rb +592 -0
  283. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/proto_rake.rdoc +127 -0
  284. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rake.1 +156 -0
  285. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rakefile.rdoc +635 -0
  286. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/doc/rational.rdoc +151 -0
  287. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/exe/rake +27 -0
  288. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/application.rb +847 -0
  289. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/backtrace.rb +25 -0
  290. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/clean.rb +78 -0
  291. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cloneable.rb +17 -0
  292. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/cpu_counter.rb +122 -0
  293. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/default_loader.rb +15 -0
  294. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/dsl_definition.rb +196 -0
  295. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/early_time.rb +22 -0
  296. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/core.rb +26 -0
  297. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/ext/string.rb +176 -0
  298. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_creation_task.rb +25 -0
  299. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_list.rb +435 -0
  300. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_task.rb +58 -0
  301. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils.rb +137 -0
  302. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/file_utils_ext.rb +135 -0
  303. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_chain.rb +57 -0
  304. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/invocation_exception_mixin.rb +17 -0
  305. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/late_time.rb +18 -0
  306. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/linked_list.rb +112 -0
  307. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/loaders/makefile.rb +54 -0
  308. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/multi_task.rb +14 -0
  309. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/name_space.rb +38 -0
  310. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/options.rb +31 -0
  311. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/packagetask.rb +222 -0
  312. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/phony.rb +16 -0
  313. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/private_reader.rb +21 -0
  314. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/promise.rb +100 -0
  315. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/pseudo_status.rb +30 -0
  316. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_module.rb +67 -0
  317. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rake_test_loader.rb +27 -0
  318. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/rule_recursion_overflow_error.rb +20 -0
  319. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/scope.rb +43 -0
  320. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task.rb +434 -0
  321. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_argument_error.rb +8 -0
  322. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_arguments.rb +113 -0
  323. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/task_manager.rb +333 -0
  324. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/tasklib.rb +12 -0
  325. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/testtask.rb +192 -0
  326. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_history_display.rb +49 -0
  327. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/thread_pool.rb +157 -0
  328. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/trace_output.rb +23 -0
  329. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/version.rb +10 -0
  330. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake/win32.rb +17 -0
  331. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/lib/rake.rb +69 -0
  332. data/vendor/bundle/ruby/3.4.0/gems/rake-13.4.2/rake.gemspec +102 -0
  333. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Gemfile +8 -0
  334. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/History.md +708 -0
  335. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/LICENSE.txt +20 -0
  336. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/README.md +505 -0
  337. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/Rakefile +15 -0
  338. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/appveyor.yml +22 -0
  339. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/bin/rake-compiler +24 -0
  340. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/cucumber.yml +4 -0
  341. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/compile.feature +79 -0
  342. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-compile.feature +23 -0
  343. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package-multi.feature +15 -0
  344. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/cross-package.feature +14 -0
  345. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-compile.feature +22 -0
  346. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-no-native-compile.feature +33 -0
  347. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/java-package.feature +24 -0
  348. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/package.feature +40 -0
  349. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/compilation.rb +70 -0
  350. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/cross_compilation.rb +27 -0
  351. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/execution.rb +52 -0
  352. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/folders.rb +32 -0
  353. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/gem.rb +46 -0
  354. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/step_definitions/java_compilation.rb +7 -0
  355. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/env.rb +10 -0
  356. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/file_template_helpers.rb +137 -0
  357. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/generator_helpers.rb +123 -0
  358. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/features/support/platform_extension_helpers.rb +27 -0
  359. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/baseextensiontask.rb +90 -0
  360. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/compiler_config.rb +38 -0
  361. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensioncompiler.rb +51 -0
  362. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/extensiontask.rb +621 -0
  363. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/lib/rake/javaextensiontask.rb +321 -0
  364. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bin/cross-ruby.rake +189 -0
  365. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/bootstrap.rake +11 -0
  366. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/common.rake +10 -0
  367. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/cucumber.rake +23 -0
  368. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/gem.rake +15 -0
  369. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-1.3.2/tasks/rspec.rake +9 -0
  370. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CHANGELOG.md +446 -0
  371. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/CONTRIBUTING.md +109 -0
  372. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.jruby +79 -0
  373. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Dockerfile.mri.erb +282 -0
  374. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Gemfile +8 -0
  375. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/LICENSE.txt +22 -0
  376. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/README.md +447 -0
  377. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/Rakefile +246 -0
  378. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/bin/rake-compiler-dock +18 -0
  379. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/buildkitd.toml +2 -0
  380. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/gem_helper.rb +54 -0
  381. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_i686.rb +18 -0
  382. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_musl_cross.sh +37 -0
  383. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_osxcross.sh +45 -0
  384. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/mk_pkg_config.sh +24 -0
  385. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/parallel_docker_build.rb +169 -0
  386. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0004-Enable-build-of-static-libruby.patch +38 -0
  387. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0005-build-miniruby-first.patch +16 -0
  388. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/patches/rake-compiler-1.3.1/0006-ruby-4-rubyspec-capiext.patch +16 -0
  389. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/rcd-env.sh +6 -0
  390. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/runas +7 -0
  391. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sigfw.c +45 -0
  392. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_codesign +17 -0
  393. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/strip_wrapper_vbox +30 -0
  394. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/build/sudoers +1 -0
  395. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/colors.rb +43 -0
  396. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/docker_check.rb +356 -0
  397. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/predefined_user_group.rb +5 -0
  398. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/starter.rb +206 -0
  399. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock/version.rb +4 -0
  400. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/lib/rake_compiler_dock.rb +151 -0
  401. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/Dockerfile +66 -0
  402. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/README.md +14 -0
  403. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/binutils-mingw-w64-ignore-check-errors.patch +13 -0
  404. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/gcc-mingw-w64-only-c-c++.patch +13 -0
  405. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/mingw64-ucrt/mingw-w64-enable-ucrt.patch +22 -0
  406. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/rake-compiler-dock.gemspec +34 -0
  407. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.alpine +17 -0
  408. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/env/Dockerfile.debian +24 -0
  409. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/fixtures/mig_test_rpc.defs +8 -0
  410. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Gemfile +11 -0
  411. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/Rakefile +97 -0
  412. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RcdTestExtService.java +19 -0
  413. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/java/RubyRcdTest.java +16 -0
  414. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/extconf.rb +111 -0
  415. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.c +65 -0
  416. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/ext/mri/rcd_test_ext.h +11 -0
  417. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/lib/rcd_test.rb +6 -0
  418. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/rcd_test.gemspec +28 -0
  419. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/rcd_test/test/test_basic.rb +49 -0
  420. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_environment_variables.rb +108 -0
  421. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_mig.rb +18 -0
  422. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_parallel_docker_build.rb +95 -0
  423. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_rubygems_plugins.rb +12 -0
  424. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_starter.rb +158 -0
  425. data/vendor/bundle/ruby/3.4.0/gems/rake-compiler-dock-1.12.0/test/test_versions.rb +82 -0
  426. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-APACHE +190 -0
  427. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/LICENSE-MIT +21 -0
  428. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/README.md +42 -0
  429. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/certs/ianks.pem +21 -0
  430. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/exe/rb-sys-dock +495 -0
  431. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/config.rb +72 -0
  432. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo/metadata.rb +158 -0
  433. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo.rb +9 -0
  434. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder/link_flag_converter.rb +37 -0
  435. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/cargo_builder.rb +370 -0
  436. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/error.rb +43 -0
  437. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/extensiontask.rb +188 -0
  438. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf/config.rb +75 -0
  439. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/mkmf.rb +413 -0
  440. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info/data.rb +10 -0
  441. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/toolchain_info.rb +82 -0
  442. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/util/logger.rb +73 -0
  443. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys/version.rb +5 -0
  444. data/vendor/bundle/ruby/3.4.0/gems/rb_sys-0.9.130/lib/rb_sys.rb +8 -0
  445. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/BSDL +22 -0
  446. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/CHANGELOG.md +2463 -0
  447. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/COPYING +56 -0
  448. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Dockerfile.jruby +53 -0
  449. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/README.md +240 -0
  450. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Rakefile +1213 -0
  451. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/Steepfile +55 -0
  452. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/config.yml +920 -0
  453. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/array.rbs +4205 -0
  454. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/basic_object.rbs +376 -0
  455. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/binding.rbs +148 -0
  456. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/builtin.rbs +278 -0
  457. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/class.rbs +223 -0
  458. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/comparable.rbs +192 -0
  459. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/complex.rbs +812 -0
  460. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/constants.rbs +96 -0
  461. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/data.rbs +415 -0
  462. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/dir.rbs +993 -0
  463. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/encoding.rbs +1368 -0
  464. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerable.rbs +2506 -0
  465. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/arithmetic_sequence.rbs +70 -0
  466. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator/product.rbs +92 -0
  467. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/enumerator.rbs +705 -0
  468. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/env.rbs +6 -0
  469. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errno.rbs +682 -0
  470. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/errors.rbs +789 -0
  471. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/exception.rbs +485 -0
  472. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/false_class.rbs +82 -0
  473. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber.rbs +570 -0
  474. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/fiber_error.rbs +11 -0
  475. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file.rbs +2045 -0
  476. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_constants.rbs +463 -0
  477. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_stat.rbs +534 -0
  478. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/file_test.rbs +331 -0
  479. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/float.rbs +1292 -0
  480. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/gc.rbs +788 -0
  481. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/global_variables.rbs +184 -0
  482. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/hash.rbs +2183 -0
  483. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/integer.rbs +1374 -0
  484. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/buffer.rbs +995 -0
  485. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io/wait.rbs +48 -0
  486. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/io.rbs +3473 -0
  487. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/kernel.rbs +3172 -0
  488. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/marshal.rbs +207 -0
  489. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/match_data.rbs +637 -0
  490. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/math.rbs +770 -0
  491. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/method.rbs +422 -0
  492. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/module.rbs +1856 -0
  493. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/nil_class.rbs +210 -0
  494. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/numeric.rbs +832 -0
  495. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object.rbs +108 -0
  496. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space/weak_key_map.rbs +166 -0
  497. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/object_space.rbs +197 -0
  498. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/pathname.rbs +1312 -0
  499. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/proc.rbs +905 -0
  500. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/process.rbs +2316 -0
  501. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ractor.rbs +914 -0
  502. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/random.rbs +255 -0
  503. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/range.rbs +1209 -0
  504. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rational.rbs +502 -0
  505. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rb_config.rbs +88 -0
  506. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/ops.rbs +154 -0
  507. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/argf.rbs +1236 -0
  508. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/env_class.rbs +1214 -0
  509. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/main_class.rbs +123 -0
  510. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rbs/unnamed/random.rbs +186 -0
  511. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/refinement.rbs +59 -0
  512. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/regexp.rbs +1974 -0
  513. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby.rbs +53 -0
  514. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/ruby_vm.rbs +809 -0
  515. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/basic_specification.rbs +6 -0
  516. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/config_file.rbs +38 -0
  517. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/dependency_installer.rbs +6 -0
  518. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/errors.rbs +112 -0
  519. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/installer.rbs +15 -0
  520. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/path_support.rbs +6 -0
  521. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/platform.rbs +7 -0
  522. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/request_set.rbs +49 -0
  523. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/requirement.rbs +138 -0
  524. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/rubygems.rbs +1108 -0
  525. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/source_list.rbs +15 -0
  526. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/specification.rbs +31 -0
  527. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/stream_ui.rbs +5 -0
  528. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/uninstaller.rbs +10 -0
  529. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/rubygems/version.rbs +133 -0
  530. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/set.rbs +751 -0
  531. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/signal.rbs +110 -0
  532. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/string.rbs +5532 -0
  533. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/struct.rbs +668 -0
  534. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/symbol.rbs +482 -0
  535. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread.rbs +1821 -0
  536. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/thread_group.rbs +79 -0
  537. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/time.rbs +1793 -0
  538. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/trace_point.rbs +483 -0
  539. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/true_class.rbs +98 -0
  540. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/unbound_method.rbs +337 -0
  541. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/core/warning.rbs +87 -0
  542. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/CONTRIBUTING.md +107 -0
  543. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/aliases.md +79 -0
  544. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/architecture.md +110 -0
  545. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/collection.md +192 -0
  546. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/config.md +171 -0
  547. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/data_and_struct.md +86 -0
  548. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/encoding.md +56 -0
  549. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/gem.md +56 -0
  550. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/inline.md +634 -0
  551. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rbs_by_example.md +309 -0
  552. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/release.md +303 -0
  553. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/repo.md +125 -0
  554. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/rust.md +96 -0
  555. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/sigs.md +167 -0
  556. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/stdlib.md +155 -0
  557. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/syntax.md +952 -0
  558. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/tools.md +17 -0
  559. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/type_fingerprint.md +21 -0
  560. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/docs/wasm_serialization.md +80 -0
  561. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/exe/rbs +7 -0
  562. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/Makefile +273 -0
  563. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.c +1870 -0
  564. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/ast_translation.h +41 -0
  565. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.c +189 -0
  566. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/class_constants.h +105 -0
  567. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/compat.h +10 -0
  568. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/extconf.rb +40 -0
  569. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.c +299 -0
  570. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/legacy_location.h +82 -0
  571. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/main.c +649 -0
  572. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_extension.h +16 -0
  573. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.c +9 -0
  574. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/ext/rbs_extension/rbs_string_bridging.h +24 -0
  575. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/goodcheck.yml +91 -0
  576. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/ast.h +1055 -0
  577. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/defines.h +104 -0
  578. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/lexer.h +208 -0
  579. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/location.h +40 -0
  580. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/parser.h +187 -0
  581. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/serialize.h +39 -0
  582. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/string.h +47 -0
  583. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_allocator.h +59 -0
  584. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_assert.h +20 -0
  585. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_buffer.h +83 -0
  586. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_constant_pool.h +155 -0
  587. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_encoding.h +282 -0
  588. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs/util/rbs_unescape.h +24 -0
  589. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/include/rbs.h +14 -0
  590. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ancestor_graph.rb +92 -0
  591. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/annotations.rb +199 -0
  592. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/formatter.rb +82 -0
  593. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_annotator.rb +398 -0
  594. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate/rdoc_source.rb +131 -0
  595. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/annotate.rb +8 -0
  596. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/annotation.rb +29 -0
  597. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/comment.rb +29 -0
  598. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/declarations.rb +472 -0
  599. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/directives.rb +49 -0
  600. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/members.rb +451 -0
  601. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/annotations.rb +451 -0
  602. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/comment_block.rb +247 -0
  603. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/declarations.rb +291 -0
  604. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/constant_helper.rb +28 -0
  605. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/helpers/location_helper.rb +15 -0
  606. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/ruby/members.rb +762 -0
  607. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/type_param.rb +235 -0
  608. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/ast/visitor.rb +137 -0
  609. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/buffer.rb +189 -0
  610. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/builtin_names.rb +58 -0
  611. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/colored_io.rb +48 -0
  612. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/diff.rb +84 -0
  613. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli/validate.rb +294 -0
  614. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/cli.rb +1253 -0
  615. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/cleaner.rb +38 -0
  616. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile.rb +92 -0
  617. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config/lockfile_generator.rb +269 -0
  618. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/config.rb +81 -0
  619. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/installer.rb +32 -0
  620. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/base.rb +14 -0
  621. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/git.rb +265 -0
  622. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/local.rb +81 -0
  623. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/rubygems.rb +48 -0
  624. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources/stdlib.rb +50 -0
  625. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection/sources.rb +38 -0
  626. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/collection.rb +16 -0
  627. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/constant.rb +28 -0
  628. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition.rb +415 -0
  629. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/ancestor_builder.rb +681 -0
  630. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder/method_builder.rb +295 -0
  631. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/definition_builder.rb +1057 -0
  632. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/diff.rb +131 -0
  633. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/class_entry.rb +81 -0
  634. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/module_entry.rb +91 -0
  635. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment/use_map.rb +77 -0
  636. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment.rb +1028 -0
  637. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_loader.rb +167 -0
  638. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/environment_walker.rb +155 -0
  639. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/errors.rb +634 -0
  640. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/factory.rb +18 -0
  641. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/file_finder.rb +28 -0
  642. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser/comment_association.rb +117 -0
  643. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/inline_parser.rb +568 -0
  644. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/location_aux.rb +170 -0
  645. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/locator.rb +247 -0
  646. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/method_type.rb +145 -0
  647. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/namespace.rb +154 -0
  648. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/lex_result.rb +15 -0
  649. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser/token.rb +23 -0
  650. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/parser_aux.rb +144 -0
  651. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/helpers.rb +164 -0
  652. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/node_usage.rb +99 -0
  653. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rb.rb +816 -0
  654. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/rbi.rb +793 -0
  655. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/helpers.rb +59 -0
  656. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/reflection.rb +19 -0
  657. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime/value_object_generator.rb +278 -0
  658. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/prototype/runtime.rb +680 -0
  659. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/repository.rb +127 -0
  660. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/constant_resolver.rb +219 -0
  661. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/resolver/type_name_resolver.rb +167 -0
  662. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/rewriter.rb +70 -0
  663. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/sorter.rb +198 -0
  664. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/source.rb +99 -0
  665. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/substitution.rb +83 -0
  666. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/subtractor.rb +204 -0
  667. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/errors.rb +80 -0
  668. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/guaranteed.rb +30 -0
  669. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/hook.rb +212 -0
  670. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/observer.rb +19 -0
  671. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup.rb +84 -0
  672. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/setup_helper.rb +50 -0
  673. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/tester.rb +167 -0
  674. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test/type_check.rb +457 -0
  675. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/test.rb +112 -0
  676. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_dependency.rb +100 -0
  677. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_alias_regularity.rb +126 -0
  678. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/type_name.rb +122 -0
  679. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/types.rb +1646 -0
  680. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/convertibles.rb +177 -0
  681. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/spy.rb +138 -0
  682. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/type_assertions.rb +383 -0
  683. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test/with_aliases.rb +145 -0
  684. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/unit_test.rb +6 -0
  685. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/validator.rb +186 -0
  686. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/variance_calculator.rb +189 -0
  687. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/vendorer.rb +71 -0
  688. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/version.rb +5 -0
  689. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/deserializer.rb +213 -0
  690. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/location.rb +61 -0
  691. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/parser.rb +174 -0
  692. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/runtime.rb +211 -0
  693. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/wasm/serialization_schema.rb +111 -0
  694. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs/writer.rb +424 -0
  695. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs.rb +117 -0
  696. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_extension.so +0 -0
  697. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rbs_jars.rb +39 -0
  698. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc/discover.rb +20 -0
  699. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/lib/rdoc_plugin/parser.rb +168 -0
  700. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/rbs.gemspec +77 -0
  701. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/annotation.json +14 -0
  702. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/comment.json +26 -0
  703. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/decls.json +326 -0
  704. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/function.json +98 -0
  705. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/location.json +56 -0
  706. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/members.json +266 -0
  707. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/methodType.json +50 -0
  708. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/typeParam.json +52 -0
  709. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/schema/types.json +317 -0
  710. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_builder.rbs +163 -0
  711. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ancestor_graph.rbs +60 -0
  712. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/annotations.rbs +102 -0
  713. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/formatter.rbs +24 -0
  714. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_annotater.rbs +85 -0
  715. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotate/rdoc_source.rbs +32 -0
  716. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/annotation.rbs +27 -0
  717. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/annotations.rbs +470 -0
  718. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/comment_block.rbs +127 -0
  719. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/declarations.rbs +158 -0
  720. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/constant_helper.rbs +11 -0
  721. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/helpers/location_helper.rbs +15 -0
  722. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/ast/ruby/members.rbs +198 -0
  723. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/buffer.rbs +108 -0
  724. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/builtin_names.rbs +44 -0
  725. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/colored_io.rbs +15 -0
  726. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/diff.rbs +15 -0
  727. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli/validate.rbs +47 -0
  728. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/cli.rbs +89 -0
  729. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/cleaner.rbs +13 -0
  730. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile.rbs +74 -0
  731. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config/lockfile_generator.rbs +68 -0
  732. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/config.rbs +46 -0
  733. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/installer.rbs +17 -0
  734. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection/sources.rbs +214 -0
  735. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/collection.rbs +4 -0
  736. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/comment.rbs +26 -0
  737. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/constant.rbs +21 -0
  738. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/declarations.rbs +274 -0
  739. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition.rbs +232 -0
  740. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/definition_builder.rbs +181 -0
  741. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/diff.rbs +28 -0
  742. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/directives.rbs +77 -0
  743. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/class_entry.rbs +56 -0
  744. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment/module_entry.rbs +65 -0
  745. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment.rbs +286 -0
  746. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_loader.rbs +111 -0
  747. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/environment_walker.rbs +65 -0
  748. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/errors.rbs +408 -0
  749. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/factory.rbs +5 -0
  750. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/file_finder.rbs +28 -0
  751. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser/comment_association.rbs +71 -0
  752. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/inline_parser.rbs +126 -0
  753. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/location.rbs +135 -0
  754. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/locator.rbs +56 -0
  755. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/manifest.yaml +5 -0
  756. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/members.rbs +258 -0
  757. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_builder.rbs +89 -0
  758. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/method_types.rbs +58 -0
  759. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/namespace.rbs +161 -0
  760. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/parser.rbs +164 -0
  761. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/helpers.rbs +29 -0
  762. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/node_usage.rbs +20 -0
  763. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rb.rbs +96 -0
  764. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/rbi.rbs +104 -0
  765. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/prototype/runtime.rbs +182 -0
  766. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rbs.rbs +21 -0
  767. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rdoc/rbs.rbs +67 -0
  768. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/repository.rbs +85 -0
  769. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/constant_resolver.rbs +92 -0
  770. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/context.rbs +34 -0
  771. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/resolver/type_name_resolver.rbs +61 -0
  772. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/rewriter.rbs +45 -0
  773. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/bundler.rbs +38 -0
  774. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/enumerable.rbs +5 -0
  775. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/shims/rubygems.rbs +19 -0
  776. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/sorter.rbs +41 -0
  777. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/source.rbs +48 -0
  778. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/substitution.rbs +48 -0
  779. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/subtractor.rbs +37 -0
  780. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/errors.rbs +52 -0
  781. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/guranteed.rbs +9 -0
  782. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test/type_check.rbs +19 -0
  783. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/test.rbs +82 -0
  784. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_dependency.rbs +53 -0
  785. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_alias_regularity.rbs +98 -0
  786. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/type_param.rbs +115 -0
  787. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/typename.rbs +89 -0
  788. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/types.rbs +588 -0
  789. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/convertibles.rbs +154 -0
  790. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/spy.rbs +22 -0
  791. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/type_assertions.rbs +211 -0
  792. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/unit_test/with_aliases.rbs +136 -0
  793. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/use_map.rbs +35 -0
  794. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/util.rbs +9 -0
  795. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/validator.rbs +63 -0
  796. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/variance_calculator.rbs +87 -0
  797. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/vendorer.rbs +51 -0
  798. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/version.rbs +3 -0
  799. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/visitor.rbs +47 -0
  800. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/deserializer.rbs +66 -0
  801. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/wasm/serialization_schema.rbs +13 -0
  802. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/sig/writer.rbs +127 -0
  803. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/ast.c +1644 -0
  804. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.c +3223 -0
  805. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexer.re +187 -0
  806. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/lexstate.c +222 -0
  807. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/location.c +31 -0
  808. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/parser.c +4318 -0
  809. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/serialize.c +965 -0
  810. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/string.c +41 -0
  811. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_allocator.c +171 -0
  812. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_assert.c +19 -0
  813. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_buffer.c +54 -0
  814. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_constant_pool.c +268 -0
  815. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_encoding.c +21454 -0
  816. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/src/util/rbs_unescape.c +167 -0
  817. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/abbrev.rbs +66 -0
  818. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/abbrev/0/array.rbs +26 -0
  819. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/base64/0/base64.rbs +355 -0
  820. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/benchmark/0/benchmark.rbs +452 -0
  821. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal/0/big_decimal.rbs +1647 -0
  822. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/big_math.rbs +280 -0
  823. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/bigdecimal-math/0/manifest.yaml +2 -0
  824. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/core.rbs +911 -0
  825. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi/0/manifest.yaml +4 -0
  826. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/cgi-escape/0/escape.rbs +171 -0
  827. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/coverage/0/coverage.rbs +266 -0
  828. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/csv.rbs +3776 -0
  829. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/csv/0/manifest.yaml +3 -0
  830. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date.rbs +1598 -0
  831. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/date_time.rbs +617 -0
  832. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/date/0/time.rbs +26 -0
  833. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/dbm/0/dbm.rbs +421 -0
  834. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/delegator.rbs +188 -0
  835. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/kernel.rbs +47 -0
  836. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/delegate/0/simple_delegator.rbs +96 -0
  837. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/did_you_mean/0/did_you_mean.rbs +344 -0
  838. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/digest/0/digest.rbs +693 -0
  839. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/erb/0/erb.rbs +933 -0
  840. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/etc/0/etc.rbs +884 -0
  841. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/fileutils/0/fileutils.rbs +1753 -0
  842. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/find/0/find.rbs +49 -0
  843. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/forwardable/0/forwardable.rbs +271 -0
  844. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/io-console/0/io-console.rbs +414 -0
  845. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ipaddr/0/ipaddr.rbs +431 -0
  846. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/json/0/json.rbs +1963 -0
  847. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/kconv/0/kconv.rbs +166 -0
  848. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/formatter.rbs +45 -0
  849. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/log_device.rbs +100 -0
  850. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/logger.rbs +796 -0
  851. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/manifest.yaml +2 -0
  852. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/period.rbs +17 -0
  853. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/logger/0/severity.rbs +34 -0
  854. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/kernel.rbs +42 -0
  855. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/abstract_reporter.rbs +52 -0
  856. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertion.rbs +17 -0
  857. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/assertions.rbs +590 -0
  858. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/backtrace_filter.rbs +23 -0
  859. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/bench_spec.rbs +102 -0
  860. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/benchmark.rbs +259 -0
  861. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/composite_reporter.rbs +25 -0
  862. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/compress.rbs +13 -0
  863. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/error_on_warning.rbs +3 -0
  864. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectation.rbs +2 -0
  865. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/expectations.rbs +21 -0
  866. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/guard.rbs +64 -0
  867. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/mock.rbs +64 -0
  868. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/executor.rbs +46 -0
  869. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test/class_methods.rbs +5 -0
  870. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel/test.rbs +3 -0
  871. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/parallel.rbs +2 -0
  872. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_io.rbs +62 -0
  873. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/pride_lol.rbs +19 -0
  874. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/progress_reporter.rbs +11 -0
  875. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reportable.rbs +53 -0
  876. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/reporter.rbs +5 -0
  877. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/result.rbs +28 -0
  878. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/runnable.rbs +163 -0
  879. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/skip.rbs +6 -0
  880. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl/instance_methods.rbs +48 -0
  881. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec/dsl.rbs +129 -0
  882. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/spec.rbs +11 -0
  883. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/statistics_reporter.rbs +81 -0
  884. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/summary_reporter.rbs +18 -0
  885. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test/lifecycle_hooks.rbs +92 -0
  886. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/test.rbs +69 -0
  887. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_error.rbs +12 -0
  888. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unexpected_warning.rbs +6 -0
  889. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit/test_case.rbs +3 -0
  890. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest/unit.rbs +4 -0
  891. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/minitest/0/minitest.rbs +115 -0
  892. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/monitor/0/monitor.rbs +363 -0
  893. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/mutex_m/0/mutex_m.rbs +104 -0
  894. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/manifest.yaml +3 -0
  895. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-http/0/net-http.rbs +5580 -0
  896. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/manifest.yaml +2 -0
  897. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-protocol/0/net-protocol.rbs +56 -0
  898. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/manifest.yaml +2 -0
  899. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/net-smtp/0/net-smtp.rbs +55 -0
  900. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/nkf/0/nkf.rbs +402 -0
  901. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/objspace/0/objspace.rbs +470 -0
  902. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/observable/0/observable.rbs +217 -0
  903. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/manifest.yaml +4 -0
  904. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open-uri/0/open-uri.rbs +433 -0
  905. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/open3/0/open3.rbs +606 -0
  906. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/manifest.yaml +3 -0
  907. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/openssl/0/openssl.rbs +12237 -0
  908. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/optparse/0/optparse.rbs +1734 -0
  909. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pathname/0/pathname.rbs +36 -0
  910. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/manifest.yaml +2 -0
  911. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pp/0/pp.rbs +301 -0
  912. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/prettyprint/0/prettyprint.rbs +383 -0
  913. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pstore/0/pstore.rbs +608 -0
  914. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/core_ext.rbs +12 -0
  915. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/dbm.rbs +237 -0
  916. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/manifest.yaml +3 -0
  917. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/psych.rbs +455 -0
  918. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/psych/0/store.rbs +57 -0
  919. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/pty/0/pty.rbs +240 -0
  920. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/random-formatter/0/random-formatter.rbs +277 -0
  921. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/code_object.rbs +52 -0
  922. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/comment.rbs +61 -0
  923. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/context.rbs +153 -0
  924. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/markup.rbs +117 -0
  925. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/options.rbs +76 -0
  926. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/parser.rbs +56 -0
  927. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/rdoc.rbs +393 -0
  928. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/ri.rbs +17 -0
  929. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/store.rbs +48 -0
  930. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/rdoc/0/top_level.rbs +97 -0
  931. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/manifest.yaml +3 -0
  932. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/resolv/0/resolv.rbs +1787 -0
  933. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/ripper/0/ripper.rbs +1654 -0
  934. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/manifest.yaml +2 -0
  935. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/securerandom/0/securerandom.rbs +49 -0
  936. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/shellwords/0/shellwords.rbs +229 -0
  937. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/singleton/0/singleton.rbs +137 -0
  938. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/addrinfo.rbs +666 -0
  939. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/basic_socket.rbs +590 -0
  940. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/constants.rbs +2295 -0
  941. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/ip_socket.rbs +94 -0
  942. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket.rbs +4170 -0
  943. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/socket_error.rbs +5 -0
  944. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_server.rbs +192 -0
  945. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/tcp_socket.rbs +87 -0
  946. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/udp_socket.rbs +133 -0
  947. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_server.rbs +169 -0
  948. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/socket/0/unix_socket.rbs +172 -0
  949. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/stringio/0/stringio.rbs +1682 -0
  950. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/strscan/0/string_scanner.rbs +1648 -0
  951. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/manifest.yaml +3 -0
  952. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tempfile/0/tempfile.rbs +483 -0
  953. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/time/0/time.rbs +434 -0
  954. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/timeout/0/timeout.rbs +132 -0
  955. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tmpdir/0/tmpdir.rbs +69 -0
  956. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/cyclic.rbs +8 -0
  957. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/interfaces.rbs +20 -0
  958. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/tsort/0/tsort.rbs +410 -0
  959. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/common.rbs +621 -0
  960. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/file.rbs +118 -0
  961. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ftp.rbs +13 -0
  962. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/generic.rbs +1111 -0
  963. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/http.rbs +104 -0
  964. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/https.rbs +14 -0
  965. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldap.rbs +230 -0
  966. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ldaps.rbs +14 -0
  967. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/mailto.rbs +92 -0
  968. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc2396_parser.rbs +189 -0
  969. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/rfc3986_parser.rbs +2 -0
  970. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/ws.rbs +13 -0
  971. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/uri/0/wss.rbs +9 -0
  972. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/manifest.yaml +2 -0
  973. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/yaml/0/yaml.rbs +1 -0
  974. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/buf_error.rbs +10 -0
  975. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/data_error.rbs +10 -0
  976. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/deflate.rbs +211 -0
  977. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/error.rbs +20 -0
  978. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/crc_error.rbs +12 -0
  979. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/error.rbs +23 -0
  980. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/length_error.rbs +12 -0
  981. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file/no_footer.rbs +11 -0
  982. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_file.rbs +156 -0
  983. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_reader.rbs +293 -0
  984. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/gzip_writer.rbs +169 -0
  985. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/inflate.rbs +180 -0
  986. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/mem_error.rbs +10 -0
  987. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/need_dict.rbs +13 -0
  988. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_end.rbs +11 -0
  989. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/stream_error.rbs +11 -0
  990. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/version_error.rbs +11 -0
  991. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zlib.rbs +449 -0
  992. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/stdlib/zlib/0/zstream.rbs +200 -0
  993. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/README.md +109 -0
  994. data/vendor/bundle/ruby/3.4.0/gems/rbs-4.2.0/wasm/rbs_wasm.c +479 -0
  995. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/LICENSE +19 -0
  996. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/README.md +135 -0
  997. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/datetime.rb +54 -0
  998. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/dumper.rb +182 -0
  999. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/errors.rb +17 -0
  1000. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/inline_table.rb +18 -0
  1001. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/keyvalue.rb +45 -0
  1002. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/parser.rb +296 -0
  1003. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/string.rb +41 -0
  1004. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table.rb +34 -0
  1005. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/table_array.rb +43 -0
  1006. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb/version.rb +5 -0
  1007. data/vendor/bundle/ruby/3.4.0/gems/toml-rb-6.0.0/lib/toml-rb.rb +90 -0
  1008. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Gemfile +4 -0
  1009. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/LICENSE.txt +22 -0
  1010. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/README.md +72 -0
  1011. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/Rakefile +10 -0
  1012. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/console +14 -0
  1013. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/bin/setup +8 -0
  1014. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/lib/tsort.rb +455 -0
  1015. data/vendor/bundle/ruby/3.4.0/gems/tsort-0.2.0/tsort.gemspec +29 -0
  1016. data/vendor/bundle/ruby/3.4.0/specifications/drb-2.2.3.gemspec +22 -0
  1017. data/vendor/bundle/ruby/3.4.0/specifications/logger-1.7.0.gemspec +22 -0
  1018. data/vendor/bundle/ruby/3.4.0/specifications/minitest-6.0.6.gemspec +35 -0
  1019. data/vendor/bundle/ruby/3.4.0/specifications/prism-1.9.0.gemspec +24 -0
  1020. data/vendor/bundle/ruby/3.4.0/specifications/rake-13.4.2.gemspec +26 -0
  1021. data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-1.3.2.gemspec +33 -0
  1022. data/vendor/bundle/ruby/3.4.0/specifications/rake-compiler-dock-1.12.0.gemspec +28 -0
  1023. data/vendor/bundle/ruby/3.4.0/specifications/rb_sys-0.9.130.gemspec +29 -0
  1024. data/vendor/bundle/ruby/3.4.0/specifications/rbs-4.2.0.gemspec +33 -0
  1025. data/vendor/bundle/ruby/3.4.0/specifications/toml-rb-6.0.0.gemspec +27 -0
  1026. data/vendor/bundle/ruby/3.4.0/specifications/tsort-0.2.0.gemspec +23 -0
  1027. data/vendor/cache/Cargo.toml +21 -0
  1028. data/vendor/cache/LICENSE +21 -0
  1029. data/vendor/cache/README.md +5 -0
  1030. data/vendor/cache/src/hash.rs +85 -0
  1031. data/vendor/cache/src/lib.rs +751 -0
  1032. data/vendor/cache/src/loom_tests.rs +340 -0
  1033. data/vendor/cache/src/s3fifo.rs +648 -0
  1034. data/vendor/cache/src/sync.rs +25 -0
  1035. data/vendor/cache/src/tests.rs +260 -0
  1036. data/vendor/compaction/Cargo.toml +32 -0
  1037. data/vendor/compaction/LICENSE +21 -0
  1038. data/vendor/compaction/README.md +5 -0
  1039. data/vendor/compaction/src/blob.rs +478 -0
  1040. data/vendor/compaction/src/cursor.rs +700 -0
  1041. data/vendor/compaction/src/gc.rs +802 -0
  1042. data/vendor/compaction/src/job.rs +861 -0
  1043. data/vendor/compaction/src/lib.rs +102 -0
  1044. data/vendor/compaction/src/merge.rs +995 -0
  1045. data/vendor/compaction/src/picker.rs +681 -0
  1046. data/vendor/compaction/src/resolver.rs +1346 -0
  1047. data/vendor/engine/Cargo.toml +56 -0
  1048. data/vendor/engine/LICENSE +21 -0
  1049. data/vendor/engine/README.md +5 -0
  1050. data/vendor/engine/src/admission.rs +421 -0
  1051. data/vendor/engine/src/catalog.rs +1233 -0
  1052. data/vendor/engine/src/check.rs +1386 -0
  1053. data/vendor/engine/src/clock.rs +244 -0
  1054. data/vendor/engine/src/clock_loom.rs +482 -0
  1055. data/vendor/engine/src/close_gate.rs +325 -0
  1056. data/vendor/engine/src/compact.rs +1509 -0
  1057. data/vendor/engine/src/engine/hooks.rs +1654 -0
  1058. data/vendor/engine/src/engine/info.rs +229 -0
  1059. data/vendor/engine/src/engine.rs +6114 -0
  1060. data/vendor/engine/src/error.rs +490 -0
  1061. data/vendor/engine/src/feed.rs +960 -0
  1062. data/vendor/engine/src/feed_reader.rs +1600 -0
  1063. data/vendor/engine/src/flush.rs +839 -0
  1064. data/vendor/engine/src/flushed_roots.rs +158 -0
  1065. data/vendor/engine/src/flushed_through_loom.rs +77 -0
  1066. data/vendor/engine/src/health.rs +201 -0
  1067. data/vendor/engine/src/large.rs +372 -0
  1068. data/vendor/engine/src/large_settle.rs +201 -0
  1069. data/vendor/engine/src/lib.rs +112 -0
  1070. data/vendor/engine/src/load_slot.rs +324 -0
  1071. data/vendor/engine/src/maintenance.rs +935 -0
  1072. data/vendor/engine/src/manifest/flight.rs +563 -0
  1073. data/vendor/engine/src/manifest.rs +1516 -0
  1074. data/vendor/engine/src/nonblocking.rs +603 -0
  1075. data/vendor/engine/src/options.rs +334 -0
  1076. data/vendor/engine/src/position.rs +125 -0
  1077. data/vendor/engine/src/purge_guard.rs +220 -0
  1078. data/vendor/engine/src/read/keys.rs +1049 -0
  1079. data/vendor/engine/src/read/knn.rs +423 -0
  1080. data/vendor/engine/src/read/reduce.rs +2057 -0
  1081. data/vendor/engine/src/read/traverse.rs +1013 -0
  1082. data/vendor/engine/src/read.rs +2429 -0
  1083. data/vendor/engine/src/row_cache.rs +1101 -0
  1084. data/vendor/engine/src/shard/tablets.rs +3582 -0
  1085. data/vendor/engine/src/shard.rs +12215 -0
  1086. data/vendor/engine/src/snapshot.rs +1429 -0
  1087. data/vendor/engine/src/source.rs +1379 -0
  1088. data/vendor/engine/src/timer_state.rs +226 -0
  1089. data/vendor/engine/src/waker.rs +124 -0
  1090. data/vendor/engine/src/watermark_waiters.rs +674 -0
  1091. data/vendor/engine/src/write.rs +1321 -0
  1092. data/vendor/format/Cargo.toml +40 -0
  1093. data/vendor/format/LICENSE +21 -0
  1094. data/vendor/format/README.md +5 -0
  1095. data/vendor/format/src/blob.rs +101 -0
  1096. data/vendor/format/src/block.rs +1120 -0
  1097. data/vendor/format/src/bloom.rs +456 -0
  1098. data/vendor/format/src/buckets.rs +552 -0
  1099. data/vendor/format/src/bytes.rs +101 -0
  1100. data/vendor/format/src/checksum.rs +132 -0
  1101. data/vendor/format/src/compress.rs +196 -0
  1102. data/vendor/format/src/cursor.rs +110 -0
  1103. data/vendor/format/src/distance.rs +598 -0
  1104. data/vendor/format/src/error.rs +93 -0
  1105. data/vendor/format/src/exact.rs +602 -0
  1106. data/vendor/format/src/feed.rs +285 -0
  1107. data/vendor/format/src/filter.rs +157 -0
  1108. data/vendor/format/src/half.rs +182 -0
  1109. data/vendor/format/src/hash.rs +127 -0
  1110. data/vendor/format/src/hll.rs +500 -0
  1111. data/vendor/format/src/ids.rs +95 -0
  1112. data/vendor/format/src/key.rs +620 -0
  1113. data/vendor/format/src/kind_params.rs +101 -0
  1114. data/vendor/format/src/lib.rs +54 -0
  1115. data/vendor/format/src/manifest.rs +1287 -0
  1116. data/vendor/format/src/roaring.rs +865 -0
  1117. data/vendor/format/src/scan.rs +297 -0
  1118. data/vendor/format/src/shm.rs +805 -0
  1119. data/vendor/format/src/sst.rs +233 -0
  1120. data/vendor/format/src/superblock.rs +345 -0
  1121. data/vendor/format/src/value.rs +163 -0
  1122. data/vendor/format/src/varint.rs +87 -0
  1123. data/vendor/format/src/vector.rs +936 -0
  1124. data/vendor/format/src/version.rs +92 -0
  1125. data/vendor/format/src/wal.rs +999 -0
  1126. data/vendor/io/Cargo.toml +29 -0
  1127. data/vendor/io/LICENSE +21 -0
  1128. data/vendor/io/README.md +5 -0
  1129. data/vendor/io/src/async_poll.rs +44 -0
  1130. data/vendor/io/src/buf.rs +694 -0
  1131. data/vendor/io/src/completion.rs +444 -0
  1132. data/vendor/io/src/error.rs +110 -0
  1133. data/vendor/io/src/file.rs +206 -0
  1134. data/vendor/io/src/lib.rs +53 -0
  1135. data/vendor/io/src/nowait.rs +256 -0
  1136. data/vendor/io/src/os/mod.rs +149 -0
  1137. data/vendor/io/src/os/unix.rs +897 -0
  1138. data/vendor/io/src/os/windows.rs +552 -0
  1139. data/vendor/io/src/own.rs +257 -0
  1140. data/vendor/io/src/pread.rs +854 -0
  1141. data/vendor/io/src/ring_wake.rs +113 -0
  1142. data/vendor/io/src/shared.rs +410 -0
  1143. data/vendor/io/src/sim.rs +1545 -0
  1144. data/vendor/io/src/sys.rs +214 -0
  1145. data/vendor/io/src/uring.rs +1839 -0
  1146. data/vendor/io/src/vfs.rs +154 -0
  1147. data/vendor/memory/Cargo.toml +34 -0
  1148. data/vendor/memory/LICENSE +21 -0
  1149. data/vendor/memory/README.md +11 -0
  1150. data/vendor/memory/src/consolidate.rs +640 -0
  1151. data/vendor/memory/src/dedup.rs +231 -0
  1152. data/vendor/memory/src/error.rs +131 -0
  1153. data/vendor/memory/src/feed_loop.rs +572 -0
  1154. data/vendor/memory/src/forget.rs +724 -0
  1155. data/vendor/memory/src/hooks.rs +109 -0
  1156. data/vendor/memory/src/ivf.rs +204 -0
  1157. data/vendor/memory/src/layout.rs +340 -0
  1158. data/vendor/memory/src/lib.rs +61 -0
  1159. data/vendor/memory/src/recall.rs +1182 -0
  1160. data/vendor/memory/src/store.rs +1785 -0
  1161. data/vendor/memory/src/watch.rs +339 -0
  1162. data/vendor/memtable/Cargo.toml +24 -0
  1163. data/vendor/memtable/LICENSE +21 -0
  1164. data/vendor/memtable/README.md +5 -0
  1165. data/vendor/memtable/src/lib.rs +1658 -0
  1166. data/vendor/memtable/src/loom_tests.rs +274 -0
  1167. data/vendor/memtable/src/mem.rs +344 -0
  1168. data/vendor/memtable/src/tests.rs +1061 -0
  1169. data/vendor/pager/Cargo.toml +23 -0
  1170. data/vendor/pager/LICENSE +21 -0
  1171. data/vendor/pager/README.md +5 -0
  1172. data/vendor/pager/src/alloc.rs +1008 -0
  1173. data/vendor/pager/src/lib.rs +1710 -0
  1174. data/vendor/pigeonhole/Cargo.toml +42 -0
  1175. data/vendor/pigeonhole/LICENSE +21 -0
  1176. data/vendor/pigeonhole/README.md +99 -0
  1177. data/vendor/pigeonhole/src/cell.rs +829 -0
  1178. data/vendor/pigeonhole/src/check.rs +368 -0
  1179. data/vendor/pigeonhole/src/db.rs +2324 -0
  1180. data/vendor/pigeonhole/src/doc_support.rs +89 -0
  1181. data/vendor/pigeonhole/src/error.rs +257 -0
  1182. data/vendor/pigeonhole/src/feed.rs +696 -0
  1183. data/vendor/pigeonhole/src/info.rs +425 -0
  1184. data/vendor/pigeonhole/src/lib.rs +202 -0
  1185. data/vendor/pigeonhole/src/merge.rs +135 -0
  1186. data/vendor/pigeonhole/src/metrics.rs +476 -0
  1187. data/vendor/pigeonhole/src/nonblocking.rs +666 -0
  1188. data/vendor/pigeonhole/src/options.rs +2075 -0
  1189. data/vendor/pigeonhole/src/read/budget.rs +584 -0
  1190. data/vendor/pigeonhole/src/read.rs +2463 -0
  1191. data/vendor/pigeonhole/src/recovery.rs +876 -0
  1192. data/vendor/pigeonhole/src/retry.rs +358 -0
  1193. data/vendor/pigeonhole/src/set.rs +103 -0
  1194. data/vendor/pigeonhole/src/table.rs +861 -0
  1195. data/vendor/pigeonhole/src/vector.rs +351 -0
  1196. data/vendor/pigeonhole/src/write.rs +2815 -0
  1197. data/vendor/runtime/Cargo.toml +21 -0
  1198. data/vendor/runtime/LICENSE +21 -0
  1199. data/vendor/runtime/README.md +5 -0
  1200. data/vendor/runtime/src/completion.rs +629 -0
  1201. data/vendor/runtime/src/drivers.rs +1175 -0
  1202. data/vendor/runtime/src/lib.rs +1546 -0
  1203. data/vendor/runtime/src/pool.rs +992 -0
  1204. data/vendor/runtime/src/sched.rs +809 -0
  1205. data/vendor/runtime/src/signal.rs +532 -0
  1206. data/vendor/runtime/src/submit_gate.rs +144 -0
  1207. data/vendor/shm/Cargo.toml +24 -0
  1208. data/vendor/shm/LICENSE +21 -0
  1209. data/vendor/shm/README.md +5 -0
  1210. data/vendor/shm/src/lib.rs +427 -0
  1211. data/vendor/shm/src/lock.rs +153 -0
  1212. data/vendor/shm/src/region.rs +1609 -0
  1213. data/vendor/sst/Cargo.toml +26 -0
  1214. data/vendor/sst/LICENSE +21 -0
  1215. data/vendor/sst/README.md +5 -0
  1216. data/vendor/sst/src/blob.rs +380 -0
  1217. data/vendor/sst/src/iter.rs +803 -0
  1218. data/vendor/sst/src/lib.rs +695 -0
  1219. data/vendor/sst/src/reader.rs +814 -0
  1220. data/vendor/sst/src/writer.rs +596 -0
  1221. data/vendor/text/Cargo.toml +26 -0
  1222. data/vendor/text/LICENSE +21 -0
  1223. data/vendor/text/README.md +9 -0
  1224. data/vendor/text/src/error.rs +108 -0
  1225. data/vendor/text/src/fuzzy.rs +265 -0
  1226. data/vendor/text/src/highlight.rs +236 -0
  1227. data/vendor/text/src/index.rs +1152 -0
  1228. data/vendor/text/src/layout.rs +424 -0
  1229. data/vendor/text/src/lib.rs +75 -0
  1230. data/vendor/text/src/maxscore.rs +658 -0
  1231. data/vendor/text/src/query.rs +450 -0
  1232. data/vendor/text/src/search.rs +569 -0
  1233. data/vendor/text/src/sloppy.rs +460 -0
  1234. data/vendor/text/src/tokenizer.rs +163 -0
  1235. data/vendor/vector/Cargo.toml +28 -0
  1236. data/vendor/vector/LICENSE +21 -0
  1237. data/vendor/vector/README.md +9 -0
  1238. data/vendor/vector/src/error.rs +63 -0
  1239. data/vendor/vector/src/half.rs +167 -0
  1240. data/vendor/vector/src/hooks.rs +135 -0
  1241. data/vendor/vector/src/index.rs +2690 -0
  1242. data/vendor/vector/src/layout.rs +102 -0
  1243. data/vendor/vector/src/lib.rs +52 -0
  1244. data/vendor/vector/src/point.rs +500 -0
  1245. data/vendor/vector/src/rebalancer.rs +200 -0
  1246. data/vendor/vector/src/registry.rs +81 -0
  1247. data/vendor/wal/Cargo.toml +25 -0
  1248. data/vendor/wal/LICENSE +21 -0
  1249. data/vendor/wal/README.md +5 -0
  1250. data/vendor/wal/src/feed.rs +610 -0
  1251. data/vendor/wal/src/foreground.rs +122 -0
  1252. data/vendor/wal/src/lib.rs +458 -0
  1253. data/vendor/wal/src/mem.rs +166 -0
  1254. data/vendor/wal/src/recovery.rs +426 -0
  1255. data/vendor/wal/src/stream.rs +2382 -0
  1256. metadata +1310 -0
@@ -0,0 +1,2815 @@
1
+ use std::future::Future;
2
+ use std::pin::Pin;
3
+ use std::sync::Arc;
4
+ use std::task::{Context, Poll, Waker};
5
+
6
+ use pigeonhole_engine::{FamilyId, PendingCommit, Predicate, TableId, Txn, ValueRef};
7
+ use pigeonhole_format::key::MAX_KEY_PART;
8
+ use pigeonhole_format::vector::{Params as FormatParams, Query, VectorRef as FormatVectorRef};
9
+
10
+ use crate::db::Db;
11
+ use crate::table::{Operand, TableCore};
12
+ use crate::{CellRef, Condition, Error, ErrorCode, Result, Table};
13
+
14
+ type EngineBatch = pigeonhole_engine::WriteBatch;
15
+
16
+ /// The outcome of a commit.
17
+ ///
18
+ /// ```
19
+ /// use pigeonhole::{Durability, Family, Options, Pigeonhole};
20
+ ///
21
+ /// # fn main() -> pigeonhole::Result<()> {
22
+ /// # let dir = pigeonhole::doc_support::temp_dir();
23
+ /// let db = Pigeonhole::open(dir.join("app.phdb"), Options::default().shards(2))?;
24
+ /// let t = db.table("t")?.family("f", Family::default()).create_if_missing()?;
25
+ /// let a = t.mutate(b"row").put("f", b"q", b"1").commit()?;
26
+ /// let b = t.mutate(b"row").put("f", b"q", b"2").durability(Durability::Buffered).commit()?;
27
+ /// assert!(b.seqno > a.seqno);
28
+ /// assert_eq!(a.durability, Durability::GroupSync);
29
+ /// assert_eq!(b.durability, Durability::Buffered);
30
+ /// # db.close()?;
31
+ /// # Ok(())
32
+ /// # }
33
+ /// ```
34
+ #[derive(Debug, Clone, Copy, PartialEq, Eq)]
35
+ #[non_exhaustive]
36
+ pub struct CommitInfo {
37
+ /// The commit's sequence number. For a transaction that wrote nothing it is the
38
+ /// snapshot point it read at, not a seqno of its own: other commits may share it, and it
39
+ /// is 0 on an empty database (ICR 0060).
40
+ pub seqno: u64,
41
+ /// The durability level actually applied.
42
+ pub durability: Durability,
43
+ }
44
+
45
+ impl CommitInfo {
46
+ pub(crate) fn from_engine(c: pigeonhole_engine::CommitInfo) -> Self {
47
+ Self {
48
+ seqno: c.seqno,
49
+ durability: Durability::from_engine(c.durability),
50
+ }
51
+ }
52
+ }
53
+
54
+ /// How durable a commit must be before it returns. Ordered from weakest to strongest.
55
+ ///
56
+ /// Resolution order: per-call override, then the writer default
57
+ /// ([`Options::durability`](crate::Options::durability)), then [`Durability::GroupSync`].
58
+ /// The [durability guide](https://github.com/CodingAnarchy/pigeonhole/blob/main/docs/guide/durability.md)
59
+ /// has what each level survives.
60
+ #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)]
61
+ #[repr(u8)]
62
+ #[non_exhaustive]
63
+ pub enum Durability {
64
+ /// Memtable only. Survives nothing past the last flush.
65
+ None = 0,
66
+ /// Handed to the kernel with `write()`, no fsync. Survives a process crash.
67
+ Buffered = 1,
68
+ /// fsync shared with every committer in the same group. Survives power loss.
69
+ #[default]
70
+ GroupSync = 2,
71
+ /// A dedicated fsync, never batched. Survives power loss.
72
+ Sync = 3,
73
+ }
74
+
75
+ impl Durability {
76
+ /// The engine's level (D282: the public type is this crate's own).
77
+ pub(crate) fn engine(self) -> pigeonhole_format::Durability {
78
+ match self {
79
+ Durability::None => pigeonhole_format::Durability::None,
80
+ Durability::Buffered => pigeonhole_format::Durability::Buffered,
81
+ Durability::GroupSync => pigeonhole_format::Durability::GroupSync,
82
+ Durability::Sync => pigeonhole_format::Durability::Sync,
83
+ }
84
+ }
85
+
86
+ /// The public level of an engine level.
87
+ pub(crate) fn from_engine(d: pigeonhole_format::Durability) -> Self {
88
+ match d {
89
+ pigeonhole_format::Durability::None => Durability::None,
90
+ pigeonhole_format::Durability::Buffered => Durability::Buffered,
91
+ pigeonhole_format::Durability::GroupSync => Durability::GroupSync,
92
+ pigeonhole_format::Durability::Sync => Durability::Sync,
93
+ }
94
+ }
95
+ }
96
+
97
+ /// The lengths of one mutation's parts, for size errors.
98
+ #[derive(Debug, Clone, Copy)]
99
+ struct Sizes {
100
+ row: usize,
101
+ qualifier: usize,
102
+ value: usize,
103
+ }
104
+
105
+ impl Sizes {
106
+ fn new(row: &[u8], qualifier: &[u8], value: usize) -> Self {
107
+ Self {
108
+ row: row.len(),
109
+ qualifier: qualifier.len(),
110
+ value,
111
+ }
112
+ }
113
+ }
114
+
115
+ /// An engine error with the sizes and limits filled in for `KeyTooLarge` and
116
+ /// `ValueTooLarge` (the engine's variants carry neither).
117
+ fn size_error(e: pigeonhole_engine::Error, sizes: Sizes, max_value: usize) -> Error {
118
+ use pigeonhole_engine::Error as E;
119
+ match e {
120
+ E::KeyTooLarge => {
121
+ let (what, len) = if sizes.row > MAX_KEY_PART {
122
+ ("row key", sizes.row)
123
+ } else {
124
+ ("qualifier", sizes.qualifier)
125
+ };
126
+ Error::new(
127
+ ErrorCode::KeyTooLarge,
128
+ format!("{what} of {len} bytes exceeds the limit of {MAX_KEY_PART} bytes"),
129
+ )
130
+ }
131
+ E::ValueTooLarge => value_too_large(sizes.value, max_value),
132
+ e => e.into(),
133
+ }
134
+ }
135
+
136
+ fn value_too_large(len: usize, max_value: usize) -> Error {
137
+ Error::new(
138
+ ErrorCode::ValueTooLarge,
139
+ format!(
140
+ "value of {len} bytes exceeds the limit: {MAX_PUT_VALUE} bytes for a put, \
141
+ {max_value} bytes for a merge operand (the smallest of the WAL segment payload, \
142
+ 64 MiB and half a shard's memtable arena; decision D16)"
143
+ ),
144
+ )
145
+ }
146
+
147
+ /// The longest put value: a blob pointer's length is a `u32` and covers the tag byte too.
148
+ const MAX_PUT_VALUE: usize = u32::MAX as usize - 1;
149
+
150
+ /// A checked vector's value: the family's element and dimension over `payload`.
151
+ fn vector_value<'a>(p: &FormatParams, payload: &'a [u8]) -> ValueRef<'a> {
152
+ ValueRef::Vector(
153
+ FormatVectorRef::new(p.element, p.dim, payload).expect("checked against the family"),
154
+ )
155
+ }
156
+
157
+ /// An engine batch plus the first error met while building it (builders never fail; the
158
+ /// error surfaces at commit).
159
+ #[derive(Debug, Default)]
160
+ struct Builder {
161
+ batch: EngineBatch,
162
+ error: Option<Error>,
163
+ /// The largest value added, for a `ValueTooLarge` message at commit.
164
+ largest_value: usize,
165
+ }
166
+
167
+ impl Builder {
168
+ /// Records `e` as the batch's error, unless an earlier call failed.
169
+ fn fail(&mut self, e: Error) {
170
+ if self.error.is_none() {
171
+ self.error = Some(e);
172
+ }
173
+ }
174
+
175
+ /// Runs `f` against the batch with `family` resolved, unless an earlier call failed. For
176
+ /// a typed operand, a family that refuses it is refused
177
+ /// ([`TableCore::operand_family_id`]).
178
+ fn with(
179
+ &mut self,
180
+ table: &TableCore,
181
+ family: &str,
182
+ operand: Option<Operand>,
183
+ sizes: Sizes,
184
+ f: impl FnOnce(&mut EngineBatch, FamilyId) -> pigeonhole_engine::Result<()>,
185
+ ) {
186
+ if self.error.is_some() {
187
+ return;
188
+ }
189
+ self.largest_value = self.largest_value.max(sizes.value);
190
+ let max_value = table.db.max_value;
191
+ let id = match operand {
192
+ Some(o) => table.operand_family_id(family, o),
193
+ None => table.family_id(family),
194
+ };
195
+ let r =
196
+ id.and_then(|id| f(&mut self.batch, id).map_err(|e| size_error(e, sizes, max_value)));
197
+ if let Err(e) = r {
198
+ self.error = Some(e);
199
+ }
200
+ }
201
+
202
+ fn row_delete(&mut self, table: &TableCore, row: &[u8]) {
203
+ if self.error.is_none()
204
+ && let Err(e) = self.batch.delete_row(table.info.id, row, None)
205
+ {
206
+ self.error = Some(size_error(e, Sizes::new(row, &[], 0), 0));
207
+ }
208
+ }
209
+
210
+ /// Refuses a table handle from another database.
211
+ fn check_table(&mut self, db: &Arc<Db>, table: &Table) -> bool {
212
+ if self.error.is_none()
213
+ && let Err(e) = check_table(db, table)
214
+ {
215
+ self.error = Some(e);
216
+ }
217
+ self.error.is_none()
218
+ }
219
+
220
+ /// Submits an async commit (D210): at once while its shard has room, else as a pending
221
+ /// commit that submits once admitted.
222
+ #[cfg(feature = "async")]
223
+ fn submit_async(
224
+ self,
225
+ engine: &pigeonhole_engine::Engine,
226
+ max_value: usize,
227
+ durability: Option<Durability>,
228
+ ) -> Result<Submitted> {
229
+ if let Some(e) = self.error {
230
+ return Err(e);
231
+ }
232
+ let largest_value = self.largest_value;
233
+ engine
234
+ .submit_async(self.batch, durability.map(Durability::engine))
235
+ .map(|pending| Submitted {
236
+ pending,
237
+ largest_value,
238
+ max_value,
239
+ watch: Default::default(),
240
+ })
241
+ .map_err(|e| commit_error(e, largest_value, max_value))
242
+ }
243
+
244
+ fn submit(
245
+ self,
246
+ engine: &pigeonhole_engine::Engine,
247
+ max_value: usize,
248
+ durability: Option<Durability>,
249
+ ) -> Result<Submitted> {
250
+ if let Some(e) = self.error {
251
+ return Err(e);
252
+ }
253
+ let largest_value = self.largest_value;
254
+ engine
255
+ .submit(self.batch, durability.map(Durability::engine))
256
+ .map(|pending| Submitted {
257
+ pending,
258
+ largest_value,
259
+ max_value,
260
+ watch: Default::default(),
261
+ })
262
+ .map_err(|e| commit_error(e, largest_value, max_value))
263
+ }
264
+
265
+ /// [`commit`](Self::commit), returning the incremented counters (D314).
266
+ fn commit_returning(
267
+ self,
268
+ engine: &pigeonhole_engine::Engine,
269
+ max_value: usize,
270
+ durability: Option<Durability>,
271
+ ) -> Result<(CommitInfo, Vec<pigeonhole_engine::Returned>)> {
272
+ if let Some(e) = self.error {
273
+ return Err(e);
274
+ }
275
+ let largest = self.largest_value;
276
+ engine
277
+ .commit_returning(self.batch, durability.map(Durability::engine))
278
+ .map(|(info, cells)| (CommitInfo::from_engine(info), cells))
279
+ .map_err(|e| commit_error(e, largest, max_value))
280
+ }
281
+
282
+ /// Submits a returning commit as an async one (D314, D210).
283
+ #[cfg(feature = "async")]
284
+ fn submit_returning(
285
+ self,
286
+ engine: &pigeonhole_engine::Engine,
287
+ max_value: usize,
288
+ durability: Option<Durability>,
289
+ ) -> Result<(pigeonhole_engine::PendingReturning, usize)> {
290
+ if let Some(e) = self.error {
291
+ return Err(e);
292
+ }
293
+ let largest = self.largest_value;
294
+ engine
295
+ .submit_returning(self.batch, durability.map(Durability::engine))
296
+ .map(|p| (p, largest))
297
+ .map_err(|e| commit_error(e, largest, max_value))
298
+ }
299
+
300
+ /// Commits through `db`, reporting the first builder error instead if there was one.
301
+ fn commit(
302
+ self,
303
+ engine: &pigeonhole_engine::Engine,
304
+ max_value: usize,
305
+ durability: Option<Durability>,
306
+ ) -> Result<CommitInfo> {
307
+ if let Some(e) = self.error {
308
+ return Err(e);
309
+ }
310
+ let largest = self.largest_value;
311
+ engine
312
+ .commit(self.batch, durability.map(Durability::engine))
313
+ .map(CommitInfo::from_engine)
314
+ .map_err(|e| commit_error(e, largest, max_value))
315
+ }
316
+ }
317
+
318
+ /// A commit handed to the engine and not yet resolved, with what its error needs: the base
319
+ /// of async commits and of [`CommitTicket`].
320
+ #[derive(Debug)]
321
+ pub(crate) struct Submitted {
322
+ pub(crate) pending: PendingCommit,
323
+ largest_value: usize,
324
+ max_value: usize,
325
+ /// With `Options::auto_recover`: how to find the database again for a refusal by its
326
+ /// failed engine (`Db::refused_later`, #966). Copied, no reference taken.
327
+ watch: crate::db::Watch,
328
+ }
329
+
330
+ impl Submitted {
331
+ /// The commit's result, as the sync `commit` reports it.
332
+ pub(crate) fn outcome(
333
+ &self,
334
+ r: pigeonhole_engine::Result<pigeonhole_engine::CommitInfo>,
335
+ ) -> Result<CommitInfo> {
336
+ r.map(CommitInfo::from_engine).map_err(|e| {
337
+ self.watch
338
+ .refused(commit_error(e, self.largest_value, self.max_value))
339
+ })
340
+ }
341
+
342
+ /// With `watch` (taken before the engine was chosen, [`Db::watch`]) for its failed
343
+ /// engine's refusals (#966).
344
+ pub(crate) fn watched(mut self, watch: crate::db::Watch) -> Self {
345
+ self.watch = watch;
346
+ self
347
+ }
348
+ }
349
+
350
+ /// A submitted commit, to wait on now or check later ([`WriteBatch::commit_with_ticket`];
351
+ /// D196). The commit is already on its way: dropping the ticket does not roll it back, and
352
+ /// the commit lands or fails atomically either way. With the `async` feature a ticket is
353
+ /// also a future (`ticket.await`).
354
+ ///
355
+ /// ```
356
+ /// use pigeonhole::{Durability, Family, Options, Pigeonhole};
357
+ ///
358
+ /// # fn main() -> pigeonhole::Result<()> {
359
+ /// # let dir = pigeonhole::doc_support::temp_dir();
360
+ /// let db = Pigeonhole::open(dir.join("app.phdb"), Options::default().shards(2))?;
361
+ /// let t = db.table("t")?.family("f", Family::default()).create_if_missing()?;
362
+ /// let mut wb = db.write_batch();
363
+ /// wb.put(&t, b"r", "f", b"q", b"v");
364
+ /// let mut ticket = wb.commit_with_ticket(Durability::Buffered)?;
365
+ /// // Do other work, check without blocking, then wait.
366
+ /// let _maybe = ticket.seqno();
367
+ /// let info = ticket.wait()?;
368
+ /// assert!(info.seqno > 0);
369
+ /// # db.close()?;
370
+ /// # Ok(())
371
+ /// # }
372
+ /// ```
373
+ #[derive(Debug)]
374
+ #[must_use = "dropping a ticket does not cancel the commit, but its result is lost"]
375
+ pub struct CommitTicket {
376
+ state: TicketState,
377
+ }
378
+
379
+ #[derive(Debug)]
380
+ pub(crate) enum TicketState {
381
+ Pending(Submitted),
382
+ Done(Result<CommitInfo>),
383
+ }
384
+
385
+ impl CommitTicket {
386
+ fn new(submitted: Submitted) -> Self {
387
+ Self {
388
+ state: TicketState::Pending(submitted),
389
+ }
390
+ }
391
+
392
+ /// Blocks until the commit meets its durability level and is visible, as
393
+ /// [`WriteBatch::commit_with`] does, and returns its result.
394
+ pub fn wait(self) -> Result<CommitInfo> {
395
+ match self.state {
396
+ TicketState::Done(r) => r,
397
+ TicketState::Pending(s) => {
398
+ let Submitted {
399
+ pending,
400
+ largest_value,
401
+ max_value,
402
+ watch,
403
+ } = s;
404
+ pending
405
+ .wait()
406
+ .map(CommitInfo::from_engine)
407
+ .map_err(|e| watch.refused(commit_error(e, largest_value, max_value)))
408
+ }
409
+ }
410
+ }
411
+
412
+ /// The commit's result if it has resolved (durable at its level and visible), without
413
+ /// blocking; `None` while it is in flight. Once resolved, every call returns the same
414
+ /// result.
415
+ pub fn try_result(&mut self) -> Option<Result<CommitInfo>> {
416
+ if let TicketState::Pending(s) = &mut self.state {
417
+ let mut cx = Context::from_waker(Waker::noop());
418
+ let done = match Pin::new(&mut s.pending).poll(&mut cx) {
419
+ Poll::Ready(r) => s.outcome(r),
420
+ Poll::Pending => return None,
421
+ };
422
+ self.state = TicketState::Done(done);
423
+ }
424
+ match &self.state {
425
+ TicketState::Done(r) => Some(r.clone()),
426
+ TicketState::Pending(_) => None,
427
+ }
428
+ }
429
+
430
+ /// The commit's sequence number once it has resolved successfully (D196: a seqno is
431
+ /// assigned by the owning shard after submission, so it is not known at once). It takes
432
+ /// `&mut self` because it polls the commit, as [`try_result`](Self::try_result) does: a
433
+ /// `None` may become `Some` on a later call, and never changes back.
434
+ pub fn seqno(&mut self) -> Option<u64> {
435
+ self.try_result()?.ok().map(|c| c.seqno)
436
+ }
437
+
438
+ #[cfg(feature = "async")]
439
+ pub(crate) fn into_state(self) -> TicketState {
440
+ self.state
441
+ }
442
+ }
443
+
444
+ /// A commit's error: `ValueTooLarge` names the largest value of the commit.
445
+ pub(crate) fn commit_error(
446
+ e: pigeonhole_engine::Error,
447
+ largest_value: usize,
448
+ max_value: usize,
449
+ ) -> Error {
450
+ match e {
451
+ pigeonhole_engine::Error::ValueTooLarge => value_too_large(largest_value, max_value),
452
+ e => e.into(),
453
+ }
454
+ }
455
+
456
+ /// Refuses a table handle from another database.
457
+ pub(crate) fn check_table(db: &Arc<Db>, table: &Table) -> Result<()> {
458
+ if Arc::ptr_eq(db, &table.core.db) {
459
+ Ok(())
460
+ } else {
461
+ Err(Error::new(
462
+ ErrorCode::InvalidArgument,
463
+ format!("table {:?} belongs to another database", table.name()),
464
+ ))
465
+ }
466
+ }
467
+
468
+ /// A single-row atomic mutation under construction. Every change commits all-or-nothing,
469
+ /// across families. Errors (unknown family, oversized key) surface at commit.
470
+ ///
471
+ /// ```
472
+ /// use pigeonhole::{Condition, Durability, Family, Options, Pigeonhole};
473
+ ///
474
+ /// # fn main() -> pigeonhole::Result<()> {
475
+ /// # let dir = pigeonhole::doc_support::temp_dir();
476
+ /// let db = Pigeonhole::open(dir.join("app.phdb"), Options::default().shards(2))?;
477
+ /// let pages = db.table("pages")?
478
+ /// .family("meta", Family::default())
479
+ /// .family("links", Family::default())
480
+ /// .family("stats", Family::counter())
481
+ /// .create_if_missing()?;
482
+ /// pages
483
+ /// .mutate(b"com.example/a")
484
+ /// .put("meta", b"status", b"200")
485
+ /// .put("links", b"com.example/b", b"")
486
+ /// .incr("stats", b"hits", 1)
487
+ /// .durability(Durability::Buffered)
488
+ /// .commit()?;
489
+ ///
490
+ /// // Compare-and-set: only the first claim wins.
491
+ /// let unclaimed = Condition::Absent { family: "meta".into(), qualifier: b"owner".to_vec() };
492
+ /// let first = pages.mutate(b"com.example/a").put("meta", b"owner", b"w1").commit_if(&unclaimed)?;
493
+ /// let second = pages.mutate(b"com.example/a").put("meta", b"owner", b"w2").commit_if(&unclaimed)?;
494
+ /// assert!(first.is_some() && second.is_none());
495
+ /// assert_eq!(pages.get(b"com.example/a", "meta", b"owner")?.unwrap().value(), b"w1");
496
+ /// # db.close()?;
497
+ /// # Ok(())
498
+ /// # }
499
+ /// ```
500
+ #[derive(Debug)]
501
+ #[must_use = "a mutation does nothing until .commit()"]
502
+ pub struct RowMutation<'t> {
503
+ table: &'t TableCore,
504
+ row: Vec<u8>,
505
+ builder: Builder,
506
+ durability: Option<Durability>,
507
+ }
508
+
509
+ impl<'t> RowMutation<'t> {
510
+ pub(crate) fn new(table: &'t Table, row: &[u8]) -> Self {
511
+ Self {
512
+ table: &table.core,
513
+ row: row.to_vec(),
514
+ builder: Builder::default(),
515
+ durability: None,
516
+ }
517
+ }
518
+
519
+ /// Adds one mutation of this row in `family` (`qualifier` and `value` only size errors).
520
+ fn op(
521
+ self,
522
+ family: &str,
523
+ qualifier: &[u8],
524
+ value: usize,
525
+ f: impl FnOnce(&mut EngineBatch, TableId, FamilyId, &[u8]) -> pigeonhole_engine::Result<()>,
526
+ ) -> Self {
527
+ self.op_as(None, family, qualifier, value, f)
528
+ }
529
+
530
+ /// [`op`](Self::op) for a typed operand, refused by families that don't take it (D294).
531
+ fn op_as(
532
+ mut self,
533
+ operand: Option<Operand>,
534
+ family: &str,
535
+ qualifier: &[u8],
536
+ value: usize,
537
+ f: impl FnOnce(&mut EngineBatch, TableId, FamilyId, &[u8]) -> pigeonhole_engine::Result<()>,
538
+ ) -> Self {
539
+ let (table, row) = (self.table.info.id, &self.row);
540
+ let sizes = Sizes::new(row, qualifier, value);
541
+ self.builder
542
+ .with(self.table, family, operand, sizes, |b, fam| {
543
+ f(b, table, fam, row)
544
+ });
545
+ self
546
+ }
547
+ }
548
+
549
+ /// The set operand adding or removing `x` (`pigeonhole_format::roaring`, D298).
550
+ fn set_operand(x: u32, add: bool) -> Vec<u8> {
551
+ let mut v = Vec::with_capacity(32);
552
+ if add {
553
+ pigeonhole_format::roaring::encode_operand(&mut v, &[x], &[]);
554
+ } else {
555
+ pigeonhole_format::roaring::encode_operand(&mut v, &[], &[x]);
556
+ }
557
+ v
558
+ }
559
+
560
+ impl RowMutation<'_> {
561
+ /// Puts bytes at the commit timestamp.
562
+ pub fn put(self, family: &str, qualifier: &[u8], value: &[u8]) -> Self {
563
+ self.op(family, qualifier, value.len(), |b, t, f, row| {
564
+ b.put(t, f, row, qualifier, None, ValueRef::Bytes(value))
565
+ })
566
+ }
567
+
568
+ /// Puts bytes at an explicit timestamp (event time).
569
+ pub fn put_at(self, family: &str, qualifier: &[u8], ts: u64, value: &[u8]) -> Self {
570
+ self.op(family, qualifier, value.len(), |b, t, f, row| {
571
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::Bytes(value))
572
+ })
573
+ }
574
+
575
+ /// Puts a typed `i64` at the commit timestamp; in a counter family, sets the counter
576
+ /// (later increments add to it).
577
+ pub fn put_i64(self, family: &str, qualifier: &[u8], value: i64) -> Self {
578
+ self.op(family, qualifier, 8, |b, t, f, row| {
579
+ b.put(t, f, row, qualifier, None, ValueRef::I64(value))
580
+ })
581
+ }
582
+
583
+ /// Puts a typed `i64` at an explicit timestamp; in a counter family, sets that bucket.
584
+ pub fn put_i64_at(self, family: &str, qualifier: &[u8], ts: u64, value: i64) -> Self {
585
+ self.op(family, qualifier, 8, |b, t, f, row| {
586
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::I64(value))
587
+ })
588
+ }
589
+
590
+ /// Puts a `u64` as the `i64` with the same bits, as a bitwise aggregate family holds it
591
+ /// ([`Aggregation::BitOr`](crate::Aggregation::BitOr), D298); reads back with `as_u64`.
592
+ pub fn put_u64(self, family: &str, qualifier: &[u8], value: u64) -> Self {
593
+ self.put_i64(family, qualifier, value as i64)
594
+ }
595
+
596
+ /// [`put_u64`](Self::put_u64) at an explicit timestamp; in a bitwise family, sets that
597
+ /// bucket.
598
+ pub fn put_u64_at(self, family: &str, qualifier: &[u8], ts: u64, value: u64) -> Self {
599
+ self.put_i64_at(family, qualifier, ts, value as i64)
600
+ }
601
+
602
+ /// Puts a typed `f64`.
603
+ pub fn put_f64(self, family: &str, qualifier: &[u8], value: f64) -> Self {
604
+ self.op(family, qualifier, 8, |b, t, f, row| {
605
+ b.put(t, f, row, qualifier, None, ValueRef::F64(value))
606
+ })
607
+ }
608
+
609
+ /// Puts a typed `f64` at an explicit timestamp (ICR 0051).
610
+ pub fn put_f64_at(self, family: &str, qualifier: &[u8], ts: u64, value: f64) -> Self {
611
+ self.op(family, qualifier, 8, |b, t, f, row| {
612
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::F64(value))
613
+ })
614
+ }
615
+
616
+ /// Puts the `f32` vector `value` into a vector family (D303,
617
+ /// [`VectorSpec`](crate::VectorSpec)) at the commit timestamp. A vector of another
618
+ /// element type or dimension, an `f32` component that isn't finite or exceeds 2^56 in
619
+ /// magnitude, a vector with a zero norm in a cosine
620
+ /// family, or a family that isn't a vector family fails with `InvalidArgument`.
621
+ pub fn put_vector_f32(self, family: &str, qualifier: &[u8], value: &[f32]) -> Self {
622
+ self.vector(family, qualifier, None, Query::F32(value))
623
+ }
624
+
625
+ /// [`put_vector_f32`](Self::put_vector_f32) at an explicit timestamp.
626
+ pub fn put_vector_f32_at(self, family: &str, qualifier: &[u8], ts: u64, value: &[f32]) -> Self {
627
+ self.vector(family, qualifier, Some(ts), Query::F32(value))
628
+ }
629
+
630
+ /// [`put_vector_f32`](Self::put_vector_f32) for an `i8` vector family.
631
+ pub fn put_vector_i8(self, family: &str, qualifier: &[u8], value: &[i8]) -> Self {
632
+ self.vector(family, qualifier, None, Query::I8(value))
633
+ }
634
+
635
+ /// [`put_vector_i8`](Self::put_vector_i8) at an explicit timestamp.
636
+ pub fn put_vector_i8_at(self, family: &str, qualifier: &[u8], ts: u64, value: &[i8]) -> Self {
637
+ self.vector(family, qualifier, Some(ts), Query::I8(value))
638
+ }
639
+
640
+ /// [`put_vector_f32`](Self::put_vector_f32) for a bit vector family: `value` is the bits,
641
+ /// packed eight to a byte, least significant first.
642
+ pub fn put_vector_bits(self, family: &str, qualifier: &[u8], value: &[u8]) -> Self {
643
+ self.vector(family, qualifier, None, Query::Bits(value))
644
+ }
645
+
646
+ /// [`put_vector_bits`](Self::put_vector_bits) at an explicit timestamp.
647
+ pub fn put_vector_bits_at(self, family: &str, qualifier: &[u8], ts: u64, value: &[u8]) -> Self {
648
+ self.vector(family, qualifier, Some(ts), Query::Bits(value))
649
+ }
650
+
651
+ /// Puts the `f16` vector `value` (IEEE binary16 bit patterns) into an `f16` vector
652
+ /// family (#1263) at the commit timestamp, refused as
653
+ /// [`put_vector_f32`](Self::put_vector_f32) is. An `f32` vector can go into the same
654
+ /// family through `put_vector_f32`, which rounds it to nearest-even.
655
+ pub fn put_vector_f16(self, family: &str, qualifier: &[u8], value: &[u16]) -> Self {
656
+ self.vector(family, qualifier, None, Query::F16(value))
657
+ }
658
+
659
+ /// [`put_vector_f16`](Self::put_vector_f16) at an explicit timestamp.
660
+ pub fn put_vector_f16_at(self, family: &str, qualifier: &[u8], ts: u64, value: &[u16]) -> Self {
661
+ self.vector(family, qualifier, Some(ts), Query::F16(value))
662
+ }
663
+
664
+ /// [`put_vector_f16`](Self::put_vector_f16) for a `bf16` vector family (bfloat16 bit
665
+ /// patterns).
666
+ pub fn put_vector_bf16(self, family: &str, qualifier: &[u8], value: &[u16]) -> Self {
667
+ self.vector(family, qualifier, None, Query::BF16(value))
668
+ }
669
+
670
+ /// [`put_vector_bf16`](Self::put_vector_bf16) at an explicit timestamp.
671
+ pub fn put_vector_bf16_at(
672
+ self,
673
+ family: &str,
674
+ qualifier: &[u8],
675
+ ts: u64,
676
+ value: &[u16],
677
+ ) -> Self {
678
+ self.vector(family, qualifier, Some(ts), Query::BF16(value))
679
+ }
680
+
681
+ /// A vector put, checked against the family's spec when it is built.
682
+ fn vector(mut self, family: &str, qualifier: &[u8], ts: Option<u64>, q: Query<'_>) -> Self {
683
+ let mut buf = Vec::new();
684
+ match self.table.vector_payload(family, q, &mut buf) {
685
+ Err(e) => {
686
+ self.builder.fail(e);
687
+ self
688
+ }
689
+ Ok(p) => self.op(family, qualifier, buf.len(), |b, t, f, row| {
690
+ b.put(t, f, row, qualifier, ts, vector_value(&p, &buf))
691
+ }),
692
+ }
693
+ }
694
+
695
+ /// Atomically adds `delta` (wrapping) to the counter in a counter family
696
+ /// ([`Family::counter`](crate::Family::counter)) without reading it. Increments of one
697
+ /// counter combine into one cell. Within one mutation (or batch) the writes of a counter
698
+ /// apply in order: `incr(c, 1).incr(c, 2)` adds 3, and `put_i64(c, 5).incr(c, 1)` sets
699
+ /// 6 (decision D186). In a counter family it is [`aggregate`](Self::aggregate). Other
700
+ /// families fail with `InvalidArgument` at commit, min and max families included.
701
+ pub fn incr(self, family: &str, qualifier: &[u8], delta: i64) -> Self {
702
+ self.op_as(Some(Operand::Incr), family, qualifier, 8, |b, t, f, row| {
703
+ b.merge(t, f, row, qualifier, ValueRef::I64(delta))
704
+ })
705
+ }
706
+
707
+ /// Adds `delta` to the bucket at timestamp `ts` of a counter family (hourly or daily
708
+ /// totals, say): each bucket is a version of its own.
709
+ pub fn incr_at(self, family: &str, qualifier: &[u8], ts: u64, delta: i64) -> Self {
710
+ self.op_as(Some(Operand::Incr), family, qualifier, 8, |b, t, f, row| {
711
+ b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(delta))
712
+ })
713
+ }
714
+
715
+ /// Writes the input `value` to the cell of an aggregate family
716
+ /// ([`Family::aggregate`](crate::Family::aggregate)) without reading it: the cell
717
+ /// combines it with the family's aggregation (added to a sum, kept by a min or max if it
718
+ /// is the smallest or largest, counted as an element by an HLL family). The cell lives
719
+ /// at one fixed timestamp (0), as a
720
+ /// counter's does. Within one mutation (or batch) the writes of a cell apply in order:
721
+ /// `put_i64(c, 5).aggregate(c, 9)` in a min family sets 5. Other families fail with
722
+ /// `InvalidArgument` at commit.
723
+ pub fn aggregate(self, family: &str, qualifier: &[u8], value: i64) -> Self {
724
+ self.op_as(
725
+ Some(Operand::Aggregate),
726
+ family,
727
+ qualifier,
728
+ 8,
729
+ |b, t, f, row| b.merge(t, f, row, qualifier, ValueRef::I64(value)),
730
+ )
731
+ }
732
+
733
+ /// Writes the input `value` to the bucket at timestamp `ts` of an aggregate family (an
734
+ /// hourly minimum, say): each bucket is a version of its own.
735
+ pub fn aggregate_at(self, family: &str, qualifier: &[u8], ts: u64, value: i64) -> Self {
736
+ self.op_as(
737
+ Some(Operand::Aggregate),
738
+ family,
739
+ qualifier,
740
+ 8,
741
+ |b, t, f, row| b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(value)),
742
+ )
743
+ }
744
+
745
+ /// Writes the `u64` input `value` to the cell of a bitwise aggregate family
746
+ /// ([`Aggregation::BitOr`](crate::Aggregation::BitOr), `BitAnd`, `BitXor`; D298), stored
747
+ /// as an `i64` with the same bits. Other families fail with `InvalidArgument`, naming the
748
+ /// method their inputs take.
749
+ pub fn aggregate_u64(self, family: &str, qualifier: &[u8], value: u64) -> Self {
750
+ self.op_as(Some(Operand::U64), family, qualifier, 8, |b, t, f, row| {
751
+ b.merge(t, f, row, qualifier, ValueRef::I64(value as i64))
752
+ })
753
+ }
754
+
755
+ /// [`aggregate_u64`](Self::aggregate_u64) to the bucket at timestamp `ts`.
756
+ pub fn aggregate_u64_at(self, family: &str, qualifier: &[u8], ts: u64, value: u64) -> Self {
757
+ self.op_as(Some(Operand::U64), family, qualifier, 8, |b, t, f, row| {
758
+ b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(value as i64))
759
+ })
760
+ }
761
+
762
+ /// Writes the `f64` input `value` to the cell of an `f64` aggregate family
763
+ /// ([`Aggregation::MinF64`](crate::Aggregation::MinF64), `MaxF64`; D298). NaN, and other
764
+ /// families, fail with `InvalidArgument`.
765
+ pub fn aggregate_f64(self, family: &str, qualifier: &[u8], value: f64) -> Self {
766
+ self.op_as(Some(Operand::F64), family, qualifier, 8, |b, t, f, row| {
767
+ b.merge(t, f, row, qualifier, ValueRef::F64(value))
768
+ })
769
+ }
770
+
771
+ /// [`aggregate_f64`](Self::aggregate_f64) to the bucket at timestamp `ts`.
772
+ pub fn aggregate_f64_at(self, family: &str, qualifier: &[u8], ts: u64, value: f64) -> Self {
773
+ self.op_as(Some(Operand::F64), family, qualifier, 8, |b, t, f, row| {
774
+ b.merge_at(t, f, row, qualifier, ts, ValueRef::F64(value))
775
+ })
776
+ }
777
+
778
+ /// Writes the bytes element `value` (a string key, say) to the cell of an HLL or bloom
779
+ /// family ([`Aggregation::Hll`](crate::Aggregation::Hll),
780
+ /// [`Aggregation::Bloom`](crate::Aggregation::Bloom); D298). It hashes apart from any
781
+ /// `i64` element, behind a domain tag. Other families fail with `InvalidArgument`.
782
+ pub fn aggregate_bytes(self, family: &str, qualifier: &[u8], value: &[u8]) -> Self {
783
+ self.op_as(
784
+ Some(Operand::Bytes),
785
+ family,
786
+ qualifier,
787
+ value.len(),
788
+ |b, t, f, row| b.merge(t, f, row, qualifier, ValueRef::Bytes(value)),
789
+ )
790
+ }
791
+
792
+ /// [`aggregate_bytes`](Self::aggregate_bytes) to the bucket at timestamp `ts`.
793
+ pub fn aggregate_bytes_at(self, family: &str, qualifier: &[u8], ts: u64, value: &[u8]) -> Self {
794
+ self.op_as(
795
+ Some(Operand::Bytes),
796
+ family,
797
+ qualifier,
798
+ value.len(),
799
+ |b, t, f, row| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(value)),
800
+ )
801
+ }
802
+
803
+ /// Adds `x` to the set in the cell of a set family
804
+ /// ([`Aggregation::Set`](crate::Aggregation::Set); D298). Adds and removes apply in
805
+ /// commit order, so a later [`set_remove`](Self::set_remove) of `x` undoes this. Other
806
+ /// families fail with `InvalidArgument`.
807
+ pub fn set_add(self, family: &str, qualifier: &[u8], x: u32) -> Self {
808
+ let operand = set_operand(x, true);
809
+ self.op_as(
810
+ Some(Operand::Set),
811
+ family,
812
+ qualifier,
813
+ operand.len(),
814
+ |b, t, f, row| b.merge(t, f, row, qualifier, ValueRef::Bytes(&operand)),
815
+ )
816
+ }
817
+
818
+ /// [`set_add`](Self::set_add) to the bucket at timestamp `ts`.
819
+ pub fn set_add_at(self, family: &str, qualifier: &[u8], ts: u64, x: u32) -> Self {
820
+ let operand = set_operand(x, true);
821
+ self.op_as(
822
+ Some(Operand::Set),
823
+ family,
824
+ qualifier,
825
+ operand.len(),
826
+ |b, t, f, row| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(&operand)),
827
+ )
828
+ }
829
+
830
+ /// Removes `x` from the set in the cell of a set family (a no-op if it is not there).
831
+ pub fn set_remove(self, family: &str, qualifier: &[u8], x: u32) -> Self {
832
+ let operand = set_operand(x, false);
833
+ self.op_as(
834
+ Some(Operand::Set),
835
+ family,
836
+ qualifier,
837
+ operand.len(),
838
+ |b, t, f, row| b.merge(t, f, row, qualifier, ValueRef::Bytes(&operand)),
839
+ )
840
+ }
841
+
842
+ /// [`set_remove`](Self::set_remove) at the bucket at timestamp `ts`.
843
+ pub fn set_remove_at(self, family: &str, qualifier: &[u8], ts: u64, x: u32) -> Self {
844
+ let operand = set_operand(x, false);
845
+ self.op_as(
846
+ Some(Operand::Set),
847
+ family,
848
+ qualifier,
849
+ operand.len(),
850
+ |b, t, f, row| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(&operand)),
851
+ )
852
+ }
853
+
854
+ /// Writes an untyped operand for the family's merge operator (custom operators, Phase 2).
855
+ /// The built-in `i64` add takes typed operands only: use `incr`, or the read fails with
856
+ /// [`ErrorCode::MergeFailed`](crate::ErrorCode::MergeFailed).
857
+ pub fn merge(self, family: &str, qualifier: &[u8], operand: &[u8]) -> Self {
858
+ self.op(family, qualifier, operand.len(), |b, t, f, row| {
859
+ b.merge(t, f, row, qualifier, ValueRef::Bytes(operand))
860
+ })
861
+ }
862
+
863
+ /// Deletes one version.
864
+ pub fn delete_cell(self, family: &str, qualifier: &[u8], ts: u64) -> Self {
865
+ self.op(family, qualifier, 0, |b, t, f, row| {
866
+ b.delete_cell(t, f, row, qualifier, ts)
867
+ })
868
+ }
869
+
870
+ /// Deletes every version of a column.
871
+ pub fn delete_column(self, family: &str, qualifier: &[u8]) -> Self {
872
+ self.op(family, qualifier, 0, |b, t, f, row| {
873
+ b.delete_column(t, f, row, qualifier, None)
874
+ })
875
+ }
876
+
877
+ /// Deletes every column of a family in this row.
878
+ pub fn delete_family(self, family: &str) -> Self {
879
+ self.op(family, &[], 0, |b, t, f, row| {
880
+ b.delete_family(t, f, row, None)
881
+ })
882
+ }
883
+
884
+ /// Deletes the whole row.
885
+ pub fn delete_row(mut self) -> Self {
886
+ self.builder.row_delete(self.table, &self.row);
887
+ self
888
+ }
889
+
890
+ /// Overrides durability for this commit.
891
+ pub fn durability(mut self, durability: Durability) -> Self {
892
+ self.durability = Some(durability);
893
+ self
894
+ }
895
+
896
+ /// Commits.
897
+ pub fn commit(self) -> Result<CommitInfo> {
898
+ let RowMutation {
899
+ table,
900
+ builder,
901
+ durability,
902
+ ..
903
+ } = self;
904
+ // A recovery running: wait for its swap, then commit on the new engine (D265).
905
+ let generation = table.db.before_commit()?;
906
+ builder
907
+ .commit(&table.engine(), table.db.max_value, durability)
908
+ .map_err(|e| table.db.after_commit_closed(generation, e))
909
+ }
910
+
911
+ /// Commits like [`commit`](Self::commit), and returns each counter cell this mutation
912
+ /// incremented or set (`incr`, `incr_at`, `put_i64`, `put_i64_at`), as a read at the
913
+ /// commit's seqno sees it (BigTable's
914
+ /// `ReadModifyWriteRow`; D314). Concurrent increments of one cell each get a different
915
+ /// value: `N` callers adding 1 from zero get exactly `1..=N`.
916
+ ///
917
+ /// A value is as durable as the commit, which returns only once it meets its durability
918
+ /// level; with [`Durability::Buffered`] or [`Durability::None`] a crash can lose the commit
919
+ /// and hand its value out again. After [`ErrorCode::OutcomeUnknown`](crate::ErrorCode)
920
+ /// there is no value, and retrying the increment counts it twice if it landed.
921
+ ///
922
+ /// ```
923
+ /// use pigeonhole::{Family, Options, Pigeonhole};
924
+ ///
925
+ /// # fn main() -> pigeonhole::Result<()> {
926
+ /// # let dir = pigeonhole::doc_support::temp_dir();
927
+ /// let db = Pigeonhole::open(dir.join("app.phdb"), Options::default())?;
928
+ /// let t = db.table("seq")?.family("n", Family::counter()).create_if_missing()?;
929
+ /// let r = t.mutate(b"orders").incr("n", b"next", 1).commit_returning()?;
930
+ /// assert_eq!(r.value("n", b"next")?, Some(1));
931
+ /// # Ok(())
932
+ /// # }
933
+ /// ```
934
+ pub fn commit_returning(self) -> Result<Incremented> {
935
+ let RowMutation {
936
+ table,
937
+ builder,
938
+ durability,
939
+ ..
940
+ } = self;
941
+ let generation = table.db.before_commit()?;
942
+ let (info, cells) = builder
943
+ .commit_returning(&table.engine(), table.db.max_value, durability)
944
+ .map_err(|e| table.db.after_commit_closed(generation, e))?;
945
+ Ok(Incremented::new(info, &table.info, cells))
946
+ }
947
+
948
+ /// Submits as an async returning commit (D314, D210).
949
+ #[cfg(feature = "async")]
950
+ pub(crate) fn submit_returning_async(
951
+ self,
952
+ ) -> Result<(
953
+ pigeonhole_engine::PendingReturning,
954
+ Arc<pigeonhole_engine::TableInfo>,
955
+ usize,
956
+ usize,
957
+ )> {
958
+ let watch = self.table.db.watch();
959
+ let max_value = self.table.db.max_value;
960
+ let info = Arc::clone(&self.table.info);
961
+ self.builder
962
+ .submit_returning(&self.table.engine(), max_value, self.durability)
963
+ .map(|(p, largest)| (p, info, largest, max_value))
964
+ .map_err(|e| watch.refused(e))
965
+ }
966
+
967
+ /// Submits as an async commit (D210; see [`Builder::submit_async`]).
968
+ #[cfg(feature = "async")]
969
+ pub(crate) fn submit_async(self) -> Result<Submitted> {
970
+ let watch = self.table.db.watch();
971
+ self.builder
972
+ .submit_async(
973
+ &self.table.engine(),
974
+ self.table.db.max_value,
975
+ self.durability,
976
+ )
977
+ .map(|s| s.watched(watch))
978
+ // A refusal at submit (the failed or closing engine's `Closed`) as one at resolution
979
+ // (#970).
980
+ .map_err(|e| watch.refused(e))
981
+ }
982
+
983
+ /// Submits as an async conditional commit (D210): the condition is resolved now; the
984
+ /// pending check submits once admitted when it has to wait for room.
985
+ #[cfg(feature = "async")]
986
+ pub(crate) fn submit_if_async(mut self, condition: &Condition) -> Result<SubmittedCheck> {
987
+ if let Some(e) = self.builder.error.take() {
988
+ return Err(e);
989
+ }
990
+ let predicate = self.predicate(condition)?;
991
+ let (db, table) = (&self.table.db, self.table.info.id);
992
+ let (largest_value, max_value) = (self.builder.largest_value, db.max_value);
993
+ let durability = self.durability;
994
+ let watch = db.watch();
995
+ self.table
996
+ .engine()
997
+ .submit_check_and_mutate_async(
998
+ table,
999
+ &self.row,
1000
+ &predicate,
1001
+ self.builder.batch,
1002
+ durability.map(Durability::engine),
1003
+ )
1004
+ .map(|pending| SubmittedCheck {
1005
+ pending,
1006
+ largest_value,
1007
+ max_value,
1008
+ watch,
1009
+ })
1010
+ .map_err(|e| watch.refused(commit_error(e, largest_value, max_value)))
1011
+ }
1012
+
1013
+ /// Commits only if `condition` holds on this row, atomically (BigTable's
1014
+ /// `check_and_mutate`; Phase 2). Returns `None` if the condition failed.
1015
+ pub fn commit_if(mut self, condition: &Condition) -> Result<Option<CommitInfo>> {
1016
+ if let Some(e) = self.builder.error.take() {
1017
+ return Err(e);
1018
+ }
1019
+ let predicate = self.predicate(condition)?;
1020
+ let db = &self.table.db;
1021
+ let largest = self.builder.largest_value;
1022
+ let generation = db.before_commit()?;
1023
+ let (applied, info) = self
1024
+ .table
1025
+ .engine()
1026
+ .check_and_mutate(
1027
+ self.table.info.id,
1028
+ &self.row,
1029
+ &predicate,
1030
+ self.builder.batch,
1031
+ self.durability.map(Durability::engine),
1032
+ )
1033
+ .map_err(|e| {
1034
+ db.after_commit_closed(generation, commit_error(e, largest, db.max_value))
1035
+ })?;
1036
+ Ok(if applied {
1037
+ info.map(CommitInfo::from_engine)
1038
+ } else {
1039
+ None
1040
+ })
1041
+ }
1042
+
1043
+ /// The engine's form of `condition`, on this row's table.
1044
+ fn predicate(&self, condition: &Condition) -> Result<Predicate> {
1045
+ Ok(match condition {
1046
+ Condition::Exists { family, qualifier } => Predicate::Exists {
1047
+ family: self.table.family_id(family)?,
1048
+ qualifier: qualifier.clone(),
1049
+ },
1050
+ Condition::Absent { family, qualifier } => Predicate::Absent {
1051
+ family: self.table.family_id(family)?,
1052
+ qualifier: qualifier.clone(),
1053
+ },
1054
+ Condition::Value {
1055
+ family,
1056
+ qualifier,
1057
+ filter,
1058
+ } => Predicate::Value {
1059
+ family: self.table.family_id(family)?,
1060
+ qualifier: qualifier.clone(),
1061
+ predicate: filter.to_engine(),
1062
+ },
1063
+ })
1064
+ }
1065
+ }
1066
+
1067
+ /// A submitted [`RowMutation::commit_if`] (the async front door), with what its error
1068
+ /// mapping needs.
1069
+ #[cfg(feature = "async")]
1070
+ #[derive(Debug)]
1071
+ pub(crate) struct SubmittedCheck {
1072
+ pub(crate) pending: pigeonhole_engine::PendingCheck,
1073
+ largest_value: usize,
1074
+ max_value: usize,
1075
+ /// As [`Submitted`]'s.
1076
+ watch: crate::db::Watch,
1077
+ }
1078
+
1079
+ #[cfg(feature = "async")]
1080
+ impl SubmittedCheck {
1081
+ /// The public result of the engine's outcome: `None` when the condition failed.
1082
+ pub(crate) fn outcome(
1083
+ &self,
1084
+ r: pigeonhole_engine::Result<(bool, Option<pigeonhole_engine::CommitInfo>)>,
1085
+ ) -> Result<Option<CommitInfo>> {
1086
+ let (applied, info) = r.map_err(|e| {
1087
+ self.watch
1088
+ .refused(commit_error(e, self.largest_value, self.max_value))
1089
+ })?;
1090
+ Ok(if applied {
1091
+ info.map(CommitInfo::from_engine)
1092
+ } else {
1093
+ None
1094
+ })
1095
+ }
1096
+ }
1097
+
1098
+ /// A multi-row write with one durability point. Atomic across rows (two-phase commit when the
1099
+ /// rows live on different shards). Errors surface at commit.
1100
+ ///
1101
+ /// ```
1102
+ /// use pigeonhole::{Durability, Family, Options, Pigeonhole};
1103
+ ///
1104
+ /// # fn main() -> pigeonhole::Result<()> {
1105
+ /// # let dir = pigeonhole::doc_support::temp_dir();
1106
+ /// let db = Pigeonhole::open(dir.join("app.phdb"), Options::default().shards(2))?;
1107
+ /// let g = db.table("g")?
1108
+ /// .family("out", Family::default())
1109
+ /// .family("in", Family::default())
1110
+ /// .family("degree", Family::counter())
1111
+ /// .create_if_missing()?;
1112
+ /// // Add the edge a -> b in both directions, atomically.
1113
+ /// let mut wb = db.write_batch();
1114
+ /// wb.put(&g, b"node:a", "out", b"node:b", b"")
1115
+ /// .put(&g, b"node:b", "in", b"node:a", b"")
1116
+ /// .incr(&g, b"node:a", "degree", b"out", 1);
1117
+ /// assert_eq!(wb.len(), 3);
1118
+ /// let info = wb.commit_with(Durability::Sync)?;
1119
+ /// assert_eq!(info.durability, Durability::Sync);
1120
+ /// assert!(g.get(b"node:b", "in", b"node:a")?.is_some());
1121
+ /// # db.close()?;
1122
+ /// # Ok(())
1123
+ /// # }
1124
+ /// ```
1125
+ #[derive(Debug)]
1126
+ pub struct WriteBatch {
1127
+ db: Arc<Db>,
1128
+ cached: crate::db::Cached,
1129
+ builder: Builder,
1130
+ }
1131
+
1132
+ impl WriteBatch {
1133
+ pub(crate) fn new(db: Arc<Db>, cached: crate::db::Cached) -> Self {
1134
+ Self {
1135
+ db,
1136
+ cached,
1137
+ builder: Builder::default(),
1138
+ }
1139
+ }
1140
+
1141
+ /// Adds one mutation of `row` in `table`'s `family` (`qualifier` and `value` only size
1142
+ /// errors).
1143
+ fn op(
1144
+ &mut self,
1145
+ table: &Table,
1146
+ row: &[u8],
1147
+ family: &str,
1148
+ qualifier: &[u8],
1149
+ value: usize,
1150
+ f: impl FnOnce(&mut EngineBatch, TableId, FamilyId) -> pigeonhole_engine::Result<()>,
1151
+ ) -> &mut Self {
1152
+ self.op_as(None, table, row, family, qualifier, value, f)
1153
+ }
1154
+
1155
+ /// [`op`](Self::op) for a typed operand, refused by families that don't take it (D294).
1156
+ #[allow(clippy::too_many_arguments)]
1157
+ fn op_as(
1158
+ &mut self,
1159
+ operand: Option<Operand>,
1160
+ table: &Table,
1161
+ row: &[u8],
1162
+ family: &str,
1163
+ qualifier: &[u8],
1164
+ value: usize,
1165
+ f: impl FnOnce(&mut EngineBatch, TableId, FamilyId) -> pigeonhole_engine::Result<()>,
1166
+ ) -> &mut Self {
1167
+ if self.builder.check_table(&self.db, table) {
1168
+ let id = table.core.info.id;
1169
+ let sizes = Sizes::new(row, qualifier, value);
1170
+ self.builder
1171
+ .with(&table.core, family, operand, sizes, |b, fam| f(b, id, fam));
1172
+ }
1173
+ self
1174
+ }
1175
+
1176
+ /// Puts bytes at the commit timestamp.
1177
+ pub fn put(
1178
+ &mut self,
1179
+ table: &Table,
1180
+ row: &[u8],
1181
+ family: &str,
1182
+ qualifier: &[u8],
1183
+ value: &[u8],
1184
+ ) -> &mut Self {
1185
+ self.op(table, row, family, qualifier, value.len(), |b, t, f| {
1186
+ b.put(t, f, row, qualifier, None, ValueRef::Bytes(value))
1187
+ })
1188
+ }
1189
+
1190
+ /// Puts bytes at an explicit timestamp.
1191
+ pub fn put_at(
1192
+ &mut self,
1193
+ table: &Table,
1194
+ row: &[u8],
1195
+ family: &str,
1196
+ qualifier: &[u8],
1197
+ ts: u64,
1198
+ value: &[u8],
1199
+ ) -> &mut Self {
1200
+ self.op(table, row, family, qualifier, value.len(), |b, t, f| {
1201
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::Bytes(value))
1202
+ })
1203
+ }
1204
+
1205
+ /// Puts a typed `i64` (in a counter family, sets the counter).
1206
+ pub fn put_i64(
1207
+ &mut self,
1208
+ table: &Table,
1209
+ row: &[u8],
1210
+ family: &str,
1211
+ qualifier: &[u8],
1212
+ value: i64,
1213
+ ) -> &mut Self {
1214
+ self.op(table, row, family, qualifier, 8, |b, t, f| {
1215
+ b.put(t, f, row, qualifier, None, ValueRef::I64(value))
1216
+ })
1217
+ }
1218
+
1219
+ /// Puts a typed `i64` at an explicit timestamp (in a counter family, sets that bucket).
1220
+ pub fn put_i64_at(
1221
+ &mut self,
1222
+ table: &Table,
1223
+ row: &[u8],
1224
+ family: &str,
1225
+ qualifier: &[u8],
1226
+ ts: u64,
1227
+ value: i64,
1228
+ ) -> &mut Self {
1229
+ self.op(table, row, family, qualifier, 8, |b, t, f| {
1230
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::I64(value))
1231
+ })
1232
+ }
1233
+
1234
+ /// [`RowMutation::put_u64`]: a `u64`'s bits as an `i64`.
1235
+ pub fn put_u64(
1236
+ &mut self,
1237
+ table: &Table,
1238
+ row: &[u8],
1239
+ family: &str,
1240
+ qualifier: &[u8],
1241
+ value: u64,
1242
+ ) -> &mut Self {
1243
+ self.put_i64(table, row, family, qualifier, value as i64)
1244
+ }
1245
+
1246
+ /// [`RowMutation::put_u64_at`].
1247
+ pub fn put_u64_at(
1248
+ &mut self,
1249
+ table: &Table,
1250
+ row: &[u8],
1251
+ family: &str,
1252
+ qualifier: &[u8],
1253
+ ts: u64,
1254
+ value: u64,
1255
+ ) -> &mut Self {
1256
+ self.put_i64_at(table, row, family, qualifier, ts, value as i64)
1257
+ }
1258
+
1259
+ /// Puts a typed `f64`.
1260
+ pub fn put_f64(
1261
+ &mut self,
1262
+ table: &Table,
1263
+ row: &[u8],
1264
+ family: &str,
1265
+ qualifier: &[u8],
1266
+ value: f64,
1267
+ ) -> &mut Self {
1268
+ self.op(table, row, family, qualifier, 8, |b, t, f| {
1269
+ b.put(t, f, row, qualifier, None, ValueRef::F64(value))
1270
+ })
1271
+ }
1272
+
1273
+ /// Puts a typed `f64` at an explicit timestamp (ICR 0051).
1274
+ pub fn put_f64_at(
1275
+ &mut self,
1276
+ table: &Table,
1277
+ row: &[u8],
1278
+ family: &str,
1279
+ qualifier: &[u8],
1280
+ ts: u64,
1281
+ value: f64,
1282
+ ) -> &mut Self {
1283
+ self.op(table, row, family, qualifier, 8, |b, t, f| {
1284
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::F64(value))
1285
+ })
1286
+ }
1287
+
1288
+ /// Puts the `f32` vector `value` into a vector family (D303), as
1289
+ /// [`RowMutation::put_vector_f32`] does.
1290
+ pub fn put_vector_f32(
1291
+ &mut self,
1292
+ table: &Table,
1293
+ row: &[u8],
1294
+ family: &str,
1295
+ qualifier: &[u8],
1296
+ value: &[f32],
1297
+ ) -> &mut Self {
1298
+ self.vector(table, row, family, qualifier, None, Query::F32(value))
1299
+ }
1300
+
1301
+ /// [`put_vector_f32`](Self::put_vector_f32) at an explicit timestamp.
1302
+ pub fn put_vector_f32_at(
1303
+ &mut self,
1304
+ table: &Table,
1305
+ row: &[u8],
1306
+ family: &str,
1307
+ qualifier: &[u8],
1308
+ ts: u64,
1309
+ value: &[f32],
1310
+ ) -> &mut Self {
1311
+ self.vector(table, row, family, qualifier, Some(ts), Query::F32(value))
1312
+ }
1313
+
1314
+ /// [`put_vector_f32`](Self::put_vector_f32) for an `i8` vector family.
1315
+ pub fn put_vector_i8(
1316
+ &mut self,
1317
+ table: &Table,
1318
+ row: &[u8],
1319
+ family: &str,
1320
+ qualifier: &[u8],
1321
+ value: &[i8],
1322
+ ) -> &mut Self {
1323
+ self.vector(table, row, family, qualifier, None, Query::I8(value))
1324
+ }
1325
+
1326
+ /// [`put_vector_i8`](Self::put_vector_i8) at an explicit timestamp.
1327
+ pub fn put_vector_i8_at(
1328
+ &mut self,
1329
+ table: &Table,
1330
+ row: &[u8],
1331
+ family: &str,
1332
+ qualifier: &[u8],
1333
+ ts: u64,
1334
+ value: &[i8],
1335
+ ) -> &mut Self {
1336
+ self.vector(table, row, family, qualifier, Some(ts), Query::I8(value))
1337
+ }
1338
+
1339
+ /// [`put_vector_f32`](Self::put_vector_f32) for a bit vector family (bits packed eight to
1340
+ /// a byte, least significant first).
1341
+ pub fn put_vector_bits(
1342
+ &mut self,
1343
+ table: &Table,
1344
+ row: &[u8],
1345
+ family: &str,
1346
+ qualifier: &[u8],
1347
+ value: &[u8],
1348
+ ) -> &mut Self {
1349
+ self.vector(table, row, family, qualifier, None, Query::Bits(value))
1350
+ }
1351
+
1352
+ /// [`put_vector_bits`](Self::put_vector_bits) at an explicit timestamp.
1353
+ pub fn put_vector_bits_at(
1354
+ &mut self,
1355
+ table: &Table,
1356
+ row: &[u8],
1357
+ family: &str,
1358
+ qualifier: &[u8],
1359
+ ts: u64,
1360
+ value: &[u8],
1361
+ ) -> &mut Self {
1362
+ self.vector(table, row, family, qualifier, Some(ts), Query::Bits(value))
1363
+ }
1364
+
1365
+ /// Puts a vector into an `f16` vector family (IEEE binary16 bit patterns) (#1263), as [`RowMutation::put_vector_f16`] does.
1366
+ pub fn put_vector_f16(
1367
+ &mut self,
1368
+ table: &Table,
1369
+ row: &[u8],
1370
+ family: &str,
1371
+ qualifier: &[u8],
1372
+ value: &[u16],
1373
+ ) -> &mut Self {
1374
+ self.vector(table, row, family, qualifier, None, Query::F16(value))
1375
+ }
1376
+
1377
+ /// [`put_vector_f16`](Self::put_vector_f16) at an explicit timestamp.
1378
+ pub fn put_vector_f16_at(
1379
+ &mut self,
1380
+ table: &Table,
1381
+ row: &[u8],
1382
+ family: &str,
1383
+ qualifier: &[u8],
1384
+ ts: u64,
1385
+ value: &[u16],
1386
+ ) -> &mut Self {
1387
+ self.vector(table, row, family, qualifier, Some(ts), Query::F16(value))
1388
+ }
1389
+
1390
+ /// Puts a vector into a `bf16` vector family (bfloat16 bit patterns) (#1263), as [`RowMutation::put_vector_bf16`] does.
1391
+ pub fn put_vector_bf16(
1392
+ &mut self,
1393
+ table: &Table,
1394
+ row: &[u8],
1395
+ family: &str,
1396
+ qualifier: &[u8],
1397
+ value: &[u16],
1398
+ ) -> &mut Self {
1399
+ self.vector(table, row, family, qualifier, None, Query::BF16(value))
1400
+ }
1401
+
1402
+ /// [`put_vector_bf16`](Self::put_vector_bf16) at an explicit timestamp.
1403
+ pub fn put_vector_bf16_at(
1404
+ &mut self,
1405
+ table: &Table,
1406
+ row: &[u8],
1407
+ family: &str,
1408
+ qualifier: &[u8],
1409
+ ts: u64,
1410
+ value: &[u16],
1411
+ ) -> &mut Self {
1412
+ self.vector(table, row, family, qualifier, Some(ts), Query::BF16(value))
1413
+ }
1414
+
1415
+ /// A vector put, checked against the family's spec when it is built.
1416
+ fn vector(
1417
+ &mut self,
1418
+ table: &Table,
1419
+ row: &[u8],
1420
+ family: &str,
1421
+ qualifier: &[u8],
1422
+ ts: Option<u64>,
1423
+ q: Query<'_>,
1424
+ ) -> &mut Self {
1425
+ let mut buf = Vec::new();
1426
+ match table.core.vector_payload(family, q, &mut buf) {
1427
+ Err(e) => {
1428
+ self.builder.fail(e);
1429
+ self
1430
+ }
1431
+ Ok(p) => self.op(table, row, family, qualifier, buf.len(), |b, t, f| {
1432
+ b.put(t, f, row, qualifier, ts, vector_value(&p, &buf))
1433
+ }),
1434
+ }
1435
+ }
1436
+
1437
+ /// Adds to the counter of a counter family (see [`RowMutation::incr`]).
1438
+ pub fn incr(
1439
+ &mut self,
1440
+ table: &Table,
1441
+ row: &[u8],
1442
+ family: &str,
1443
+ qualifier: &[u8],
1444
+ delta: i64,
1445
+ ) -> &mut Self {
1446
+ self.op_as(
1447
+ Some(Operand::Incr),
1448
+ table,
1449
+ row,
1450
+ family,
1451
+ qualifier,
1452
+ 8,
1453
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::I64(delta)),
1454
+ )
1455
+ }
1456
+
1457
+ /// Adds to the bucket at `ts` of a counter family (see [`RowMutation::incr_at`]).
1458
+ pub fn incr_at(
1459
+ &mut self,
1460
+ table: &Table,
1461
+ row: &[u8],
1462
+ family: &str,
1463
+ qualifier: &[u8],
1464
+ ts: u64,
1465
+ delta: i64,
1466
+ ) -> &mut Self {
1467
+ self.op_as(
1468
+ Some(Operand::Incr),
1469
+ table,
1470
+ row,
1471
+ family,
1472
+ qualifier,
1473
+ 8,
1474
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(delta)),
1475
+ )
1476
+ }
1477
+
1478
+ /// Writes an input to the cell of an aggregate family (see
1479
+ /// [`RowMutation::aggregate`]).
1480
+ pub fn aggregate(
1481
+ &mut self,
1482
+ table: &Table,
1483
+ row: &[u8],
1484
+ family: &str,
1485
+ qualifier: &[u8],
1486
+ value: i64,
1487
+ ) -> &mut Self {
1488
+ self.op_as(
1489
+ Some(Operand::Aggregate),
1490
+ table,
1491
+ row,
1492
+ family,
1493
+ qualifier,
1494
+ 8,
1495
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::I64(value)),
1496
+ )
1497
+ }
1498
+
1499
+ /// Writes an input to the bucket at `ts` of an aggregate family (see
1500
+ /// [`RowMutation::aggregate_at`]).
1501
+ pub fn aggregate_at(
1502
+ &mut self,
1503
+ table: &Table,
1504
+ row: &[u8],
1505
+ family: &str,
1506
+ qualifier: &[u8],
1507
+ ts: u64,
1508
+ value: i64,
1509
+ ) -> &mut Self {
1510
+ self.op_as(
1511
+ Some(Operand::Aggregate),
1512
+ table,
1513
+ row,
1514
+ family,
1515
+ qualifier,
1516
+ 8,
1517
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(value)),
1518
+ )
1519
+ }
1520
+
1521
+ /// [`RowMutation::aggregate_u64`]: a `u64` input to a bitwise aggregate family.
1522
+ pub fn aggregate_u64(
1523
+ &mut self,
1524
+ table: &Table,
1525
+ row: &[u8],
1526
+ family: &str,
1527
+ qualifier: &[u8],
1528
+ value: u64,
1529
+ ) -> &mut Self {
1530
+ self.op_as(
1531
+ Some(Operand::U64),
1532
+ table,
1533
+ row,
1534
+ family,
1535
+ qualifier,
1536
+ 8,
1537
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::I64(value as i64)),
1538
+ )
1539
+ }
1540
+
1541
+ /// [`RowMutation::aggregate_u64_at`].
1542
+ pub fn aggregate_u64_at(
1543
+ &mut self,
1544
+ table: &Table,
1545
+ row: &[u8],
1546
+ family: &str,
1547
+ qualifier: &[u8],
1548
+ ts: u64,
1549
+ value: u64,
1550
+ ) -> &mut Self {
1551
+ self.op_as(
1552
+ Some(Operand::U64),
1553
+ table,
1554
+ row,
1555
+ family,
1556
+ qualifier,
1557
+ 8,
1558
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(value as i64)),
1559
+ )
1560
+ }
1561
+
1562
+ /// [`RowMutation::aggregate_f64`]: an `f64` input to an `f64` aggregate family.
1563
+ pub fn aggregate_f64(
1564
+ &mut self,
1565
+ table: &Table,
1566
+ row: &[u8],
1567
+ family: &str,
1568
+ qualifier: &[u8],
1569
+ value: f64,
1570
+ ) -> &mut Self {
1571
+ self.op_as(
1572
+ Some(Operand::F64),
1573
+ table,
1574
+ row,
1575
+ family,
1576
+ qualifier,
1577
+ 8,
1578
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::F64(value)),
1579
+ )
1580
+ }
1581
+
1582
+ /// [`RowMutation::aggregate_f64_at`].
1583
+ pub fn aggregate_f64_at(
1584
+ &mut self,
1585
+ table: &Table,
1586
+ row: &[u8],
1587
+ family: &str,
1588
+ qualifier: &[u8],
1589
+ ts: u64,
1590
+ value: f64,
1591
+ ) -> &mut Self {
1592
+ self.op_as(
1593
+ Some(Operand::F64),
1594
+ table,
1595
+ row,
1596
+ family,
1597
+ qualifier,
1598
+ 8,
1599
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::F64(value)),
1600
+ )
1601
+ }
1602
+
1603
+ /// [`RowMutation::aggregate_bytes`]: a bytes element for an HLL or bloom family.
1604
+ pub fn aggregate_bytes(
1605
+ &mut self,
1606
+ table: &Table,
1607
+ row: &[u8],
1608
+ family: &str,
1609
+ qualifier: &[u8],
1610
+ value: &[u8],
1611
+ ) -> &mut Self {
1612
+ self.op_as(
1613
+ Some(Operand::Bytes),
1614
+ table,
1615
+ row,
1616
+ family,
1617
+ qualifier,
1618
+ value.len(),
1619
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::Bytes(value)),
1620
+ )
1621
+ }
1622
+
1623
+ /// [`RowMutation::aggregate_bytes_at`].
1624
+ pub fn aggregate_bytes_at(
1625
+ &mut self,
1626
+ table: &Table,
1627
+ row: &[u8],
1628
+ family: &str,
1629
+ qualifier: &[u8],
1630
+ ts: u64,
1631
+ value: &[u8],
1632
+ ) -> &mut Self {
1633
+ self.op_as(
1634
+ Some(Operand::Bytes),
1635
+ table,
1636
+ row,
1637
+ family,
1638
+ qualifier,
1639
+ value.len(),
1640
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(value)),
1641
+ )
1642
+ }
1643
+
1644
+ /// [`RowMutation::set_add`].
1645
+ pub fn set_add(
1646
+ &mut self,
1647
+ table: &Table,
1648
+ row: &[u8],
1649
+ family: &str,
1650
+ qualifier: &[u8],
1651
+ x: u32,
1652
+ ) -> &mut Self {
1653
+ let operand = set_operand(x, true);
1654
+ self.op_as(
1655
+ Some(Operand::Set),
1656
+ table,
1657
+ row,
1658
+ family,
1659
+ qualifier,
1660
+ operand.len(),
1661
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::Bytes(&operand)),
1662
+ )
1663
+ }
1664
+
1665
+ /// [`RowMutation::set_add_at`].
1666
+ pub fn set_add_at(
1667
+ &mut self,
1668
+ table: &Table,
1669
+ row: &[u8],
1670
+ family: &str,
1671
+ qualifier: &[u8],
1672
+ ts: u64,
1673
+ x: u32,
1674
+ ) -> &mut Self {
1675
+ let operand = set_operand(x, true);
1676
+ self.op_as(
1677
+ Some(Operand::Set),
1678
+ table,
1679
+ row,
1680
+ family,
1681
+ qualifier,
1682
+ operand.len(),
1683
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(&operand)),
1684
+ )
1685
+ }
1686
+
1687
+ /// [`RowMutation::set_remove`].
1688
+ pub fn set_remove(
1689
+ &mut self,
1690
+ table: &Table,
1691
+ row: &[u8],
1692
+ family: &str,
1693
+ qualifier: &[u8],
1694
+ x: u32,
1695
+ ) -> &mut Self {
1696
+ let operand = set_operand(x, false);
1697
+ self.op_as(
1698
+ Some(Operand::Set),
1699
+ table,
1700
+ row,
1701
+ family,
1702
+ qualifier,
1703
+ operand.len(),
1704
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::Bytes(&operand)),
1705
+ )
1706
+ }
1707
+
1708
+ /// [`RowMutation::set_remove_at`].
1709
+ pub fn set_remove_at(
1710
+ &mut self,
1711
+ table: &Table,
1712
+ row: &[u8],
1713
+ family: &str,
1714
+ qualifier: &[u8],
1715
+ ts: u64,
1716
+ x: u32,
1717
+ ) -> &mut Self {
1718
+ let operand = set_operand(x, false);
1719
+ self.op_as(
1720
+ Some(Operand::Set),
1721
+ table,
1722
+ row,
1723
+ family,
1724
+ qualifier,
1725
+ operand.len(),
1726
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(&operand)),
1727
+ )
1728
+ }
1729
+
1730
+ /// Writes an untyped operand for the family's merge operator (custom operators, Phase 2).
1731
+ /// The built-in `i64` add takes typed operands only: use `incr`, or the read fails with
1732
+ /// [`ErrorCode::MergeFailed`](crate::ErrorCode::MergeFailed).
1733
+ pub fn merge(
1734
+ &mut self,
1735
+ table: &Table,
1736
+ row: &[u8],
1737
+ family: &str,
1738
+ qualifier: &[u8],
1739
+ operand: &[u8],
1740
+ ) -> &mut Self {
1741
+ self.op(table, row, family, qualifier, operand.len(), |b, t, f| {
1742
+ b.merge(t, f, row, qualifier, ValueRef::Bytes(operand))
1743
+ })
1744
+ }
1745
+
1746
+ /// Deletes one version.
1747
+ pub fn delete_cell(
1748
+ &mut self,
1749
+ table: &Table,
1750
+ row: &[u8],
1751
+ family: &str,
1752
+ qualifier: &[u8],
1753
+ ts: u64,
1754
+ ) -> &mut Self {
1755
+ self.op(table, row, family, qualifier, 0, |b, t, f| {
1756
+ b.delete_cell(t, f, row, qualifier, ts)
1757
+ })
1758
+ }
1759
+
1760
+ /// Deletes every version of a column.
1761
+ pub fn delete_column(
1762
+ &mut self,
1763
+ table: &Table,
1764
+ row: &[u8],
1765
+ family: &str,
1766
+ qualifier: &[u8],
1767
+ ) -> &mut Self {
1768
+ self.op(table, row, family, qualifier, 0, |b, t, f| {
1769
+ b.delete_column(t, f, row, qualifier, None)
1770
+ })
1771
+ }
1772
+
1773
+ /// Deletes every column of a family in a row.
1774
+ pub fn delete_family(&mut self, table: &Table, row: &[u8], family: &str) -> &mut Self {
1775
+ self.op(table, row, family, &[], 0, |b, t, f| {
1776
+ b.delete_family(t, f, row, None)
1777
+ })
1778
+ }
1779
+
1780
+ /// Deletes a whole row.
1781
+ pub fn delete_row(&mut self, table: &Table, row: &[u8]) -> &mut Self {
1782
+ if self.builder.check_table(&self.db, table) {
1783
+ self.builder.row_delete(&table.core, row);
1784
+ }
1785
+ self
1786
+ }
1787
+
1788
+ /// Mutations so far.
1789
+ pub fn len(&self) -> usize {
1790
+ self.builder.batch.len()
1791
+ }
1792
+
1793
+ /// Whether empty.
1794
+ pub fn is_empty(&self) -> bool {
1795
+ self.builder.batch.is_empty()
1796
+ }
1797
+
1798
+ /// Commits with the writer default durability.
1799
+ pub fn commit(self) -> Result<CommitInfo> {
1800
+ let Self {
1801
+ db,
1802
+ cached,
1803
+ builder,
1804
+ } = self;
1805
+ let generation = db.before_commit()?;
1806
+ builder
1807
+ .commit(&cached.get(&db), db.max_value, None)
1808
+ .map_err(|e| db.after_commit_closed(generation, e))
1809
+ }
1810
+
1811
+ /// Commits with `durability` for this commit only.
1812
+ pub fn commit_with(self, durability: Durability) -> Result<CommitInfo> {
1813
+ let Self {
1814
+ db,
1815
+ cached,
1816
+ builder,
1817
+ } = self;
1818
+ let generation = db.before_commit()?;
1819
+ builder
1820
+ .commit(&cached.get(&db), db.max_value, Some(durability))
1821
+ .map_err(|e| db.after_commit_closed(generation, e))
1822
+ }
1823
+
1824
+ /// Submits with `durability` and returns at once with a [`CommitTicket`] to wait on or
1825
+ /// check later (D196). Fails here only if the batch could not be submitted (a builder
1826
+ /// error, a closed database); the commit's own outcome comes through the ticket.
1827
+ pub fn commit_with_ticket(self, durability: Durability) -> Result<CommitTicket> {
1828
+ self.submit(Some(durability)).map(CommitTicket::new)
1829
+ }
1830
+
1831
+ /// Submits without waiting (the async front door's commit).
1832
+ pub(crate) fn submit(self, durability: Option<Durability>) -> Result<Submitted> {
1833
+ let Self {
1834
+ db,
1835
+ cached,
1836
+ builder,
1837
+ } = self;
1838
+ let generation = db.before_commit()?;
1839
+ let watch = db.watch_at(generation);
1840
+ builder
1841
+ .submit(&cached.get(&db), db.max_value, durability)
1842
+ .map(|s| s.watched(watch))
1843
+ .map_err(|e| db.after_commit_closed(generation, e))
1844
+ }
1845
+
1846
+ /// Submits as an async commit (D210; see [`Builder::submit_async`]).
1847
+ #[cfg(feature = "async")]
1848
+ pub(crate) fn submit_async(self, durability: Option<Durability>) -> Result<Submitted> {
1849
+ let Self {
1850
+ db,
1851
+ cached,
1852
+ builder,
1853
+ } = self;
1854
+ let watch = db.watch();
1855
+ builder
1856
+ .submit_async(&cached.get(&db), db.max_value, durability)
1857
+ .map(|s| s.watched(watch))
1858
+ .map_err(|e| watch.refused(e))
1859
+ }
1860
+ }
1861
+
1862
+ /// An optimistic multi-row transaction (Phase 4): serializable for the ranges it reads.
1863
+ ///
1864
+ /// ```
1865
+ /// use pigeonhole::{ErrorCode, Family, Options, Pigeonhole};
1866
+ ///
1867
+ /// # fn main() -> pigeonhole::Result<()> {
1868
+ /// # let dir = pigeonhole::doc_support::temp_dir();
1869
+ /// let db = Pigeonhole::open(dir.join("app.phdb"), Options::default().shards(2))?;
1870
+ /// let bank = db.table("bank")?.family("acct", Family::default()).create_if_missing()?;
1871
+ /// bank.mutate(b"alice").put("acct", b"balance", b"10").commit()?;
1872
+ ///
1873
+ /// let mut txn = db.transaction()?;
1874
+ /// let balance = txn.get(&bank, b"alice", "acct", b"balance")?.map(|c| c.to_owned());
1875
+ /// assert_eq!(balance.unwrap().value(), b"10");
1876
+ /// txn.put(&bank, b"alice", "acct", b"balance", b"5")
1877
+ /// .put(&bank, b"bob", "acct", b"balance", b"5");
1878
+ ///
1879
+ /// // A concurrent write to what the transaction read makes it conflict.
1880
+ /// bank.mutate(b"alice").put("acct", b"balance", b"11").commit()?;
1881
+ /// assert_eq!(txn.commit().unwrap_err().code(), ErrorCode::Conflict);
1882
+ /// # db.close()?;
1883
+ /// # Ok(())
1884
+ /// # }
1885
+ /// ```
1886
+ #[derive(Debug)]
1887
+ pub struct Transaction {
1888
+ pub(crate) db: Arc<Db>,
1889
+ txn: Txn,
1890
+ error: Option<Error>,
1891
+ largest_value: usize,
1892
+ /// The engine generation it began in (D265): its reads and its commit fail with
1893
+ /// `SnapshotExpired` once the database recovered onto a newer engine.
1894
+ generation: u64,
1895
+ /// The first error one of its own reads failed with: how `Pigeonhole::transact` tells
1896
+ /// a retryable failure from the application giving up (ICR 0060).
1897
+ failed_read: Option<Error>,
1898
+ }
1899
+
1900
+ impl Transaction {
1901
+ pub(crate) fn new(db: Arc<Db>, txn: Txn, generation: u64) -> Self {
1902
+ Self {
1903
+ db,
1904
+ txn,
1905
+ error: None,
1906
+ largest_value: 0,
1907
+ generation,
1908
+ failed_read: None,
1909
+ }
1910
+ }
1911
+
1912
+ /// Buffers one mutation of `row` in `table`'s `family`.
1913
+ fn op(
1914
+ &mut self,
1915
+ table: &Table,
1916
+ row: &[u8],
1917
+ family: &str,
1918
+ qualifier: &[u8],
1919
+ value: usize,
1920
+ f: impl FnOnce(&mut EngineBatch, TableId, FamilyId) -> pigeonhole_engine::Result<()>,
1921
+ ) -> &mut Self {
1922
+ self.op_as(None, table, row, family, qualifier, value, f)
1923
+ }
1924
+
1925
+ /// [`op`](Self::op) for a typed operand, refused by families that don't take it (D294).
1926
+ #[allow(clippy::too_many_arguments)]
1927
+ fn op_as(
1928
+ &mut self,
1929
+ operand: Option<Operand>,
1930
+ table: &Table,
1931
+ row: &[u8],
1932
+ family: &str,
1933
+ qualifier: &[u8],
1934
+ value: usize,
1935
+ f: impl FnOnce(&mut EngineBatch, TableId, FamilyId) -> pigeonhole_engine::Result<()>,
1936
+ ) -> &mut Self {
1937
+ if self.error.is_some() {
1938
+ return self;
1939
+ }
1940
+ self.largest_value = self.largest_value.max(value);
1941
+ let sizes = Sizes::new(row, qualifier, value);
1942
+ let max_value = self.db.max_value;
1943
+ let r = check_table(&self.db, table).and_then(|()| {
1944
+ let fam = match operand {
1945
+ Some(o) => table.core.operand_family_id(family, o)?,
1946
+ None => table.core.family_id(family)?,
1947
+ };
1948
+ f(self.txn.batch(), table.core.info.id, fam)
1949
+ .map_err(|e| size_error(e, sizes, max_value))
1950
+ });
1951
+ if let Err(e) = r {
1952
+ self.error = Some(e);
1953
+ }
1954
+ self
1955
+ }
1956
+
1957
+ /// Submits as an async commit (D210): at once while its shard has room, else as a
1958
+ /// pending commit that submits the transaction once admitted.
1959
+ #[cfg(feature = "async")]
1960
+ pub(crate) fn submit_async(self, durability: Option<Durability>) -> Result<Submitted> {
1961
+ if let Some(e) = self.error {
1962
+ return Err(e);
1963
+ }
1964
+ self.db.check_generation(self.generation)?;
1965
+ let (largest_value, max_value) = (self.largest_value, self.db.max_value);
1966
+ // The transaction runs on the engine it began on: its generation.
1967
+ let watch = self.db.watch_at(self.generation).transaction();
1968
+ self.txn
1969
+ .submit_async(durability.map(Durability::engine))
1970
+ .map(|pending| Submitted {
1971
+ pending,
1972
+ largest_value,
1973
+ max_value,
1974
+ watch: Default::default(),
1975
+ })
1976
+ .map(|s| s.watched(watch))
1977
+ .map_err(|e| watch.refused(commit_error(e, largest_value, max_value)))
1978
+ }
1979
+
1980
+ fn finish(self, durability: Option<Durability>) -> Result<CommitInfo> {
1981
+ if let Some(e) = self.error {
1982
+ return Err(e);
1983
+ }
1984
+ self.db.check_generation(self.generation)?;
1985
+ let (largest, max) = (self.largest_value, self.db.max_value);
1986
+ // A transaction's engine is the one it began on: a recovery running means its
1987
+ // snapshot expires with the swap, so no wait and no retry, only the error's name.
1988
+ let (db, generation) = (Arc::clone(&self.db), self.generation);
1989
+ let result = self
1990
+ .txn
1991
+ .commit(durability.map(Durability::engine))
1992
+ .map(CommitInfo::from_engine)
1993
+ .map_err(|e| {
1994
+ db.after_transaction_commit_closed(generation, commit_error(e, largest, max))
1995
+ });
1996
+ db.txn_counts.count(&result);
1997
+ result
1998
+ }
1999
+
2000
+ /// Reads a cell at the transaction's snapshot and records the read: a commit that writes
2001
+ /// this cell, or deletes its family or row, makes the transaction conflict; one that writes
2002
+ /// another cell of the row doesn't (D275).
2003
+ pub fn get(
2004
+ &mut self,
2005
+ table: &Table,
2006
+ row: &[u8],
2007
+ family: &str,
2008
+ qualifier: &[u8],
2009
+ ) -> Result<Option<CellRef<'_>>> {
2010
+ let read = (|| {
2011
+ check_table(&self.db, table)?;
2012
+ self.db.check_generation(self.generation)?;
2013
+ let family = table.core.family_id_at(self.txn.snapshot(), family)?;
2014
+ Ok(self.txn.get(table.core.info.id, family, row, qualifier)?)
2015
+ })();
2016
+ match read {
2017
+ Ok(cell) => Ok(cell.map(CellRef::owned)),
2018
+ Err(e) => {
2019
+ let e: Error = e;
2020
+ if self.failed_read.is_none() {
2021
+ self.failed_read = Some(e.clone());
2022
+ }
2023
+ Err(e)
2024
+ }
2025
+ }
2026
+ }
2027
+
2028
+ /// The first error one of this transaction's reads failed with.
2029
+ pub(crate) fn failed_read(&self) -> Option<Error> {
2030
+ self.failed_read.clone()
2031
+ }
2032
+
2033
+ /// Reads a row at the transaction's snapshot (the newest version of each column) and
2034
+ /// records a read of each family it covers: `families`, or every family of the table
2035
+ /// when empty (ICR 0062). A family the row has no cell in still counts as read, so a
2036
+ /// commit that adds one conflicts. `None` if the row has no visible cell.
2037
+ pub fn get_row(
2038
+ &mut self,
2039
+ table: &Table,
2040
+ row: &[u8],
2041
+ families: &[&str],
2042
+ ) -> Result<Option<crate::RowRef<'_>>> {
2043
+ let read = (|| {
2044
+ check_table(&self.db, table)?;
2045
+ self.db.check_generation(self.generation)?;
2046
+ // The families as the transaction's snapshot saw them, which name its cells (#892).
2047
+ let snapshot = self.txn.snapshot();
2048
+ let ids = families
2049
+ .iter()
2050
+ .map(|f| table.core.family_id_at(snapshot, f))
2051
+ .collect::<Result<crate::read::FamilyIds>>()?;
2052
+ let mut spec = pigeonhole_engine::ReadSpec::default();
2053
+ spec.versions = 1;
2054
+ let mut buf = crate::cell::RowBuf::new(table.core.info_at(snapshot), 0);
2055
+ let any = self
2056
+ .txn
2057
+ .read_row_into(table.core.info.id, row, &ids, &spec, &mut buf)?;
2058
+ Ok((any, buf))
2059
+ })();
2060
+ match read {
2061
+ Ok((false, _)) => Ok(None),
2062
+ Ok((true, mut buf)) => {
2063
+ buf.key = row.to_vec();
2064
+ Ok(Some(crate::RowRef::owned(buf)))
2065
+ }
2066
+ Err(e) => {
2067
+ let e: Error = e;
2068
+ if self.failed_read.is_none() {
2069
+ self.failed_read = Some(e.clone());
2070
+ }
2071
+ Err(e)
2072
+ }
2073
+ }
2074
+ }
2075
+
2076
+ /// [`get`](Transaction::get) as a future resolving to an owned [`Cell`](crate::Cell): the
2077
+ /// read is recorded at the call (so it counts at commit even if the future is dropped
2078
+ /// unpolled), then made at the transaction's snapshot as
2079
+ /// [`Table::get_async`](crate::Table::get_async) does.
2080
+ #[cfg(feature = "async")]
2081
+ pub fn get_async(
2082
+ &mut self,
2083
+ table: &Table,
2084
+ row: &[u8],
2085
+ family: &str,
2086
+ qualifier: &[u8],
2087
+ ) -> crate::nonblocking::GetFuture {
2088
+ let started = check_table(&self.db, table)
2089
+ .and_then(|()| self.db.check_generation(self.generation))
2090
+ .and_then(|()| table.core.family_id_at(self.txn.snapshot(), family))
2091
+ .map(|family| {
2092
+ self.txn
2093
+ .get_async(table.core.info.id, family, row, qualifier)
2094
+ });
2095
+ crate::nonblocking::GetFuture::new(started)
2096
+ }
2097
+
2098
+ /// Buffers a put.
2099
+ pub fn put(
2100
+ &mut self,
2101
+ table: &Table,
2102
+ row: &[u8],
2103
+ family: &str,
2104
+ qualifier: &[u8],
2105
+ value: &[u8],
2106
+ ) -> &mut Self {
2107
+ self.op(table, row, family, qualifier, value.len(), |b, t, f| {
2108
+ b.put(t, f, row, qualifier, None, ValueRef::Bytes(value))
2109
+ })
2110
+ }
2111
+
2112
+ /// Buffers a column delete.
2113
+ pub fn delete_column(
2114
+ &mut self,
2115
+ table: &Table,
2116
+ row: &[u8],
2117
+ family: &str,
2118
+ qualifier: &[u8],
2119
+ ) -> &mut Self {
2120
+ self.op(table, row, family, qualifier, 0, |b, t, f| {
2121
+ b.delete_column(t, f, row, qualifier, None)
2122
+ })
2123
+ }
2124
+
2125
+ /// Buffers a put at an explicit timestamp (ICR 0062; see [`RowMutation::put_at`]).
2126
+ pub fn put_at(
2127
+ &mut self,
2128
+ table: &Table,
2129
+ row: &[u8],
2130
+ family: &str,
2131
+ qualifier: &[u8],
2132
+ ts: u64,
2133
+ value: &[u8],
2134
+ ) -> &mut Self {
2135
+ self.op(table, row, family, qualifier, value.len(), |b, t, f| {
2136
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::Bytes(value))
2137
+ })
2138
+ }
2139
+
2140
+ /// Buffers a typed `i64` put (in a counter family, it sets the counter).
2141
+ pub fn put_i64(
2142
+ &mut self,
2143
+ table: &Table,
2144
+ row: &[u8],
2145
+ family: &str,
2146
+ qualifier: &[u8],
2147
+ value: i64,
2148
+ ) -> &mut Self {
2149
+ self.op(table, row, family, qualifier, 8, |b, t, f| {
2150
+ b.put(t, f, row, qualifier, None, ValueRef::I64(value))
2151
+ })
2152
+ }
2153
+
2154
+ /// Buffers a [`RowMutation::put_u64`]: a `u64`'s bits as an `i64`.
2155
+ pub fn put_u64(
2156
+ &mut self,
2157
+ table: &Table,
2158
+ row: &[u8],
2159
+ family: &str,
2160
+ qualifier: &[u8],
2161
+ value: u64,
2162
+ ) -> &mut Self {
2163
+ self.put_i64(table, row, family, qualifier, value as i64)
2164
+ }
2165
+
2166
+ /// [`put_u64`](Self::put_u64) at an explicit timestamp.
2167
+ pub fn put_u64_at(
2168
+ &mut self,
2169
+ table: &Table,
2170
+ row: &[u8],
2171
+ family: &str,
2172
+ qualifier: &[u8],
2173
+ ts: u64,
2174
+ value: u64,
2175
+ ) -> &mut Self {
2176
+ self.put_i64_at(table, row, family, qualifier, ts, value as i64)
2177
+ }
2178
+
2179
+ /// Buffers a typed `f64` put.
2180
+ pub fn put_f64(
2181
+ &mut self,
2182
+ table: &Table,
2183
+ row: &[u8],
2184
+ family: &str,
2185
+ qualifier: &[u8],
2186
+ value: f64,
2187
+ ) -> &mut Self {
2188
+ self.op(table, row, family, qualifier, 8, |b, t, f| {
2189
+ b.put(t, f, row, qualifier, None, ValueRef::F64(value))
2190
+ })
2191
+ }
2192
+
2193
+ /// Buffers an add to the counter of a counter family (see [`RowMutation::incr`]). It is
2194
+ /// a blind write: it reads nothing, so it conflicts with nothing unless the transaction
2195
+ /// also read the cell.
2196
+ pub fn incr(
2197
+ &mut self,
2198
+ table: &Table,
2199
+ row: &[u8],
2200
+ family: &str,
2201
+ qualifier: &[u8],
2202
+ delta: i64,
2203
+ ) -> &mut Self {
2204
+ self.op_as(
2205
+ Some(Operand::Incr),
2206
+ table,
2207
+ row,
2208
+ family,
2209
+ qualifier,
2210
+ 8,
2211
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::I64(delta)),
2212
+ )
2213
+ }
2214
+
2215
+ /// Buffers an input to the cell of an aggregate family (see
2216
+ /// [`RowMutation::aggregate`]). Like [`incr`](Self::incr), a blind write.
2217
+ pub fn aggregate(
2218
+ &mut self,
2219
+ table: &Table,
2220
+ row: &[u8],
2221
+ family: &str,
2222
+ qualifier: &[u8],
2223
+ value: i64,
2224
+ ) -> &mut Self {
2225
+ self.op_as(
2226
+ Some(Operand::Aggregate),
2227
+ table,
2228
+ row,
2229
+ family,
2230
+ qualifier,
2231
+ 8,
2232
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::I64(value)),
2233
+ )
2234
+ }
2235
+
2236
+ /// Buffers an input to the bucket at `ts` of an aggregate family (see
2237
+ /// [`RowMutation::aggregate_at`]).
2238
+ pub fn aggregate_at(
2239
+ &mut self,
2240
+ table: &Table,
2241
+ row: &[u8],
2242
+ family: &str,
2243
+ qualifier: &[u8],
2244
+ ts: u64,
2245
+ value: i64,
2246
+ ) -> &mut Self {
2247
+ self.op_as(
2248
+ Some(Operand::Aggregate),
2249
+ table,
2250
+ row,
2251
+ family,
2252
+ qualifier,
2253
+ 8,
2254
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(value)),
2255
+ )
2256
+ }
2257
+
2258
+ /// [`RowMutation::aggregate_u64`]: a `u64` input to a bitwise aggregate family.
2259
+ pub fn aggregate_u64(
2260
+ &mut self,
2261
+ table: &Table,
2262
+ row: &[u8],
2263
+ family: &str,
2264
+ qualifier: &[u8],
2265
+ value: u64,
2266
+ ) -> &mut Self {
2267
+ self.op_as(
2268
+ Some(Operand::U64),
2269
+ table,
2270
+ row,
2271
+ family,
2272
+ qualifier,
2273
+ 8,
2274
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::I64(value as i64)),
2275
+ )
2276
+ }
2277
+
2278
+ /// [`RowMutation::aggregate_u64_at`].
2279
+ pub fn aggregate_u64_at(
2280
+ &mut self,
2281
+ table: &Table,
2282
+ row: &[u8],
2283
+ family: &str,
2284
+ qualifier: &[u8],
2285
+ ts: u64,
2286
+ value: u64,
2287
+ ) -> &mut Self {
2288
+ self.op_as(
2289
+ Some(Operand::U64),
2290
+ table,
2291
+ row,
2292
+ family,
2293
+ qualifier,
2294
+ 8,
2295
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(value as i64)),
2296
+ )
2297
+ }
2298
+
2299
+ /// [`RowMutation::aggregate_f64`]: an `f64` input to an `f64` aggregate family.
2300
+ pub fn aggregate_f64(
2301
+ &mut self,
2302
+ table: &Table,
2303
+ row: &[u8],
2304
+ family: &str,
2305
+ qualifier: &[u8],
2306
+ value: f64,
2307
+ ) -> &mut Self {
2308
+ self.op_as(
2309
+ Some(Operand::F64),
2310
+ table,
2311
+ row,
2312
+ family,
2313
+ qualifier,
2314
+ 8,
2315
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::F64(value)),
2316
+ )
2317
+ }
2318
+
2319
+ /// [`RowMutation::aggregate_f64_at`].
2320
+ pub fn aggregate_f64_at(
2321
+ &mut self,
2322
+ table: &Table,
2323
+ row: &[u8],
2324
+ family: &str,
2325
+ qualifier: &[u8],
2326
+ ts: u64,
2327
+ value: f64,
2328
+ ) -> &mut Self {
2329
+ self.op_as(
2330
+ Some(Operand::F64),
2331
+ table,
2332
+ row,
2333
+ family,
2334
+ qualifier,
2335
+ 8,
2336
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::F64(value)),
2337
+ )
2338
+ }
2339
+
2340
+ /// [`RowMutation::aggregate_bytes`]: a bytes element for an HLL or bloom family.
2341
+ pub fn aggregate_bytes(
2342
+ &mut self,
2343
+ table: &Table,
2344
+ row: &[u8],
2345
+ family: &str,
2346
+ qualifier: &[u8],
2347
+ value: &[u8],
2348
+ ) -> &mut Self {
2349
+ self.op_as(
2350
+ Some(Operand::Bytes),
2351
+ table,
2352
+ row,
2353
+ family,
2354
+ qualifier,
2355
+ value.len(),
2356
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::Bytes(value)),
2357
+ )
2358
+ }
2359
+
2360
+ /// [`RowMutation::aggregate_bytes_at`].
2361
+ pub fn aggregate_bytes_at(
2362
+ &mut self,
2363
+ table: &Table,
2364
+ row: &[u8],
2365
+ family: &str,
2366
+ qualifier: &[u8],
2367
+ ts: u64,
2368
+ value: &[u8],
2369
+ ) -> &mut Self {
2370
+ self.op_as(
2371
+ Some(Operand::Bytes),
2372
+ table,
2373
+ row,
2374
+ family,
2375
+ qualifier,
2376
+ value.len(),
2377
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(value)),
2378
+ )
2379
+ }
2380
+
2381
+ /// [`RowMutation::set_add`].
2382
+ pub fn set_add(
2383
+ &mut self,
2384
+ table: &Table,
2385
+ row: &[u8],
2386
+ family: &str,
2387
+ qualifier: &[u8],
2388
+ x: u32,
2389
+ ) -> &mut Self {
2390
+ let operand = set_operand(x, true);
2391
+ self.op_as(
2392
+ Some(Operand::Set),
2393
+ table,
2394
+ row,
2395
+ family,
2396
+ qualifier,
2397
+ operand.len(),
2398
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::Bytes(&operand)),
2399
+ )
2400
+ }
2401
+
2402
+ /// [`RowMutation::set_add_at`].
2403
+ pub fn set_add_at(
2404
+ &mut self,
2405
+ table: &Table,
2406
+ row: &[u8],
2407
+ family: &str,
2408
+ qualifier: &[u8],
2409
+ ts: u64,
2410
+ x: u32,
2411
+ ) -> &mut Self {
2412
+ let operand = set_operand(x, true);
2413
+ self.op_as(
2414
+ Some(Operand::Set),
2415
+ table,
2416
+ row,
2417
+ family,
2418
+ qualifier,
2419
+ operand.len(),
2420
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(&operand)),
2421
+ )
2422
+ }
2423
+
2424
+ /// [`RowMutation::set_remove`].
2425
+ pub fn set_remove(
2426
+ &mut self,
2427
+ table: &Table,
2428
+ row: &[u8],
2429
+ family: &str,
2430
+ qualifier: &[u8],
2431
+ x: u32,
2432
+ ) -> &mut Self {
2433
+ let operand = set_operand(x, false);
2434
+ self.op_as(
2435
+ Some(Operand::Set),
2436
+ table,
2437
+ row,
2438
+ family,
2439
+ qualifier,
2440
+ operand.len(),
2441
+ |b, t, f| b.merge(t, f, row, qualifier, ValueRef::Bytes(&operand)),
2442
+ )
2443
+ }
2444
+
2445
+ /// [`RowMutation::set_remove_at`].
2446
+ pub fn set_remove_at(
2447
+ &mut self,
2448
+ table: &Table,
2449
+ row: &[u8],
2450
+ family: &str,
2451
+ qualifier: &[u8],
2452
+ ts: u64,
2453
+ x: u32,
2454
+ ) -> &mut Self {
2455
+ let operand = set_operand(x, false);
2456
+ self.op_as(
2457
+ Some(Operand::Set),
2458
+ table,
2459
+ row,
2460
+ family,
2461
+ qualifier,
2462
+ operand.len(),
2463
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::Bytes(&operand)),
2464
+ )
2465
+ }
2466
+
2467
+ /// [`put_i64`](Self::put_i64) at an explicit timestamp.
2468
+ pub fn put_i64_at(
2469
+ &mut self,
2470
+ table: &Table,
2471
+ row: &[u8],
2472
+ family: &str,
2473
+ qualifier: &[u8],
2474
+ ts: u64,
2475
+ value: i64,
2476
+ ) -> &mut Self {
2477
+ self.op(table, row, family, qualifier, 8, |b, t, f| {
2478
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::I64(value))
2479
+ })
2480
+ }
2481
+
2482
+ /// [`put_f64`](Self::put_f64) at an explicit timestamp.
2483
+ pub fn put_f64_at(
2484
+ &mut self,
2485
+ table: &Table,
2486
+ row: &[u8],
2487
+ family: &str,
2488
+ qualifier: &[u8],
2489
+ ts: u64,
2490
+ value: f64,
2491
+ ) -> &mut Self {
2492
+ self.op(table, row, family, qualifier, 8, |b, t, f| {
2493
+ b.put(t, f, row, qualifier, Some(ts), ValueRef::F64(value))
2494
+ })
2495
+ }
2496
+
2497
+ /// Puts the `f32` vector `value` into a vector family (D303), as
2498
+ /// [`RowMutation::put_vector_f32`] does.
2499
+ pub fn put_vector_f32(
2500
+ &mut self,
2501
+ table: &Table,
2502
+ row: &[u8],
2503
+ family: &str,
2504
+ qualifier: &[u8],
2505
+ value: &[f32],
2506
+ ) -> &mut Self {
2507
+ self.vector(table, row, family, qualifier, None, Query::F32(value))
2508
+ }
2509
+
2510
+ /// [`put_vector_f32`](Self::put_vector_f32) at an explicit timestamp.
2511
+ pub fn put_vector_f32_at(
2512
+ &mut self,
2513
+ table: &Table,
2514
+ row: &[u8],
2515
+ family: &str,
2516
+ qualifier: &[u8],
2517
+ ts: u64,
2518
+ value: &[f32],
2519
+ ) -> &mut Self {
2520
+ self.vector(table, row, family, qualifier, Some(ts), Query::F32(value))
2521
+ }
2522
+
2523
+ /// [`put_vector_f32`](Self::put_vector_f32) for an `i8` vector family.
2524
+ pub fn put_vector_i8(
2525
+ &mut self,
2526
+ table: &Table,
2527
+ row: &[u8],
2528
+ family: &str,
2529
+ qualifier: &[u8],
2530
+ value: &[i8],
2531
+ ) -> &mut Self {
2532
+ self.vector(table, row, family, qualifier, None, Query::I8(value))
2533
+ }
2534
+
2535
+ /// [`put_vector_i8`](Self::put_vector_i8) at an explicit timestamp.
2536
+ pub fn put_vector_i8_at(
2537
+ &mut self,
2538
+ table: &Table,
2539
+ row: &[u8],
2540
+ family: &str,
2541
+ qualifier: &[u8],
2542
+ ts: u64,
2543
+ value: &[i8],
2544
+ ) -> &mut Self {
2545
+ self.vector(table, row, family, qualifier, Some(ts), Query::I8(value))
2546
+ }
2547
+
2548
+ /// [`put_vector_f32`](Self::put_vector_f32) for a bit vector family (bits packed eight to
2549
+ /// a byte, least significant first).
2550
+ pub fn put_vector_bits(
2551
+ &mut self,
2552
+ table: &Table,
2553
+ row: &[u8],
2554
+ family: &str,
2555
+ qualifier: &[u8],
2556
+ value: &[u8],
2557
+ ) -> &mut Self {
2558
+ self.vector(table, row, family, qualifier, None, Query::Bits(value))
2559
+ }
2560
+
2561
+ /// [`put_vector_bits`](Self::put_vector_bits) at an explicit timestamp.
2562
+ pub fn put_vector_bits_at(
2563
+ &mut self,
2564
+ table: &Table,
2565
+ row: &[u8],
2566
+ family: &str,
2567
+ qualifier: &[u8],
2568
+ ts: u64,
2569
+ value: &[u8],
2570
+ ) -> &mut Self {
2571
+ self.vector(table, row, family, qualifier, Some(ts), Query::Bits(value))
2572
+ }
2573
+
2574
+ /// Puts a vector into an `f16` vector family (IEEE binary16 bit patterns) (#1263), as [`RowMutation::put_vector_f16`] does.
2575
+ pub fn put_vector_f16(
2576
+ &mut self,
2577
+ table: &Table,
2578
+ row: &[u8],
2579
+ family: &str,
2580
+ qualifier: &[u8],
2581
+ value: &[u16],
2582
+ ) -> &mut Self {
2583
+ self.vector(table, row, family, qualifier, None, Query::F16(value))
2584
+ }
2585
+
2586
+ /// [`put_vector_f16`](Self::put_vector_f16) at an explicit timestamp.
2587
+ pub fn put_vector_f16_at(
2588
+ &mut self,
2589
+ table: &Table,
2590
+ row: &[u8],
2591
+ family: &str,
2592
+ qualifier: &[u8],
2593
+ ts: u64,
2594
+ value: &[u16],
2595
+ ) -> &mut Self {
2596
+ self.vector(table, row, family, qualifier, Some(ts), Query::F16(value))
2597
+ }
2598
+
2599
+ /// Puts a vector into a `bf16` vector family (bfloat16 bit patterns) (#1263), as [`RowMutation::put_vector_bf16`] does.
2600
+ pub fn put_vector_bf16(
2601
+ &mut self,
2602
+ table: &Table,
2603
+ row: &[u8],
2604
+ family: &str,
2605
+ qualifier: &[u8],
2606
+ value: &[u16],
2607
+ ) -> &mut Self {
2608
+ self.vector(table, row, family, qualifier, None, Query::BF16(value))
2609
+ }
2610
+
2611
+ /// [`put_vector_bf16`](Self::put_vector_bf16) at an explicit timestamp.
2612
+ pub fn put_vector_bf16_at(
2613
+ &mut self,
2614
+ table: &Table,
2615
+ row: &[u8],
2616
+ family: &str,
2617
+ qualifier: &[u8],
2618
+ ts: u64,
2619
+ value: &[u16],
2620
+ ) -> &mut Self {
2621
+ self.vector(table, row, family, qualifier, Some(ts), Query::BF16(value))
2622
+ }
2623
+
2624
+ /// A vector put, checked against the family's spec when it is built.
2625
+ fn vector(
2626
+ &mut self,
2627
+ table: &Table,
2628
+ row: &[u8],
2629
+ family: &str,
2630
+ qualifier: &[u8],
2631
+ ts: Option<u64>,
2632
+ q: Query<'_>,
2633
+ ) -> &mut Self {
2634
+ let mut buf = Vec::new();
2635
+ match table.core.vector_payload(family, q, &mut buf) {
2636
+ Err(e) => {
2637
+ if self.error.is_none() {
2638
+ self.error = Some(e);
2639
+ }
2640
+ self
2641
+ }
2642
+ Ok(p) => self.op(table, row, family, qualifier, buf.len(), |b, t, f| {
2643
+ b.put(t, f, row, qualifier, ts, vector_value(&p, &buf))
2644
+ }),
2645
+ }
2646
+ }
2647
+
2648
+ /// Buffers an add to the bucket at `ts` of a counter family (see
2649
+ /// [`RowMutation::incr_at`]).
2650
+ pub fn incr_at(
2651
+ &mut self,
2652
+ table: &Table,
2653
+ row: &[u8],
2654
+ family: &str,
2655
+ qualifier: &[u8],
2656
+ ts: u64,
2657
+ delta: i64,
2658
+ ) -> &mut Self {
2659
+ self.op_as(
2660
+ Some(Operand::Incr),
2661
+ table,
2662
+ row,
2663
+ family,
2664
+ qualifier,
2665
+ 8,
2666
+ |b, t, f| b.merge_at(t, f, row, qualifier, ts, ValueRef::I64(delta)),
2667
+ )
2668
+ }
2669
+
2670
+ /// Buffers an untyped operand for the family's merge operator (see
2671
+ /// [`RowMutation::merge`]).
2672
+ pub fn merge(
2673
+ &mut self,
2674
+ table: &Table,
2675
+ row: &[u8],
2676
+ family: &str,
2677
+ qualifier: &[u8],
2678
+ operand: &[u8],
2679
+ ) -> &mut Self {
2680
+ self.op(table, row, family, qualifier, operand.len(), |b, t, f| {
2681
+ b.merge(t, f, row, qualifier, ValueRef::Bytes(operand))
2682
+ })
2683
+ }
2684
+
2685
+ /// Buffers the delete of one version.
2686
+ pub fn delete_cell(
2687
+ &mut self,
2688
+ table: &Table,
2689
+ row: &[u8],
2690
+ family: &str,
2691
+ qualifier: &[u8],
2692
+ ts: u64,
2693
+ ) -> &mut Self {
2694
+ self.op(table, row, family, qualifier, 0, |b, t, f| {
2695
+ b.delete_cell(t, f, row, qualifier, ts)
2696
+ })
2697
+ }
2698
+
2699
+ /// Buffers the delete of every column of a family in a row.
2700
+ pub fn delete_family(&mut self, table: &Table, row: &[u8], family: &str) -> &mut Self {
2701
+ self.op(table, row, family, &[], 0, |b, t, f| {
2702
+ b.delete_family(t, f, row, None)
2703
+ })
2704
+ }
2705
+
2706
+ /// Buffers the delete of a whole row.
2707
+ pub fn delete_row(&mut self, table: &Table, row: &[u8]) -> &mut Self {
2708
+ if self.error.is_some() {
2709
+ return self;
2710
+ }
2711
+ let r = check_table(&self.db, table).and_then(|()| {
2712
+ self.txn
2713
+ .batch()
2714
+ .delete_row(table.core.info.id, row, None)
2715
+ .map_err(|e| size_error(e, Sizes::new(row, &[], 0), 0))
2716
+ });
2717
+ if let Err(e) = r {
2718
+ self.error = Some(e);
2719
+ }
2720
+ self
2721
+ }
2722
+
2723
+ /// Commits with the writer default; fails with
2724
+ /// [`ErrorCode::Conflict`](crate::ErrorCode::Conflict) on a conflicting commit.
2725
+ ///
2726
+ /// A transaction that wrote nothing commits at once and never conflicts: its reads all
2727
+ /// come from one snapshot, so it is serializable there (ICR 0060). `Ok` then means what
2728
+ /// it read was consistent **as of its snapshot**, not that it was still current when
2729
+ /// `commit` ran: to confirm a value still holds at commit, write something in the
2730
+ /// transaction (it is then validated) or use
2731
+ /// [`RowMutation::commit_if`](crate::RowMutation::commit_if) on the cell. Its
2732
+ /// [`CommitInfo`] names the snapshot's seqno (not a seqno of its own, so other commits
2733
+ /// may share it) and [`Durability::None`]: it wrote nothing, and what it read is visible
2734
+ /// but not necessarily durable, as for any snapshot. For reads of only durable data, read
2735
+ /// at [`Pigeonhole::durable_snapshot`](crate::Pigeonhole::durable_snapshot).
2736
+ pub fn commit(self) -> Result<CommitInfo> {
2737
+ self.finish(None)
2738
+ }
2739
+
2740
+ /// Commits with `durability`.
2741
+ pub fn commit_with(self, durability: Durability) -> Result<CommitInfo> {
2742
+ self.finish(Some(durability))
2743
+ }
2744
+ }
2745
+
2746
+ /// The counter cells a [`RowMutation::commit_returning`] incremented or set, after its
2747
+ /// commit (D314).
2748
+ #[derive(Debug, Clone)]
2749
+ #[non_exhaustive]
2750
+ pub struct Incremented {
2751
+ /// The commit.
2752
+ pub info: CommitInfo,
2753
+ table: Arc<pigeonhole_engine::TableInfo>,
2754
+ cells: Vec<IncrementedCell>,
2755
+ }
2756
+
2757
+ /// One cell of an [`Incremented`]: family, qualifier, timestamp, value.
2758
+ type IncrementedCell = (FamilyId, Vec<u8>, u64, Result<Option<i64>>);
2759
+
2760
+ impl Incremented {
2761
+ pub(crate) fn new(
2762
+ info: CommitInfo,
2763
+ table: &Arc<pigeonhole_engine::TableInfo>,
2764
+ cells: Vec<pigeonhole_engine::Returned>,
2765
+ ) -> Self {
2766
+ Self {
2767
+ info,
2768
+ table: Arc::clone(table),
2769
+ cells: cells
2770
+ .into_iter()
2771
+ .map(|c| (c.family, c.qualifier, c.ts, c.value.map_err(Error::from)))
2772
+ .collect(),
2773
+ }
2774
+ }
2775
+
2776
+ /// The counter `incr` (or `put_i64`) wrote in `family` at `qualifier`, after the commit.
2777
+ ///
2778
+ /// `Ok(None)` only if a read at the commit sees no cell. An `Err` is the error that kept
2779
+ /// the value from being read once the commit had applied: **the commit succeeded**, so
2780
+ /// don't retry it. `InvalidArgument` if the commit didn't write that counter.
2781
+ pub fn value(&self, family: &str, qualifier: &[u8]) -> Result<Option<i64>> {
2782
+ self.value_at(family, qualifier, 0)
2783
+ }
2784
+
2785
+ /// The bucket `incr_at(family, qualifier, ts, ..)` incremented, after the commit:
2786
+ /// `Ok(None)` if the bucket was already past the family's TTL at the commit's timestamp.
2787
+ /// Errors as [`value`](Self::value).
2788
+ pub fn value_at(&self, family: &str, qualifier: &[u8], ts: u64) -> Result<Option<i64>> {
2789
+ let id = self.table.family(family).map(|f| f.id);
2790
+ self.cells
2791
+ .iter()
2792
+ .find(|(f, q, t, _)| Some(*f) == id && q == qualifier && *t == ts)
2793
+ .map(|c| c.3.clone())
2794
+ .unwrap_or_else(|| {
2795
+ Err(Error::new(
2796
+ crate::ErrorCode::InvalidArgument,
2797
+ format!("the commit did not increment {family}:{qualifier:?} at {ts}"),
2798
+ ))
2799
+ })
2800
+ }
2801
+
2802
+ /// Every cell, as `(family, qualifier, ts, value)`, in the order the mutation first
2803
+ /// wrote each. `ts` is 0 for a plain counter.
2804
+ pub fn iter(&self) -> impl Iterator<Item = (&str, &[u8], u64, Result<Option<i64>>)> {
2805
+ self.cells.iter().map(|(f, q, ts, v)| {
2806
+ let name = self
2807
+ .table
2808
+ .families
2809
+ .iter()
2810
+ .find(|x| x.id == *f)
2811
+ .map_or("", |x| x.name.as_str());
2812
+ (name, q.as_slice(), *ts, v.clone())
2813
+ })
2814
+ }
2815
+ }