couchbase 4.2.3 → 4.2.5-dev.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (205) hide show
  1. package/CMakeLists.txt +136 -11
  2. package/deps/couchbase-cxx-client/CMakeLists.txt +54 -4
  3. package/deps/couchbase-cxx-client/README.md +1 -0
  4. package/deps/couchbase-cxx-client/bin/create-search-index +164 -0
  5. package/deps/couchbase-cxx-client/bin/init-cluster +55 -10
  6. package/deps/couchbase-cxx-client/bin/run-unit-tests +62 -6
  7. package/deps/couchbase-cxx-client/bin/travel-sample-index-v6.json +184 -0
  8. package/deps/couchbase-cxx-client/bin/travel-sample-index.json +188 -0
  9. package/deps/couchbase-cxx-client/cmake/Documentation.cmake +0 -1
  10. package/deps/couchbase-cxx-client/cmake/OpenSSL.cmake +98 -3
  11. package/deps/couchbase-cxx-client/cmake/Testing.cmake +8 -0
  12. package/deps/couchbase-cxx-client/cmake/build_config.hxx.in +3 -0
  13. package/deps/couchbase-cxx-client/core/bucket.cxx +183 -152
  14. package/deps/couchbase-cxx-client/core/bucket.hxx +17 -4
  15. package/deps/couchbase-cxx-client/core/cluster.hxx +18 -1
  16. package/deps/couchbase-cxx-client/core/cluster_options.hxx +1 -0
  17. package/deps/couchbase-cxx-client/core/error_context/key_value.cxx +2 -1
  18. package/deps/couchbase-cxx-client/core/error_context/key_value.hxx +10 -12
  19. package/deps/couchbase-cxx-client/core/error_context/search.hxx +1 -1
  20. package/deps/couchbase-cxx-client/core/impl/analytics.cxx +1 -0
  21. package/deps/couchbase-cxx-client/core/impl/boolean_field_query.cxx +40 -0
  22. package/deps/couchbase-cxx-client/core/impl/boolean_query.cxx +62 -0
  23. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +1 -0
  24. package/deps/couchbase-cxx-client/core/impl/conjunction_query.cxx +51 -0
  25. package/deps/couchbase-cxx-client/core/impl/date_range.cxx +89 -0
  26. package/deps/couchbase-cxx-client/core/impl/date_range_facet.cxx +54 -0
  27. package/deps/couchbase-cxx-client/core/impl/date_range_facet_result.cxx +64 -0
  28. package/deps/couchbase-cxx-client/core/impl/date_range_query.cxx +125 -0
  29. package/deps/couchbase-cxx-client/core/impl/disjunction_query.cxx +51 -0
  30. package/deps/couchbase-cxx-client/core/impl/encoded_search_facet.hxx +29 -0
  31. package/deps/couchbase-cxx-client/core/impl/encoded_search_query.hxx +29 -0
  32. package/deps/couchbase-cxx-client/core/impl/encoded_search_sort.hxx +29 -0
  33. package/deps/couchbase-cxx-client/core/impl/geo_bounding_box_query.cxx +46 -0
  34. package/deps/couchbase-cxx-client/core/impl/geo_distance_query.cxx +43 -0
  35. package/deps/couchbase-cxx-client/core/impl/geo_polygon_query.cxx +46 -0
  36. package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.cxx +80 -0
  37. package/deps/couchbase-cxx-client/core/impl/internal_date_range_facet_result.hxx +48 -0
  38. package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.cxx +80 -0
  39. package/deps/couchbase-cxx-client/core/impl/internal_numeric_range_facet_result.hxx +48 -0
  40. package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.cxx +141 -0
  41. package/deps/couchbase-cxx-client/core/impl/internal_search_error_context.hxx +61 -0
  42. package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.cxx +60 -0
  43. package/deps/couchbase-cxx-client/core/impl/internal_search_meta_data.hxx +41 -0
  44. package/deps/couchbase-cxx-client/core/impl/internal_search_result.cxx +84 -0
  45. package/deps/couchbase-cxx-client/core/impl/internal_search_result.hxx +43 -0
  46. package/deps/couchbase-cxx-client/core/impl/internal_search_row.cxx +82 -0
  47. package/deps/couchbase-cxx-client/core/impl/internal_search_row.hxx +56 -0
  48. package/deps/couchbase-cxx-client/core/impl/internal_search_row_location.hxx +32 -0
  49. package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.cxx +137 -0
  50. package/deps/couchbase-cxx-client/core/impl/internal_search_row_locations.hxx +45 -0
  51. package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.cxx +80 -0
  52. package/deps/couchbase-cxx-client/core/impl/internal_term_facet_result.hxx +48 -0
  53. package/deps/couchbase-cxx-client/core/impl/key_value_error_context.cxx +98 -0
  54. package/deps/couchbase-cxx-client/core/impl/match_all_query.cxx +35 -0
  55. package/deps/couchbase-cxx-client/core/impl/match_none_query.cxx +35 -0
  56. package/deps/couchbase-cxx-client/core/impl/match_phrase_query.cxx +43 -0
  57. package/deps/couchbase-cxx-client/core/impl/match_query.cxx +59 -0
  58. package/deps/couchbase-cxx-client/core/impl/numeric_range.cxx +49 -0
  59. package/deps/couchbase-cxx-client/core/impl/numeric_range_facet.cxx +54 -0
  60. package/deps/couchbase-cxx-client/core/impl/numeric_range_facet_result.cxx +64 -0
  61. package/deps/couchbase-cxx-client/core/impl/numeric_range_query.cxx +56 -0
  62. package/deps/couchbase-cxx-client/core/impl/phrase_query.cxx +42 -0
  63. package/deps/couchbase-cxx-client/core/impl/prefix_query.cxx +40 -0
  64. package/deps/couchbase-cxx-client/core/impl/query_error_context.cxx +75 -0
  65. package/deps/couchbase-cxx-client/core/impl/query_string_query.cxx +37 -0
  66. package/deps/couchbase-cxx-client/core/impl/regexp_query.cxx +40 -0
  67. package/deps/couchbase-cxx-client/core/impl/search.cxx +191 -0
  68. package/deps/couchbase-cxx-client/core/impl/search_error_context.cxx +147 -0
  69. package/deps/couchbase-cxx-client/core/impl/search_meta_data.cxx +46 -0
  70. package/deps/couchbase-cxx-client/core/impl/search_result.cxx +66 -0
  71. package/deps/couchbase-cxx-client/core/impl/search_row.cxx +74 -0
  72. package/deps/couchbase-cxx-client/core/impl/search_row_location.cxx +64 -0
  73. package/deps/couchbase-cxx-client/core/impl/search_row_locations.cxx +66 -0
  74. package/deps/couchbase-cxx-client/core/impl/search_sort_field.cxx +104 -0
  75. package/deps/couchbase-cxx-client/core/impl/search_sort_id.cxx +43 -0
  76. package/deps/couchbase-cxx-client/core/impl/search_sort_score.cxx +43 -0
  77. package/deps/couchbase-cxx-client/core/impl/term_facet.cxx +36 -0
  78. package/deps/couchbase-cxx-client/core/impl/term_facet_result.cxx +64 -0
  79. package/deps/couchbase-cxx-client/core/impl/term_query.cxx +56 -0
  80. package/deps/couchbase-cxx-client/core/impl/term_range_query.cxx +57 -0
  81. package/deps/couchbase-cxx-client/core/impl/wildcard_query.cxx +40 -0
  82. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +9 -2
  83. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +54 -37
  84. package/deps/couchbase-cxx-client/core/io/mcbp_session.hxx +4 -3
  85. package/deps/couchbase-cxx-client/core/json_string.hxx +5 -0
  86. package/deps/couchbase-cxx-client/core/meta/version.cxx +18 -4
  87. package/deps/couchbase-cxx-client/core/mozilla_ca_bundle.hxx +39 -0
  88. package/deps/couchbase-cxx-client/core/operations/document_search.cxx +3 -1
  89. package/deps/couchbase-cxx-client/core/operations/document_search.hxx +1 -1
  90. package/deps/couchbase-cxx-client/core/protocol/client_request.hxx +11 -2
  91. package/deps/couchbase-cxx-client/core/protocol/client_response.hxx +1 -0
  92. package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +59 -46
  93. package/deps/couchbase-cxx-client/core/utils/connection_string.hxx +1 -0
  94. package/deps/couchbase-cxx-client/couchbase/analytics_error_context.hxx +1 -1
  95. package/deps/couchbase-cxx-client/couchbase/boolean_field_query.hxx +77 -0
  96. package/deps/couchbase-cxx-client/couchbase/boolean_query.hxx +223 -0
  97. package/deps/couchbase-cxx-client/couchbase/cluster.hxx +39 -0
  98. package/deps/couchbase-cxx-client/couchbase/conjunction_query.hxx +88 -0
  99. package/deps/couchbase-cxx-client/couchbase/date_range.hxx +69 -0
  100. package/deps/couchbase-cxx-client/couchbase/date_range_facet.hxx +56 -0
  101. package/deps/couchbase-cxx-client/couchbase/date_range_facet_result.hxx +55 -0
  102. package/deps/couchbase-cxx-client/couchbase/date_range_query.hxx +265 -0
  103. package/deps/couchbase-cxx-client/couchbase/disjunction_query.hxx +109 -0
  104. package/deps/couchbase-cxx-client/couchbase/doc_id_query.hxx +111 -0
  105. package/deps/couchbase-cxx-client/couchbase/error_context.hxx +17 -8
  106. package/deps/couchbase-cxx-client/couchbase/fmt/analytics_scan_consistency.hxx +52 -0
  107. package/deps/couchbase-cxx-client/{core/topology/error_map_fmt.hxx → couchbase/fmt/key_value_error_map_attribute.hxx} +21 -21
  108. package/deps/couchbase-cxx-client/couchbase/fmt/search_scan_consistency.hxx +49 -0
  109. package/deps/couchbase-cxx-client/couchbase/geo_bounding_box_query.hxx +107 -0
  110. package/deps/couchbase-cxx-client/couchbase/geo_distance_query.hxx +109 -0
  111. package/deps/couchbase-cxx-client/couchbase/geo_point.hxx +32 -0
  112. package/deps/couchbase-cxx-client/couchbase/geo_polygon_query.hxx +85 -0
  113. package/deps/couchbase-cxx-client/couchbase/highlight_style.hxx +45 -0
  114. package/deps/couchbase-cxx-client/couchbase/key_value_error_context.hxx +7 -2
  115. package/deps/couchbase-cxx-client/couchbase/manager_error_context.hxx +1 -1
  116. package/deps/couchbase-cxx-client/couchbase/match_all_query.hxx +43 -0
  117. package/deps/couchbase-cxx-client/couchbase/match_none_query.hxx +43 -0
  118. package/deps/couchbase-cxx-client/couchbase/match_operator.hxx +45 -0
  119. package/deps/couchbase-cxx-client/couchbase/match_phrase_query.hxx +108 -0
  120. package/deps/couchbase-cxx-client/couchbase/match_query.hxx +163 -0
  121. package/deps/couchbase-cxx-client/couchbase/numeric_range.hxx +58 -0
  122. package/deps/couchbase-cxx-client/couchbase/numeric_range_facet.hxx +56 -0
  123. package/deps/couchbase-cxx-client/couchbase/numeric_range_facet_result.hxx +55 -0
  124. package/deps/couchbase-cxx-client/couchbase/numeric_range_query.hxx +143 -0
  125. package/deps/couchbase-cxx-client/couchbase/phrase_query.hxx +93 -0
  126. package/deps/couchbase-cxx-client/couchbase/prefix_query.hxx +82 -0
  127. package/deps/couchbase-cxx-client/couchbase/query_error_context.hxx +3 -1
  128. package/deps/couchbase-cxx-client/couchbase/query_string_query.hxx +72 -0
  129. package/deps/couchbase-cxx-client/couchbase/regexp_query.hxx +82 -0
  130. package/deps/couchbase-cxx-client/couchbase/scope.hxx +39 -0
  131. package/deps/couchbase-cxx-client/couchbase/search_date_range.hxx +68 -0
  132. package/deps/couchbase-cxx-client/couchbase/search_error_context.hxx +138 -0
  133. package/deps/couchbase-cxx-client/couchbase/search_facet.hxx +60 -0
  134. package/deps/couchbase-cxx-client/couchbase/search_facet_result.hxx +50 -0
  135. package/deps/couchbase-cxx-client/couchbase/search_meta_data.hxx +85 -0
  136. package/deps/couchbase-cxx-client/couchbase/search_metrics.hxx +127 -0
  137. package/deps/couchbase-cxx-client/couchbase/search_numeric_range.hxx +69 -0
  138. package/deps/couchbase-cxx-client/couchbase/search_options.hxx +509 -0
  139. package/deps/couchbase-cxx-client/couchbase/search_query.hxx +69 -0
  140. package/deps/couchbase-cxx-client/couchbase/search_result.hxx +77 -0
  141. package/deps/couchbase-cxx-client/couchbase/search_row.hxx +104 -0
  142. package/deps/couchbase-cxx-client/couchbase/search_row_location.hxx +55 -0
  143. package/deps/couchbase-cxx-client/couchbase/search_row_locations.hxx +86 -0
  144. package/deps/couchbase-cxx-client/couchbase/search_scan_consistency.hxx +34 -0
  145. package/deps/couchbase-cxx-client/couchbase/search_sort.hxx +58 -0
  146. package/deps/couchbase-cxx-client/couchbase/search_sort_field.hxx +117 -0
  147. package/deps/couchbase-cxx-client/couchbase/search_sort_field_missing.hxx +26 -0
  148. package/deps/couchbase-cxx-client/couchbase/search_sort_field_mode.hxx +27 -0
  149. package/deps/couchbase-cxx-client/couchbase/search_sort_field_type.hxx +28 -0
  150. package/deps/couchbase-cxx-client/couchbase/search_sort_id.hxx +60 -0
  151. package/deps/couchbase-cxx-client/couchbase/search_sort_score.hxx +60 -0
  152. package/deps/couchbase-cxx-client/couchbase/search_term_range.hxx +51 -0
  153. package/deps/couchbase-cxx-client/couchbase/security_options.hxx +3 -0
  154. package/deps/couchbase-cxx-client/couchbase/subdocument_error_context.hxx +4 -2
  155. package/deps/couchbase-cxx-client/couchbase/term_facet.hxx +48 -0
  156. package/deps/couchbase-cxx-client/couchbase/term_facet_result.hxx +55 -0
  157. package/deps/couchbase-cxx-client/couchbase/term_query.hxx +151 -0
  158. package/deps/couchbase-cxx-client/couchbase/term_range_query.hxx +142 -0
  159. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_options.hxx +1 -1
  160. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_query_options.hxx +2 -1
  161. package/deps/couchbase-cxx-client/couchbase/transactions/transaction_result.hxx +1 -1
  162. package/deps/couchbase-cxx-client/couchbase/transactions.hxx +3 -3
  163. package/deps/couchbase-cxx-client/couchbase/wildcard_query.hxx +83 -0
  164. package/deps/couchbase-cxx-client/docs/Doxyfile.in +1 -1
  165. package/deps/couchbase-cxx-client/docs/cbc-analytics.md +2 -2
  166. package/deps/couchbase-cxx-client/docs/cbc-get.md +3 -2
  167. package/deps/couchbase-cxx-client/docs/cbc-pillowfight.md +7 -2
  168. package/deps/couchbase-cxx-client/docs/cbc-query.md +2 -2
  169. package/deps/couchbase-cxx-client/docs/cbc.md +3 -3
  170. package/deps/couchbase-cxx-client/docs/cli.hxx +5 -5
  171. package/deps/couchbase-cxx-client/docs/mainpage.hxx +42 -5
  172. package/deps/couchbase-cxx-client/test/CMakeLists.txt +1 -0
  173. package/deps/couchbase-cxx-client/test/test_integration_analytics.cxx +28 -6
  174. package/deps/couchbase-cxx-client/test/test_integration_collections.cxx +7 -3
  175. package/deps/couchbase-cxx-client/test/test_integration_connect.cxx +7 -3
  176. package/deps/couchbase-cxx-client/test/test_integration_crud.cxx +13 -3
  177. package/deps/couchbase-cxx-client/test/test_integration_diagnostics.cxx +8 -2
  178. package/deps/couchbase-cxx-client/test/test_integration_durability.cxx +12 -7
  179. package/deps/couchbase-cxx-client/test/test_integration_examples.cxx +283 -11
  180. package/deps/couchbase-cxx-client/test/test_integration_management.cxx +140 -88
  181. package/deps/couchbase-cxx-client/test/test_integration_query.cxx +67 -9
  182. package/deps/couchbase-cxx-client/test/test_integration_range_scan.cxx +12 -12
  183. package/deps/couchbase-cxx-client/test/test_integration_read_replica.cxx +48 -11
  184. package/deps/couchbase-cxx-client/test/test_integration_search.cxx +19 -1
  185. package/deps/couchbase-cxx-client/test/test_integration_subdoc.cxx +60 -9
  186. package/deps/couchbase-cxx-client/test/test_integration_tracer.cxx +3 -0
  187. package/deps/couchbase-cxx-client/test/test_integration_transcoders.cxx +4 -0
  188. package/deps/couchbase-cxx-client/test/test_transaction_examples.cxx +100 -85
  189. package/deps/couchbase-cxx-client/test/test_unit_connection_string.cxx +29 -0
  190. package/deps/couchbase-cxx-client/test/test_unit_search.cxx +427 -0
  191. package/deps/couchbase-cxx-client/test/utils/integration_test_guard.cxx +2 -1
  192. package/deps/couchbase-cxx-client/test/utils/logger.cxx +3 -1
  193. package/deps/couchbase-cxx-client/test/utils/server_version.hxx +31 -15
  194. package/deps/couchbase-cxx-client/test/utils/test_context.cxx +8 -0
  195. package/deps/couchbase-cxx-client/tools/get.cxx +9 -8
  196. package/deps/couchbase-cxx-client/tools/pillowfight.cxx +175 -75
  197. package/deps/couchbase-cxx-client/tools/version.cxx +4 -2
  198. package/dist/binding.d.ts +1 -1
  199. package/dist/binding.js +3 -2
  200. package/package.json +96 -1
  201. package/scripts/createPlatformPackages.js +108 -0
  202. package/scripts/install.js +45 -0
  203. package/scripts/prebuilds.js +249 -0
  204. package/scripts/prune.js +124 -0
  205. package/src/jstocbpp_autogen.hpp +3 -2
