mt-libcouchbase 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (707) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +22 -0
  3. data/.gitmodules +3 -0
  4. data/.rspec +1 -0
  5. data/.travis.yml +38 -0
  6. data/Gemfile +4 -0
  7. data/LICENSE +24 -0
  8. data/README.md +445 -0
  9. data/Rakefile +76 -0
  10. data/ext/README.md +6 -0
  11. data/ext/Rakefile +19 -0
  12. data/ext/libcouchbase/.gitignore +132 -0
  13. data/ext/libcouchbase/CMakeLists.txt +455 -0
  14. data/ext/libcouchbase/CONTRIBUTING.md +105 -0
  15. data/ext/libcouchbase/LICENSE +202 -0
  16. data/ext/libcouchbase/README.markdown +195 -0
  17. data/ext/libcouchbase/RELEASE_NOTES.markdown +3523 -0
  18. data/ext/libcouchbase/cmake/Modules/ConfigureDtrace.cmake +52 -0
  19. data/ext/libcouchbase/cmake/Modules/CopyPDB.cmake +42 -0
  20. data/ext/libcouchbase/cmake/Modules/DistScript.cmake +17 -0
  21. data/ext/libcouchbase/cmake/Modules/DownloadLcbDep.cmake +18 -0
  22. data/ext/libcouchbase/cmake/Modules/FindCouchbaseHdrHistogram.cmake +15 -0
  23. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibev.cmake +73 -0
  24. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibevent.cmake +54 -0
  25. data/ext/libcouchbase/cmake/Modules/FindCouchbaseLibuv.cmake +57 -0
  26. data/ext/libcouchbase/cmake/Modules/FindProfiler.cmake +16 -0
  27. data/ext/libcouchbase/cmake/Modules/GenerateConfigDotH.cmake +49 -0
  28. data/ext/libcouchbase/cmake/Modules/GetLibcouchbaseFlags.cmake +142 -0
  29. data/ext/libcouchbase/cmake/Modules/GetPlatformCCInfo.cmake +45 -0
  30. data/ext/libcouchbase/cmake/Modules/GetVersionInfo.cmake +70 -0
  31. data/ext/libcouchbase/cmake/config-cmake.h.in +80 -0
  32. data/ext/libcouchbase/cmake/configure +355 -0
  33. data/ext/libcouchbase/cmake/defs.mk.in +6 -0
  34. data/ext/libcouchbase/cmake/dtrace-instr-link.pl +51 -0
  35. data/ext/libcouchbase/cmake/libcouchbase.stp.in +829 -0
  36. data/ext/libcouchbase/cmake/source_files.cmake +104 -0
  37. data/ext/libcouchbase/contrib/cJSON/cJSON.c +1022 -0
  38. data/ext/libcouchbase/contrib/cJSON/cJSON.h +158 -0
  39. data/ext/libcouchbase/contrib/cbsasl/CMakeLists.txt +25 -0
  40. data/ext/libcouchbase/contrib/cbsasl/COPYING +202 -0
  41. data/ext/libcouchbase/contrib/cbsasl/include/cbsasl/cbsasl.h +259 -0
  42. data/ext/libcouchbase/contrib/cbsasl/src/client.c +419 -0
  43. data/ext/libcouchbase/contrib/cbsasl/src/common.c +50 -0
  44. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.c +67 -0
  45. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/hmac.h +33 -0
  46. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.c +296 -0
  47. data/ext/libcouchbase/contrib/cbsasl/src/cram-md5/md5.h +45 -0
  48. data/ext/libcouchbase/contrib/cbsasl/src/hash.c +573 -0
  49. data/ext/libcouchbase/contrib/cbsasl/src/hash.h +15 -0
  50. data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.c +500 -0
  51. data/ext/libcouchbase/contrib/cbsasl/src/scram-sha/scram_utils.h +99 -0
  52. data/ext/libcouchbase/contrib/cbsasl/src/util.h +31 -0
  53. data/ext/libcouchbase/contrib/cliopts/CMakeLists.txt +2 -0
  54. data/ext/libcouchbase/contrib/cliopts/cliopts.c +938 -0
  55. data/ext/libcouchbase/contrib/cliopts/cliopts.h +610 -0
  56. data/ext/libcouchbase/contrib/genhash/genhash.c +371 -0
  57. data/ext/libcouchbase/contrib/genhash/genhash.h +241 -0
  58. data/ext/libcouchbase/contrib/gtest-1.7.0/CHANGES +157 -0
  59. data/ext/libcouchbase/contrib/gtest-1.7.0/CMakeLists.txt +252 -0
  60. data/ext/libcouchbase/contrib/gtest-1.7.0/CONTRIBUTORS +37 -0
  61. data/ext/libcouchbase/contrib/gtest-1.7.0/LICENSE +28 -0
  62. data/ext/libcouchbase/contrib/gtest-1.7.0/MINIFY.sh +15 -0
  63. data/ext/libcouchbase/contrib/gtest-1.7.0/README +435 -0
  64. data/ext/libcouchbase/contrib/gtest-1.7.0/cmake/internal_utils.cmake +227 -0
  65. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-death-test.h +294 -0
  66. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-message.h +250 -0
  67. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h +1421 -0
  68. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-param-test.h.pump +487 -0
  69. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-printers.h +855 -0
  70. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-spi.h +232 -0
  71. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-test-part.h +179 -0
  72. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest-typed-test.h +259 -0
  73. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest.h +2291 -0
  74. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_pred_impl.h +358 -0
  75. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/gtest_prod.h +58 -0
  76. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-death-test-internal.h +319 -0
  77. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-filepath.h +206 -0
  78. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-internal.h +1158 -0
  79. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-linked_ptr.h +233 -0
  80. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h +5143 -0
  81. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util-generated.h.pump +301 -0
  82. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-param-util.h +619 -0
  83. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-port.h +1947 -0
  84. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-string.h +167 -0
  85. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h +1012 -0
  86. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-tuple.h.pump +339 -0
  87. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h +3331 -0
  88. data/ext/libcouchbase/contrib/gtest-1.7.0/include/gtest/internal/gtest-type-util.h.pump +297 -0
  89. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-all.cc +48 -0
  90. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-death-test.cc +1344 -0
  91. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-filepath.cc +382 -0
  92. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-internal-inl.h +1218 -0
  93. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-port.cc +805 -0
  94. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-printers.cc +363 -0
  95. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-test-part.cc +110 -0
  96. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest-typed-test.cc +110 -0
  97. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest.cc +5015 -0
  98. data/ext/libcouchbase/contrib/gtest-1.7.0/src/gtest_main.cc +38 -0
  99. data/ext/libcouchbase/contrib/http_parser/LICENSE-MIT +23 -0
  100. data/ext/libcouchbase/contrib/http_parser/README.md +178 -0
  101. data/ext/libcouchbase/contrib/http_parser/http_parser.c +2060 -0
  102. data/ext/libcouchbase/contrib/http_parser/http_parser.h +321 -0
  103. data/ext/libcouchbase/contrib/jsonsl/LICENSE +20 -0
  104. data/ext/libcouchbase/contrib/jsonsl/jsonsl.c +1452 -0
  105. data/ext/libcouchbase/contrib/jsonsl/jsonsl.h +971 -0
  106. data/ext/libcouchbase/contrib/lcb-jsoncpp/CMakeLists.txt +6 -0
  107. data/ext/libcouchbase/contrib/lcb-jsoncpp/LICENSE +55 -0
  108. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp-forwards.h +255 -0
  109. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.cpp +4893 -0
  110. data/ext/libcouchbase/contrib/lcb-jsoncpp/lcb-jsoncpp.h +1961 -0
  111. data/ext/libcouchbase/contrib/snappy/CMakeLists.txt +7 -0
  112. data/ext/libcouchbase/contrib/snappy/COPYING +28 -0
  113. data/ext/libcouchbase/contrib/snappy/snappy-c.cc +90 -0
  114. data/ext/libcouchbase/contrib/snappy/snappy-c.h +138 -0
  115. data/ext/libcouchbase/contrib/snappy/snappy-internal.h +150 -0
  116. data/ext/libcouchbase/contrib/snappy/snappy-lcb-msvc.h +5 -0
  117. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.cc +75 -0
  118. data/ext/libcouchbase/contrib/snappy/snappy-sinksource.h +137 -0
  119. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.cc +42 -0
  120. data/ext/libcouchbase/contrib/snappy/snappy-stubs-internal.h +491 -0
  121. data/ext/libcouchbase/contrib/snappy/snappy-stubs-public.h +100 -0
  122. data/ext/libcouchbase/contrib/snappy/snappy.cc +1312 -0
  123. data/ext/libcouchbase/contrib/snappy/snappy.h +184 -0
  124. data/ext/libcouchbase/contrib/win32-defs/iocpdefs.h +133 -0
  125. data/ext/libcouchbase/contrib/win32-defs/mingwdefs.h +4396 -0
  126. data/ext/libcouchbase/contrib/win32-defs/win_stdint.h +258 -0
  127. data/ext/libcouchbase/doc/Doxyfile +2495 -0
  128. data/ext/libcouchbase/doc/DoxygenLayout.xml +109 -0
  129. data/ext/libcouchbase/doc/Makefile +44 -0
  130. data/ext/libcouchbase/doc/apiattr.h +117 -0
  131. data/ext/libcouchbase/doc/cbc-n1qlback.markdown +88 -0
  132. data/ext/libcouchbase/doc/cbc-pillowfight.markdown +296 -0
  133. data/ext/libcouchbase/doc/cbc-subdoc.markdown +299 -0
  134. data/ext/libcouchbase/doc/cbc.markdown +763 -0
  135. data/ext/libcouchbase/doc/cbcrc.markdown +52 -0
  136. data/ext/libcouchbase/doc/common-additional-options.markdown +82 -0
  137. data/ext/libcouchbase/doc/common-options.markdown +71 -0
  138. data/ext/libcouchbase/doc/environment.h +93 -0
  139. data/ext/libcouchbase/doc/example/threads.c +77 -0
  140. data/ext/libcouchbase/doc/footer.html +22 -0
  141. data/ext/libcouchbase/doc/genman.sh +25 -0
  142. data/ext/libcouchbase/doc/header.html +52 -0
  143. data/ext/libcouchbase/doc/intro.h +130 -0
  144. data/ext/libcouchbase/doc/mainpage.h +136 -0
  145. data/ext/libcouchbase/doc/man/cbc-admin.1 +1 -0
  146. data/ext/libcouchbase/doc/man/cbc-bucket-create.1 +1 -0
  147. data/ext/libcouchbase/doc/man/cbc-bucket-delete.1 +1 -0
  148. data/ext/libcouchbase/doc/man/cbc-cat.1 +1 -0
  149. data/ext/libcouchbase/doc/man/cbc-connstr.1 +1 -0
  150. data/ext/libcouchbase/doc/man/cbc-cp.1 +1 -0
  151. data/ext/libcouchbase/doc/man/cbc-create.1 +1 -0
  152. data/ext/libcouchbase/doc/man/cbc-decr.1 +1 -0
  153. data/ext/libcouchbase/doc/man/cbc-flush.1 +1 -0
  154. data/ext/libcouchbase/doc/man/cbc-hash.1 +1 -0
  155. data/ext/libcouchbase/doc/man/cbc-incr.1 +1 -0
  156. data/ext/libcouchbase/doc/man/cbc-lock.1 +1 -0
  157. data/ext/libcouchbase/doc/man/cbc-mcflush.1 +1 -0
  158. data/ext/libcouchbase/doc/man/cbc-mcversion.1 +1 -0
  159. data/ext/libcouchbase/doc/man/cbc-n1ql.1 +1 -0
  160. data/ext/libcouchbase/doc/man/cbc-n1qlback.1 +198 -0
  161. data/ext/libcouchbase/doc/man/cbc-observe.1 +1 -0
  162. data/ext/libcouchbase/doc/man/cbc-pillowfight.1 +499 -0
  163. data/ext/libcouchbase/doc/man/cbc-ping.1 +1 -0
  164. data/ext/libcouchbase/doc/man/cbc-rm.1 +1 -0
  165. data/ext/libcouchbase/doc/man/cbc-role-list.1 +1 -0
  166. data/ext/libcouchbase/doc/man/cbc-stats.1 +1 -0
  167. data/ext/libcouchbase/doc/man/cbc-subdoc.1 +494 -0
  168. data/ext/libcouchbase/doc/man/cbc-unlock.1 +1 -0
  169. data/ext/libcouchbase/doc/man/cbc-user-delete.1 +1 -0
  170. data/ext/libcouchbase/doc/man/cbc-user-list.1 +1 -0
  171. data/ext/libcouchbase/doc/man/cbc-user-upsert.1 +1 -0
  172. data/ext/libcouchbase/doc/man/cbc-verbosity.1 +1 -0
  173. data/ext/libcouchbase/doc/man/cbc-version.1 +1 -0
  174. data/ext/libcouchbase/doc/man/cbc-view.1 +1 -0
  175. data/ext/libcouchbase/doc/man/cbc-watch.1 +1 -0
  176. data/ext/libcouchbase/doc/man/cbc.1 +1035 -0
  177. data/ext/libcouchbase/doc/man/cbcrc.4 +71 -0
  178. data/ext/libcouchbase/doc/style.css +1162 -0
  179. data/ext/libcouchbase/example/CMakeLists.txt +52 -0
  180. data/ext/libcouchbase/example/README.markdown +47 -0
  181. data/ext/libcouchbase/example/analytics/.gitignore +1 -0
  182. data/ext/libcouchbase/example/analytics/analytics.c +158 -0
  183. data/ext/libcouchbase/example/analytics/build-queries.rb +34 -0
  184. data/ext/libcouchbase/example/analytics/cJSON.c +1 -0
  185. data/ext/libcouchbase/example/analytics/cJSON.h +1 -0
  186. data/ext/libcouchbase/example/analytics/queries/00-show-dataverse.json +5 -0
  187. data/ext/libcouchbase/example/analytics/queries/01-setup-dataset-breweries.json +6 -0
  188. data/ext/libcouchbase/example/analytics/queries/02-setup-dataset-beers.json +6 -0
  189. data/ext/libcouchbase/example/analytics/queries/03-initiate-shadow.json +6 -0
  190. data/ext/libcouchbase/example/analytics/queries/04-list-datasets.json +7 -0
  191. data/ext/libcouchbase/example/analytics/queries/05-count-breweries.json +5 -0
  192. data/ext/libcouchbase/example/analytics/queries/06-first-brewery.json +6 -0
  193. data/ext/libcouchbase/example/analytics/queries/07-key-based-lookup.json +6 -0
  194. data/ext/libcouchbase/example/analytics/queries/08-exact-match-lookup.json +7 -0
  195. data/ext/libcouchbase/example/analytics/queries/09-exact-match-lookup-different-shape.json +6 -0
  196. data/ext/libcouchbase/example/analytics/queries/10-other-query-filters.json +6 -0
  197. data/ext/libcouchbase/example/analytics/queries/11-equijoin.json +9 -0
  198. data/ext/libcouchbase/example/analytics/queries/12-equijoin-select-star.json +10 -0
  199. data/ext/libcouchbase/example/analytics/queries/13-ansi-join.json +8 -0
  200. data/ext/libcouchbase/example/analytics/queries/14-join-select-values.json +8 -0
  201. data/ext/libcouchbase/example/analytics/queries/15-nested-outer-join.json +7 -0
  202. data/ext/libcouchbase/example/analytics/queries/16-theta-join.json +8 -0
  203. data/ext/libcouchbase/example/analytics/queries/17-existential-quantification.json +9 -0
  204. data/ext/libcouchbase/example/analytics/queries/18-universal-quantification.json +7 -0
  205. data/ext/libcouchbase/example/analytics/queries/19-simple-aggregation.json +6 -0
  206. data/ext/libcouchbase/example/analytics/queries/20-simple-aggregation-unwrapped-value.json +6 -0
  207. data/ext/libcouchbase/example/analytics/queries/21-simple-aggregation-explicit.json +6 -0
  208. data/ext/libcouchbase/example/analytics/queries/22-grouping-and-aggregation.json +6 -0
  209. data/ext/libcouchbase/example/analytics/queries/23-grouping-and-aggregation-with-hint.json +7 -0
  210. data/ext/libcouchbase/example/analytics/queries/24-grouping-and-limits.json +7 -0
  211. data/ext/libcouchbase/example/analytics/queries/25-named-parameters.json +7 -0
  212. data/ext/libcouchbase/example/analytics/queries/26-positional-parameters.json +7 -0
  213. data/ext/libcouchbase/example/analytics/queries.h +113 -0
  214. data/ext/libcouchbase/example/crypto/.gitignore +2 -0
  215. data/ext/libcouchbase/example/crypto/Makefile +13 -0
  216. data/ext/libcouchbase/example/crypto/common_provider.c +26 -0
  217. data/ext/libcouchbase/example/crypto/common_provider.h +33 -0
  218. data/ext/libcouchbase/example/crypto/openssl_symmetric_decrypt.c +144 -0
  219. data/ext/libcouchbase/example/crypto/openssl_symmetric_encrypt.c +146 -0
  220. data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.c +271 -0
  221. data/ext/libcouchbase/example/crypto/openssl_symmetric_provider.h +29 -0
  222. data/ext/libcouchbase/example/db/db.c +171 -0
  223. data/ext/libcouchbase/example/db/vb.c +227 -0
  224. data/ext/libcouchbase/example/fts/.gitignore +1 -0
  225. data/ext/libcouchbase/example/fts/build-queries.rb +33 -0
  226. data/ext/libcouchbase/example/fts/fts.c +142 -0
  227. data/ext/libcouchbase/example/fts/queries/00-simple-text-query.json +12 -0
  228. data/ext/libcouchbase/example/fts/queries/01-simple-text-query-on-non-default-index.json +9 -0
  229. data/ext/libcouchbase/example/fts/queries/02-simple-text-query-on-stored-field.json +13 -0
  230. data/ext/libcouchbase/example/fts/queries/03-match-query-with-facet.json +19 -0
  231. data/ext/libcouchbase/example/fts/queries/04-docid-query.json +11 -0
  232. data/ext/libcouchbase/example/fts/queries/05-unanalyzed-term-query-with-fuzziness-level-of-0.json +13 -0
  233. data/ext/libcouchbase/example/fts/queries/06-unanalyzed-term-query-with-fuzziness-level-of-2.json +14 -0
  234. data/ext/libcouchbase/example/fts/queries/07-match-phrase-query.json +13 -0
  235. data/ext/libcouchbase/example/fts/queries/08-phrase-query.json +16 -0
  236. data/ext/libcouchbase/example/fts/queries/09-query-string-query.json +9 -0
  237. data/ext/libcouchbase/example/fts/queries/10-conjunction-query.json +21 -0
  238. data/ext/libcouchbase/example/fts/queries/11-wild-card-query.json +13 -0
  239. data/ext/libcouchbase/example/fts/queries/12-numeric-range-query.json +11 -0
  240. data/ext/libcouchbase/example/fts/queries/13-regexp-query.json +13 -0
  241. data/ext/libcouchbase/example/fts/queries.h +61 -0
  242. data/ext/libcouchbase/example/instancepool/main.cc +112 -0
  243. data/ext/libcouchbase/example/instancepool/pool.cc +102 -0
  244. data/ext/libcouchbase/example/instancepool/pool.h +69 -0
  245. data/ext/libcouchbase/example/libeventdirect/main.c +222 -0
  246. data/ext/libcouchbase/example/mcc/mcc.cc +246 -0
  247. data/ext/libcouchbase/example/minimal/.gitignore +1 -0
  248. data/ext/libcouchbase/example/minimal/minimal.c +132 -0
  249. data/ext/libcouchbase/example/minimal/query.c +185 -0
  250. data/ext/libcouchbase/example/observe/durability.c +102 -0
  251. data/ext/libcouchbase/example/observe/observe.c +159 -0
  252. data/ext/libcouchbase/example/subdoc/subdoc-multi.cc +143 -0
  253. data/ext/libcouchbase/example/subdoc/subdoc-simple.cc +201 -0
  254. data/ext/libcouchbase/example/subdoc/subdoc-xattrs.c +286 -0
  255. data/ext/libcouchbase/example/tick/tick.c +119 -0
  256. data/ext/libcouchbase/example/tracing/.gitignore +2 -0
  257. data/ext/libcouchbase/example/tracing/Makefile +8 -0
  258. data/ext/libcouchbase/example/tracing/cJSON.c +1 -0
  259. data/ext/libcouchbase/example/tracing/cJSON.h +1 -0
  260. data/ext/libcouchbase/example/tracing/tracing.c +439 -0
  261. data/ext/libcouchbase/example/tracing/views.c +444 -0
  262. data/ext/libcouchbase/example/users/README +48 -0
  263. data/ext/libcouchbase/example/users/users.c +147 -0
  264. data/ext/libcouchbase/example/views/views-example.cc +83 -0
  265. data/ext/libcouchbase/include/libcouchbase/_cxxwrap.h +150 -0
  266. data/ext/libcouchbase/include/libcouchbase/api-legacy.h +1689 -0
  267. data/ext/libcouchbase/include/libcouchbase/api3.h +2 -0
  268. data/ext/libcouchbase/include/libcouchbase/assert.h +44 -0
  269. data/ext/libcouchbase/include/libcouchbase/auth.h +297 -0
  270. data/ext/libcouchbase/include/libcouchbase/cbft.h +151 -0
  271. data/ext/libcouchbase/include/libcouchbase/cntl-private.h +319 -0
  272. data/ext/libcouchbase/include/libcouchbase/cntl.h +1418 -0
  273. data/ext/libcouchbase/include/libcouchbase/configuration.h.in +29 -0
  274. data/ext/libcouchbase/include/libcouchbase/couchbase.h +4089 -0
  275. data/ext/libcouchbase/include/libcouchbase/crypto.h +306 -0
  276. data/ext/libcouchbase/include/libcouchbase/deprecated.h +312 -0
  277. data/ext/libcouchbase/include/libcouchbase/error.h +680 -0
  278. data/ext/libcouchbase/include/libcouchbase/http.h +1 -0
  279. data/ext/libcouchbase/include/libcouchbase/iops.h +1053 -0
  280. data/ext/libcouchbase/include/libcouchbase/ixmgmt.h +263 -0
  281. data/ext/libcouchbase/include/libcouchbase/kvbuf.h +137 -0
  282. data/ext/libcouchbase/include/libcouchbase/metrics.h +79 -0
  283. data/ext/libcouchbase/include/libcouchbase/n1ql.h +539 -0
  284. data/ext/libcouchbase/include/libcouchbase/pktfwd.h +270 -0
  285. data/ext/libcouchbase/include/libcouchbase/plugins/io/bsdio-inl.c +370 -0
  286. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr-inl.c +76 -0
  287. data/ext/libcouchbase/include/libcouchbase/plugins/io/wsaerr.h +199 -0
  288. data/ext/libcouchbase/include/libcouchbase/subdoc.h +347 -0
  289. data/ext/libcouchbase/include/libcouchbase/sysdefs.h +98 -0
  290. data/ext/libcouchbase/include/libcouchbase/tracing.h +437 -0
  291. data/ext/libcouchbase/include/libcouchbase/vbucket.h +680 -0
  292. data/ext/libcouchbase/include/libcouchbase/views.h +357 -0
  293. data/ext/libcouchbase/include/libcouchbase/visibility.h +66 -0
  294. data/ext/libcouchbase/include/memcached/COPYING +30 -0
  295. data/ext/libcouchbase/include/memcached/README +10 -0
  296. data/ext/libcouchbase/include/memcached/protocol_binary.h +885 -0
  297. data/ext/libcouchbase/packaging/README +7 -0
  298. data/ext/libcouchbase/packaging/abicheck/.gitignore +4 -0
  299. data/ext/libcouchbase/packaging/abicheck/Makefile +17 -0
  300. data/ext/libcouchbase/packaging/abicheck/README.md +27 -0
  301. data/ext/libcouchbase/packaging/abicheck/template.xml +3 -0
  302. data/ext/libcouchbase/packaging/deb/compat +1 -0
  303. data/ext/libcouchbase/packaging/deb/control +72 -0
  304. data/ext/libcouchbase/packaging/deb/copyright +10 -0
  305. data/ext/libcouchbase/packaging/deb/libcouchbase-dev.docs +3 -0
  306. data/ext/libcouchbase/packaging/deb/package.mk +31 -0
  307. data/ext/libcouchbase/packaging/deb/rules +46 -0
  308. data/ext/libcouchbase/packaging/deb/source/format +1 -0
  309. data/ext/libcouchbase/packaging/distinfo/README +1 -0
  310. data/ext/libcouchbase/packaging/distinfo/distinfo.cmake.in +4 -0
  311. data/ext/libcouchbase/packaging/dllversion.rc.in +39 -0
  312. data/ext/libcouchbase/packaging/libcouchbase.pc.in +10 -0
  313. data/ext/libcouchbase/packaging/nuget/libcouchbase.autopkg +76 -0
  314. data/ext/libcouchbase/packaging/parse-git-describe.pl +166 -0
  315. data/ext/libcouchbase/packaging/rpm/libcouchbase.spec.in +101 -0
  316. data/ext/libcouchbase/packaging/rpm/package.mk +40 -0
  317. data/ext/libcouchbase/plugins/io/iocp/CMakeLists.txt +9 -0
  318. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.c +467 -0
  319. data/ext/libcouchbase/plugins/io/iocp/iocp_iops.h +217 -0
  320. data/ext/libcouchbase/plugins/io/iocp/iocp_loop.c +295 -0
  321. data/ext/libcouchbase/plugins/io/iocp/iocp_timer.c +79 -0
  322. data/ext/libcouchbase/plugins/io/iocp/iocp_util.c +229 -0
  323. data/ext/libcouchbase/plugins/io/libev/CMakeLists.txt +31 -0
  324. data/ext/libcouchbase/plugins/io/libev/libev_io_opts.h +66 -0
  325. data/ext/libcouchbase/plugins/io/libev/plugin-libev.c +289 -0
  326. data/ext/libcouchbase/plugins/io/libevent/CMakeLists.txt +31 -0
  327. data/ext/libcouchbase/plugins/io/libevent/libevent_io_opts.h +67 -0
  328. data/ext/libcouchbase/plugins/io/libevent/plugin-libevent.c +292 -0
  329. data/ext/libcouchbase/plugins/io/libuv/CMakeLists.txt +44 -0
  330. data/ext/libcouchbase/plugins/io/libuv/libuv_compat.h +218 -0
  331. data/ext/libcouchbase/plugins/io/libuv/libuv_io_opts.h +118 -0
  332. data/ext/libcouchbase/plugins/io/libuv/plugin-internal.h +155 -0
  333. data/ext/libcouchbase/plugins/io/libuv/plugin-libuv.c +709 -0
  334. data/ext/libcouchbase/plugins/io/select/CMakeLists.txt +13 -0
  335. data/ext/libcouchbase/plugins/io/select/plugin-select.c +451 -0
  336. data/ext/libcouchbase/plugins/io/select/select_io_opts.h +39 -0
  337. data/ext/libcouchbase/src/README.md +101 -0
  338. data/ext/libcouchbase/src/aspend.h +105 -0
  339. data/ext/libcouchbase/src/auth-priv.h +85 -0
  340. data/ext/libcouchbase/src/auth.cc +146 -0
  341. data/ext/libcouchbase/src/bootstrap.cc +263 -0
  342. data/ext/libcouchbase/src/bootstrap.h +149 -0
  343. data/ext/libcouchbase/src/bucketconfig/bc_cccp.cc +450 -0
  344. data/ext/libcouchbase/src/bucketconfig/bc_file.cc +281 -0
  345. data/ext/libcouchbase/src/bucketconfig/bc_http.cc +527 -0
  346. data/ext/libcouchbase/src/bucketconfig/bc_http.h +107 -0
  347. data/ext/libcouchbase/src/bucketconfig/bc_static.cc +150 -0
  348. data/ext/libcouchbase/src/bucketconfig/clconfig.h +700 -0
  349. data/ext/libcouchbase/src/bucketconfig/confmon.cc +403 -0
  350. data/ext/libcouchbase/src/callbacks.c +380 -0
  351. data/ext/libcouchbase/src/cbft.cc +253 -0
  352. data/ext/libcouchbase/src/cntl.cc +1057 -0
  353. data/ext/libcouchbase/src/config_static.h +176 -0
  354. data/ext/libcouchbase/src/connspec.cc +555 -0
  355. data/ext/libcouchbase/src/connspec.h +155 -0
  356. data/ext/libcouchbase/src/crypto.cc +399 -0
  357. data/ext/libcouchbase/src/ctx-log-inl.h +44 -0
  358. data/ext/libcouchbase/src/dns-srv.cc +146 -0
  359. data/ext/libcouchbase/src/dump.cc +103 -0
  360. data/ext/libcouchbase/src/errmap.cc +173 -0
  361. data/ext/libcouchbase/src/errmap.h +271 -0
  362. data/ext/libcouchbase/src/getconfig.cc +72 -0
  363. data/ext/libcouchbase/src/gethrtime.c +109 -0
  364. data/ext/libcouchbase/src/handler.cc +1101 -0
  365. data/ext/libcouchbase/src/hashtable.c +75 -0
  366. data/ext/libcouchbase/src/hdr_timings.c +92 -0
  367. data/ext/libcouchbase/src/hostlist.cc +293 -0
  368. data/ext/libcouchbase/src/hostlist.h +160 -0
  369. data/ext/libcouchbase/src/http/http-priv.h +326 -0
  370. data/ext/libcouchbase/src/http/http.cc +672 -0
  371. data/ext/libcouchbase/src/http/http.h +1 -0
  372. data/ext/libcouchbase/src/http/http_io.cc +316 -0
  373. data/ext/libcouchbase/src/instance.cc +917 -0
  374. data/ext/libcouchbase/src/internal.h +285 -0
  375. data/ext/libcouchbase/src/iofactory.c +575 -0
  376. data/ext/libcouchbase/src/jsparse/parser.cc +445 -0
  377. data/ext/libcouchbase/src/jsparse/parser.h +159 -0
  378. data/ext/libcouchbase/src/lcbht/lcbht.cc +177 -0
  379. data/ext/libcouchbase/src/lcbht/lcbht.h +210 -0
  380. data/ext/libcouchbase/src/lcbio/connect.cc +603 -0
  381. data/ext/libcouchbase/src/lcbio/connect.h +400 -0
  382. data/ext/libcouchbase/src/lcbio/ctx.c +658 -0
  383. data/ext/libcouchbase/src/lcbio/ctx.h +405 -0
  384. data/ext/libcouchbase/src/lcbio/iotable.c +290 -0
  385. data/ext/libcouchbase/src/lcbio/iotable.h +169 -0
  386. data/ext/libcouchbase/src/lcbio/ioutils.cc +356 -0
  387. data/ext/libcouchbase/src/lcbio/ioutils.h +144 -0
  388. data/ext/libcouchbase/src/lcbio/lcbio.h +51 -0
  389. data/ext/libcouchbase/src/lcbio/manager.cc +579 -0
  390. data/ext/libcouchbase/src/lcbio/manager.h +195 -0
  391. data/ext/libcouchbase/src/lcbio/protoctx.c +84 -0
  392. data/ext/libcouchbase/src/lcbio/rw-inl.h +137 -0
  393. data/ext/libcouchbase/src/lcbio/ssl.h +159 -0
  394. data/ext/libcouchbase/src/lcbio/timer-cxx.h +87 -0
  395. data/ext/libcouchbase/src/lcbio/timer-ng.h +179 -0
  396. data/ext/libcouchbase/src/lcbio/timer.c +132 -0
  397. data/ext/libcouchbase/src/legacy.c +431 -0
  398. data/ext/libcouchbase/src/list.c +144 -0
  399. data/ext/libcouchbase/src/list.h +127 -0
  400. data/ext/libcouchbase/src/logging.c +244 -0
  401. data/ext/libcouchbase/src/logging.h +88 -0
  402. data/ext/libcouchbase/src/mc/compress.cc +171 -0
  403. data/ext/libcouchbase/src/mc/compress.h +56 -0
  404. data/ext/libcouchbase/src/mc/forward.c +186 -0
  405. data/ext/libcouchbase/src/mc/forward.h +90 -0
  406. data/ext/libcouchbase/src/mc/iovcursor-inl.h +279 -0
  407. data/ext/libcouchbase/src/mc/iovcursor.h +66 -0
  408. data/ext/libcouchbase/src/mc/mcreq-flush-inl.h +115 -0
  409. data/ext/libcouchbase/src/mc/mcreq.c +983 -0
  410. data/ext/libcouchbase/src/mc/mcreq.h +1015 -0
  411. data/ext/libcouchbase/src/mcserver/mcserver.cc +1055 -0
  412. data/ext/libcouchbase/src/mcserver/mcserver.h +221 -0
  413. data/ext/libcouchbase/src/mcserver/negotiate.cc +757 -0
  414. data/ext/libcouchbase/src/mcserver/negotiate.h +128 -0
  415. data/ext/libcouchbase/src/mctx-helper.h +62 -0
  416. data/ext/libcouchbase/src/metrics.cc +132 -0
  417. data/ext/libcouchbase/src/n1ql/ixmgmt.cc +857 -0
  418. data/ext/libcouchbase/src/n1ql/n1ql-internal.h +22 -0
  419. data/ext/libcouchbase/src/n1ql/n1ql.cc +830 -0
  420. data/ext/libcouchbase/src/n1ql/params.cc +260 -0
  421. data/ext/libcouchbase/src/netbuf/netbuf-defs.h +89 -0
  422. data/ext/libcouchbase/src/netbuf/netbuf-mblock.h +235 -0
  423. data/ext/libcouchbase/src/netbuf/netbuf.c +929 -0
  424. data/ext/libcouchbase/src/netbuf/netbuf.h +452 -0
  425. data/ext/libcouchbase/src/newconfig.cc +365 -0
  426. data/ext/libcouchbase/src/nodeinfo.cc +184 -0
  427. data/ext/libcouchbase/src/operations/cbflush.cc +63 -0
  428. data/ext/libcouchbase/src/operations/counter.cc +117 -0
  429. data/ext/libcouchbase/src/operations/durability-cas.cc +251 -0
  430. data/ext/libcouchbase/src/operations/durability-seqno.cc +170 -0
  431. data/ext/libcouchbase/src/operations/durability.cc +668 -0
  432. data/ext/libcouchbase/src/operations/durability_internal.h +306 -0
  433. data/ext/libcouchbase/src/operations/get.cc +409 -0
  434. data/ext/libcouchbase/src/operations/observe-seqno.cc +94 -0
  435. data/ext/libcouchbase/src/operations/observe.cc +367 -0
  436. data/ext/libcouchbase/src/operations/ping.cc +496 -0
  437. data/ext/libcouchbase/src/operations/pktfwd.cc +86 -0
  438. data/ext/libcouchbase/src/operations/remove.cc +84 -0
  439. data/ext/libcouchbase/src/operations/stats.cc +459 -0
  440. data/ext/libcouchbase/src/operations/store.cc +358 -0
  441. data/ext/libcouchbase/src/operations/subdoc.cc +614 -0
  442. data/ext/libcouchbase/src/operations/touch.cc +84 -0
  443. data/ext/libcouchbase/src/packetutils.h +388 -0
  444. data/ext/libcouchbase/src/probes.d +182 -0
  445. data/ext/libcouchbase/src/rdb/bigalloc.c +225 -0
  446. data/ext/libcouchbase/src/rdb/bigalloc.h +73 -0
  447. data/ext/libcouchbase/src/rdb/chunkalloc.c +174 -0
  448. data/ext/libcouchbase/src/rdb/libcalloc.c +94 -0
  449. data/ext/libcouchbase/src/rdb/rope.c +419 -0
  450. data/ext/libcouchbase/src/rdb/rope.h +488 -0
  451. data/ext/libcouchbase/src/retrychk.cc +113 -0
  452. data/ext/libcouchbase/src/retryq.cc +458 -0
  453. data/ext/libcouchbase/src/retryq.h +170 -0
  454. data/ext/libcouchbase/src/ringbuffer.c +442 -0
  455. data/ext/libcouchbase/src/ringbuffer.h +100 -0
  456. data/ext/libcouchbase/src/rnd.cc +61 -0
  457. data/ext/libcouchbase/src/rnd.h +39 -0
  458. data/ext/libcouchbase/src/settings.c +125 -0
  459. data/ext/libcouchbase/src/settings.h +273 -0
  460. data/ext/libcouchbase/src/sllist-inl.h +197 -0
  461. data/ext/libcouchbase/src/sllist.h +76 -0
  462. data/ext/libcouchbase/src/ssl/CMakeLists.txt +11 -0
  463. data/ext/libcouchbase/src/ssl/ssl_c.c +442 -0
  464. data/ext/libcouchbase/src/ssl/ssl_common.c +478 -0
  465. data/ext/libcouchbase/src/ssl/ssl_e.c +421 -0
  466. data/ext/libcouchbase/src/ssl/ssl_iot_common.h +182 -0
  467. data/ext/libcouchbase/src/strcodecs/base64.c +307 -0
  468. data/ext/libcouchbase/src/strcodecs/strcodecs.h +302 -0
  469. data/ext/libcouchbase/src/timings.c +207 -0
  470. data/ext/libcouchbase/src/trace.h +117 -0
  471. data/ext/libcouchbase/src/tracing/span.cc +421 -0
  472. data/ext/libcouchbase/src/tracing/threshold_logging_tracer.cc +213 -0
  473. data/ext/libcouchbase/src/tracing/tracer.cc +53 -0
  474. data/ext/libcouchbase/src/tracing/tracing-internal.h +198 -0
  475. data/ext/libcouchbase/src/utilities.c +176 -0
  476. data/ext/libcouchbase/src/vbucket/CMakeLists.txt +2 -0
  477. data/ext/libcouchbase/src/vbucket/aliases.h +35 -0
  478. data/ext/libcouchbase/src/vbucket/crc32.h +83 -0
  479. data/ext/libcouchbase/src/vbucket/hash.h +30 -0
  480. data/ext/libcouchbase/src/vbucket/json-inl.h +112 -0
  481. data/ext/libcouchbase/src/vbucket/ketama.c +66 -0
  482. data/ext/libcouchbase/src/vbucket/rfc1321/global.h +32 -0
  483. data/ext/libcouchbase/src/vbucket/rfc1321/md5.h +35 -0
  484. data/ext/libcouchbase/src/vbucket/rfc1321/md5c-inl.h +335 -0
  485. data/ext/libcouchbase/src/vbucket/vbucket.c +1735 -0
  486. data/ext/libcouchbase/src/views/docreq.cc +213 -0
  487. data/ext/libcouchbase/src/views/docreq.h +94 -0
  488. data/ext/libcouchbase/src/views/viewreq.cc +381 -0
  489. data/ext/libcouchbase/src/views/viewreq.h +87 -0
  490. data/ext/libcouchbase/src/wait.cc +156 -0
  491. data/ext/libcouchbase/tests/CMakeLists.txt +149 -0
  492. data/ext/libcouchbase/tests/basic/t_base64.cc +109 -0
  493. data/ext/libcouchbase/tests/basic/t_ccbc103.cc +95 -0
  494. data/ext/libcouchbase/tests/basic/t_connstr.cc +456 -0
  495. data/ext/libcouchbase/tests/basic/t_creds.cc +96 -0
  496. data/ext/libcouchbase/tests/basic/t_ctlcodes.cc +92 -0
  497. data/ext/libcouchbase/tests/basic/t_host.cc +210 -0
  498. data/ext/libcouchbase/tests/basic/t_jsparse.cc +82 -0
  499. data/ext/libcouchbase/tests/basic/t_jsparse.h +589 -0
  500. data/ext/libcouchbase/tests/basic/t_list.cc +155 -0
  501. data/ext/libcouchbase/tests/basic/t_logger.cc +65 -0
  502. data/ext/libcouchbase/tests/basic/t_misc.cc +24 -0
  503. data/ext/libcouchbase/tests/basic/t_n1qlstrings.cc +17 -0
  504. data/ext/libcouchbase/tests/basic/t_netbuf.cc +446 -0
  505. data/ext/libcouchbase/tests/basic/t_packet.cc +215 -0
  506. data/ext/libcouchbase/tests/basic/t_ringbuffer.cc +278 -0
  507. data/ext/libcouchbase/tests/basic/t_scram.cc +514 -0
  508. data/ext/libcouchbase/tests/basic/t_slist.cc +429 -0
  509. data/ext/libcouchbase/tests/basic/t_strerror.cc +64 -0
  510. data/ext/libcouchbase/tests/basic/t_urlencode.cc +132 -0
  511. data/ext/libcouchbase/tests/check-all.cc +612 -0
  512. data/ext/libcouchbase/tests/htparse/t_basic.cc +173 -0
  513. data/ext/libcouchbase/tests/ioserver/connection.cc +166 -0
  514. data/ext/libcouchbase/tests/ioserver/future.cc +50 -0
  515. data/ext/libcouchbase/tests/ioserver/ioserver.cc +117 -0
  516. data/ext/libcouchbase/tests/ioserver/ioserver.h +478 -0
  517. data/ext/libcouchbase/tests/ioserver/socket.cc +88 -0
  518. data/ext/libcouchbase/tests/ioserver/ssl_connection.cc +145 -0
  519. data/ext/libcouchbase/tests/ioserver/threads-pthreads.cc +119 -0
  520. data/ext/libcouchbase/tests/ioserver/threads-win32.cc +117 -0
  521. data/ext/libcouchbase/tests/ioserver/threads.h +66 -0
  522. data/ext/libcouchbase/tests/iotests/iotests.h +15 -0
  523. data/ext/libcouchbase/tests/iotests/mock-environment.cc +632 -0
  524. data/ext/libcouchbase/tests/iotests/mock-environment.h +480 -0
  525. data/ext/libcouchbase/tests/iotests/mock-unit-test.cc +67 -0
  526. data/ext/libcouchbase/tests/iotests/mock-unit-test.h +61 -0
  527. data/ext/libcouchbase/tests/iotests/serverparams.h +76 -0
  528. data/ext/libcouchbase/tests/iotests/t_arithmetic.cc +143 -0
  529. data/ext/libcouchbase/tests/iotests/t_behavior.cc +220 -0
  530. data/ext/libcouchbase/tests/iotests/t_configcache.cc +117 -0
  531. data/ext/libcouchbase/tests/iotests/t_confmon.cc +223 -0
  532. data/ext/libcouchbase/tests/iotests/t_durability.cc +1108 -0
  533. data/ext/libcouchbase/tests/iotests/t_eerrs.cc +121 -0
  534. data/ext/libcouchbase/tests/iotests/t_errmap.cc +181 -0
  535. data/ext/libcouchbase/tests/iotests/t_forward.cc +118 -0
  536. data/ext/libcouchbase/tests/iotests/t_get.cc +512 -0
  537. data/ext/libcouchbase/tests/iotests/t_http.cc +438 -0
  538. data/ext/libcouchbase/tests/iotests/t_iops.cc +175 -0
  539. data/ext/libcouchbase/tests/iotests/t_lock.cc +274 -0
  540. data/ext/libcouchbase/tests/iotests/t_misc.cc +777 -0
  541. data/ext/libcouchbase/tests/iotests/t_mutate.cc +609 -0
  542. data/ext/libcouchbase/tests/iotests/t_n1ql.cc +270 -0
  543. data/ext/libcouchbase/tests/iotests/t_netfail.cc +778 -0
  544. data/ext/libcouchbase/tests/iotests/t_obseqno.cc +156 -0
  545. data/ext/libcouchbase/tests/iotests/t_regression.cc +321 -0
  546. data/ext/libcouchbase/tests/iotests/t_sched.cc +87 -0
  547. data/ext/libcouchbase/tests/iotests/t_serverops.cc +231 -0
  548. data/ext/libcouchbase/tests/iotests/t_smoke.cc +528 -0
  549. data/ext/libcouchbase/tests/iotests/t_snappy.cc +316 -0
  550. data/ext/libcouchbase/tests/iotests/t_subdoc.cc +857 -0
  551. data/ext/libcouchbase/tests/iotests/t_syncmode.cc +64 -0
  552. data/ext/libcouchbase/tests/iotests/t_views.cc +417 -0
  553. data/ext/libcouchbase/tests/iotests/testutil.cc +251 -0
  554. data/ext/libcouchbase/tests/iotests/testutil.h +163 -0
  555. data/ext/libcouchbase/tests/mc/mctest.h +119 -0
  556. data/ext/libcouchbase/tests/mc/pktmaker.h +101 -0
  557. data/ext/libcouchbase/tests/mc/t_alloc.cc +269 -0
  558. data/ext/libcouchbase/tests/mc/t_context.cc +100 -0
  559. data/ext/libcouchbase/tests/mc/t_flush.cc +185 -0
  560. data/ext/libcouchbase/tests/mc/t_forward.cc +239 -0
  561. data/ext/libcouchbase/tests/mc/t_ioflush.cc +102 -0
  562. data/ext/libcouchbase/tests/mc/t_iovcursor.cc +173 -0
  563. data/ext/libcouchbase/tests/mocksupport/procutil.c +305 -0
  564. data/ext/libcouchbase/tests/mocksupport/procutil.h +89 -0
  565. data/ext/libcouchbase/tests/mocksupport/server.c +391 -0
  566. data/ext/libcouchbase/tests/mocksupport/server.h +72 -0
  567. data/ext/libcouchbase/tests/mocksupport/timeout.c +69 -0
  568. data/ext/libcouchbase/tests/nonio_tests.cc +23 -0
  569. data/ext/libcouchbase/tests/rdb/rdbtest.h +133 -0
  570. data/ext/libcouchbase/tests/rdb/t_basic.cc +128 -0
  571. data/ext/libcouchbase/tests/rdb/t_bigalloc.cc +93 -0
  572. data/ext/libcouchbase/tests/rdb/t_refs.cc +112 -0
  573. data/ext/libcouchbase/tests/socktests/socktest.cc +344 -0
  574. data/ext/libcouchbase/tests/socktests/socktest.h +447 -0
  575. data/ext/libcouchbase/tests/socktests/t_basic.cc +143 -0
  576. data/ext/libcouchbase/tests/socktests/t_ctx.cc +73 -0
  577. data/ext/libcouchbase/tests/socktests/t_manager.cc +159 -0
  578. data/ext/libcouchbase/tests/socktests/t_putex.cc +256 -0
  579. data/ext/libcouchbase/tests/socktests/t_read.cc +187 -0
  580. data/ext/libcouchbase/tests/socktests/t_reentrant.cc +143 -0
  581. data/ext/libcouchbase/tests/socktests/t_ssl.cc +80 -0
  582. data/ext/libcouchbase/tests/socktests/t_write.cc +95 -0
  583. data/ext/libcouchbase/tests/start_mock.bat +15 -0
  584. data/ext/libcouchbase/tests/start_mock.sh +42 -0
  585. data/ext/libcouchbase/tests/unit_tests.cc +43 -0
  586. data/ext/libcouchbase/tests/vbucket/confdata/bad.json +101 -0
  587. data/ext/libcouchbase/tests/vbucket/confdata/full_25.json +363 -0
  588. data/ext/libcouchbase/tests/vbucket/confdata/ketama_expected.json +2562 -0
  589. data/ext/libcouchbase/tests/vbucket/confdata/map_node_present_nodesext_missing_nodes.json +94 -0
  590. data/ext/libcouchbase/tests/vbucket/confdata/memd_25.json +90 -0
  591. data/ext/libcouchbase/tests/vbucket/confdata/memd_30.json +1 -0
  592. data/ext/libcouchbase/tests/vbucket/confdata/memd_45.json +1 -0
  593. data/ext/libcouchbase/tests/vbucket/confdata/memd_ketama_config.json +31 -0
  594. data/ext/libcouchbase/tests/vbucket/confdata/terse_25.json +291 -0
  595. data/ext/libcouchbase/tests/vbucket/confdata/terse_30.json +1 -0
  596. data/ext/libcouchbase/tests/vbucket/t_config.cc +386 -0
  597. data/ext/libcouchbase/tools/CMakeLists.txt +80 -0
  598. data/ext/libcouchbase/tools/cbc-handlers.h +636 -0
  599. data/ext/libcouchbase/tools/cbc-n1qlback.cc +496 -0
  600. data/ext/libcouchbase/tools/cbc-pillowfight.cc +1230 -0
  601. data/ext/libcouchbase/tools/cbc-proxy.cc +534 -0
  602. data/ext/libcouchbase/tools/cbc-subdoc.cc +825 -0
  603. data/ext/libcouchbase/tools/cbc.cc +1928 -0
  604. data/ext/libcouchbase/tools/common/histogram.cc +44 -0
  605. data/ext/libcouchbase/tools/common/histogram.h +23 -0
  606. data/ext/libcouchbase/tools/common/options.cc +451 -0
  607. data/ext/libcouchbase/tools/common/options.h +90 -0
  608. data/ext/libcouchbase/tools/docgen/docgen.h +495 -0
  609. data/ext/libcouchbase/tools/docgen/loc.h +211 -0
  610. data/ext/libcouchbase/tools/docgen/placeholders.h +211 -0
  611. data/ext/libcouchbase/tools/docgen/seqgen.h +122 -0
  612. data/ext/libcouchbase/tools/extract-packets.rb +110 -0
  613. data/ext/libcouchbase/tools/linenoise/linenoise.c +1199 -0
  614. data/ext/libcouchbase/tools/linenoise/linenoise.h +73 -0
  615. data/lib/mt-libcouchbase/bucket.rb +825 -0
  616. data/lib/mt-libcouchbase/callbacks.rb +69 -0
  617. data/lib/mt-libcouchbase/connection.rb +896 -0
  618. data/lib/mt-libcouchbase/design_docs.rb +92 -0
  619. data/lib/mt-libcouchbase/error.rb +68 -0
  620. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdbase.rb +23 -0
  621. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdcounter.rb +36 -0
  622. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdendure.rb +26 -0
  623. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdfts.rb +24 -0
  624. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdget.rb +30 -0
  625. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdgetreplica.rb +49 -0
  626. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdhttp.rb +58 -0
  627. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdn1ql.rb +40 -0
  628. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdobseqno.rb +33 -0
  629. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdobserve.rb +30 -0
  630. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdstore.rb +40 -0
  631. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdstoredur.rb +45 -0
  632. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdsubdoc.rb +61 -0
  633. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdverbosity.rb +29 -0
  634. data/lib/mt-libcouchbase/ext/mt-libcouchbase/cmdviewquery.rb +61 -0
  635. data/lib/mt-libcouchbase/ext/mt-libcouchbase/contigbuf.rb +14 -0
  636. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st.rb +15 -0
  637. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st0.rb +23 -0
  638. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st1.rb +26 -0
  639. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st2.rb +32 -0
  640. data/lib/mt-libcouchbase/ext/mt-libcouchbase/create_st3.rb +26 -0
  641. data/lib/mt-libcouchbase/ext/mt-libcouchbase/crst_u.rb +20 -0
  642. data/lib/mt-libcouchbase/ext/mt-libcouchbase/durability_opts_st_v.rb +11 -0
  643. data/lib/mt-libcouchbase/ext/mt-libcouchbase/durability_opts_t.rb +14 -0
  644. data/lib/mt-libcouchbase/ext/mt-libcouchbase/durabilityopt_sv0.rb +63 -0
  645. data/lib/mt-libcouchbase/ext/mt-libcouchbase/enums.rb +1007 -0
  646. data/lib/mt-libcouchbase/ext/mt-libcouchbase/fragbuf.rb +18 -0
  647. data/lib/mt-libcouchbase/ext/mt-libcouchbase/ftshandle.rb +7 -0
  648. data/lib/mt-libcouchbase/ext/mt-libcouchbase/histogram.rb +34 -0
  649. data/lib/mt-libcouchbase/ext/mt-libcouchbase/http_request_t.rb +7 -0
  650. data/lib/mt-libcouchbase/ext/mt-libcouchbase/keybuf.rb +20 -0
  651. data/lib/mt-libcouchbase/ext/mt-libcouchbase/multicmd_ctx.rb +30 -0
  652. data/lib/mt-libcouchbase/ext/mt-libcouchbase/mutation_token.rb +17 -0
  653. data/lib/mt-libcouchbase/ext/mt-libcouchbase/n1qlhandle.rb +7 -0
  654. data/lib/mt-libcouchbase/ext/mt-libcouchbase/n1qlparams.rb +7 -0
  655. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respbase.rb +29 -0
  656. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respcounter.rb +32 -0
  657. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respendure.rb +49 -0
  658. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respfts.rb +40 -0
  659. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respget.rb +44 -0
  660. data/lib/mt-libcouchbase/ext/mt-libcouchbase/resphttp.rb +48 -0
  661. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respmcversion.rb +38 -0
  662. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respn1ql.rb +41 -0
  663. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respobseqno.rb +52 -0
  664. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respobserve.rb +41 -0
  665. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respserverbase.rb +32 -0
  666. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstats.rb +38 -0
  667. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstore.rb +32 -0
  668. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respstoredur.rb +38 -0
  669. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respsubdoc.rb +35 -0
  670. data/lib/mt-libcouchbase/ext/mt-libcouchbase/respviewquery.rb +67 -0
  671. data/lib/mt-libcouchbase/ext/mt-libcouchbase/sdentry.rb +22 -0
  672. data/lib/mt-libcouchbase/ext/mt-libcouchbase/sdspec.rb +31 -0
  673. data/lib/mt-libcouchbase/ext/mt-libcouchbase/t.rb +7 -0
  674. data/lib/mt-libcouchbase/ext/mt-libcouchbase/valbuf.rb +22 -0
  675. data/lib/mt-libcouchbase/ext/mt-libcouchbase/valbuf_u_buf.rb +14 -0
  676. data/lib/mt-libcouchbase/ext/mt-libcouchbase/viewhandle.rb +7 -0
  677. data/lib/mt-libcouchbase/ext/mt-libcouchbase.rb +1175 -0
  678. data/lib/mt-libcouchbase/ext/mt-libcouchbase_libuv.rb +22 -0
  679. data/lib/mt-libcouchbase/ext/tasks.rb +39 -0
  680. data/lib/mt-libcouchbase/n1ql.rb +80 -0
  681. data/lib/mt-libcouchbase/query_full_text.rb +147 -0
  682. data/lib/mt-libcouchbase/query_n1ql.rb +123 -0
  683. data/lib/mt-libcouchbase/query_view.rb +135 -0
  684. data/lib/mt-libcouchbase/results_fiber.rb +281 -0
  685. data/lib/mt-libcouchbase/results_native.rb +220 -0
  686. data/lib/mt-libcouchbase/subdoc_request.rb +139 -0
  687. data/lib/mt-libcouchbase/version.rb +5 -0
  688. data/lib/mt-libcouchbase.rb +40 -0
  689. data/mt-libcouchbase.gemspec +68 -0
  690. data/spec/bucket_spec.rb +290 -0
  691. data/spec/connection_spec.rb +257 -0
  692. data/spec/design_docs_spec.rb +31 -0
  693. data/spec/error_spec.rb +26 -0
  694. data/spec/fts_spec.rb +135 -0
  695. data/spec/n1ql_spec.rb +260 -0
  696. data/spec/results_libuv_spec.rb +244 -0
  697. data/spec/results_native_spec.rb +259 -0
  698. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/design.json +1 -0
  699. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/data-0000.cbb +0 -0
  700. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/failover.json +1 -0
  701. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/meta.json +1 -0
  702. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/seqno.json +1 -0
  703. data/spec/seed/2016-10-25T043505Z/2016-10-25T043505Z-full/bucket-default/node-127.0.0.1%3A8091/snapshot_markers.json +1 -0
  704. data/spec/subdoc_spec.rb +192 -0
  705. data/spec/view_spec.rb +201 -0
  706. data/windows_build.md +36 -0
  707. metadata +873 -0
