couchbase 3.8.2 → 3.9.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 (473) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  3. data/ext/CMakeLists.txt +16 -1
  4. data/ext/cache/cpm/{CPM_0.42.0.cmake → CPM_0.43.1.cmake} +18 -2
  5. data/ext/cache/extconf_include.rb +6 -6
  6. data/ext/cache/mozilla-ca-bundle.crt +121 -55
  7. data/ext/cache/mozilla-ca-bundle.sha256 +1 -1
  8. data/ext/couchbase/CMakeLists.txt +130 -21
  9. data/ext/couchbase/cmake/APKBUILD.in +25 -4
  10. data/ext/couchbase/cmake/Bundler.cmake +143 -34
  11. data/ext/couchbase/cmake/CPM.cmake +126 -12
  12. data/ext/couchbase/cmake/Cache.cmake +7 -1
  13. data/ext/couchbase/cmake/CompilerOptions.cmake +1 -1
  14. data/ext/couchbase/cmake/CompilerWarnings.cmake +17 -6
  15. data/ext/couchbase/cmake/GrpcProtobuf.cmake +481 -0
  16. data/ext/couchbase/cmake/OpenSSL.cmake +10 -3
  17. data/ext/couchbase/cmake/Packaging.cmake +519 -65
  18. data/ext/couchbase/cmake/Protostellar.cmake +250 -0
  19. data/ext/couchbase/cmake/Sanitizers.cmake +61 -50
  20. data/ext/couchbase/cmake/StaticAnalyzers.cmake +16 -5
  21. data/ext/couchbase/cmake/TestFramework.cmake +283 -0
  22. data/ext/couchbase/cmake/TestFrameworkAddTests.cmake +51 -0
  23. data/ext/couchbase/cmake/Testing.cmake +27 -9
  24. data/ext/couchbase/cmake/ThirdPartyDependencies.cmake +141 -8
  25. data/ext/couchbase/cmake/VersionInfo.cmake +50 -0
  26. data/ext/couchbase/cmake/build_config.hxx.in +2 -1
  27. data/ext/couchbase/cmake/couchbase-cxx-client.spec.in +101 -23
  28. data/ext/couchbase/cmake/couchbase_cxx_client_static-config.cmake.in +7 -0
  29. data/ext/couchbase/cmake/couchbase_cxx_client_static.pc.in +2 -0
  30. data/ext/couchbase/cmake/gRPC_Generate.cmake +58 -0
  31. data/ext/couchbase/cmake/protobuf_Generate.cmake +69 -0
  32. data/ext/couchbase/cmake/require-git-checkout.cmake +25 -0
  33. data/ext/couchbase/cmake/tarball_glob.txt +49 -0
  34. data/ext/couchbase/core/agent_group.cxx +0 -8
  35. data/ext/couchbase/core/agent_group.hxx +0 -4
  36. data/ext/couchbase/core/analytics_stream.cxx +314 -0
  37. data/ext/couchbase/core/analytics_stream.hxx +129 -0
  38. data/ext/couchbase/core/analytics_stream_component.cxx +245 -0
  39. data/ext/couchbase/core/analytics_stream_component.hxx +67 -0
  40. data/ext/couchbase/core/app_telemetry_meter.cxx +25 -3
  41. data/ext/couchbase/core/app_telemetry_meter.hxx +77 -0
  42. data/ext/couchbase/core/app_telemetry_reporter.cxx +7 -6
  43. data/ext/couchbase/core/bucket.cxx +381 -87
  44. data/ext/couchbase/core/bucket.hxx +105 -25
  45. data/ext/couchbase/core/bucket_unit_test_api.hxx +57 -0
  46. data/ext/couchbase/core/capella.hxx +91 -0
  47. data/ext/couchbase/core/cluster.cxx +1554 -398
  48. data/ext/couchbase/core/cluster.hxx +39 -8
  49. data/ext/couchbase/core/cluster_agent.cxx +0 -8
  50. data/ext/couchbase/core/cluster_agent.hxx +0 -4
  51. data/ext/couchbase/core/cluster_options.hxx +26 -3
  52. data/ext/couchbase/core/collections_component.cxx +39 -15
  53. data/ext/couchbase/core/config_profiles.cxx +1 -1
  54. data/ext/couchbase/core/crud_component.cxx +2 -2
  55. data/ext/couchbase/core/crud_options.hxx +34 -0
  56. data/ext/couchbase/core/crypto/cbcrypto.cc +18 -13
  57. data/ext/couchbase/core/document_id_redaction.hxx +81 -0
  58. data/ext/couchbase/core/error_context/base_error_context.hxx +7 -6
  59. data/ext/couchbase/core/error_context/key_value.cxx +25 -2
  60. data/ext/couchbase/core/error_context/key_value.hxx +60 -33
  61. data/ext/couchbase/core/error_context/key_value_error_context.hxx +16 -15
  62. data/ext/couchbase/core/error_context/search.hxx +5 -0
  63. data/ext/couchbase/core/error_context/search_json.hxx +3 -0
  64. data/ext/couchbase/core/error_context/subdocument_error_context.hxx +19 -18
  65. data/ext/couchbase/core/error_context/view.hxx +5 -0
  66. data/ext/couchbase/core/free_form_http_request.cxx +237 -4
  67. data/ext/couchbase/core/free_form_http_request.hxx +41 -8
  68. data/ext/couchbase/core/http_component.cxx +300 -284
  69. data/ext/couchbase/core/http_component.hxx +0 -4
  70. data/ext/couchbase/core/impl/analytics.cxx +38 -5
  71. data/ext/couchbase/core/impl/analytics.hxx +34 -0
  72. data/ext/couchbase/core/impl/bootstrap_error.hxx +0 -3
  73. data/ext/couchbase/core/impl/collection.cxx +215 -202
  74. data/ext/couchbase/core/impl/collection_manager.cxx +1 -1
  75. data/ext/couchbase/core/impl/dns_srv_tracker.cxx +45 -18
  76. data/ext/couchbase/core/impl/error.cxx +22 -2
  77. data/ext/couchbase/core/impl/internal_analytics_stream_result.hxx +111 -0
  78. data/ext/couchbase/core/impl/internal_query_stream_result.hxx +110 -0
  79. data/ext/couchbase/core/impl/invoke_with_node_id.hxx +15 -7
  80. data/ext/couchbase/core/impl/key_value_error_category.cxx +6 -0
  81. data/ext/couchbase/core/impl/lookup_in_replica.cxx +10 -10
  82. data/ext/couchbase/core/impl/lookup_in_replica.hxx +4 -4
  83. data/ext/couchbase/core/impl/node_id.cxx +49 -13
  84. data/ext/couchbase/core/impl/observability_recorder.cxx +12 -2
  85. data/ext/couchbase/core/impl/observe_poll.cxx +63 -23
  86. data/ext/couchbase/core/impl/public_analytics_stream_result.cxx +372 -0
  87. data/ext/couchbase/core/impl/public_bucket.cxx +48 -2
  88. data/ext/couchbase/core/impl/public_cluster.cxx +229 -42
  89. data/ext/couchbase/core/impl/public_query_stream_result.cxx +380 -0
  90. data/ext/couchbase/core/impl/public_transaction_get_multi_replicas_from_preferred_server_group_result.cxx +42 -0
  91. data/ext/couchbase/core/impl/public_transaction_get_multi_result.cxx +42 -0
  92. data/ext/couchbase/core/impl/query.cxx +76 -7
  93. data/ext/couchbase/core/impl/query.hxx +36 -0
  94. data/ext/couchbase/core/impl/query_index_manager.cxx +54 -1
  95. data/ext/couchbase/core/impl/replica_utils.cxx +101 -0
  96. data/ext/couchbase/core/impl/replica_utils.hxx +64 -0
  97. data/ext/couchbase/core/impl/resolve_node_id.hxx +125 -0
  98. data/ext/couchbase/core/impl/scope.cxx +70 -0
  99. data/ext/couchbase/core/impl/search.cxx +31 -1
  100. data/ext/couchbase/core/impl/transactions.cxx +130 -0
  101. data/ext/couchbase/core/impl/wait_until_ready.cxx +439 -0
  102. data/ext/couchbase/core/impl/wait_until_ready.hxx +110 -0
  103. data/ext/couchbase/core/impl/with_bucket_config_or_timeout.hxx +180 -0
  104. data/ext/couchbase/core/impl/with_cancellation.hxx +11 -3
  105. data/ext/couchbase/core/io/configuration_belongs_to_session.hxx +1 -2
  106. data/ext/couchbase/core/io/dns_client.cxx +122 -45
  107. data/ext/couchbase/core/io/dns_codec.hxx +21 -21
  108. data/ext/couchbase/core/io/dns_config.cxx +21 -6
  109. data/ext/couchbase/core/io/http_command.hxx +149 -121
  110. data/ext/couchbase/core/io/http_error.hxx +107 -0
  111. data/ext/couchbase/core/io/http_parser.cxx +4 -0
  112. data/ext/couchbase/core/io/http_session.cxx +606 -154
  113. data/ext/couchbase/core/io/http_session.hxx +147 -30
  114. data/ext/couchbase/core/io/http_session_manager.hxx +329 -382
  115. data/ext/couchbase/core/io/http_streaming_parser.cxx +4 -0
  116. data/ext/couchbase/core/io/http_streaming_response.cxx +328 -43
  117. data/ext/couchbase/core/io/http_streaming_response.hxx +37 -3
  118. data/ext/couchbase/core/io/mcbp_buffer_pool.hxx +122 -0
  119. data/ext/couchbase/core/io/mcbp_command.hxx +150 -51
  120. data/ext/couchbase/core/io/mcbp_command_id.hxx +45 -0
  121. data/ext/couchbase/core/io/mcbp_message.cxx +9 -1
  122. data/ext/couchbase/core/io/mcbp_message.hxx +19 -0
  123. data/ext/couchbase/core/io/mcbp_output_queue.hxx +150 -0
  124. data/ext/couchbase/core/io/mcbp_parser.cxx +24 -7
  125. data/ext/couchbase/core/io/mcbp_session.cxx +309 -301
  126. data/ext/couchbase/core/io/mcbp_session.hxx +27 -18
  127. data/ext/couchbase/core/io/opaque_ring_table.hxx +145 -0
  128. data/ext/couchbase/core/io/retry_orchestrator.hxx +6 -5
  129. data/ext/couchbase/core/io/stream_deadline.hxx +50 -0
  130. data/ext/couchbase/core/io/streams.cxx +151 -21
  131. data/ext/couchbase/core/io/streams.hxx +48 -1
  132. data/ext/couchbase/core/logger/logger.cxx +36 -0
  133. data/ext/couchbase/core/logger/logger.hxx +46 -6
  134. data/ext/couchbase/core/logger/redaction.hxx +503 -0
  135. data/ext/couchbase/core/management/eventing_status.hxx +10 -0
  136. data/ext/couchbase/core/management/eventing_status_json.hxx +4 -0
  137. data/ext/couchbase/core/mcbp/big_endian.cxx +1 -1
  138. data/ext/couchbase/core/mcbp/codec.cxx +27 -18
  139. data/ext/couchbase/core/mcbp/operation_queue.cxx +2 -2
  140. data/ext/couchbase/core/mcbp/packet.hxx +2 -2
  141. data/ext/couchbase/core/mcbp/queue_request.cxx +23 -6
  142. data/ext/couchbase/core/mcbp/queue_request.hxx +21 -0
  143. data/ext/couchbase/core/meta/features.hxx +13 -0
  144. data/ext/couchbase/core/meta/version.cxx +6 -3
  145. data/ext/couchbase/core/metrics/logging_meter.cxx +5 -10
  146. data/ext/couchbase/core/metrics/meter_wrapper.cxx +63 -33
  147. data/ext/couchbase/core/metrics/meter_wrapper.hxx +55 -3
  148. data/ext/couchbase/core/operations/analytics_response_parsing.cxx +177 -0
  149. data/ext/couchbase/core/operations/analytics_response_parsing.hxx +55 -0
  150. data/ext/couchbase/core/operations/document_analytics.cxx +48 -130
  151. data/ext/couchbase/core/operations/document_analytics.hxx +14 -2
  152. data/ext/couchbase/core/operations/document_get_all_replicas.hxx +15 -7
  153. data/ext/couchbase/core/operations/document_get_any_replica.hxx +19 -8
  154. data/ext/couchbase/core/operations/document_get_projected.cxx +1 -1
  155. data/ext/couchbase/core/{impl/get_replica.cxx → operations/document_get_replica.cxx} +21 -3
  156. data/ext/couchbase/core/{impl/get_replica.hxx → operations/document_get_replica.hxx} +31 -4
  157. data/ext/couchbase/core/operations/document_lookup_in.cxx +10 -10
  158. data/ext/couchbase/core/operations/document_lookup_in_all_replicas.hxx +228 -198
  159. data/ext/couchbase/core/operations/document_lookup_in_any_replica.hxx +215 -217
  160. data/ext/couchbase/core/operations/document_query.cxx +108 -221
  161. data/ext/couchbase/core/operations/document_query.hxx +18 -4
  162. data/ext/couchbase/core/operations/document_search.cxx +52 -8
  163. data/ext/couchbase/core/operations/document_search.hxx +3 -0
  164. data/ext/couchbase/core/operations/document_view.cxx +3 -3
  165. data/ext/couchbase/core/operations/management/analytics_dataset_create.cxx +15 -8
  166. data/ext/couchbase/core/operations/management/analytics_dataset_create.hxx +4 -0
  167. data/ext/couchbase/core/operations/management/analytics_dataset_drop.cxx +11 -6
  168. data/ext/couchbase/core/operations/management/analytics_dataset_get_all.cxx +3 -2
  169. data/ext/couchbase/core/operations/management/analytics_dataverse_create.cxx +10 -5
  170. data/ext/couchbase/core/operations/management/analytics_dataverse_drop.cxx +10 -5
  171. data/ext/couchbase/core/operations/management/analytics_get_pending_mutations.cxx +2 -1
  172. data/ext/couchbase/core/operations/management/analytics_index_create.cxx +33 -8
  173. data/ext/couchbase/core/operations/management/analytics_index_drop.cxx +12 -7
  174. data/ext/couchbase/core/operations/management/analytics_index_get_all.cxx +3 -2
  175. data/ext/couchbase/core/operations/management/analytics_link_connect.cxx +11 -6
  176. data/ext/couchbase/core/operations/management/analytics_link_create.cxx +3 -3
  177. data/ext/couchbase/core/operations/management/analytics_link_disconnect.cxx +10 -4
  178. data/ext/couchbase/core/operations/management/analytics_link_drop.cxx +6 -4
  179. data/ext/couchbase/core/operations/management/analytics_link_get_all.cxx +4 -3
  180. data/ext/couchbase/core/operations/management/analytics_link_replace.cxx +3 -3
  181. data/ext/couchbase/core/operations/management/analytics_link_utils.hxx +1 -1
  182. data/ext/couchbase/core/operations/management/change_password.cxx +2 -0
  183. data/ext/couchbase/core/operations/management/collection_drop.cxx +5 -1
  184. data/ext/couchbase/core/operations/management/error_utils.cxx +59 -5
  185. data/ext/couchbase/core/operations/management/error_utils.hxx +29 -1
  186. data/ext/couchbase/core/operations/management/eventing_deploy_function.cxx +9 -3
  187. data/ext/couchbase/core/operations/management/eventing_drop_function.cxx +8 -3
  188. data/ext/couchbase/core/operations/management/eventing_get_all_functions.cxx +4 -2
  189. data/ext/couchbase/core/operations/management/eventing_get_function.cxx +5 -3
  190. data/ext/couchbase/core/operations/management/eventing_get_status.cxx +4 -2
  191. data/ext/couchbase/core/operations/management/eventing_pause_function.cxx +9 -3
  192. data/ext/couchbase/core/operations/management/eventing_resume_function.cxx +9 -3
  193. data/ext/couchbase/core/operations/management/eventing_undeploy_function.cxx +9 -3
  194. data/ext/couchbase/core/operations/management/eventing_upsert_function.cxx +9 -3
  195. data/ext/couchbase/core/operations/management/group_drop.cxx +3 -1
  196. data/ext/couchbase/core/operations/management/group_get.cxx +3 -1
  197. data/ext/couchbase/core/operations/management/group_upsert.cxx +11 -8
  198. data/ext/couchbase/core/operations/management/query_index_build.cxx +5 -2
  199. data/ext/couchbase/core/operations/management/query_index_create.cxx +9 -3
  200. data/ext/couchbase/core/operations/management/query_index_drop.cxx +11 -4
  201. data/ext/couchbase/core/operations/management/query_index_get_all.cxx +1 -1
  202. data/ext/couchbase/core/operations/management/query_index_get_all_deferred.cxx +1 -1
  203. data/ext/couchbase/core/operations/management/scope_drop.cxx +5 -1
  204. data/ext/couchbase/core/operations/management/scope_get_all.cxx +6 -1
  205. data/ext/couchbase/core/operations/management/search_get_stats.cxx +10 -0
  206. data/ext/couchbase/core/operations/management/search_index_analyze_document.cxx +3 -2
  207. data/ext/couchbase/core/operations/management/search_index_control_ingest.cxx +4 -3
  208. data/ext/couchbase/core/operations/management/search_index_control_plan_freeze.cxx +4 -3
  209. data/ext/couchbase/core/operations/management/search_index_control_query.cxx +4 -3
  210. data/ext/couchbase/core/operations/management/search_index_drop.cxx +2 -2
  211. data/ext/couchbase/core/operations/management/search_index_get.cxx +2 -2
  212. data/ext/couchbase/core/operations/management/search_index_get_documents_count.cxx +3 -2
  213. data/ext/couchbase/core/operations/management/search_index_get_stats.cxx +3 -1
  214. data/ext/couchbase/core/operations/management/search_index_upsert.cxx +2 -2
  215. data/ext/couchbase/core/operations/management/user_drop.cxx +3 -1
  216. data/ext/couchbase/core/operations/management/user_get.cxx +3 -1
  217. data/ext/couchbase/core/operations/management/user_upsert.cxx +12 -9
  218. data/ext/couchbase/core/operations/management/view_index_drop.cxx +1 -1
  219. data/ext/couchbase/core/operations/management/view_index_get.cxx +1 -1
  220. data/ext/couchbase/core/operations/management/view_index_upsert.cxx +1 -1
  221. data/ext/couchbase/core/operations/operation_traits.hxx +18 -0
  222. data/ext/couchbase/core/operations/query_response_parsing.cxx +211 -0
  223. data/ext/couchbase/core/operations/query_response_parsing.hxx +60 -0
  224. data/ext/couchbase/core/operations_fwd.hxx +3 -3
  225. data/ext/couchbase/core/origin.cxx +54 -26
  226. data/ext/couchbase/core/origin.hxx +12 -0
  227. data/ext/couchbase/core/orphan_reporter.cxx +2 -1
  228. data/ext/couchbase/core/platform/random.cc +7 -7
  229. data/ext/couchbase/core/protocol/client_request.cxx +2 -2
  230. data/ext/couchbase/core/protocol/client_request.hxx +38 -21
  231. data/ext/couchbase/core/protocol/client_response.cxx +11 -3
  232. data/ext/couchbase/core/protocol/client_response.hxx +27 -6
  233. data/ext/couchbase/core/protocol/cmd_append.cxx +2 -2
  234. data/ext/couchbase/core/protocol/cmd_cluster_map_change_notification.cxx +2 -2
  235. data/ext/couchbase/core/protocol/cmd_decrement.cxx +6 -6
  236. data/ext/couchbase/core/protocol/cmd_get.cxx +1 -1
  237. data/ext/couchbase/core/protocol/cmd_get_and_lock.cxx +2 -2
  238. data/ext/couchbase/core/protocol/cmd_get_and_touch.cxx +2 -2
  239. data/ext/couchbase/core/protocol/cmd_get_cluster_config.cxx +6 -4
  240. data/ext/couchbase/core/protocol/cmd_get_collection_id.cxx +2 -2
  241. data/ext/couchbase/core/protocol/cmd_get_error_map.cxx +1 -1
  242. data/ext/couchbase/core/protocol/cmd_get_meta.cxx +4 -4
  243. data/ext/couchbase/core/protocol/cmd_get_replica.cxx +1 -1
  244. data/ext/couchbase/core/protocol/cmd_hello.cxx +1 -1
  245. data/ext/couchbase/core/protocol/cmd_increment.cxx +6 -6
  246. data/ext/couchbase/core/protocol/cmd_insert.cxx +4 -4
  247. data/ext/couchbase/core/protocol/cmd_lookup_in.cxx +4 -3
  248. data/ext/couchbase/core/protocol/cmd_lookup_in_replica.cxx +4 -3
  249. data/ext/couchbase/core/protocol/cmd_mutate_in.cxx +10 -9
  250. data/ext/couchbase/core/protocol/cmd_mutate_in.hxx +10 -10
  251. data/ext/couchbase/core/protocol/cmd_observe_seqno.cxx +7 -7
  252. data/ext/couchbase/core/protocol/cmd_prepend.cxx +2 -2
  253. data/ext/couchbase/core/protocol/cmd_remove.cxx +2 -2
  254. data/ext/couchbase/core/protocol/cmd_replace.cxx +4 -4
  255. data/ext/couchbase/core/protocol/cmd_touch.cxx +1 -1
  256. data/ext/couchbase/core/protocol/cmd_upsert.cxx +4 -4
  257. data/ext/couchbase/core/protocol/datatype.hxx +118 -1
  258. data/ext/couchbase/core/protocol/frame_info_utils.cxx +1 -1
  259. data/ext/couchbase/core/protocol/magic.hxx +4 -0
  260. data/ext/couchbase/core/protocol/magic_fmt.hxx +3 -0
  261. data/ext/couchbase/core/protocol/server_request.hxx +3 -1
  262. data/ext/couchbase/core/protocol/status.cxx +1 -1
  263. data/ext/couchbase/core/protostellar/analytics_converter.hxx +171 -0
  264. data/ext/couchbase/core/protostellar/bucket_admin_converter.hxx +301 -0
  265. data/ext/couchbase/core/protostellar/collection_admin_converter.hxx +92 -0
  266. data/ext/couchbase/core/protostellar/component.cxx +2445 -0
  267. data/ext/couchbase/core/protostellar/component.hxx +391 -0
  268. data/ext/couchbase/core/{columnar/bootstrap_notification_subscriber.hxx → protostellar/compression_settings.hxx} +11 -10
  269. data/ext/couchbase/core/protostellar/credentials.cxx +233 -0
  270. data/ext/couchbase/core/protostellar/credentials.hxx +88 -0
  271. data/ext/couchbase/core/protostellar/dispatcher.cxx +57 -0
  272. data/ext/couchbase/core/protostellar/dispatcher.hxx +482 -0
  273. data/ext/couchbase/core/protostellar/error_utils.cxx +293 -0
  274. data/ext/couchbase/core/protostellar/error_utils.hxx +97 -0
  275. data/ext/couchbase/core/protostellar/json_payload.hxx +49 -0
  276. data/ext/couchbase/core/protostellar/kv_converter.cxx +70 -0
  277. data/ext/couchbase/core/protostellar/kv_converter.hxx +600 -0
  278. data/ext/couchbase/core/protostellar/query_converter.hxx +265 -0
  279. data/ext/couchbase/core/protostellar/query_index_admin_converter.hxx +291 -0
  280. data/ext/couchbase/core/protostellar/query_proto.hxx +73 -0
  281. data/ext/couchbase/core/protostellar/search_converter.hxx +244 -0
  282. data/ext/couchbase/core/protostellar/search_index_admin_converter.hxx +156 -0
  283. data/ext/couchbase/core/protostellar/view_converter.hxx +158 -0
  284. data/ext/couchbase/core/query_stream.cxx +447 -0
  285. data/ext/couchbase/core/query_stream.hxx +141 -0
  286. data/ext/couchbase/core/query_stream_component.cxx +243 -0
  287. data/ext/couchbase/core/query_stream_component.hxx +68 -0
  288. data/ext/couchbase/core/range_scan_load_balancer.cxx +15 -8
  289. data/ext/couchbase/core/range_scan_orchestrator.cxx +15 -3
  290. data/ext/couchbase/core/response_handler.hxx +41 -4
  291. data/ext/couchbase/core/row_streamer.cxx +332 -46
  292. data/ext/couchbase/core/row_streamer.hxx +31 -1
  293. data/ext/couchbase/core/row_streamer_options.hxx +55 -0
  294. data/ext/couchbase/core/sasl/client.h +3 -0
  295. data/ext/couchbase/core/search_scoring.hxx +66 -0
  296. data/ext/couchbase/core/stream_error_details.hxx +69 -0
  297. data/ext/couchbase/core/timeout_defaults.hxx +0 -1
  298. data/ext/couchbase/core/topology/capabilities.hxx +6 -0
  299. data/ext/couchbase/core/topology/capabilities_fmt.hxx +3 -0
  300. data/ext/couchbase/core/topology/configuration.cxx +21 -6
  301. data/ext/couchbase/core/topology/configuration.hxx +29 -8
  302. data/ext/couchbase/core/topology/configuration_json.hxx +3 -0
  303. data/ext/couchbase/core/topology/error_map_json.hxx +3 -1
  304. data/ext/couchbase/core/tracing/threshold_logging_tracer.cxx +70 -4
  305. data/ext/couchbase/core/tracing/threshold_logging_tracer.hxx +10 -0
  306. data/ext/couchbase/core/transactions/active_transaction_record.cxx +0 -34
  307. data/ext/couchbase/core/transactions/attempt_context_impl.cxx +108 -63
  308. data/ext/couchbase/core/transactions/attempt_context_impl.hxx +19 -2
  309. data/ext/couchbase/core/transactions/error_list.hxx +2 -2
  310. data/ext/couchbase/core/transactions/get_multi_fetch.hxx +160 -0
  311. data/ext/couchbase/core/transactions/get_multi_orchestrator.cxx +326 -125
  312. data/ext/couchbase/core/transactions/get_multi_transaction_id.hxx +62 -0
  313. data/ext/couchbase/core/transactions/internal/atr_entry.hxx +22 -2
  314. data/ext/couchbase/core/transactions/internal/transaction_context.hxx +2 -2
  315. data/ext/couchbase/core/transactions/internal/transactions_cleanup.hxx +23 -1
  316. data/ext/couchbase/core/transactions/internal/utils.hxx +50 -14
  317. data/ext/couchbase/core/transactions/staged_mutation.cxx +23 -18
  318. data/ext/couchbase/core/transactions/staged_mutation.hxx +15 -4
  319. data/ext/couchbase/core/transactions/transaction_context.cxx +55 -40
  320. data/ext/couchbase/core/transactions/transaction_get_result.hxx +16 -0
  321. data/ext/couchbase/core/transactions/transactions.cxx +3 -55
  322. data/ext/couchbase/core/transactions/transactions_cleanup.cxx +165 -72
  323. data/ext/couchbase/core/transactions/transactions_config.cxx +0 -11
  324. data/ext/couchbase/core/transactions/utils.cxx +10 -0
  325. data/ext/couchbase/core/transactions/waitable_op_list.hxx +2 -2
  326. data/ext/couchbase/core/transactions.hxx +9 -9
  327. data/ext/couchbase/core/utils/byteswap.hxx +166 -9
  328. data/ext/couchbase/core/utils/connection_string.cxx +50 -85
  329. data/ext/couchbase/core/utils/connection_string.hxx +15 -0
  330. data/ext/couchbase/core/{columnar/backoff_calculator.hxx → utils/deadline.hxx} +13 -13
  331. data/ext/couchbase/core/utils/duration_parser.cxx +1 -1
  332. data/ext/couchbase/core/utils/json_streaming_lexer.cxx +48 -5
  333. data/ext/couchbase/core/utils/json_streaming_lexer.hxx +4 -1
  334. data/ext/couchbase/core/utils/movable_function.hxx +301 -52
  335. data/ext/couchbase/core/utils/name_codec.hxx +154 -11
  336. data/ext/couchbase/core/{columnar/retry_info.hxx → utils/process_id.hxx} +18 -13
  337. data/ext/couchbase/core/utils/url_codec.cxx +12 -51
  338. data/ext/couchbase/core/websocket_codec.cxx +3 -29
  339. data/ext/couchbase/couchbase/analytics_options.hxx +21 -10
  340. data/ext/couchbase/couchbase/analytics_row.hxx +105 -0
  341. data/ext/couchbase/couchbase/analytics_stream_result.hxx +266 -0
  342. data/ext/couchbase/couchbase/boolean_query.hxx +3 -3
  343. data/ext/couchbase/couchbase/bucket.hxx +57 -0
  344. data/ext/couchbase/couchbase/cluster.hxx +183 -5
  345. data/ext/couchbase/{core/columnar/security_options.hxx → couchbase/cluster_state.hxx} +18 -14
  346. data/ext/couchbase/couchbase/codec/lenient_json_transcoder.hxx +69 -0
  347. data/ext/couchbase/couchbase/collection.hxx +234 -14
  348. data/ext/couchbase/couchbase/common_durability_options.hxx +18 -3
  349. data/ext/couchbase/couchbase/conjunction_query.hxx +1 -1
  350. data/ext/couchbase/couchbase/create_dataset_analytics_options.hxx +6 -1
  351. data/ext/couchbase/couchbase/date_range_query.hxx +2 -2
  352. data/ext/couchbase/couchbase/decrement_options.hxx +1 -1
  353. data/ext/couchbase/couchbase/disjunction_query.hxx +1 -1
  354. data/ext/couchbase/couchbase/error.hxx +32 -0
  355. data/ext/couchbase/couchbase/error_codes.hxx +32 -0
  356. data/ext/couchbase/couchbase/geo_bounding_box_query.hxx +1 -1
  357. data/ext/couchbase/couchbase/geo_distance_query.hxx +1 -1
  358. data/ext/couchbase/couchbase/geo_polygon_query.hxx +1 -1
  359. data/ext/couchbase/couchbase/get_replica_options.hxx +68 -0
  360. data/ext/couchbase/couchbase/get_replica_result.hxx +5 -3
  361. data/ext/couchbase/couchbase/get_replica_strategy.hxx +161 -0
  362. data/ext/couchbase/couchbase/get_result.hxx +1 -0
  363. data/ext/couchbase/couchbase/increment_options.hxx +1 -1
  364. data/ext/couchbase/couchbase/insert_options.hxx +1 -1
  365. data/ext/couchbase/couchbase/match_phrase_query.hxx +1 -1
  366. data/ext/couchbase/couchbase/match_query.hxx +1 -1
  367. data/ext/couchbase/couchbase/mutate_in_options.hxx +3 -3
  368. data/ext/couchbase/couchbase/network_options.hxx +1 -1
  369. data/ext/couchbase/couchbase/node_id.hxx +42 -14
  370. data/ext/couchbase/couchbase/node_id_for_options.hxx +7 -1
  371. data/ext/couchbase/couchbase/node_ids_options.hxx +8 -2
  372. data/ext/couchbase/couchbase/numeric_range_query.hxx +1 -1
  373. data/ext/couchbase/couchbase/phrase_query.hxx +1 -1
  374. data/ext/couchbase/couchbase/prefix_query.hxx +1 -1
  375. data/ext/couchbase/couchbase/query_options.hxx +23 -12
  376. data/ext/couchbase/couchbase/query_row.hxx +111 -0
  377. data/ext/couchbase/couchbase/query_stream_result.hxx +302 -0
  378. data/ext/couchbase/couchbase/query_string_query.hxx +3 -3
  379. data/ext/couchbase/couchbase/regexp_query.hxx +1 -1
  380. data/ext/couchbase/couchbase/replace_options.hxx +3 -3
  381. data/ext/couchbase/couchbase/result.hxx +14 -3
  382. data/ext/couchbase/couchbase/scan_result_item.hxx +1 -0
  383. data/ext/couchbase/couchbase/scope.hxx +85 -2
  384. data/ext/couchbase/couchbase/search_options.hxx +58 -8
  385. data/ext/couchbase/couchbase/search_scoring.hxx +94 -0
  386. data/ext/couchbase/couchbase/search_scoring_none.hxx +51 -0
  387. data/ext/couchbase/couchbase/search_scoring_reciprocal_rank_fusion.hxx +88 -0
  388. data/ext/couchbase/couchbase/search_scoring_relative_score_fusion.hxx +70 -0
  389. data/ext/couchbase/couchbase/term_range_query.hxx +1 -1
  390. data/ext/couchbase/couchbase/tracing/request_span.hxx +46 -0
  391. data/ext/couchbase/couchbase/transactions/transaction_get_multi_replicas_from_preferred_server_group_result.hxx +23 -21
  392. data/ext/couchbase/couchbase/transactions/transaction_get_multi_result.hxx +24 -19
  393. data/ext/couchbase/couchbase/transactions/transaction_get_result.hxx +17 -3
  394. data/ext/couchbase/couchbase/transactions/transactions_config.hxx +4 -2
  395. data/ext/couchbase/couchbase/transactions.hxx +27 -18
  396. data/ext/couchbase/couchbase/upsert_options.hxx +3 -3
  397. data/ext/couchbase/couchbase/vector_query.hxx +1 -1
  398. data/ext/couchbase/couchbase/wait_until_ready_options.hxx +111 -0
  399. data/ext/couchbase/couchbase/wildcard_query.hxx +1 -1
  400. data/ext/extconf.rb +15 -10
  401. data/ext/rcb_analytics.cxx +82 -102
  402. data/ext/rcb_backend.cxx +42 -36
  403. data/ext/rcb_backend.hxx +2 -0
  404. data/ext/rcb_buckets.cxx +47 -59
  405. data/ext/rcb_collections.cxx +42 -52
  406. data/ext/rcb_crud.cxx +345 -224
  407. data/ext/rcb_diagnostics.cxx +117 -27
  408. data/ext/rcb_exceptions.cxx +152 -99
  409. data/ext/rcb_exceptions.hxx +25 -0
  410. data/ext/rcb_extras.cxx +18 -19
  411. data/ext/rcb_hdr_histogram.cxx +19 -4
  412. data/ext/rcb_logger.cxx +202 -27
  413. data/ext/rcb_logger.hxx +12 -0
  414. data/ext/rcb_multi.cxx +40 -40
  415. data/ext/rcb_observability.cxx +7 -5
  416. data/ext/rcb_query.cxx +99 -142
  417. data/ext/rcb_range_scan.cxx +41 -35
  418. data/ext/rcb_search.cxx +98 -99
  419. data/ext/rcb_users.cxx +36 -56
  420. data/ext/rcb_utils.cxx +100 -37
  421. data/ext/rcb_utils.hxx +287 -33
  422. data/ext/rcb_version.cxx +1 -1
  423. data/ext/rcb_views.cxx +55 -51
  424. data/lib/active_support/cache/couchbase_store.rb +77 -12
  425. data/lib/couchbase/bucket.rb +20 -0
  426. data/lib/couchbase/cluster.rb +17 -0
  427. data/lib/couchbase/collection.rb +36 -1
  428. data/lib/couchbase/errors.rb +18 -0
  429. data/lib/couchbase/fork_hooks.rb +16 -7
  430. data/lib/couchbase/get_replica_strategy.rb +89 -0
  431. data/lib/couchbase/logger.rb +1 -1
  432. data/lib/couchbase/management/analytics_index_manager.rb +15 -15
  433. data/lib/couchbase/management/bucket_manager.rb +6 -6
  434. data/lib/couchbase/management/collection_manager.rb +6 -6
  435. data/lib/couchbase/management/query_index_manager.rb +7 -7
  436. data/lib/couchbase/management/search_index_manager.rb +13 -13
  437. data/lib/couchbase/management/user_manager.rb +10 -10
  438. data/lib/couchbase/management/view_index_manager.rb +5 -5
  439. data/lib/couchbase/options.rb +174 -42
  440. data/lib/couchbase/protostellar/bucket.rb +4 -0
  441. data/lib/couchbase/protostellar/cluster.rb +4 -0
  442. data/lib/couchbase/protostellar/collection.rb +4 -0
  443. data/lib/couchbase/protostellar/error_handling.rb +2 -1
  444. data/lib/couchbase/protostellar/request.rb +1 -0
  445. data/lib/couchbase/protostellar/request_generator/kv.rb +16 -2
  446. data/lib/couchbase/protostellar/request_generator/search.rb +17 -1
  447. data/lib/couchbase/protostellar/retry/orchestrator.rb +3 -2
  448. data/lib/couchbase/protostellar/retry/strategies/fail_fast.rb +33 -0
  449. data/lib/couchbase/protostellar/retry/strategies.rb +1 -0
  450. data/lib/couchbase/search_options.rb +95 -6
  451. data/lib/couchbase/version.rb +1 -1
  452. metadata +91 -33
  453. data/ext/0001-fix-build-for-mingw-w64-ucrt-x86_64-toolchain.patch +0 -40
  454. data/ext/couchbase/core/columnar/agent.hxx +0 -71
  455. data/ext/couchbase/core/columnar/agent_config.hxx +0 -59
  456. data/ext/couchbase/core/columnar/background_bootstrap_listener.hxx +0 -42
  457. data/ext/couchbase/core/columnar/backoff_calculator.cxx +0 -62
  458. data/ext/couchbase/core/columnar/columnar_agent.cxx +0 -147
  459. data/ext/couchbase/core/columnar/columnar_agent_config.cxx +0 -48
  460. data/ext/couchbase/core/columnar/columnar_error.cxx +0 -51
  461. data/ext/couchbase/core/columnar/database_management_options.hxx +0 -56
  462. data/ext/couchbase/core/columnar/error.hxx +0 -51
  463. data/ext/couchbase/core/columnar/error_codes.cxx +0 -107
  464. data/ext/couchbase/core/columnar/error_codes.hxx +0 -75
  465. data/ext/couchbase/core/columnar/management_component.cxx +0 -300
  466. data/ext/couchbase/core/columnar/management_component.hxx +0 -56
  467. data/ext/couchbase/core/columnar/query_component.cxx +0 -523
  468. data/ext/couchbase/core/columnar/query_component.hxx +0 -57
  469. data/ext/couchbase/core/columnar/query_options.hxx +0 -59
  470. data/ext/couchbase/core/columnar/query_result.cxx +0 -130
  471. data/ext/couchbase/core/columnar/query_result.hxx +0 -78
  472. data/ext/couchbase/core/io/config_tracker.cxx +0 -687
  473. data/ext/couchbase/core/io/config_tracker.hxx +0 -123