@@ -1,4 +1,4 @@
1
- # cbc-pillowfight - simple workload generator {#cbc-pillowfight}
1
+ # cbc-pillowfight - Simple Workload Generator {#cbc-pillowfight}
2
2
 
3
3
  ### NAME
4
4
 
@@ -17,9 +17,12 @@ Run simple workload generator that sends GET/UPSERT requests with optional N1QL
17
17
 
18
18
  <dl>
19
19
  <dt>`-h|--help`</dt><dd>Show this screen.</dd>
20
+ <dt>`--verbose`</dt><dd>Include more context and information where it is applicable.</dd>
20
21
  <dt>`--bucket-name=STRING`</dt><dd>Name of the bucket. [default: `default`]</dd>
21
22
  <dt>`--scope-name=STRING`</dt><dd>Name of the scope. [default: `_default`]</dd>
22
23
  <dt>`--collection-name=STRING`</dt><dd>Name of the collection. [default: `_default`]</dd>
24
+ <dt>`--batch-size=INTEGER`</dt><dd>Number of the operations in single batch. [default: `100`]</dd>
25
+ <dt>`--batch-wait=DURATION`</dt><dd>Time to wait after the batch. [default: `0ms`]</dd>
23
26
  <dt>`--number-of-io-threads=INTEGER`</dt><dd>Number of the IO threads. [default: `1`]</dd>