@@ -0,0 +1,1689 @@
1
+ /* -*- Mode: C; tab-width: 4; c-basic-offset: 4; indent-tabs-mode: nil -*- */
2
+ /*
3
+ * Copyright 2010-2016 Couchbase, Inc.
4
+ *
5
+ * Licensed under the Apache License, Version 2.0 (the "License");
6
+ * you may not use this file except in compliance with the License.
7
+ * You may obtain a copy of the License at
8
+ *
9
+ * http://www.apache.org/licenses/LICENSE-2.0
10
+ *
11
+ * Unless required by applicable law or agreed to in writing, software
12
+ * distributed under the License is distributed on an "AS IS" BASIS,
13
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ * See the License for the specific language governing permissions and
15
+ * limitations under the License.
16
+ */
17
+ #ifndef LCB_APILEGACY_H
18
+ #define LCB_APILEGACY_H
19
+
20
+ #ifdef __cplusplus
21
+ extern "C" {
22
+ #endif
23
+
24
+ #ifndef LIBCOUCHBASE_COUCHBASE_H
25
+ #error "include <libcouchbase/couchbase.h> first!"
26
+ #endif
27
+
28
+
29
+ /**@private
30
+ * Note that hashkey/groupid is not a supported feature of Couchbase Server
31
+ * and this client. It should be considered volatile and experimental.
32
+ * Using this could lead to an unbalanced cluster, inability to interoperate
33
+ * with the data from other languages, not being able to use the
34
+ * Couchbase Server UI to look up documents and other possible future
35
+ * upgrade/migration concerns.
36
+ */
37
+ #define LCB__HKFIELDS \
38
+ /**
39
+ @private
40
+ @volatile
41
+ Do not use. This field exists to support older code. Using a dedicated
42
+ hashkey will cause problems with your data in various systems. */ \
43
+ const void *hashkey; \
44
+ \
45
+ lcb_SIZE nhashkey; /**<@private*/
46
+
47
+ /**
48
+ * @defgroup lcb-legacy-api Legacy Key-Value API
49
+ * @brief Operate on one or more key values
50
+ * @details
51
+ *
52
+ * The key-value APIs are high performance APIs utilizing the memcached protocol.
53
+ * Use these APIs to access data by its unique key.
54
+ *
55
+ * These APIs are designed so that each function is passed in one or more
56
+ * "Command Structures". A command structure is a small structure detailing a
57
+ * specific key and contains options and modifiers for the operation as it
58
+ * relates to that key.
59
+ *
60
+ * All the command structures are currently layed out like so:
61
+ *
62
+ * @code{.c}
63
+ * {
64
+ * int version;
65
+ * union {
66
+ * struct CMDv0 v0;
67
+ * struct CMDv1 v1;
68
+ * } v;
69
+ * }
70
+ * @endcode
71
+ *
72
+ * These top level structures are _wrapper_ structures and are present to ensure
73
+ * portability between different versions of the library. To employ these
74
+ * structures within the command, you may do:
75
+ *
76
+ * @code{.c}
77
+ * lcb_get_cmd_t gcmd_wrap = { 0 }, *cmdp_wrap = &gcmd_wrap;
78
+ * lcb_GETCMDv0 *gcmd = &gcmd_wrap->v.v0;
79
+ * gcmd->key = key;
80
+ * gcmd->nkey = strlen(key);
81
+ * lcb_get(instance, cookie, 1, &gcmd_wrap);
82
+ * @endcode
83
+ *
84
+ * @addtogroup lcb-legacy-api
85
+ * @{
86
+ */
87
+
88
+ /**
89
+ * @brief Get Command Structure
90
+ */
91
+ typedef struct {
92
+ const void *key; /**< Key to retrieve */
93
+ lcb_SIZE nkey; /**< Key length */
94
+
95
+ /**
96
+ * If this parameter is specified and `lock` is _not_ set then the server
97
+ * will also update the object's expiration time while retrieving the key.
98
+ * If `lock` _is_ set then this is the maximum amount of time the lock
99
+ * may be held (before an unlock) before the server will forecfully unlock
100
+ * the key.
101
+ */
102
+ lcb_time_t exptime;
103
+
104
+ /**
105
+ * If this parameter is set then the server will in addition to retrieving
106
+ * the item also lock the item, making it so that subsequent attempts to
107
+ * lock and/or modify the same item will fail with an error
108
+ * (either @ref LCB_KEY_EEXISTS or @ref LCB_ETMPFAIL).
109
+ *
110
+ * The lock will be released when one of the following happens:
111
+ *
112
+ * 1. The item is explicitly unlocked (see lcb_unlock())
113
+ * 2. The lock expires (See the #exptime parameter)
114
+ * 3. The item is modified using lcb_store(), and being provided with the
115
+ * correct _CAS_.
116
+ *
117
+ */
118
+ int lock;
119
+ LCB__HKFIELDS
120
+ } lcb_GETCMDv0;
121
+
122
+ /**
123
+ * @brief lcb_get() Command Wrapper Structure
124
+ * @see lcb_GETCMDv0
125
+ */
126
+ typedef struct lcb_get_cmd_st {
127
+ int version;
128
+ union { lcb_GETCMDv0 v0; } v;
129
+ LCB_DEPR_CTORS_GET
130
+ } lcb_get_cmd_t;
131
+
132
+ /**
133
+ * @brief Inner response structure for a get operation
134
+ */
135
+ typedef struct {
136
+ const void *key;
137
+ lcb_SIZE nkey;
138
+ const void *bytes;
139
+ lcb_SIZE nbytes;
140
+ lcb_U32 flags; /**< Server side flags stored with the item */
141
+ lcb_cas_t cas; /**< CAS representing current mutation state of the item */
142
+ lcb_U8 datatype; /**< @private */
143
+ } lcb_GETRESPv0;
144
+
145
+ /**
146
+ * @brief lcb_get() response wrapper structure
147
+ * @see lcb_GETRESPv0
148
+ */
149
+ typedef struct {
150
+ int version;
151
+ union {
152
+ lcb_GETRESPv0 v0;
153
+ } v;
154
+ } lcb_get_resp_t;
155
+
156
+ /**
157
+ * The callback function for a "get-style" request.
158
+ *
159
+ * @param instance the instance performing the operation
160
+ * @param cookie the cookie associated with with the command
161
+ * @param error The status of the operation
162
+ * @param resp More information about the actual item (only key
163
+ * and nkey is valid if `error != LCB_SUCCESS`)
164
+ * @committed
165
+ */
166
+ typedef void (*lcb_get_callback)(
167
+ lcb_t instance, const void *cookie, lcb_error_t error, const lcb_get_resp_t *resp);
168
+
169
+ /**
170
+ * @brief Set the callback to be invoked when an item is received as a result
171
+ * of an lcb_get() operation.
172
+ * @param callback the new callback to install. Pass NULL to only query the
173
+ * current callback
174
+ * @return the previous callback
175
+ * @see lcb_get()
176
+ * @committed
177
+ */
178
+ LIBCOUCHBASE_API
179
+ lcb_get_callback lcb_set_get_callback(lcb_t, lcb_get_callback callback);
180
+
181
+ /**
182
+ * Get a number of values from the cache.
183
+ *
184
+ * If you specify a non-zero value for expiration, the server will
185
+ * update the expiration value on the item (refer to the
186
+ * documentation on lcb_store to see the meaning of the
187
+ * expiration). All other members should be set to zero.
188
+ *
189
+ * @code{.c}
190
+ * lcb_get_cmd_t *get = calloc(1, sizeof(*get));
191
+ * get->version = 0;
192
+ * get->v.v0.key = "my-key";
193
+ * get->v.v0.nkey = strlen(get->v.v0.key);
194
+ * // Set an expiration of 60 (optional)
195
+ * get->v.v0.exptime = 60;
196
+ * lcb_get_cmd_t* commands[] = { get };
197
+ * lcb_get(instance, NULL, 1, commands);
198
+ * @endcode
199
+ *
200
+ * It is possible to get an item with a lock that has a timeout. It can
201
+ * then be unlocked with either a CAS operation or with an explicit
202
+ * unlock command.
203
+ *
204
+ * You may specify the expiration value for the lock in the
205
+ * expiration (setting it to 0 cause the server to use the default
206
+ * value).
207
+ *
208
+ * Get and lock the key:
209
+ *
210
+ * @code{.c}
211
+ * lcb_get_cmd_t *get = calloc(1, sizeof(*get));
212
+ * get->version = 0;
213
+ * get->v.v0.key = "my-key";
214
+ * get->v.v0.nkey = strlen(get->v.v0.key);
215
+ * // Set a lock expiration of 5 (optional)
216
+ * get->v.v0.lock = 1;
217
+ * get->v.v0.exptime = 5;
218
+ * lcb_get_cmd_t* commands[] = { get };
219
+ * lcb_get(instance, NULL, 1, commands);
220
+ * @endcode
221
+ *
222
+ * @param instance the instance used to batch the requests from
223
+ * @param command_cookie A cookie passed to all of the notifications
224
+ * from this command
225
+ * @param num the total number of elements in the commands array
226
+ * @param commands the array containing the items to get
227
+ * @return_rc
228
+ *
229
+ * Operation-specific errors received in callbacks include:
230
+ * @cb_err ::LCB_KEY_ENOENT if the key does not exist
231
+ * @cb_err ::LCB_ETMPFAIL if the `lock` option was set in the command and the item
232
+ * was already locked.
233
+ *
234
+ * @committed
235
+ */
236
+ LIBCOUCHBASE_API
237
+ lcb_error_t lcb_get(lcb_t instance, const void *command_cookie, lcb_SIZE num,
238
+ const lcb_get_cmd_t *const *commands);
239
+
240
+ /**@}*/
241
+
242
+ /**
243
+ * @name Legacy get-from-replica API
244
+ *
245
+ * @{
246
+ */
247
+
248
+
249
+ typedef struct { const void *key; lcb_SIZE nkey; LCB__HKFIELDS } lcb_GETREPLICACMDv0;
250
+
251
+ /**
252
+ * @brief Command for lcb_get_replica()
253
+ */
254
+ typedef struct {
255
+ const void *key;
256
+ lcb_SIZE nkey;
257
+ LCB__HKFIELDS
258
+ lcb_replica_t strategy; /**< Strategy to use */
259
+ /**If #strategy is LCB_REPLICA_SELECT, specific the replica index to use */
260
+ int index;
261
+ } lcb_GETREPLICACMDv1;
262
+
263
+ /**
264
+ * @brief wrapper structure for lcb_get_replica()
265
+ * @see lcb_GETREPLICACMDv1
266
+ */
267
+ typedef struct lcb_get_replica_cmd_st {
268
+ int version;
269
+ union {
270
+ lcb_GETREPLICACMDv0 v0;
271
+ lcb_GETREPLICACMDv1 v1;
272
+ } v;
273
+ LCB_DEPR_CTORS_RGET
274
+ } lcb_get_replica_cmd_t;
275
+
276
+ /**
277
+ * Get a number of replca values from the cache.
278
+ *
279
+ * @brief Get items from replica. This is like lcb_get() but is useful when
280
+ * an item from the master cannot be retrieved.
281
+ *
282
+ * From command version 1, it is possible to select strategy of how to
283
+ * select the replica node. Currently three strategies are available:
284
+ * 1. LCB_REPLICA_FIRST: Previously accessible and default as of 2.0.8,
285
+ * the caller will get a reply from the first replica to successfully
286
+ * reply within the timeout for the operation or will receive an
287
+ * error.
288
+ *
289
+ * 2. LCB_REPLICA_ALL: Ask all replicas to send documents/item back.
290
+ *
291
+ * 3. LCB_REPLICA_SELECT: Select one replica by the index in the
292
+ * configuration starting from zero. This approach can more quickly
293
+ * receive all possible replies for a given topology, but it can
294
+ * also generate false negatives.
295
+ *
296
+ * @note
297
+ * applications should not assume the order of the
298
+ * replicas indicates more recent data is at a lower index number.
299
+ * It is up to the application to determine which version of a
300
+ * document/item it may wish to use in the case of retrieving data from a replica.
301
+ *
302
+ * ### Examples
303
+ *
304
+ * #### Get document from the second replica
305
+ *
306
+ * @code{.c}
307
+ * lcb_get_replica_cmd_t *get = calloc(1, sizeof(*get));
308
+ * get->version = 1;
309
+ * get->v.v1.key = "my-key";
310
+ * get->v.v1.nkey = strlen(get->v.v1.key);
311
+ * get->v.v1.strategy = LCB_REPLICA_SELECT;
312
+ * get->v.v1.index = 2;
313
+ * lcb_get_replica_cmd_st* commands[] = { get };
314
+ * lcb_get_replica(instance, NULL, 1, commands);
315
+ * @endcode
316
+ *
317
+ * #### Get document from the first available replica
318
+ * @code{.c}
319
+ * get->v.v1.strategy = LCB_REPLICA_FIRST;
320
+ * lcb_get_replica_cmd_st* commands[] = { get };
321
+ * lcb_get_replica(instance, NULL, 1, commands);
322
+ * @endcode
323
+ *
324
+ * #### Get document from all replicas
325
+ * This will will generate lcb_get_num_replicas() responses
326
+ *
327
+ * @code{.c}
328
+ * get->v.v1.strategy = LCB_REPLICA_ALL;
329
+ * lcb_get_replica_cmd_st* commands[] = { get };
330
+ * lcb_get_replica(instance, NULL, 1, commands);
331
+ * @endcode
332
+ *
333
+ *
334
+ * @param instance the instance used to batch the requests from
335
+ * @param command_cookie A cookie passed to all of the notifications
336
+ * from this command
337
+ * @param num the total number of elements in the commands array
338
+ * @param commands the array containing the items to get
339
+ * @return_rc
340
+ *
341
+ * For operation-specific error codes received in the callback, see lcb_get()
342
+ *
343
+ * @committed
344
+ */
345
+ LIBCOUCHBASE_API
346
+ lcb_error_t lcb_get_replica(lcb_t instance,
347
+ const void *command_cookie,
348
+ lcb_SIZE num,
349
+ const lcb_get_replica_cmd_t *const *commands);
350
+
351
+ /**
352
+ * @brief lcb_unlock() Command structure
353
+ * @see lcb_GETRESPv0
354
+ */
355
+ typedef struct {
356
+ const void *key;
357
+ lcb_SIZE nkey;
358
+ lcb_cas_t cas; /**< You _must_ populate this with the CAS */
359
+ LCB__HKFIELDS
360
+ } lcb_UNLOCKCMDv0;
361
+
362
+ /**@brief lcb_unlock() Wrapper structure
363
+ * @see lcb_UNLOCKCMDv0 */
364
+ typedef struct lcb_unlock_cmd_st {
365
+ int version;
366
+ union {
367
+ lcb_UNLOCKCMDv0 v0;
368
+ } v;
369
+ LCB_DEPR_CTORS_UNL
370
+ } lcb_unlock_cmd_t;
371
+
372
+ /** @brief lcb_unlock() response structure */
373
+ typedef struct {
374
+ const void *key;
375
+ lcb_SIZE nkey;
376
+ } lcb_UNLOCKRESPv0;
377
+
378
+ /**@brief lcb_unlock() wrapper response structure
379
+ * @see lcb_UNLOCKRESPv0 */
380
+ typedef struct {
381
+ int version;
382
+ union {
383
+ lcb_UNLOCKRESPv0 v0;
384
+ } v;
385
+ } lcb_unlock_resp_t;
386
+
387
+ /**
388
+ * The callback function for an unlock request.
389
+ *
390
+ * @param instance the instance performing the operation
391
+ * @param cookie the cookie associated with with the command
392
+ * @param error The status of the operation
393
+ * @param resp More information about the operation
394
+ * @committed
395
+ */
396
+ typedef void (*lcb_unlock_callback)(lcb_t instance,
397
+ const void *cookie,
398
+ lcb_error_t error,
399
+ const lcb_unlock_resp_t *resp);
400
+ /**@committed*/
401
+ LIBCOUCHBASE_API
402
+ lcb_unlock_callback lcb_set_unlock_callback(lcb_t, lcb_unlock_callback);
403
+
404
+ /**
405
+ * Unlock the key locked with lcb_get() with the lcb_GETCMDv0::lock option
406
+ *
407
+ * You should initialize the `key`, `nkey` and `cas` member in the
408
+ * lcb_item_st structure for the keys to get. All other
409
+ * members should be set to zero.
410
+ *
411
+ * @code{.c}
412
+ * lcb_unlock_cmd_t *unlock = calloc(1, sizeof(*unlock));
413
+ * unlock->version = 0;
414
+ * unlock->v.v0.key = "my-key";
415
+ * unlock->v.v0.nkey = strlen(unlock->v.v0.key);
416
+ * unlock->v.v0.cas = 0x666;
417
+ * lcb_unlock_cmd_t* commands[] = { unlock };
418
+ * lcb_unlock(instance, NULL, 1, commands);
419
+ * @endcode
420
+ *
421
+ * @param instance the handle to lcb
422
+ * @param command_cookie A cookie passed to all of the notifications
423
+ * from this command
424
+ * @param num the total number of elements in the commands array
425
+ * @param commands the array containing the items to unlock
426
+ * @return The status of the operation
427
+ * @return_rc
428
+ *
429
+ * Operation specific error codes:
430
+ * @cb_err ::LCB_ETMPFAIL if the item is not locked, or if the wrong CAS was
431
+ * specified
432
+ *
433
+ * @committed
434
+ */
435
+ LIBCOUCHBASE_API
436
+ lcb_error_t lcb_unlock(lcb_t instance,
437
+ const void *command_cookie,
438
+ lcb_SIZE num,
439
+ const lcb_unlock_cmd_t *const *commands);
440
+ /**@}*/
441
+
442
+ /**
443
+ * @brief lcb_store() Command structure
444
+ *
445
+ * This structure is used to define an item to be stored on the server.
446
+ */
447
+ typedef struct {
448
+ const void *key;
449
+ lcb_SIZE nkey;
450
+ const void *bytes; /**< Value to store */
451
+ lcb_SIZE nbytes; /**< Length of value to store */
452
+ lcb_U32 flags; /**< User-defined flags stored along with the item */
453
+ /**If present, the server will check that the item's _current_ CAS matches
454
+ * the value specified here. If this check fails the command will fail with
455
+ * an @ref LCB_KEY_EEXISTS error.
456
+ *
457
+ * @warning For @ref LCB_APPEND and @ref LCB_PREPEND, this field should be
458
+ * `0`. */
459
+ lcb_cas_t cas;
460
+ lcb_U8 datatype; /**< @private */
461
+ /**Expiration for the item. `0` means never expire.
462
+ * @warning for @ref LCB_APPEND and @ref LCB_PREPEND, this field should be
463
+ * `0`. */
464
+ lcb_time_t exptime;
465
+ lcb_storage_t operation; /**< **Mandatory**. Mutation type */
466
+ LCB__HKFIELDS
467
+ } lcb_STORECMDv0;
468
+
469
+ /** @brief Wrapper structure for lcb_STORECMDv0 */
470
+ typedef struct lcb_store_cmd_st {
471
+ int version;
472
+ union {
473
+ lcb_STORECMDv0 v0;
474
+ } v;
475
+ LCB_DEPR_CTORS_STORE
476
+ } lcb_store_cmd_t;
477
+
478
+
479
+
480
+ typedef struct {
481
+ const void *key; /**< Key that was stored */
482
+ lcb_SIZE nkey; /**< Size of key that was stored */
483
+ lcb_cas_t cas; /**< Cas representing current mutation */
484
+ /** mutation tokenen for mutation. This is used with N1QL and durability */
485
+ const lcb_MUTATION_TOKEN *mutation_token;
486
+ } lcb_STORERESPv0;
487
+
488
+ /** @brief Wrapper structure for lcb_STORERESPv0 */
489
+ typedef struct {
490
+ int version;
491
+ union {
492
+ lcb_STORERESPv0 v0;
493
+ } v;
494
+ } lcb_store_resp_t;
495
+
496
+ /**
497
+ * The callback function for a storage request.
498
+ *
499
+ * @param instance the instance performing the operation
500
+ * @param operation the operation performed
501
+ * @param cookie the cookie associated with with the command
502
+ * @param error The status of the operation
503
+ * @param resp More information about the item related to the store
504
+ * operation. (only key and nkey is valid if
505
+ * error != LCB_SUCCESS)
506
+ * @committed
507
+ */
508
+ typedef void (*lcb_store_callback)(lcb_t instance, const void *cookie,
509
+ lcb_storage_t operation, lcb_error_t error, const lcb_store_resp_t *resp);
510
+
511
+ /**
512
+ * @brief Set the callback to be received when an item has been stored
513
+ * @param callback the new callback to install, or `NULL` to just query the
514
+ * current callback
515
+ * @return the previous callback
516
+ * @see lcb_store()
517
+ * @committed
518
+ */
519
+ LIBCOUCHBASE_API
520
+ lcb_store_callback lcb_set_store_callback(lcb_t, lcb_store_callback callback);
521
+
522
+ /**
523
+ * Store an item in the cluster.
524
+ *
525
+ * You may initialize all of the members in the the
526
+ * lcb_item_st structure with the values you want.
527
+ * Values larger than `30*24*60*60` seconds (30 days) are
528
+ * interpreted as absolute times (from the epoch). Unused members
529
+ * should be set to zero.
530
+ *
531
+ * @code{.c}
532
+ * lcb_store_cmd_st *store = calloc(1, sizeof(*store));
533
+ * store->version = 0;
534
+ * store->v.v0.key = "my-key";
535
+ * store->v.v0.nkey = strlen(store->v.v0.key);
536
+ * store->v.v0.bytes = "{ value:666 }"
537
+ * store->v.v0.nbytes = strlen(store->v.v0.bytes);
538
+ * store->v.v0.flags = 0xdeadcafe;
539
+ * store->v.v0.cas = 0x1234;
540
+ * store->v.v0.exptime = 0x666;
541
+ * store->v.v0.operation = LCB_REPLACE;
542
+ * lcb_store_cmd_st* commands[] = { store };
543
+ * lcb_store(instance, NULL, 1, commands);
544
+ * @endcode
545
+ *
546
+ * @param instance the instance used to batch the requests from
547
+ * @param command_cookie A cookie passed to all of the notifications
548
+ * from this command
549
+ * @param num the total number of elements in the commands array
550
+ * @param commands the array containing the items to store
551
+ * @return_rc
552
+ *
553
+ * Operation-specific error codes include:
554
+ * @cb_err ::LCB_KEY_ENOENT if ::LCB_REPLACE was used and the key does not exist
555
+ * @cb_err ::LCB_KEY_EEXISTS if ::LCB_ADD was used and the key already exists
556
+ * @cb_err ::LCB_KEY_EEXISTS if the CAS was specified (for an operation other
557
+ * than ::LCB_ADD) and the item exists on the server with a different
558
+ * CAS
559
+ * @cb_err ::LCB_KEY_EEXISTS if the item was locked and the CAS supplied did
560
+ * not match the locked item's CAS (or if no CAS was supplied)
561
+ * @cb_err ::LCB_NOT_STORED if an ::LCB_APPEND or ::LCB_PREPEND operation was
562
+ * performed and the item did not exist on the server.
563
+ * @cb_err ::LCB_E2BIG if the size of the value exceeds the cluster per-item
564
+ * value limit (currently 20MB).
565
+ *
566
+ * @committed
567
+ */
568
+ LIBCOUCHBASE_API
569
+ lcb_error_t lcb_store(lcb_t instance, const void *command_cookie, lcb_SIZE num,
570
+ const lcb_store_cmd_t *const *commands);
571
+
572
+
573
+ /**@brief Command structure for arithmetic operations
574
+ * This is contained within the @ref lcb_arithmetic_cmd_t structure */
575
+ typedef struct {
576
+ const void *key;
577
+ lcb_SIZE nkey;
578
+
579
+ /**Expiration time for the item. Note this is _only_ valid if #create is
580
+ * set to true. */
581
+ lcb_time_t exptime;
582
+
583
+ /**
584
+ * If the item does not exist on the server, set this to true to force
585
+ * the creation of the item. Otherwise the operation will fail with
586
+ * @ref LCB_KEY_ENOENT
587
+ */
588
+ int create;
589
+
590
+ /**
591
+ * This number will be added to the current value on the server; if this is
592
+ * negative then the current value will be decremented; if positive then
593
+ * the current value will be incremented.
594
+ *
595
+ * On the server, the counter value is a 64 bit unsigned integer, whose
596
+ * maximum value is `UINT64_MAX` If an integer overflow occurs as a result
597
+ * of adding the `delta` value to the existing value on the server, then the
598
+ * value on the server will wrap around; thus for example, if the existing
599
+ * value was `UINT64_MAX-1` and `delta` was supplied as `2`, the new value
600
+ * would be `1`.
601
+ */
602
+ lcb_S64 delta;
603
+
604
+ /**
605
+ * If the `create` field is true, this is the initial value for the counter
606
+ * iff the item does not yet exist.
607
+ */
608
+ lcb_U64 initial;
609
+ LCB__HKFIELDS
610
+ } lcb_ARITHCMDv0;
611
+
612
+ /** @brief Wrapper structure for @ref lcb_ARITHCMDv0 */
613
+ typedef struct lcb_arithmetic_cmd_st {
614
+ int version;
615
+ /** @brief Wrapper union for @ref lcb_ARITHCMDv0 */
616
+ union { /** @brief Fill this structure */ lcb_ARITHCMDv0 v0; } v;
617
+
618
+ LCB_DEPR_CTORS_ARITH
619
+ } lcb_arithmetic_cmd_t;
620
+
621
+ typedef struct {
622
+ const void *key;
623
+ lcb_SIZE nkey;
624
+ lcb_U64 value; /**< Current numerical value of the counter */
625
+ lcb_cas_t cas;
626
+ /** mutation token for mutation. This is used with N1QL and durability */
627
+ const lcb_MUTATION_TOKEN *mutation_token;
628
+ } lcb_ARITHRESPv0;
629
+
630
+ typedef struct {
631
+ int version;
632
+ union {
633
+ lcb_ARITHRESPv0 v0;
634
+ } v;
635
+ } lcb_arithmetic_resp_t;
636
+
637
+ /**
638
+ * The callback function for an arithmetic request.
639
+ *
640
+ * @param instance the instance performing the operation
641
+ * @param cookie the cookie associated with with the command
642
+ * @param error The status of the operation
643
+ * @param resp More information about the operation (only key
644
+ * and nkey is valid if error != LCB_SUCCESS)
645
+ *
646
+ * @committed
647
+ */
648
+ typedef void (*lcb_arithmetic_callback)
649
+ (lcb_t instance, const void *cookie, lcb_error_t error, const lcb_arithmetic_resp_t *resp);
650
+
651
+ /**@committed*/
652
+ LIBCOUCHBASE_API
653
+ lcb_arithmetic_callback lcb_set_arithmetic_callback(lcb_t, lcb_arithmetic_callback);
654
+
655
+ /**
656
+ * Perform arithmetic operation on a keys value.
657
+ *
658
+ * You should initialize the key, nkey and expiration member in
659
+ * the lcb_item_st structure for the keys to update.
660
+ * Values larger than 30*24*60*60 seconds (30 days) are
661
+ * interpreted as absolute times (from the epoch). All other
662
+ * members should be set to zero.
663
+ *
664
+ * @code{.c}
665
+ * lcb_arithmetic_cmd_t *arithmetic = calloc(1, sizeof(*arithmetic));
666
+ * arithmetic->version = 0;
667
+ * arithmetic->v.v0.key = "counter";
668
+ * arithmetic->v.v0.nkey = strlen(arithmetic->v.v0.key);
669
+ * arithmetic->v.v0.initial = 0x666;
670
+ * arithmetic->v.v0.create = 1;
671
+ * arithmetic->v.v0.delta = 1;
672
+ * lcb_arithmetic_cmd_t* commands[] = { arithmetic };
673
+ * lcb_arithmetic(instance, NULL, 1, commands);
674
+ * @endcode
675
+ *
676
+ * @param instance the handle to lcb
677
+ * @param command_cookie A cookie passed to all of the notifications
678
+ * from this command
679
+ * @param num the total number of elements in the commands array
680
+ * @param commands the array containing the items to operate on
681
+ * @return_rc
682
+ *
683
+ * The following operation-specific error codes may be delivered in the callback:
684
+ * @cb_err ::LCB_KEY_ENOENT if the key does not exist (and `create` was not
685
+ * specified in the command
686
+ * @cb_err ::LCB_DELTA_BADVAL if the existing value could not be parsed into
687
+ * a number.
688
+ * @committed
689
+ */
690
+ LIBCOUCHBASE_API
691
+ lcb_error_t lcb_arithmetic(lcb_t instance,
692
+ const void *command_cookie,
693
+ lcb_SIZE num,
694
+ const lcb_arithmetic_cmd_t *const *commands);
695
+
696
+ typedef enum {
697
+ /**
698
+ * Only sends a command to the master. In this case the callback will
699
+ * be invoked only once for the master, and then another time with the
700
+ * NULL callback
701
+ */
702
+ LCB_OBSERVE_MASTER_ONLY = 0x01
703
+ } lcb_observe_options_t;
704
+
705
+ #define LCB_OBSERVE_FIELDS_COMMON \
706
+ const void *key; \
707
+ lcb_SIZE nkey; \
708
+ LCB__HKFIELDS /**<@private*/
709
+
710
+ typedef struct {
711
+ LCB_OBSERVE_FIELDS_COMMON
712
+ } lcb_OBSERVECMDv0;
713
+
714
+ /**@brief lcb_observe() Command structure */
715
+ typedef struct {
716
+ LCB_OBSERVE_FIELDS_COMMON
717
+ lcb_observe_options_t options;
718
+ } lcb_OBSERVECMDv1;
719
+
720
+ /**@brief lcb_observe() Command wrapper structure
721
+ * @see lcb_OBSERVECMDv1 */
722
+ typedef struct lcb_observe_cmd_st {
723
+ int version;
724
+ union {
725
+ lcb_OBSERVECMDv0 v0;
726
+ lcb_OBSERVECMDv1 v1;
727
+ } v;
728
+
729
+ LCB_DEPR_CTORS_OBS
730
+ } lcb_observe_cmd_t;
731
+
732
+ /**
733
+ * @brief Response Structure for lcb_observe()
734
+ */
735
+ typedef struct {
736
+ const void *key;
737
+ lcb_SIZE nkey;
738
+ lcb_cas_t cas; /**< CAS of the item on this server */
739
+ lcb_observe_t status; /**< Status flags */
740
+ int from_master; /**< zero if key came from replica */
741
+ lcb_time_t ttp; /**< average time to persist on this server */
742
+ lcb_time_t ttr; /**< average time to replicate on this server */
743
+ } lcb_OBSERVERESPv0;
744
+
745
+ typedef struct {
746
+ int version;
747
+ union {
748
+ lcb_OBSERVERESPv0 v0;
749
+ } v;
750
+ } lcb_observe_resp_t;
751
+
752
+ /**
753
+ * The callback function for an observe request.
754
+ *
755
+ * @param instance the instance performing the operation
756
+ * @param cookie the cookie associated with with the command
757
+ * @param error The status of the operation
758
+ * @param resp More information about the operation (only key
759
+ * and nkey is valid if error != LCB_SUCCESS)
760
+ */
761
+ typedef void (*lcb_observe_callback)(lcb_t instance,
762
+ const void *cookie,
763
+ lcb_error_t error,
764
+ const lcb_observe_resp_t *resp);
765
+
766
+ LIBCOUCHBASE_API
767
+ lcb_observe_callback lcb_set_observe_callback(lcb_t, lcb_observe_callback);
768
+
769
+ /**
770
+ * Observe key
771
+ *
772
+ * @code{.c}
773
+ * lcb_observe_cmd_t *observe = calloc(1, sizeof(*observe));
774
+ * observe->version = 0;
775
+ * observe->v.v0.key = "my-key";
776
+ * observe->v.v0.nkey = strlen(observe->v.v0.key);
777
+ * lcb_observe_cmd_t* commands[] = { observe };
778
+ * lcb_observe(instance, NULL, 1, commands);
779
+ * @endcode
780
+ *
781
+ * @param instance the instance used to batch the requests from
782
+ * @param command_cookie A cookie passed to all of the notifications
783
+ * from this command
784
+ * @param num the total number of elements in the commands array
785
+ * @param commands the array containing the items to observe
786
+ * @return_rc
787
+ *
788
+ * The following operation-specific error codes may be returned in the
789
+ * callback:
790
+ *
791
+ * @cb_err ::LCB_UNKNOWN_COMMAND, ::LCB_NOT_SUPPORTED if the cluster does not
792
+ * support this operation (such as a Couchbase cluster older than
793
+ * version 2.0, or a memcached bucket).
794
+ *
795
+ * @committed
796
+ */
797
+ LIBCOUCHBASE_API
798
+ lcb_error_t lcb_observe(lcb_t instance,
799
+ const void *command_cookie,
800
+ lcb_SIZE num,
801
+ const lcb_observe_cmd_t *const *commands);
802
+
803
+ /**
804
+ * @name Remove items from the cluster (Legacy API)
805
+ * Delete items from the cluster
806
+ * @{
807
+ */
808
+ typedef struct {
809
+ const void *key;
810
+ lcb_SIZE nkey;
811
+ lcb_cas_t cas;
812
+ LCB__HKFIELDS /**<@private*/
813
+ } lcb_REMOVECMDv0;
814
+
815
+ typedef struct lcb_remove_cmd_st {
816
+ int version;
817
+ union {
818
+ lcb_REMOVECMDv0 v0;
819
+ } v;
820
+ LCB_DEPR_CTORS_RM
821
+ } lcb_remove_cmd_t;
822
+
823
+
824
+ typedef struct {
825
+ const void *key;
826
+ lcb_SIZE nkey;
827
+ lcb_cas_t cas;
828
+ /** mutation token for mutation. This is used with N1QL and durability */
829
+ const lcb_MUTATION_TOKEN *mutation_token;
830
+ } lcb_REMOVERESPv0;
831
+
832
+ typedef struct {
833
+ int version;
834
+ union {
835
+ lcb_REMOVERESPv0 v0;
836
+ } v;
837
+ } lcb_remove_resp_t;
838
+
839
+ /**
840
+ * The callback function for a remove request.
841
+ *
842
+ * @param instance the instance performing the operation
843
+ * @param cookie the cookie associated with with the command
844
+ * @param error The status of the operation
845
+ * @param resp More information about the operation
846
+ */
847
+ typedef void (*lcb_remove_callback)(lcb_t instance, const void *cookie,
848
+ lcb_error_t error, const lcb_remove_resp_t *resp);
849
+
850
+ LIBCOUCHBASE_API
851
+ lcb_remove_callback lcb_set_remove_callback(lcb_t, lcb_remove_callback);
852
+
853
+ /**
854
+ * Remove a key from the cluster
855
+ *
856
+ * @code{.c}
857
+ * lcb_remove_cmd_t *remove = calloc(1, sizeof(*remove));
858
+ * remove->version = 0;
859
+ * remove->v.v0.key = "my-key";
860
+ * remove->v.v0.nkey = strlen(remove->v.v0.key);
861
+ * remove->v.v0.cas = 0x666;
862
+ * lcb_remove_cmd_t* commands[] = { remove };
863
+ * lcb_remove(instance, NULL, 1, commands);
864
+ * @endcode
865
+ *
866
+ * @param instance the instance used to batch the requests from
867
+ * @param command_cookie A cookie passed to all of the notifications
868
+ * from this command
869
+ * @param num the total number of elements in the commands array
870
+ * @param commands the array containing the items to remove
871
+ * @return_rc
872
+ *
873
+ * The following operation-specific error codes are returned in the callback
874
+ * @cb_err ::LCB_KEY_ENOENT if the key does not exist
875
+ * @cb_err ::LCB_KEY_EEXISTS if the CAS was specified and it does not match the
876
+ * CAS on the server
877
+ * @cb_err ::LCB_KEY_EEXISTS if the item was locked and no CAS (or an incorrect
878
+ * CAS) was specified.
879
+ *
880
+ * @committed
881
+ */
882
+ LIBCOUCHBASE_API
883
+ lcb_error_t lcb_remove(lcb_t instance,
884
+ const void *command_cookie,
885
+ lcb_SIZE num,
886
+ const lcb_remove_cmd_t *const *commands);
887
+
888
+ /**
889
+ * @name Modify an item's expiration time
890
+ * Modify an item's expiration time, keeping it alive without modifying
891
+ * it
892
+ * @{
893
+ */
894
+ typedef lcb_get_cmd_t lcb_touch_cmd_t;
895
+ typedef struct {
896
+ const void *key;
897
+ lcb_SIZE nkey;
898
+ lcb_cas_t cas;
899
+ } lcb_TOUCHRESPv0;
900
+ typedef struct {
901
+ int version;
902
+ union {
903
+ lcb_TOUCHRESPv0 v0;
904
+ } v;
905
+ } lcb_touch_resp_t;
906
+
907
+ /**
908
+ * The callback function for a touch request.
909
+ *
910
+ * @param instance the instance performing the operation
911
+ * @param cookie the cookie associated with with the command
912
+ * @param error The status of the operation
913
+ * @param resp More information about the operation
914
+ * @committed
915
+ */
916
+ typedef void (*lcb_touch_callback)(lcb_t instance,
917
+ const void *cookie,
918
+ lcb_error_t error,
919
+ const lcb_touch_resp_t *resp);
920
+ /**@committed*/
921
+ LIBCOUCHBASE_API
922
+ lcb_touch_callback lcb_set_touch_callback(lcb_t, lcb_touch_callback);
923
+
924
+ /**
925
+ * Touch (set expiration time) on a number of values in the cache.
926
+ *
927
+ * Values larger than 30*24*60*60 seconds (30 days) are
928
+ * interpreted as absolute times (from the epoch). All other
929
+ * members should be set to zero.
930
+ *
931
+ * @par Example
932
+ * @code{.c}
933
+ * lcb_touch_cmd_t touch = { 0 };
934
+ * lcb_touch_cmd_t *cmdlist = { &touch; }
935
+ * touch->v.v0.key = "my-key";
936
+ * touch->v.v0.nkey = strlen(item->v.v0.key);
937
+ * touch->v.v0.exptime = 300; // 5 minutes
938
+ * lcb_touch(instance, NULL, 1, cmdlist);
939
+ * @endcode
940
+ *
941
+ * @param instance the instance used to batch the requests from
942
+ * @param cookie A cookie passed to all of the notifications from this command
943
+ * @param num the total number of elements in the commnands array
944
+ * @param commands the array containing the items to touch
945
+ * @return_rc
946
+ *
947
+ * Errors received in callbacks:
948
+ * @cb_err ::LCB_KEY_ENOENT if the item does not exist
949
+ * @cb_err ::LCB_KEY_EEXISTS if the item is locked
950
+ */
951
+ LIBCOUCHBASE_API
952
+ lcb_error_t lcb_touch(lcb_t instance,
953
+ const void *cookie,
954
+ lcb_SIZE num,
955
+ const lcb_touch_cmd_t *const *commands);
956
+
957
+ /**
958
+ * @{
959
+ */
960
+
961
+ /** @brief Single-key command structure for lcb_durability_poll() */
962
+ typedef struct {
963
+ const void *key;
964
+ size_t nkey;
965
+ LCB__HKFIELDS /**<@private*/
966
+
967
+ /**
968
+ * CAS to be checked against. If the key exists on the server
969
+ * with a different CAS, the error (in the response) is set to
970
+ * LCB_KEY_EEXISTS
971
+ */
972
+ lcb_cas_t cas;
973
+ const lcb_MUTATION_TOKEN *mutation_token;
974
+ } lcb_DURABILITYCMDv0;
975
+
976
+ /**
977
+ * @brief lcb_durability_poll() Command wrapper
978
+ * @see lcb_DURABILITYCMDv0
979
+ */
980
+ typedef struct lcb_durability_cmd_st {
981
+ int version;
982
+ union {
983
+ lcb_DURABILITYCMDv0 v0;
984
+ } v;
985
+ } lcb_durability_cmd_t;
986
+
987
+
988
+ /** @brief Response structure for lcb_durability_poll() */
989
+ typedef struct {
990
+ const void *key;
991
+ lcb_SIZE nkey;
992
+ /**
993
+ * if this entry failed, this contains the reason, e.g.
994
+ *
995
+ * - `LCB_KEY_EEXISTS`: The key exists with a different CAS than expected
996
+ * - `LCB_KEY_ENOENT`: The key was not found in the master cache
997
+ * - `LCB_ETIMEDOUT`: The key may exist, but the required servers needed
998
+ * took too long to respond
999
+ */
1000
+ lcb_error_t err;
1001
+
1002
+ /** if found with a different CAS, this is the CAS */
1003
+ lcb_cas_t cas;
1004
+
1005
+ /**
1006
+ * Whether the key was persisted to the master.
1007
+ * For deletes, this means the key was removed from disk
1008
+ */
1009
+ unsigned char persisted_master;
1010
+
1011
+ /**
1012
+ * Whether the key exists on the master. For deletes, this means
1013
+ * the key does not exist in cache
1014
+ */
1015
+ unsigned char exists_master;
1016
+
1017
+ /** how many nodes (including master) this item was persisted to */
1018
+ unsigned char npersisted;
1019
+
1020
+ /** how many nodes (excluding master) this item was replicated to */
1021
+ unsigned char nreplicated;
1022
+
1023
+ /**
1024
+ * Total number of observe responses received for the node.
1025
+ * This can be used as a performance metric to determine how many
1026
+ * total OBSERVE probes were sent until this key was 'done'
1027
+ */
1028
+ unsigned short nresponses;
1029
+ } lcb_DURABILITYRESPv0;
1030
+
1031
+ typedef struct lcb_durability_resp_st {
1032
+ int version;
1033
+ union {
1034
+ lcb_DURABILITYRESPv0 v0;
1035
+ } v;
1036
+ } lcb_durability_resp_t;
1037
+
1038
+ /**
1039
+ * Schedule a durability check on a set of keys. This callback wraps (somewhat)
1040
+ * the lower-level OBSERVE (lcb_observe) operations so that users may check if
1041
+ * a key is endured, e.g. if a key is persisted accross "at least" n number of
1042
+ * servers
1043
+ *
1044
+ * When each key has its criteria satisfied, the durability callback (see above)
1045
+ * is invoked for it.
1046
+ *
1047
+ * The callback may also be invoked when a condition is encountered that will
1048
+ * prevent the key from ever satisfying the criteria.
1049
+ *
1050
+ * @param instance the lcb handle
1051
+ * @param cookie a pointer to be received with each callback
1052
+ * @param options a set of options and criteria for this durability check
1053
+ * @param cmds a list of key specifications to check for
1054
+ * @param ncmds how many key specifications reside in the list
1055
+ * @return ::LCB_SUCCESS if scheduled successfuly
1056
+ * @return ::LCB_DURABILITY_ETOOMANY if the criteria specified exceeds the
1057
+ * current satisfiable limit (e.g. `persist_to` was set to 4, but
1058
+ * there are only 2 servers online in the cluster) and `cap_max`
1059
+ * was not specified.
1060
+ * @return ::LCB_DUPLICATE_COMMANDS if the same key was found more than once
1061
+ * in the command list
1062
+ *
1063
+ * The following error codes may be returned in the callback
1064
+ * @cb_err ::LCB_ETIMEDOUT if the specified interval expired before the client
1065
+ * could verify the durability requirements were satisfied. See
1066
+ * @ref LCB_CNTL_DURABILITY_TIMEOUT and lcb_DURABILITYOPTSv0::timeout
1067
+ * for more information on how to increase this interval.
1068
+ *
1069
+ * Example (after receiving a store callback)
1070
+ * @code{.c}
1071
+ *
1072
+ * lcb_durability_cmd_t cmd, cmds[1];
1073
+ * lcb_durability_opts_t opts;
1074
+ * lcb_error_t err;
1075
+ *
1076
+ * memset(&opts, 0, sizeof(opts);
1077
+ * memset(&cmd, 0, sizeof(cmd);
1078
+ * cmds[0] = &cmd;
1079
+ *
1080
+ *
1081
+ * opts.persist_to = 2;
1082
+ * opts.replicate_to = 1;
1083
+ *
1084
+ * cmd.v.v0.key = resp->v.v0.key;
1085
+ * cmd.v.v0.nkey = resp->v.v0.nkey;
1086
+ * cmd.v.v0.cas = resp->v.v0.cas;
1087
+ *
1088
+ * //schedule the command --
1089
+ * err = lcb_durability_poll(instance, cookie, &opts, &cmds, 1);
1090
+ * // error checking omitted --
1091
+ *
1092
+ * // later on, in the callback. resp is now a durability_resp_t* --
1093
+ * if (resp->v.v0.err == LCB_SUCCESS) {
1094
+ * printf("Key was endured!\n");
1095
+ * } else {
1096
+ * printf("Key did not endure in time\n");
1097
+ * printf("Replicated to: %u replica nodes\n", resp->v.v0.nreplicated);
1098
+ * printf("Persisted to: %u total nodes\n", resp->v.v0.npersisted);
1099
+ * printf("Did we persist to master? %u\n",
1100
+ * resp->v.v0.persisted_master);
1101
+ * printf("Does the key exist in the master's cache? %u\n",
1102
+ * resp->v.v0.exists_master);
1103
+ *
1104
+ * switch (resp->v.v0.err) {
1105
+ *
1106
+ * case LCB_KEY_EEXISTS:
1107
+ * printf("Seems like someone modified the key already...\n");
1108
+ * break;
1109
+ *
1110
+ * case LCB_ETIMEDOUT:
1111
+ * printf("Either key does not exist, or the servers are too slow\n");
1112
+ * printf("If persisted_master or exists_master is true, then the"
1113
+ * "server is simply slow.",
1114
+ * "otherwise, the key does not exist\n");
1115
+ *
1116
+ * break;
1117
+ *
1118
+ * default:
1119
+ * printf("Got other error. This is probably a network error\n");
1120
+ * break;
1121
+ * }
1122
+ * }
1123
+ * @endcode
1124
+ * @committed
1125
+ */
1126
+ LIBCOUCHBASE_API
1127
+ lcb_error_t lcb_durability_poll(lcb_t instance,
1128
+ const void *cookie,
1129
+ const lcb_durability_opts_t *options,
1130
+ lcb_SIZE ncmds,
1131
+ const lcb_durability_cmd_t *const *cmds);
1132
+
1133
+ /**
1134
+ * Callback for durability status. The callback is invoked on completion
1135
+ * of each key (i.e. only one callback is invoked per-key).
1136
+ *
1137
+ * @param lcb_t the instance
1138
+ * @param cookie the user cookie
1139
+ * @param err an error
1140
+ * @param res a response containing information about the key.
1141
+ */
1142
+ typedef void (*lcb_durability_callback)(lcb_t instance,
1143
+ const void *cookie,
1144
+ lcb_error_t err,
1145
+ const lcb_durability_resp_t *res);
1146
+
1147
+ LIBCOUCHBASE_API
1148
+ lcb_durability_callback lcb_set_durability_callback(lcb_t,
1149
+ lcb_durability_callback);
1150
+
1151
+ /**@}*/
1152
+
1153
+ /**
1154
+ * @name Retrieve statistics from the cluster
1155
+ * @{
1156
+ */
1157
+ typedef struct {
1158
+ const void *name; /**< The name of the stats group to get */
1159
+ lcb_SIZE nname; /**< The number of bytes in name */
1160
+ } lcb_STATSCMDv0;
1161
+
1162
+ typedef struct lcb_server_stats_cmd_st {
1163
+ int version;
1164
+ union { lcb_STATSCMDv0 v0; } v;
1165
+ LCB_DEPR_CTORS_STATS
1166
+ } lcb_server_stats_cmd_t;
1167
+
1168
+ /**
1169
+ * @brief Per-server, per-stat response structure for lcb_server_stats()
1170
+ *
1171
+ * This structure is returned for each statistic requested by lcb_server_stats().
1172
+ * As both the number of servers replying to this function as well as the number
1173
+ * of stats per server is variable, the application should pay attention to the
1174
+ * following semantics:
1175
+ *
1176
+ * 1. A new statistic item is delivered with the `server_endpoint` and `key`
1177
+ * being non-`NULL`
1178
+ * 2. If a specific server encounters an error, the `key` and `bytes` fields
1179
+ * will be NULL.
1180
+ * 3. Once no more replies remain from any of the servers, a final callback
1181
+ * will be delivered with the `server_endpoint` field set to `NULL`.
1182
+ *
1183
+ * It is recommended to index statistics twice; first based on the
1184
+ * `server_endpoint` field and then on the `key` field. It is likely that the
1185
+ * same `key` will be received multiple times for different `server_endpoints`.
1186
+ */
1187
+ typedef struct {
1188
+ const char *server_endpoint; /**< Server which the statistic is from */
1189
+ const void *key; /**< Statistic name */
1190
+ lcb_SIZE nkey;
1191
+ const void *bytes; /**< Statistic value */
1192
+ lcb_SIZE nbytes;
1193
+ } lcb_STATSRESPv0;
1194
+
1195
+ /** @brief Wrapper structure for lcb_STATSRESPv0 */
1196
+ typedef struct lcb_server_stat_resp_st {
1197
+ int version;
1198
+ union {
1199
+ lcb_STATSRESPv0 v0;
1200
+ } v;
1201
+ } lcb_server_stat_resp_t;
1202
+
1203
+ /**
1204
+ * The callback function for a stat request
1205
+ *
1206
+ * @param instance the instance performing the operation
1207
+ * @param cookie the cookie associated with with the command
1208
+ * @param error The status of the operation
1209
+ * @param resp response data
1210
+ */
1211
+ typedef void (*lcb_stat_callback)(lcb_t instance,
1212
+ const void *cookie,
1213
+ lcb_error_t error,
1214
+ const lcb_server_stat_resp_t *resp);
1215
+ LIBCOUCHBASE_API
1216
+ lcb_stat_callback lcb_set_stat_callback(lcb_t, lcb_stat_callback);
1217
+
1218
+ /**
1219
+ * Request server statistics. Without a key specified the server will
1220
+ * respond with a "default" set of statistics information. Each piece of
1221
+ * statistical information is returned in its own packet (key contains
1222
+ * the name of the statistical item and the body contains the value in
1223
+ * ASCII format). The sequence of return packets is terminated with a
1224
+ * packet that contains no key and no value.
1225
+ *
1226
+ * The command will signal about transfer completion by passing NULL as
1227
+ * the server endpoint and 0 for key length. Note that key length will
1228
+ * be zero when some server responds with error. In latter case server
1229
+ * endpoint argument will indicate the server address.
1230
+ *
1231
+ * @code{.c}
1232
+ * lcb_server_stats_cmd_t *cmd = calloc(1, sizeof(*cmd));
1233
+ * cmd->version = 0;
1234
+ * cmd->v.v0.name = "tap";
1235
+ * cmd->v.v0.nname = strlen(cmd->v.v0.nname);
1236
+ * lcb_server_stats_cmd_t* commands[] = { cmd };
1237
+ * lcb_server_stats(instance, NULL, 1, commands);
1238
+ * @endcode
1239
+ *
1240
+ * @param instance the instance used to batch the requests from
1241
+ * @param command_cookie a cookie passed to all of the notifications
1242
+ * from this command
1243
+ * @param num the total number of elements in the commands array
1244
+ * @param commands the array containing the statistic to get
1245
+ * @return_rc
1246
+ *
1247
+ * The following callbacks may be returned in the callback
1248
+ * @cb_err ::LCB_KEY_ENOENT if key passed is unrecognized
1249
+ *
1250
+ * @todo Enumerate some useful stats here
1251
+ */
1252
+ LIBCOUCHBASE_API
1253
+ lcb_error_t lcb_server_stats(lcb_t instance,
1254
+ const void *command_cookie,
1255
+ lcb_SIZE num,
1256
+ const lcb_server_stats_cmd_t *const *commands);
1257
+
1258
+ /**@}*/
1259
+
1260
+
1261
+ typedef struct lcb_server_version_cmd_st {
1262
+ int version;
1263
+ union { struct { const void *notused; } v0; } v;
1264
+ LCB_DEPR_CTORS_VERSIONS
1265
+ } lcb_server_version_cmd_t;
1266
+
1267
+ /**
1268
+ * @brief Response structure for lcb_server_versions()
1269
+ */
1270
+ typedef struct lcb_server_version_resp_st {
1271
+ int version;
1272
+ union {
1273
+ struct {
1274
+ const char *server_endpoint;
1275
+ const char *vstring;
1276
+ lcb_SIZE nvstring;
1277
+ } v0;
1278
+ } v;
1279
+ } lcb_server_version_resp_t;
1280
+
1281
+ /**
1282
+ * Request server versions. The callback will be invoked with the
1283
+ * instance, server address, version string, and version string length.
1284
+ *
1285
+ * When all server versions have been received, the callback is invoked
1286
+ * with the server endpoint argument set to NULL
1287
+ *
1288
+ * @code{.c}
1289
+ * lcb_server_version_cmd_t *cmd = calloc(1, sizeof(*cmd));
1290
+ * cmd->version = 0;
1291
+ * lcb_server_version_cmd_t* commands[] = { cmd };
1292
+ * lcb_server_versions(instance, NULL, 1, commands);
1293
+ * @endcode
1294
+ *
1295
+ * @param instance the instance used to batch the requests from
1296
+ * @param command_cookie a cookie passed to all of the notifications
1297
+ * from this command
1298
+ * @param num the total number of elements in the commands array
1299
+ * @param commands the array containing the version commands
1300
+ * @return The status of the operation
1301
+ *
1302
+ * @attention
1303
+ * The name of this function may be slightly misleading. This does **not**
1304
+ * retrieve the Couchbase Server version, but only the version of its _memcached_
1305
+ * component. See lcb_server_stats() for a way to retrieve the server version
1306
+ * @committed
1307
+ */
1308
+ LIBCOUCHBASE_API
1309
+ lcb_error_t lcb_server_versions(lcb_t instance,
1310
+ const void *command_cookie,
1311
+ lcb_SIZE num,
1312
+ const lcb_server_version_cmd_t *const *commands);
1313
+
1314
+ /**
1315
+ * The callback function for a version request
1316
+ *
1317
+ * @param instance the instance performing the operation
1318
+ * @param cookie the cookie associated with with the command
1319
+ * @param error The status of the operation
1320
+ * @param resp response data
1321
+ */
1322
+ typedef void (*lcb_version_callback)(lcb_t instance,
1323
+ const void *cookie,
1324
+ lcb_error_t error,
1325
+ const lcb_server_version_resp_t *resp);
1326
+
1327
+ LIBCOUCHBASE_API
1328
+ lcb_version_callback lcb_set_version_callback(lcb_t, lcb_version_callback);
1329
+
1330
+ typedef struct {
1331
+ const char *server;
1332
+ lcb_verbosity_level_t level;
1333
+ } lcb_VERBOSITYCMDv0;
1334
+
1335
+ typedef struct lcb_verbosity_cmd_st {
1336
+ int version;
1337
+ union {
1338
+ lcb_VERBOSITYCMDv0 v0;
1339
+ } v;
1340
+ LCB_DEPR_CTORS_VERBOSITY
1341
+ } lcb_verbosity_cmd_t;
1342
+
1343
+ typedef struct lcb_verbosity_resp_st {
1344
+ int version;
1345
+ union {
1346
+ struct {
1347
+ const char *server_endpoint;
1348
+ } v0;
1349
+ } v;
1350
+ } lcb_verbosity_resp_t;
1351
+
1352
+ /**
1353
+ * Set the loglevel on the servers
1354
+ *
1355
+ * @code{.c}
1356
+ * lcb_verbosity_cmd_t *cmd = calloc(1, sizeof(*cmd));
1357
+ * cmd->version = 0;
1358
+ * cmd->v.v0.level = LCB_VERBOSITY_WARNING;
1359
+ * lcb_verbosity_cmd_t* commands[] = { cmd };
1360
+ * lcb_set_verbosity(instance, NULL, 1, commands);
1361
+ * @endcode
1362
+ *
1363
+ * @param instance the instance used to batch the requests from
1364
+ * @param command_cookie A cookie passed to all of the notifications
1365
+ * from this command
1366
+ * @param num the total number of elements in the commands array
1367
+ * @param commands the array containing the verbosity commands
1368
+ * @return The status of the operation.
1369
+ */
1370
+ LIBCOUCHBASE_API
1371
+ lcb_error_t lcb_set_verbosity(lcb_t instance,
1372
+ const void *command_cookie,
1373
+ lcb_SIZE num,
1374
+ const lcb_verbosity_cmd_t *const *commands);
1375
+
1376
+ /**
1377
+ * The callback function for a verbosity command
1378
+ *
1379
+ * @param instance the instance performing the operation
1380
+ * @param cookie the cookie associated with with the command
1381
+ * @param error The status of the operation
1382
+ * @param resp response data
1383
+ */
1384
+ typedef void (*lcb_verbosity_callback)(lcb_t instance,
1385
+ const void *cookie,
1386
+ lcb_error_t error,
1387
+ const lcb_verbosity_resp_t *resp);
1388
+
1389
+ LIBCOUCHBASE_API
1390
+ lcb_verbosity_callback lcb_set_verbosity_callback(lcb_t,
1391
+ lcb_verbosity_callback);
1392
+ typedef struct lcb_flush_cmd_st {
1393
+ int version;
1394
+ union { struct { int unused; } v0; } v;
1395
+ LCB_DEPR_CTORS_FLUSH
1396
+ } lcb_flush_cmd_t;
1397
+
1398
+ typedef struct lcb_flush_resp_st {
1399
+ int version;
1400
+ union {
1401
+ struct {
1402
+ const char *server_endpoint;
1403
+ } v0;
1404
+ } v;
1405
+ } lcb_flush_resp_t;
1406
+
1407
+ /**
1408
+ * Flush the entire couchbase cluster!
1409
+ *
1410
+ * @warning
1411
+ * From Couchbase Server 2.0 and higher, this command will only work on
1412
+ * _memcached_ buckets. To flush a Couchbase bucket, use the HTTP REST
1413
+ * API (See: http://docs.couchbase.com/admin/admin/REST/rest-bucket-flush.html)
1414
+ *
1415
+ * @code{.c}
1416
+ * lcb_flush_cmd_t *cmd = calloc(1, sizeof(*cmd));
1417
+ * cmd->version = 0;
1418
+ * lcb_flush_cmd_t* commands[] = { cmd };
1419
+ * lcb_flush(instance, NULL, 1, commands);
1420
+ * @endcode
1421
+ *
1422
+ * @param instance the instance used to batch the requests from
1423
+ * @param cookie A cookie passed to all of the notifications from this command
1424
+ * @param num the total number of elements in the commands array
1425
+ * @param commands the array containing the flush commands
1426
+ * @return_rc
1427
+ *
1428
+ * The following error codes may be returned in the callback
1429
+ * @cb_err ::LCB_NOT_SUPPORTED if trying to flush a Couchbase bucket.
1430
+ *
1431
+ * @committed
1432
+ */
1433
+ LIBCOUCHBASE_API
1434
+ lcb_error_t lcb_flush(lcb_t instance, const void *cookie,
1435
+ lcb_SIZE num,
1436
+ const lcb_flush_cmd_t *const *commands);
1437
+
1438
+ /**
1439
+ * The callback function for a flush request
1440
+ *
1441
+ * @param instance the instance performing the operation
1442
+ * @param cookie the cookie associated with with the command
1443
+ * @param error The status of the operation
1444
+ * @param resp Response data
1445
+ */
1446
+ typedef void (*lcb_flush_callback)(lcb_t instance,
1447
+ const void *cookie,
1448
+ lcb_error_t error,
1449
+ const lcb_flush_resp_t *resp);
1450
+ LIBCOUCHBASE_API
1451
+ lcb_flush_callback lcb_set_flush_callback(lcb_t, lcb_flush_callback);
1452
+
1453
+ /**
1454
+ * @name HTTP Operations (Legacy API)
1455
+ * Schedule HTTP requests to the server. This includes management
1456
+ * and view requests
1457
+ * @{
1458
+ */
1459
+
1460
+ /**
1461
+ * @brief Structure for lcb_make_http_request()
1462
+ */
1463
+ typedef struct {
1464
+ /** A view path string with optional query params (e.g. skip, limit etc.) */
1465
+ const char *path;
1466
+ lcb_SIZE npath; /**< Length of the path. Mandatory */
1467
+ const void *body; /**< The POST body for HTTP request */
1468
+ lcb_SIZE nbody; /**< Length of the body. Mandatory if `body != NULL`*/
1469
+ lcb_http_method_t method;
1470
+ /**If true the client will use lcb_http_data_callback to
1471
+ * notify about response and will call lcb_http_complete
1472
+ * with empty data eventually. */
1473
+ int chunked;
1474
+ /** The `Content-Type` header for request. For view requests
1475
+ * it is usually `application/json`, for management --
1476
+ * `application/x-www-form-urlencoded`. */
1477
+ const char *content_type;
1478
+ } lcb_HTTPCMDv0;
1479
+
1480
+ /**
1481
+ * v1 is used by the raw http requests. It is exactly the
1482
+ * same layout as v0, but it contains an extra field;
1483
+ * the hostname & port to use....
1484
+ */
1485
+ typedef struct {
1486
+ const char *path; /**< @see lcb_HTTPCMDv0::path */
1487
+ lcb_SIZE npath;
1488
+ const void *body; /**< @see lcb_HTTPCMDv0::body */
1489
+ lcb_SIZE nbody;
1490
+ lcb_http_method_t method;
1491
+ int chunked;
1492
+ const char *content_type;
1493
+ const char *host;
1494
+ const char *username;
1495
+ const char *password;
1496
+ } lcb_HTTPCMDv1;
1497
+
1498
+ /**@brief Wrapper structure for lcb_make_http_request
1499
+ * @see lcb_HTTPCMDv0
1500
+ * @see lcb_HTTPCMDv1
1501
+ */
1502
+ typedef struct lcb_http_cmd_st {
1503
+ int version;
1504
+ union {
1505
+ lcb_HTTPCMDv0 v0;
1506
+ lcb_HTTPCMDv1 v1;
1507
+ } v;
1508
+ LCB_DEPR_CTORS_HTTP
1509
+ } lcb_http_cmd_t;
1510
+
1511
+ /**
1512
+ * @brief Response structure received for HTTP requests
1513
+ *
1514
+ * The `headers` field is a list of key-value headers for HTTP, so it may
1515
+ * be traversed like so:
1516
+ *
1517
+ * @code{.c}
1518
+ * const char ** cur = resp->headers;
1519
+ * for (; *cur; cur+=2) {
1520
+ * printf("Header: %s:%s\n", cur[0], cur[1]);
1521
+ * }
1522
+ * @endcode
1523
+ */
1524
+ typedef struct {
1525
+ lcb_http_status_t status; /**< HTTP status code */
1526
+ const char *path; /**< Path used for request */
1527
+ lcb_SIZE npath;
1528
+ const char *const *headers; /**< List of headers */
1529
+ const void *bytes; /**< Body (if any) */
1530
+ lcb_SIZE nbytes;
1531
+ } lcb_HTTPRESPv0;
1532
+
1533
+ typedef struct {
1534
+ int version;
1535
+ union {
1536
+ lcb_HTTPRESPv0 v0;
1537
+ } v;
1538
+ } lcb_http_resp_t;
1539
+
1540
+ /**
1541
+ * Callback invoked for HTTP requests
1542
+ * @param request Original request handle
1543
+ * @param instance The instance on which the request was issued
1544
+ * @param cookie Cookie associated with the request
1545
+ * @param error Error code for request. Note that more information may likely
1546
+ * be found within the response structure itself, specifically the
1547
+ * lcb_HTTPRESPv0::status and lcb_HTTPRESPv0::bytes field
1548
+ *
1549
+ * @param resp The response structure
1550
+ */
1551
+ typedef void (*lcb_http_res_callback)(
1552
+ lcb_http_request_t request, lcb_t instance, const void *cookie,
1553
+ lcb_error_t error, const lcb_http_resp_t *resp);
1554
+
1555
+ typedef lcb_http_res_callback lcb_http_data_callback;
1556
+ typedef lcb_http_res_callback lcb_http_complete_callback;
1557
+
1558
+ /**
1559
+ * @brief Set the HTTP completion callback for HTTP request completion
1560
+ *
1561
+ * This callback will be
1562
+ * invoked once when the response is complete. If the lcb_HTTPCMDv0::chunked
1563
+ * flag was set, the lcb_HTTRESPv0::bytes will be `NULL`, otherwise it will
1564
+ * contain the fully buffered response.
1565
+ */
1566
+ LIBCOUCHBASE_API
1567
+ lcb_http_complete_callback
1568
+ lcb_set_http_complete_callback(lcb_t, lcb_http_complete_callback);
1569
+
1570
+ /**
1571
+ * @brief Set the HTTP data stream callback for streaming responses
1572
+ *
1573
+ * This callback is invoked only if the lcb_HTTPCMDv0::chunked flag is true.
1574
+ * The lcb_HTTRESPv0::bytes field will on each invocation contain a new
1575
+ * fragment of data which should be processed by the client. When the request
1576
+ * is complete, the the callback specified by lcb_set_http_complete_callback()
1577
+ * will be invoked with the lcb_HTTPRESPv0::bytes field set to `NULL`
1578
+ */
1579
+ LIBCOUCHBASE_API
1580
+ lcb_http_data_callback
1581
+ lcb_set_http_data_callback(lcb_t, lcb_http_data_callback);
1582
+
1583
+ /**
1584
+ * Execute HTTP request matching given path and yield JSON result object.
1585
+ * Depending on type it could be:
1586
+ *
1587
+ * - LCB_HTTP_TYPE_VIEW
1588
+ *
1589
+ * The client should setup view_complete callback in order to fetch
1590
+ * the result. Also he can setup view_data callback to fetch response
1591
+ * body in chunks as soon as possible, it will be called each time the
1592
+ * library receive a data chunk from socket. The empty <tt>bytes</tt>
1593
+ * argument (NULL pointer and zero size) is the sign of end of
1594
+ * response. Chunked callback allows to save memory on large datasets.
1595
+ *
1596
+ * - LCB_HTTP_TYPE_MANAGEMENT
1597
+ *
1598
+ * Management requests allow you to configure the cluster, add/remove
1599
+ * buckets, rebalance etc. The result will be passed to management
1600
+ * callbacks (data/complete).
1601
+ *
1602
+ * Fetch first 10 docs from `_design/test/_view/all` view
1603
+ * @code{.c}
1604
+ * lcb_http_request_t req;
1605
+ * lcb_http_cmd_t *cmd = calloc(1, sizeof(lcb_http_cmd_t));
1606
+ * cmd->version = 0;
1607
+ * cmd->v.v0.path = "_design/test/_view/all?limit=10";
1608
+ * cmd->v.v0.npath = strlen(item->v.v0.path);
1609
+ * cmd->v.v0.body = NULL;
1610
+ * cmd->v.v0.nbody = 0;
1611
+ * cmd->v.v0.method = LCB_HTTP_METHOD_GET;
1612
+ * cmd->v.v0.chunked = 1;
1613
+ * cmd->v.v0.content_type = "application/json";
1614
+ * lcb_error_t err = lcb_make_http_request(instance, NULL,
1615
+ * LCB_HTTP_TYPE_VIEW, &cmd, &req);
1616
+ * if (err != LCB_SUCCESS) {
1617
+ * .. failed to schedule request ..
1618
+ * @endcode
1619
+ *
1620
+ * The same as above but with POST filter
1621
+ * @code{.c}
1622
+ * lcb_http_request_t req;
1623
+ * lcb_http_cmd_t *cmd = calloc(1, sizeof(lcb_http_cmd_t));
1624
+ * cmd->version = 0;
1625
+ * cmd->v.v0.path = "_design/test/_view/all?limit=10";
1626
+ * cmd->v.v0.npath = strlen(item->v.v0.path);
1627
+ * cmd->v.v0.body = "{\"keys\": [\"test_1000\", \"test_10002\"]}"
1628
+ * cmd->v.v0.nbody = strlen(item->v.v0.body);
1629
+ * cmd->v.v0.method = LCB_HTTP_METHOD_POST;
1630
+ * cmd->v.v0.chunked = 1;
1631
+ * cmd->v.v0.content_type = "application/json";
1632
+ * lcb_error_t err = lcb_make_http_request(instance, NULL,
1633
+ * LCB_HTTP_TYPE_VIEW, &cmd, &req);
1634
+ * if (err != LCB_SUCCESS) {
1635
+ * .. failed to schedule request ..
1636
+ * @endcode
1637
+ *
1638
+ * @code{.c} Delete bucket via REST management API
1639
+ * lcb_http_request_t req;
1640
+ * lcb_http_cmd_t cmd;
1641
+ * cmd->version = 0;
1642
+ * cmd.v.v0.path = query.c_str();
1643
+ * cmd.v.v0.npath = query.length();
1644
+ * cmd.v.v0.body = NULL;
1645
+ * cmd.v.v0.nbody = 0;
1646
+ * cmd.v.v0.method = LCB_HTTP_METHOD_DELETE;
1647
+ * cmd.v.v0.chunked = false;
1648
+ * cmd.v.v0.content_type = "application/x-www-form-urlencoded";
1649
+ * lcb_error_t err = lcb_make_http_request(instance, NULL,
1650
+ * LCB_HTTP_TYPE_MANAGEMENT, &cmd, &req);
1651
+ * if (err != LCB_SUCCESS) {
1652
+ * .. failed to schedule request ..
1653
+ * @endcode
1654
+ *
1655
+ * @param instance The handle to lcb
1656
+ * @param command_cookie A cookie passed to all of the notifications
1657
+ * from this command
1658
+ * @param type The type of the request needed.
1659
+ * @param cmd The struct describing the command options
1660
+ * @param request Where to store request handle
1661
+ *
1662
+ * @return_rc
1663
+ *
1664
+ * The following errors may be received in the callback. Note that ::LCB_SUCCESS
1665
+ * will be delivered the callback so long as the operation received a full
1666
+ * HTTP response. You should inspect the individual HTTP status code to determine
1667
+ * if the actual HTTP request succeeded or not.
1668
+ *
1669
+ * @cb_err ::LCB_TOO_MANY_REDIRECTS if the request was redirected too many times.
1670
+ * @cb_err ::LCB_PROTOCOL_ERROR if the endpoint did not send back a well formed
1671
+ * HTTP response
1672
+ *
1673
+ * @committed
1674
+ */
1675
+ LIBCOUCHBASE_API
1676
+ lcb_error_t lcb_make_http_request(lcb_t instance,
1677
+ const void *command_cookie,
1678
+ lcb_http_type_t type,
1679
+ const lcb_http_cmd_t *cmd,
1680
+ lcb_http_request_t *request);
1681
+
1682
+ /**@}*/
1683
+
1684
+ /**@}*/
1685
+
1686
+ #ifdef __cplusplus
1687
+ }
1688
+ #endif
1689
+ #endif