data/ext/rcb_query.cxx CHANGED
@@ -45,9 +45,9 @@ cb_Backend_query_index_get_all(VALUE self,
45
45
  {
46
46
  auto cluster = cb_backend_to_core_api_cluster(self);
47
47
 
48
- Check_Type(bucket_name, T_STRING);
48
+ cb_check_type(bucket_name, T_STRING);
49
49
  if (!NIL_P(options)) {
50
- Check_Type(options, T_HASH);
50
+ cb_check_type(options, T_HASH);
51
51
  }
52
52
 
53
53
  try {
@@ -113,10 +113,8 @@ cb_Backend_query_index_get_all(VALUE self,
113
113
 
114
114
  return res;
115
115
  } catch (const std::system_error& se) {
116
- rb_exc_raise(cb_map_error_code(
116
+ throw ruby_exception(cb_map_error_code(
117
117
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
118
- } catch (const ruby_exception& e) {
119
- rb_exc_raise(e.exception_object());
120
118
  }
121
119
  return Qnil;
122
120
  }
@@ -131,11 +129,11 @@ cb_Backend_query_index_create(VALUE self,
131
129
  {
132
130
  auto cluster = cb_backend_to_core_api_cluster(self);
133
131
 
134
- Check_Type(bucket_name, T_STRING);
135
- Check_Type(index_name, T_STRING);
136
- Check_Type(keys, T_ARRAY);
132
+ cb_check_type(bucket_name, T_STRING);
133
+ cb_check_type(index_name, T_STRING);
134
+ cb_check_type(keys, T_ARRAY);
137
135
  if (!NIL_P(options)) {
138
- Check_Type(options, T_HASH);
136
+ cb_check_type(options, T_HASH);
139
137
  }
140
138
 
141
139
  try {
@@ -165,7 +163,7 @@ cb_Backend_query_index_create(VALUE self,
165
163
  } /* else use backend default */
166
164
  if (VALUE num_replicas = rb_hash_aref(options, rb_id2sym(rb_intern("num_replicas")));
167
165
  !NIL_P(num_replicas)) {
168
- req.num_replicas = NUM2UINT(num_replicas);
166
+ req.num_replicas = cb_num2uint(num_replicas);
169
167
  } /* else use backend default */
170
168
  if (VALUE condition = rb_hash_aref(options, rb_id2sym(rb_intern("condition")));
171
169
  !NIL_P(condition)) {
@@ -219,10 +217,8 @@ cb_Backend_query_index_create(VALUE self,
219
217
  }
220
218
  return res;
221
219
  } catch (const std::system_error& se) {
222
- rb_exc_raise(cb_map_error_code(
220
+ throw ruby_exception(cb_map_error_code(
223
221
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
224
- } catch (const ruby_exception& e) {
225
- rb_exc_raise(e.exception_object());
226
222
  }
227
223
  return Qnil;
228
224
  }
@@ -236,10 +232,10 @@ cb_Backend_query_index_drop(VALUE self,
236
232
  {
237
233
  auto cluster = cb_backend_to_core_api_cluster(self);
238
234
 
239
- Check_Type(bucket_name, T_STRING);
240
- Check_Type(index_name, T_STRING);
235
+ cb_check_type(bucket_name, T_STRING);
236
+ cb_check_type(index_name, T_STRING);
241
237
  if (!NIL_P(options)) {
242
- Check_Type(options, T_HASH);
238
+ cb_check_type(options, T_HASH);
243
239
  }
244
240
 
245
241
  try {
@@ -304,10 +300,8 @@ cb_Backend_query_index_drop(VALUE self,
304
300
  }
305
301
  return res;
306
302
  } catch (const std::system_error& se) {
307
- rb_exc_raise(cb_map_error_code(
303
+ throw ruby_exception(cb_map_error_code(
308
304
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
309
- } catch (const ruby_exception& e) {
310
- rb_exc_raise(e.exception_object());
311
305
  }
312
306
  return Qnil;
313
307
  }
@@ -320,9 +314,9 @@ cb_Backend_query_index_create_primary(VALUE self,
320
314
  {
321
315
  auto cluster = cb_backend_to_core_api_cluster(self);
322
316
 
323
- Check_Type(bucket_name, T_STRING);
317
+ cb_check_type(bucket_name, T_STRING);
324
318
  if (!NIL_P(options)) {
325
- Check_Type(options, T_HASH);
319
+ cb_check_type(options, T_HASH);
326
320
  }
327
321
 
328
322
  try {
@@ -345,7 +339,7 @@ cb_Backend_query_index_create_primary(VALUE self,
345
339
  } /* else use backend default */
346
340
  if (VALUE num_replicas = rb_hash_aref(options, rb_id2sym(rb_intern("num_replicas")));
347
341
  !NIL_P(num_replicas)) {
348
- req.num_replicas = NUM2UINT(num_replicas);
342
+ req.num_replicas = cb_num2uint(num_replicas);
349
343
  } /* else use backend default */
350
344
  if (VALUE index_name = rb_hash_aref(options, rb_id2sym(rb_intern("index_name")));
351
345
  TYPE(index_name) == T_STRING) {
@@ -398,10 +392,8 @@ cb_Backend_query_index_create_primary(VALUE self,
398
392
 
399
393
  return res;
400
394
  } catch (const std::system_error& se) {
401
- rb_exc_raise(cb_map_error_code(
395
+ throw ruby_exception(cb_map_error_code(
402
396
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
403
- } catch (const ruby_exception& e) {
404
- rb_exc_raise(e.exception_object());
405
397
  }
406
398
  return Qnil;
407
399
  }
@@ -414,9 +406,9 @@ cb_Backend_query_index_drop_primary(VALUE self,
414
406
  {
415
407
  auto cluster = cb_backend_to_core_api_cluster(self);
416
408
 
417
- Check_Type(bucket_name, T_STRING);
409
+ cb_check_type(bucket_name, T_STRING);
418
410
  if (!NIL_P(options)) {
419
- Check_Type(options, T_HASH);
411
+ cb_check_type(options, T_HASH);
420
412
  }
421
413
 
422
414
  try {
@@ -484,10 +476,8 @@ cb_Backend_query_index_drop_primary(VALUE self,
484
476
  }
485
477
  return res;
486
478
  } catch (const std::system_error& se) {
487
- rb_exc_raise(cb_map_error_code(
479
+ throw ruby_exception(cb_map_error_code(
488
480
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
489
- } catch (const ruby_exception& e) {
490
- rb_exc_raise(e.exception_object());
491
481
  }
492
482
  return Qnil;
493
483
  }
@@ -500,9 +490,9 @@ cb_Backend_query_index_build_deferred(VALUE self,
500
490
  {
501
491
  auto cluster = cb_backend_to_core_api_cluster(self);
502
492
 
503
- Check_Type(bucket_name, T_STRING);
493
+ cb_check_type(bucket_name, T_STRING);
504
494
  if (!NIL_P(options)) {
505
- Check_Type(options, T_HASH);
495
+ cb_check_type(options, T_HASH);
506
496
  }
507
497
 
508
498
  try {
@@ -559,51 +549,19 @@ cb_Backend_query_index_build_deferred(VALUE self,
559
549
  }
560
550
  return res;
561
551
  } catch (const std::system_error& se) {
562
- rb_exc_raise(cb_map_error_code(
552
+ throw ruby_exception(cb_map_error_code(
563
553
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
564
- } catch (const ruby_exception& e) {
565
- rb_exc_raise(e.exception_object());
566
554
  }
567
555
  return Qnil;
568
556
  }
569
557
 
570
- int
571
- cb_for_each_named_param(VALUE key, VALUE value, VALUE arg)
572
- {
573
- // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
574
- auto* preq = reinterpret_cast<core::operations::query_request*>(arg);
575
- try {
576
- cb_check_type(key, T_STRING);
577
- cb_check_type(value, T_STRING);
578
- } catch (const ruby_exception&) {
579
- return ST_STOP;
580
- }
581
- preq->named_parameters[cb_string_new(key)] = cb_string_new(value);
582
- return ST_CONTINUE;
583
- }
584
-
585
- int
586
- cb_for_each_raw_param(VALUE key, VALUE value, VALUE arg)
587
- {
588
- // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
589
- auto* preq = reinterpret_cast<core::operations::query_request*>(arg);
590
- try {
591
- cb_check_type(key, T_STRING);
592
- cb_check_type(value, T_STRING);
593
- } catch (const ruby_exception&) {
594
- return ST_STOP;
595
- }
596
- preq->raw[cb_string_new(key)] = cb_string_new(value);
597
- return ST_CONTINUE;
598
- }
599
-
600
558
  VALUE
601
559
  cb_Backend_document_query(VALUE self, VALUE statement, VALUE options, VALUE observability_handler)
602
560
  {
603
561
  auto cluster = cb_backend_to_core_api_cluster(self);
604
562
 
605
- Check_Type(statement, T_STRING);
606
- Check_Type(options, T_HASH);
563
+ cb_check_type(statement, T_STRING);
564
+ cb_check_type(options, T_HASH);
607
565
 
608
566
  try {
609
567
  core::operations::query_request req;
@@ -655,8 +613,7 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options, VALUE obse
655
613
  if (VALUE named_params = rb_hash_aref(options, rb_id2sym(rb_intern("named_parameters")));
656
614
  !NIL_P(named_params)) {
657
615
  cb_check_type(named_params, T_HASH);
658
- // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
659
- rb_hash_foreach(named_params, cb_for_each_named_param, reinterpret_cast<VALUE>(&req));
616
+ cb_extract_string_hash(req.named_parameters, named_params, "named_parameters");
660
617
  }
661
618
  if (VALUE scan_consistency = rb_hash_aref(options, rb_id2sym(rb_intern("scan_consistency")));
662
619
  !NIL_P(scan_consistency)) {
@@ -686,7 +643,7 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options, VALUE obse
686
643
  case T_BIGNUM:
687
644
  break;
688
645
  default:
689
- rb_raise(rb_eArgError, "partition_uuid must be an Integer");
646
+ throw ruby_exception(rb_eArgError, "partition_uuid must be an Integer");
690
647
  }
691
648
  VALUE sequence_number = rb_hash_aref(token, rb_id2sym(rb_intern("sequence_number")));
692
649
  switch (TYPE(sequence_number)) {
@@ -694,11 +651,11 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options, VALUE obse
694
651
  case T_BIGNUM:
695
652
  break;
696
653
  default:
697
- rb_raise(rb_eArgError, "sequence_number must be an Integer");
654
+ throw ruby_exception(rb_eArgError, "sequence_number must be an Integer");
698
655
  }
699
- req.mutation_state.emplace_back(NUM2ULL(partition_uuid),
700
- NUM2ULL(sequence_number),
701
- gsl::narrow_cast<std::uint16_t>(NUM2UINT(partition_id)),
656
+ req.mutation_state.emplace_back(cb_num2ull(partition_uuid),
657
+ cb_num2ull(sequence_number),
658
+ gsl::narrow_cast<std::uint16_t>(cb_num2uint(partition_id)),
702
659
  cb_string_new(bucket_name));
703
660
  }
704
661
  }
@@ -706,8 +663,7 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options, VALUE obse
706
663
  if (VALUE raw_params = rb_hash_aref(options, rb_id2sym(rb_intern("raw_parameters")));
707
664
  !NIL_P(raw_params)) {
708
665
  cb_check_type(raw_params, T_HASH);
709
- // NOLINTNEXTLINE(cppcoreguidelines-pro-type-reinterpret-cast)
710
- rb_hash_foreach(raw_params, cb_for_each_raw_param, reinterpret_cast<VALUE>(&req));
666
+ cb_extract_string_hash(req.raw, raw_params, "raw_parameters");
711
667
  }
712
668
  auto parent_span = cb_create_parent_span(req, self);
713
669
 
@@ -776,10 +732,8 @@ cb_Backend_document_query(VALUE self, VALUE statement, VALUE options, VALUE obse
776
732
 
777
733
  return res;
778
734
  } catch (const std::system_error& se) {
779
- rb_exc_raise(cb_map_error_code(
735
+ throw ruby_exception(cb_map_error_code(
780
736
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
781
- } catch (const ruby_exception& e) {
782
- rb_exc_raise(e.exception_object());
783
737
  }
784
738
  return Qnil;
785
739
  }
@@ -794,11 +748,11 @@ cb_Backend_collection_query_index_get_all(VALUE self,
794
748
  {
795
749
  auto cluster = cb_backend_to_core_api_cluster(self);
796
750
 
797
- Check_Type(bucket_name, T_STRING);
798
- Check_Type(scope_name, T_STRING);
799
- Check_Type(collection_name, T_STRING);
751
+ cb_check_type(bucket_name, T_STRING);
752
+ cb_check_type(scope_name, T_STRING);
753
+ cb_check_type(collection_name, T_STRING);
800
754
  if (!NIL_P(options)) {
801
- Check_Type(options, T_HASH);
755
+ cb_check_type(options, T_HASH);
802
756
  }
803
757
 
804
758
  try {
@@ -856,10 +810,8 @@ cb_Backend_collection_query_index_get_all(VALUE self,
856
810
 
857
811
  return res;
858
812
  } catch (const std::system_error& se) {
859
- rb_exc_raise(cb_map_error_code(
813
+ throw ruby_exception(cb_map_error_code(
860
814
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
861
- } catch (const ruby_exception& e) {
862
- rb_exc_raise(e.exception_object());
863
815
  }
864
816
  return Qnil;
865
817
  }
@@ -875,13 +827,13 @@ cb_Backend_collection_query_index_create(VALUE self,
875
827
  VALUE observability_handler)
876
828
  {
877
829
  auto cluster = cb_backend_to_core_api_cluster(self);
878
- Check_Type(bucket_name, T_STRING);
879
- Check_Type(scope_name, T_STRING);
880
- Check_Type(collection_name, T_STRING);
881
- Check_Type(index_name, T_STRING);
882
- Check_Type(keys, T_ARRAY);
830
+ cb_check_type(bucket_name, T_STRING);
831
+ cb_check_type(scope_name, T_STRING);
832
+ cb_check_type(collection_name, T_STRING);
833
+ cb_check_type(index_name, T_STRING);
834
+ cb_check_type(keys, T_ARRAY);
883
835
  if (!NIL_P(options)) {
884
- Check_Type(options, T_HASH);
836
+ cb_check_type(options, T_HASH);
885
837
  }
886
838
 
887
839
  try {
@@ -913,7 +865,7 @@ cb_Backend_collection_query_index_create(VALUE self,
913
865
  } /* else use backend default */
914
866
  if (VALUE num_replicas = rb_hash_aref(options, rb_id2sym(rb_intern("num_replicas")));
915
867
  !NIL_P(num_replicas)) {
916
- req.num_replicas = NUM2UINT(num_replicas);
868
+ req.num_replicas = cb_num2uint(num_replicas);
917
869
  } /* else use backend default */
918
870
  if (VALUE condition = rb_hash_aref(options, rb_id2sym(rb_intern("condition")));
919
871
  !NIL_P(condition)) {
@@ -967,10 +919,8 @@ cb_Backend_collection_query_index_create(VALUE self,
967
919
  }
968
920
  return res;
969
921
  } catch (const std::system_error& se) {
970
- rb_exc_raise(cb_map_error_code(
922
+ throw ruby_exception(cb_map_error_code(
971
923
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
972
- } catch (const ruby_exception& e) {
973
- rb_exc_raise(e.exception_object());
974
924
  }
975
925
  return Qnil;
976
926
  }
@@ -986,12 +936,12 @@ cb_Backend_collection_query_index_drop(VALUE self,
986
936
  {
987
937
  auto cluster = cb_backend_to_core_api_cluster(self);
988
938
 
989
- Check_Type(bucket_name, T_STRING);
990
- Check_Type(scope_name, T_STRING);
991
- Check_Type(collection_name, T_STRING);
992
- Check_Type(index_name, T_STRING);
939
+ cb_check_type(bucket_name, T_STRING);
940
+ cb_check_type(scope_name, T_STRING);
941
+ cb_check_type(collection_name, T_STRING);
942
+ cb_check_type(index_name, T_STRING);
993
943
  if (!NIL_P(options)) {
994
- Check_Type(options, T_HASH);
944
+ cb_check_type(options, T_HASH);
995
945
  }
996
946
 
997
947
  try {
@@ -1058,10 +1008,8 @@ cb_Backend_collection_query_index_drop(VALUE self,
1058
1008
  }
1059
1009
  return res;
1060
1010
  } catch (const std::system_error& se) {
1061
- rb_exc_raise(cb_map_error_code(
1011
+ throw ruby_exception(cb_map_error_code(
1062
1012
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
1063
- } catch (const ruby_exception& e) {
1064
- rb_exc_raise(e.exception_object());
1065
1013
  }
1066
1014
  return Qnil;
1067
1015
  }
@@ -1076,11 +1024,11 @@ cb_Backend_collection_query_index_create_primary(VALUE self,
1076
1024
  {
1077
1025
  auto cluster = cb_backend_to_core_api_cluster(self);
1078
1026
 
1079
- Check_Type(bucket_name, T_STRING);
1080
- Check_Type(scope_name, T_STRING);
1081
- Check_Type(collection_name, T_STRING);
1027
+ cb_check_type(bucket_name, T_STRING);
1028
+ cb_check_type(scope_name, T_STRING);
1029
+ cb_check_type(collection_name, T_STRING);
1082
1030
  if (!NIL_P(options)) {
1083
- Check_Type(options, T_HASH);
1031
+ cb_check_type(options, T_HASH);
1084
1032
  }
1085
1033
 
1086
1034
  try {
@@ -1105,7 +1053,7 @@ cb_Backend_collection_query_index_create_primary(VALUE self,
1105
1053
  } /* else use backend default */
1106
1054
  if (VALUE num_replicas = rb_hash_aref(options, rb_id2sym(rb_intern("num_replicas")));
1107
1055
  !NIL_P(num_replicas)) {
1108
- req.num_replicas = NUM2UINT(num_replicas);
1056
+ req.num_replicas = cb_num2uint(num_replicas);
1109
1057
  } /* else use backend default */
1110
1058
  if (VALUE index_name = rb_hash_aref(options, rb_id2sym(rb_intern("index_name")));
1111
1059
  TYPE(index_name) == T_STRING) {
@@ -1158,10 +1106,8 @@ cb_Backend_collection_query_index_create_primary(VALUE self,
1158
1106
  }
1159
1107
  return res;
1160
1108
  } catch (const std::system_error& se) {
1161
- rb_exc_raise(cb_map_error_code(
1109
+ throw ruby_exception(cb_map_error_code(
1162
1110
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
1163
- } catch (const ruby_exception& e) {
1164
- rb_exc_raise(e.exception_object());
1165
1111
  }
1166
1112
  return Qnil;
1167
1113
  }
@@ -1176,11 +1122,11 @@ cb_Backend_collection_query_index_drop_primary(VALUE self,
1176
1122
  {
1177
1123
  auto cluster = cb_backend_to_core_api_cluster(self);
1178
1124
 
1179
- Check_Type(bucket_name, T_STRING);
1180
- Check_Type(scope_name, T_STRING);
1181
- Check_Type(collection_name, T_STRING);
1125
+ cb_check_type(bucket_name, T_STRING);
1126
+ cb_check_type(scope_name, T_STRING);
1127
+ cb_check_type(collection_name, T_STRING);
1182
1128
  if (!NIL_P(options)) {
1183
- Check_Type(options, T_HASH);
1129
+ cb_check_type(options, T_HASH);
1184
1130
  }
1185
1131
 
1186
1132
  try {
@@ -1251,10 +1197,8 @@ cb_Backend_collection_query_index_drop_primary(VALUE self,
1251
1197
  }
1252
1198
  return res;
1253
1199
  } catch (const std::system_error& se) {
1254
- rb_exc_raise(cb_map_error_code(
1200
+ throw ruby_exception(cb_map_error_code(
1255
1201
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
1256
- } catch (const ruby_exception& e) {
1257
- rb_exc_raise(e.exception_object());
1258
1202
  }
1259
1203
  return Qnil;
1260
1204
  }
@@ -1269,11 +1213,11 @@ cb_Backend_collection_query_index_build_deferred(VALUE self,
1269
1213
  {
1270
1214
  auto cluster = cb_backend_to_core_api_cluster(self);
1271
1215
 
1272
- Check_Type(bucket_name, T_STRING);
1273
- Check_Type(scope_name, T_STRING);
1274
- Check_Type(collection_name, T_STRING);
1216
+ cb_check_type(bucket_name, T_STRING);
1217
+ cb_check_type(scope_name, T_STRING);
1218
+ cb_check_type(collection_name, T_STRING);
1275
1219
  if (!NIL_P(options)) {
1276
- Check_Type(options, T_HASH);
1220
+ cb_check_type(options, T_HASH);
1277
1221
  }
1278
1222
 
1279
1223
  try {
@@ -1320,10 +1264,8 @@ cb_Backend_collection_query_index_build_deferred(VALUE self,
1320
1264
  }
1321
1265
  return res;
1322
1266
  } catch (const std::system_error& se) {
1323
- rb_exc_raise(cb_map_error_code(
1267
+ throw ruby_exception(cb_map_error_code(
1324
1268
  se.code(), fmt::format("failed to perform {}: {}", __func__, se.what()), false));
1325
- } catch (const ruby_exception& e) {
1326
- rb_exc_raise(e.exception_object());
1327
1269
  }
1328
1270
  return Qnil;
1329
1271
  }
@@ -1333,34 +1275,49 @@ cb_Backend_collection_query_index_build_deferred(VALUE self,
1333
1275
  void
1334
1276
  init_query(VALUE cBackend)
1335
1277
  {
1336
- rb_define_method(cBackend, "document_query", cb_Backend_document_query, 3);
1278
+ rb_define_method(cBackend, "document_query", cb_method<cb_Backend_document_query>::invoke, 3);
1337
1279
 
1338
- rb_define_method(cBackend, "query_index_get_all", cb_Backend_query_index_get_all, 3);
1339
- rb_define_method(cBackend, "query_index_create", cb_Backend_query_index_create, 5);
1340
1280
  rb_define_method(
1341
- cBackend, "query_index_create_primary", cb_Backend_query_index_create_primary, 3);
1342
- rb_define_method(cBackend, "query_index_drop", cb_Backend_query_index_drop, 4);
1343
- rb_define_method(cBackend, "query_index_drop_primary", cb_Backend_query_index_drop_primary, 3);
1281
+ cBackend, "query_index_get_all", cb_method<cb_Backend_query_index_get_all>::invoke, 3);
1344
1282
  rb_define_method(
1345
- cBackend, "query_index_build_deferred", cb_Backend_query_index_build_deferred, 3);
1283
+ cBackend, "query_index_create", cb_method<cb_Backend_query_index_create>::invoke, 5);
1284
+ rb_define_method(cBackend,
1285
+ "query_index_create_primary",
1286
+ cb_method<cb_Backend_query_index_create_primary>::invoke,
1287
+ 3);
1288
+ rb_define_method(cBackend, "query_index_drop", cb_method<cb_Backend_query_index_drop>::invoke, 4);
1289
+ rb_define_method(cBackend,
1290
+ "query_index_drop_primary",
1291
+ cb_method<cb_Backend_query_index_drop_primary>::invoke,
1292
+ 3);
1293
+ rb_define_method(cBackend,
1294
+ "query_index_build_deferred",
1295
+ cb_method<cb_Backend_query_index_build_deferred>::invoke,
1296
+ 3);
1346
1297
 
1347
- rb_define_method(
1348
- cBackend, "collection_query_index_get_all", cb_Backend_collection_query_index_get_all, 5);
1349
- rb_define_method(
1350
- cBackend, "collection_query_index_create", cb_Backend_collection_query_index_create, 7);
1298
+ rb_define_method(cBackend,
1299
+ "collection_query_index_get_all",
1300
+ cb_method<cb_Backend_collection_query_index_get_all>::invoke,
1301
+ 5);
1302
+ rb_define_method(cBackend,
1303
+ "collection_query_index_create",
1304
+ cb_method<cb_Backend_collection_query_index_create>::invoke,
1305
+ 7);
1351
1306
  rb_define_method(cBackend,
1352
1307
  "collection_query_index_create_primary",
1353
- cb_Backend_collection_query_index_create_primary,
1308
+ cb_method<cb_Backend_collection_query_index_create_primary>::invoke,
1354
1309
  5);
1355
- rb_define_method(
1356
- cBackend, "collection_query_index_drop", cb_Backend_collection_query_index_drop, 6);
1310
+ rb_define_method(cBackend,
1311
+ "collection_query_index_drop",
1312
+ cb_method<cb_Backend_collection_query_index_drop>::invoke,
1313
+ 6);
1357
1314
  rb_define_method(cBackend,
1358
1315
  "collection_query_index_drop_primary",
1359
- cb_Backend_collection_query_index_drop_primary,
1316
+ cb_method<cb_Backend_collection_query_index_drop_primary>::invoke,
1360
1317
  5);
1361
1318
  rb_define_method(cBackend,
1362
1319
  "collection_query_index_build_deferred",
1363
- cb_Backend_collection_query_index_build_deferred,
1320
+ cb_method<cb_Backend_collection_query_index_build_deferred>::invoke,
1364
1321
  5);
1365
1322
  }
1366
1323
  } // namespace couchbase::ruby