24
27
  <dt>`--number-of-worker-threads=INTEGER`</dt><dd>Number of the IO threads. [default: `1`]</dd>
25
28
  <dt>`--chance-of-get=FLOAT`</dt><dd>The probability of get operation (where 1 means only get, and 0 - only upsert). [default: `0.6`]</dd>
@@ -29,7 +32,9 @@ Run simple workload generator that sends GET/UPSERT requests with optional N1QL
29
32
  <dt>`--query-statement=STRING`</dt><dd>The N1QL query statement to use ({bucket_name}, {scope_name} and {collection_name} will be substituted). [default: <code>SELECT COUNT(*) FROM \`{bucket_name}\` WHERE type = "fake_profile"</code>]</dd>
30
33
  <dt>`--incompressible-body`</dt><dd>Use random characters to fill generated document value (by default uses 'x' to fill the body).</dd>
31
34
  <dt>`--document-body-size=INTEGER`</dt><dd>Size of the body (if zero, it will use predefined document). [default: `0`]</dd>
35
+ <dt>`--number-of-keys-to-populate=INTEGER`</dt><dd>Preload keys before running workload, so that the worker will not generate new keys afterwards. [default: `1000`]</dd>
32
36
  <dt>`--operations-limit=INTEGER`</dt><dd>Stop and exit after the number of the operations reaches this limit. (zero for running indefinitely) [default: `0`]</dd>
37
+
33
38
  </dl>
34
39
 
35
40
 
@@ -160,4 +165,4 @@ Run simple workload generator that sends GET/UPSERT requests with optional N1QL
160
165
 
161
166
  ### SEE ALSO
162
167
 
163
- [cbc](#cbc).
168
+ [cbc](md_docs_2cbc).
@@ -1,4 +1,4 @@
1
- # cbc-query - run N1QL query {#cbc-query}
1
+ # cbc-query - Execute N1QL Query {#cbc-query}
2
2
 
3
3
  ### NAME
4
4
 
@@ -176,4 +176,4 @@ Execute one or more N1QL queries and print results to standard output.
176
176
 
177
177
  ### SEE ALSO
178
178
 
179
- [cbc](#cbc), [cbc-get](#cbc-get).
179
+ [cbc](md_docs_2cbc), [cbc-get](md_docs_2cbc-get).
@@ -25,12 +25,12 @@ Display version information.
25
25
 
26
26
  <dt>get</dt>
27
27
  <dd>
28
- Retrieve document from the server. See [cbc-get](#cbc-get) for more information.
28
+ Retrieve document from the server. See [cbc-get](md_docs_2cbc-get) for more information.
29
29
  </dd>
30
30
 
31
31
  <dt>query</dt>
32
32
  <dd>
33
- Perform N1QL query. See [cbc-query](#cbc-query) for more information.
33
+ Perform N1QL query. See [cbc-query](md_docs_2cbc-query) for more information.
34
34
  </dd>
35
35
  </dl>
36
36
 
@@ -43,4 +43,4 @@ Perform N1QL query. See [cbc-query](#cbc-query) for more information.
43
43
 
44
44
  ### SEE ALSO
45
45
 
46
- [cbc-get](#cbc-get), [cbc-query](#cbc-query).
46
+ [cbc-get](md_docs_2cbc-get), [cbc-query](md_docs_2cbc-query).
@@ -21,13 +21,13 @@
21
21
  * @page cli Command Line Tools
22
22
  * @brief Indexes of the API grouped by stability.
23
23
  *
24
- * @subpage cbc. CLI tools entry point.
24
+ * @subpage md_docs_2cbc
25
25
  *
26
- * @subpage cbc-get. Retrieve documents from the server by ID.
26
+ * @subpage md_docs_2cbc-get
27
27
  *
28
- * @subpage cbc-query. Execute N1QL queries.
28
+ * @subpage md_docs_2cbc-query
29
29
  *
30
- * @subpage cbc-analytics. Execute Analytics queries.
30
+ * @subpage md_docs_2cbc-analytics
31
31
  *
32
- * @subpage cbc-pillowfight. Run simple workload generator.
32
+ * @subpage md_docs_2cbc-pillowfight
33
33
  */
@@ -22,15 +22,52 @@
22
22
  *
23
23
  * @note You may read about related Couchbase software at https://docs.couchbase.com/
24
24
  *
25
+ * @anchor start-using
25
26
  * ### Start Using
26
27
  *
27
28
  * The following example shows the most basic usage of the library. It performs the following operations:
28
- * * connect to local cluster (location and credentials given in program arguments),
29
- * * in lines <a href="#l00071">70-78</a>, persists document to the collection using @ref couchbase::collection#upsert(),
30
- * * in lines <a href="#l00081">80-89</a>, retrieves document back with @ref couchbase::collection#get(), extracts content as generic JSON
29
+ * * [1] connect to local cluster (location and credentials given in program arguments),
30
+ * * [2] persists document to the collection using @ref couchbase::collection#upsert(),
31
+ * * [3] retrieves document back with @ref couchbase::collection#get(), extracts content as generic JSON
31
32
  * value, and prints one of the fields,
32
- * * in lines <a href="#l00092">91-102</a>, performs N1QL query with @ref couchbase::scope#query() and prints the result.
33
- * * close the cluster and deallocate resources
33
+ * * [4] performs N1QL query with @ref couchbase::scope#query() and prints the result.
34
+ * * [5] closes the cluster and deallocate resources
34
35
  *
35
36
  * @snippetlineno test_integration_examples.cxx start-using
37
+ *
38
+ * @anchor start-transactions
39
+ * ### Using Transactions
40
+ *
41
+ * Next example shows transactions API. Read more details in @ref couchbase::transactions::transactions
42
+ *
43
+ * * [1] connect to cluster using the given connection string and the options
44
+ * * [2] persist three documents to the default collection of bucket "default"
45
+ * * [3] blocking transaction
46
+ * * [3.1] closure argument to @ref couchbase::transactions::transactions::run method encapsulates logic, that has to be run in
47
+ * transaction
48
+ * * [3.2] get document
49
+ * * [3.4] replace document's content
50
+ * * [3.5] check the overall status of the transaction
51
+ * * [4] asynchronous transaction
52
+ * * [4.1] create promise to retrieve result from the transaction
53
+ * * [4.2] closure argument to @ref couchbase::transactions::transactions::run method encapsulates logic, that has to be run in
54
+ * transaction
55
+ * * [4.3] get document
56
+ * * [4.4] replace document's content
57
+ * * [4.5] second closure argument to @ref couchbase::transactions::transactions::run represents transaction completion logic
58
+ * * [5] close cluster connection
59
+ *
60
+ * @snippetlineno test_transaction_examples.cxx blocking-txn
61
+ *
62
+ * See also simple class that implements an operation in fictional game backend: @ref game_server.cxx (and its asynchronous version in @ref
63
+ * async_game_server.cxx)
64
+ *
65
+ * @example minimal.cxx - minimal example of SDK, stores single document into the collection.
66
+ *
67
+ * @example game_server.cxx - more complicated example of using transactions (synchronous version).
68
+ *
69
+ * @example async_game_server.cxx - asynchronous version of the game_server.cxx.
70
+ *
71
+ * @example distributed_mutex.cxx - example of distributed mutex object, that backed by a document inside collection.
72
+ *
36
73
  */
@@ -25,6 +25,7 @@ unit_test(json_streaming_lexer)
25
25
  unit_test(jsonsl)
26
26
  unit_test(config_profiles)
27
27
  unit_test(options)
28
+ unit_test(search)
28
29
  target_link_libraries(test_unit_jsonsl jsonsl)
29
30
 
30
31
  integration_benchmark(get)
@@ -24,8 +24,12 @@ TEST_CASE("integration: analytics query")
24
24
  {
25
25
  test::utils::integration_test_guard integration;
26
26
 
27
+ if (integration.ctx.deployment == test::utils::deployment_type::elixir) {
28
+ SKIP("elixir deployment does not support analytics");
29
+ }
30
+
27
31
  if (!integration.cluster_version().supports_analytics()) {
28
- return;
32
+ SKIP("cluster does not support analytics");
29
33
  }
30
34
 
31
35
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
@@ -180,8 +184,15 @@ TEST_CASE("integration: analytics scope query")
180
184
  {
181
185
  test::utils::integration_test_guard integration;
182
186
 
183
- if (!integration.cluster_version().supports_analytics() || !integration.cluster_version().supports_collections()) {
184
- return;
187
+ if (integration.ctx.deployment == test::utils::deployment_type::elixir) {
188
+ SKIP("elixir deployment does not support analytics");
189
+ }
190
+
191
+ if (!integration.cluster_version().supports_analytics()) {
192
+ SKIP("cluster does not support analytics");
193
+ }
194
+ if (!integration.cluster_version().supports_collections()) {
195
+ SKIP("cluster does not support collections");
185
196
  }
186
197
 
187
198
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
@@ -286,8 +297,12 @@ TEST_CASE("integration: public API analytics query")
286
297
  {
287
298
  test::utils::integration_test_guard integration;
288
299
 
300
+ if (integration.ctx.deployment == test::utils::deployment_type::elixir) {
301
+ SKIP("elixir deployment does not support analytics");
302
+ }
303
+
289
304
  if (!integration.cluster_version().supports_analytics()) {
290
- return;
305
+ SKIP("cluster does not support analytics");
291
306
  }
292
307
 
293
308
  auto cluster = couchbase::cluster(integration.cluster);
@@ -468,8 +483,15 @@ TEST_CASE("integration: public API analytics scope query")
468
483
  {
469
484
  test::utils::integration_test_guard integration;
470
485
 
471
- if (!integration.cluster_version().supports_analytics() || !integration.cluster_version().supports_collections()) {
472
- return;
486
+ if (integration.ctx.deployment == test::utils::deployment_type::elixir) {
487
+ SKIP("elixir deployment does not support analytics");
488
+ }
489
+
490
+ if (!integration.cluster_version().supports_analytics()) {
491
+ SKIP("cluster does not support analytics");
492
+ }
493
+ if (!integration.cluster_version().supports_collections()) {
494
+ SKIP("cluster does not support collections");
473
495
  }
474
496
 
475
497
  auto cluster = couchbase::cluster(integration.cluster);
@@ -25,7 +25,7 @@ TEST_CASE("integration: missing scope and collection", "[integration]")
25
25
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
26
26
 
27
27
  if (!integration.cluster_version().supports_collections()) {
28
- return;
28
+ SKIP("cluster does not support collections");
29
29
  }
30
30
 
31
31
  SECTION("get missing scope")
@@ -77,7 +77,7 @@ TEST_CASE("integration: get and insert non default scope and collection", "[inte
77
77
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
78
78
 
79
79
  if (!integration.cluster_version().supports_collections()) {
80
- return;
80
+ SKIP("cluster does not support collections");
81
81
  }
82
82
 
83
83
  auto scope_name = test::utils::uniq_id("scope");
@@ -121,7 +121,7 @@ TEST_CASE("integration: insert into dropped scope", "[integration]")
121
121
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
122
122
 
123
123
  if (!integration.cluster_version().supports_collections()) {
124
- return;
124
+ SKIP("cluster does not support collections");
125
125
  }
126
126
 
127
127
  auto scope_name = test::utils::uniq_id("scope");
@@ -166,6 +166,10 @@ TEST_CASE("integration: insert into dropped scope", "[integration]")
166
166
  REQUIRE(dropped);
167
167
  }
168
168
 
169
+ if (integration.cluster_version().is_mock()) {
170
+ SKIP("GOCAVES does not generate error when inserting into dropped collection. See "
171
+ "https://github.com/couchbaselabs/gocaves/issues/108");
172
+ }
169
173
  {
170
174
  couchbase::core::operations::upsert_request req{ id, couchbase::core::utils::to_binary(key) };
171
175
  auto resp = test::utils::execute(integration.cluster, req);
@@ -42,9 +42,9 @@ TEST_CASE("integration: connecting with unresponsive first node in bootstrap nod
42
42
  test::utils::init_logger();
43
43
  asio::io_context io{};
44
44
  auto ctx = test::utils::test_context::load_from_environment();
45
- if (ctx.deployment == test::utils::deployment_type::capella) {
45
+ if (ctx.deployment == test::utils::deployment_type::capella || ctx.deployment == test::utils::deployment_type::elixir) {
46
46
  // This breaks SRV assumptions (only one host in connection string)
47
- return;
47
+ SKIP("capella deployment uses single host in the connection string, which assumed to be reachable");
48
48
  }
49
49
  auto connstr = couchbase::core::utils::parse_connection_string(ctx.connection_string);
50
50
  REQUIRE_FALSE(connstr.bootstrap_nodes.empty());
@@ -125,6 +125,10 @@ TEST_CASE("integration: destroy cluster without waiting for close completion", "
125
125
  test::utils::init_logger();
126
126
  auto ctx = test::utils::test_context::load_from_environment();
127
127
 
128
+ if (ctx.deployment == test::utils::deployment_type::elixir) {
129
+ SKIP("elixir deployment is incompatible with parts of this test, but it is probably bug in SDK. FIXME");
130
+ }
131
+
128
132
  asio::io_context io{};
129
133
 
130
134
  auto cluster = couchbase::core::cluster::create(io);
@@ -143,7 +147,7 @@ TEST_CASE("integration: destroy cluster without waiting for close completion", "
143
147
  }
144
148
 
145
149
  // hit Query
146
- {
150
+ if (ctx.version.supports_query()) {
147
151
  couchbase::core::operations::query_request req{ R"(SELECT 42 AS the_answer)" };
148
152
  auto resp = test::utils::execute(cluster, req);
149
153
  REQUIRE_SUCCESS(resp.ctx.ec);
@@ -35,6 +35,10 @@ TEST_CASE("integration: switching off mutation token", "[integration]")
35
35
  opts.enable_mutation_tokens = false;
36
36
  test::utils::integration_test_guard integration(opts);
37
37
 
38
+ if (integration.cluster_version().is_mock()) {
39
+ SKIP("GOCAVES does not allow to switching off mutation tokens. See https://github.com/couchbaselabs/gocaves/issues/100");
40
+ }
41
+
38
42
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
39
43
  couchbase::core::document_id id{ integration.ctx.bucket, "_default", "_default", test::utils::uniq_id("foo") };
40
44
 
@@ -228,7 +232,8 @@ TEST_CASE("integration: pessimistic locking", "[integration]")
228
232
  {
229
233
  couchbase::core::operations::get_and_lock_request req{ id };
230
234
  req.lock_time = lock_time;
231
- if (integration.ctx.deployment == test::utils::deployment_type::capella) {
235
+ if (integration.ctx.deployment == test::utils::deployment_type::capella ||
236
+ integration.ctx.deployment == test::utils::deployment_type::elixir) {
232
237
  req.timeout = std::chrono::seconds{ 2 };
233
238
  }
234
239
  auto resp = test::utils::execute(integration.cluster, req);
@@ -489,7 +494,7 @@ TEST_CASE("integration: upsert preserve expiry", "[integration]")
489
494
  test::utils::integration_test_guard integration;
490
495
 
491
496
  if (!integration.cluster_version().supports_preserve_expiry()) {
492
- return;
497
+ SKIP("cluster does not support preserve expiry");
493
498
  }
494
499
 
495
500
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
@@ -670,6 +675,10 @@ TEST_CASE("integration: open bucket that does not exist", "[integration]")
670
675
  {
671
676
  test::utils::integration_test_guard integration;
672
677
 
678
+ if (integration.cluster_version().is_mock()) {
679
+ SKIP("GOCAVES returns not_found (0x01) instead of no_access (0x24). See https://github.com/couchbaselabs/gocaves/issues/102");
680
+ }
681
+
673
682
  auto bucket_name = test::utils::uniq_id("missing_bucket");
674
683
 
675
684
  auto barrier = std::make_shared<std::promise<std::error_code>>();
@@ -814,7 +823,8 @@ TEST_CASE("integration: pessimistic locking with public API", "[integration]")
814
823
  // it is not allowed to lock the same key twice
815
824
  {
816
825
  couchbase::get_and_lock_options options{};
817
- if (integration.ctx.deployment == test::utils::deployment_type::capella) {
826
+ if (integration.ctx.deployment == test::utils::deployment_type::capella ||
827
+ integration.ctx.deployment == test::utils::deployment_type::elixir) {
818
828
  options.timeout(std::chrono::seconds{ 2 });
819
829
  }
820
830
  auto [ctx, resp] = collection.get_and_lock(id, lock_time, options).get();
@@ -321,6 +321,10 @@ TEST_CASE("integration: fetch diagnostics after N1QL query", "[integration]")
321
321
  {
322
322
  test::utils::integration_test_guard integration;
323
323
 
324
+ if (!integration.cluster_version().supports_query() || integration.ctx.deployment == test::utils::deployment_type::elixir) {
325
+ SKIP("cluster does not support query or cluster level query");
326
+ }
327
+
324
328
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
325
329
  {
326
330
  couchbase::core::operations::query_request req{ "SELECT 'hello, couchbase' AS greetings" };
@@ -365,8 +369,10 @@ TEST_CASE("integration: ping", "[integration]")
365
369
  REQUIRE(res.services.count(couchbase::core::service_type::management) > 0);
366
370
  REQUIRE(res.services[couchbase::core::service_type::management].size() > 0);
367
371
 
368
- REQUIRE(res.services.count(couchbase::core::service_type::view) > 0);
369
- REQUIRE(res.services[couchbase::core::service_type::view].size() > 0);
372
+ if (integration.ctx.deployment != test::utils::deployment_type::elixir) {
373
+ REQUIRE(res.services.count(couchbase::core::service_type::view) > 0);
374
+ REQUIRE(res.services[couchbase::core::service_type::view].size() > 0);
375
+ }
370
376
 
371
377
  REQUIRE(res.services.count(couchbase::core::service_type::query) > 0);
372
378
  REQUIRE(res.services[couchbase::core::service_type::query].size() > 0);
@@ -25,7 +25,7 @@ TEST_CASE("integration: durable operations", "[integration]")
25
25
  {
26
26
  test::utils::integration_test_guard integration;
27
27
  if (!integration.cluster_version().supports_enhanced_durability()) {
28
- return;
28
+ SKIP("cluster does not support enhanced durability");
29
29
  }
30
30
 
31
31
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
@@ -68,7 +68,7 @@ TEST_CASE("integration: durable operations", "[integration]")
68
68
  auto resp = test::utils::execute(integration.cluster, req);
69
69
  REQUIRE_SUCCESS(resp.ctx.ec());
70
70
  REQUIRE(!resp.cas.empty());
71
- REQUIRE(resp.value == couchbase::core::utils::to_binary(R"({"foo":"bar","baz":42})"));
71
+ REQUIRE(couchbase::core::utils::json::parse_binary(resp.value) == couchbase::core::utils::json::parse(R"({"foo":"bar","baz":42})"));
72
72
  }
73
73
  {
74
74
  couchbase::core::operations::remove_request req{ id };
@@ -83,8 +83,13 @@ TEST_CASE("integration: durable operations", "[integration]")
83
83
  TEST_CASE("integration: legacy durability persist to active and replicate to one", "[integration]")
84
84
  {
85
85
  test::utils::integration_test_guard integration;
86
- if (integration.number_of_replicas() == 0 || integration.number_of_nodes() <= integration.number_of_replicas()) {
87
- return;
86
+ if (integration.number_of_replicas() == 0) {
87
+ SKIP("bucket has zero replicas");
88
+ }
89
+ if (integration.number_of_nodes() <= integration.number_of_replicas()) {
90
+ SKIP(fmt::format("number of nodes ({}) is less or equal to number of replicas ({})",
91
+ integration.number_of_nodes(),
92
+ integration.number_of_replicas()));
88
93
  }
89
94
 
90
95
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
@@ -124,7 +129,7 @@ TEST_CASE("integration: low level legacy durability impossible if number of node
124
129
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
125
130
 
126
131
  if (integration.number_of_replicas() == 3) {
127
- return;
132
+ SKIP("bucket has three replicas configured, so the test will not be applicable");
128
133
  }
129
134
 
130
135
  couchbase::core::document_id id{ integration.ctx.bucket, "_default", "_default", test::utils::uniq_id("foo") };
@@ -159,7 +164,7 @@ TEST_CASE("integration: low level legacy durability persist to active and replic
159
164
  test::utils::open_bucket(integration.cluster, integration.ctx.bucket);
160
165
 
161
166
  if (integration.number_of_replicas() < 1) {
162
- return;
167
+ SKIP("bucket does not have replicas configured");
163
168
  }
164
169
 
165
170
  couchbase::core::document_id id{ integration.ctx.bucket, "_default", "_default", test::utils::uniq_id("foo") };
@@ -211,7 +216,7 @@ TEST_CASE("integration: low level legacy durability persist to active and replic
211
216
  auto resp = test::utils::execute(integration.cluster, req);
212
217
  REQUIRE_SUCCESS(resp.ctx.ec());
213
218
  REQUIRE(!resp.cas.empty());
214
- REQUIRE(resp.value == couchbase::core::utils::to_binary(R"({"foo":"bar","baz":42})"));
219
+ REQUIRE(couchbase::core::utils::json::parse_binary(resp.value) == couchbase::core::utils::json::parse(R"({"foo":"bar","baz":42})"));
215
220
  }
216
221
  {
217
222
  couchbase::core::operations::remove_request_with_legacy_durability req{