couchbase 4.4.2 → 4.4.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (98) hide show
  1. package/CMakeLists.txt +2 -0
  2. package/deps/couchbase-cxx-client/CMakeLists.txt +17 -14
  3. package/deps/couchbase-cxx-client/README.md +2 -2
  4. package/deps/couchbase-cxx-client/cmake/Packaging.cmake +4 -0
  5. package/deps/couchbase-cxx-client/cmake/Testing.cmake +1 -1
  6. package/deps/couchbase-cxx-client/cmake/VersionInfo.cmake +24 -2
  7. package/deps/couchbase-cxx-client/cmake/couchbase-cxx-client.spec.in +43 -4
  8. package/deps/couchbase-cxx-client/core/agent_group.cxx +8 -0
  9. package/deps/couchbase-cxx-client/core/agent_group.hxx +4 -0
  10. package/deps/couchbase-cxx-client/core/bucket.cxx +16 -20
  11. package/deps/couchbase-cxx-client/core/bucket.hxx +12 -12
  12. package/deps/couchbase-cxx-client/core/cluster.cxx +44 -52
  13. package/deps/couchbase-cxx-client/core/cluster_agent.cxx +8 -0
  14. package/deps/couchbase-cxx-client/core/cluster_agent.hxx +4 -0
  15. package/deps/couchbase-cxx-client/core/collections_component.cxx +2 -2
  16. package/deps/couchbase-cxx-client/core/columnar/agent.cxx +2 -2
  17. package/deps/couchbase-cxx-client/core/columnar/agent.hxx +1 -1
  18. package/deps/couchbase-cxx-client/core/columnar/management_component.cxx +3 -3
  19. package/deps/couchbase-cxx-client/core/columnar/query_component.cxx +103 -45
  20. package/deps/couchbase-cxx-client/core/columnar/query_component.hxx +1 -0
  21. package/deps/couchbase-cxx-client/core/free_form_http_request.hxx +8 -0
  22. package/deps/couchbase-cxx-client/core/http_component.cxx +55 -24
  23. package/deps/couchbase-cxx-client/core/http_component.hxx +4 -0
  24. package/deps/couchbase-cxx-client/core/impl/analytics_index_manager.cxx +15 -15
  25. package/deps/couchbase-cxx-client/core/impl/bootstrap_error.hxx +10 -2
  26. package/deps/couchbase-cxx-client/core/impl/bucket.cxx +1 -1
  27. package/deps/couchbase-cxx-client/core/impl/bucket_manager.cxx +6 -6
  28. package/deps/couchbase-cxx-client/core/impl/cluster.cxx +36 -40
  29. package/deps/couchbase-cxx-client/core/impl/collection.cxx +2 -2
  30. package/deps/couchbase-cxx-client/core/impl/collection_manager.cxx +5 -5
  31. package/deps/couchbase-cxx-client/core/impl/observe_poll.cxx +13 -5
  32. package/deps/couchbase-cxx-client/core/impl/observe_poll.hxx +1 -3
  33. package/deps/couchbase-cxx-client/core/impl/query_index_manager.cxx +6 -6
  34. package/deps/couchbase-cxx-client/core/impl/scan_result.cxx +1 -1
  35. package/deps/couchbase-cxx-client/core/impl/search_index_manager.cxx +12 -12
  36. package/deps/couchbase-cxx-client/core/io/http_command.hxx +31 -20
  37. package/deps/couchbase-cxx-client/core/io/http_session.cxx +5 -0
  38. package/deps/couchbase-cxx-client/core/io/http_session.hxx +17 -4
  39. package/deps/couchbase-cxx-client/core/io/http_session_manager.hxx +97 -49
  40. package/deps/couchbase-cxx-client/core/io/mcbp_command.hxx +15 -14
  41. package/deps/couchbase-cxx-client/core/io/mcbp_session.cxx +48 -33
  42. package/deps/couchbase-cxx-client/core/io/streams.cxx +256 -0
  43. package/deps/couchbase-cxx-client/core/io/streams.hxx +31 -155
  44. package/deps/couchbase-cxx-client/core/logger/configuration.hxx +5 -0
  45. package/deps/couchbase-cxx-client/core/logger/custom_rotating_file_sink.cxx +2 -3
  46. package/deps/couchbase-cxx-client/core/logger/logger.cxx +39 -7
  47. package/deps/couchbase-cxx-client/core/logger/logger.hxx +7 -0
  48. package/deps/couchbase-cxx-client/core/metrics/meter_wrapper.cxx +188 -0
  49. package/deps/couchbase-cxx-client/core/metrics/meter_wrapper.hxx +73 -0
  50. package/deps/couchbase-cxx-client/core/operations/management/bucket_describe.cxx +2 -1
  51. package/deps/couchbase-cxx-client/core/operations/management/bucket_drop.cxx +3 -1
  52. package/deps/couchbase-cxx-client/core/operations/management/bucket_flush.cxx +3 -1
  53. package/deps/couchbase-cxx-client/core/operations/management/bucket_get.cxx +3 -1
  54. package/deps/couchbase-cxx-client/core/operations/management/bucket_update.cxx +3 -1
  55. package/deps/couchbase-cxx-client/core/operations/management/collection_create.cxx +3 -2
  56. package/deps/couchbase-cxx-client/core/operations/management/collection_drop.cxx +5 -2
  57. package/deps/couchbase-cxx-client/core/operations/management/collection_update.cxx +4 -2
  58. package/deps/couchbase-cxx-client/core/operations/management/group_upsert.cxx +3 -3
  59. package/deps/couchbase-cxx-client/core/operations/management/scope_create.cxx +2 -1
  60. package/deps/couchbase-cxx-client/core/operations/management/scope_drop.cxx +4 -1
  61. package/deps/couchbase-cxx-client/core/operations/management/scope_get_all.cxx +3 -1
  62. package/deps/couchbase-cxx-client/core/operations/management/search_index_analyze_document.cxx +3 -2
  63. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_ingest.cxx +3 -2
  64. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_plan_freeze.cxx +3 -2
  65. package/deps/couchbase-cxx-client/core/operations/management/search_index_control_query.cxx +3 -2
  66. package/deps/couchbase-cxx-client/core/operations/management/search_index_drop.cxx +5 -2
  67. package/deps/couchbase-cxx-client/core/operations/management/search_index_get.cxx +5 -2
  68. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_all.cxx +4 -2
  69. package/deps/couchbase-cxx-client/core/operations/management/search_index_get_documents_count.cxx +3 -2
  70. package/deps/couchbase-cxx-client/core/operations/management/search_index_upsert.cxx +5 -2
  71. package/deps/couchbase-cxx-client/core/operations/management/view_index_drop.cxx +2 -1
  72. package/deps/couchbase-cxx-client/core/operations/management/view_index_get.cxx +2 -1
  73. package/deps/couchbase-cxx-client/core/operations/management/view_index_get_all.cxx +3 -1
  74. package/deps/couchbase-cxx-client/core/operations/management/view_index_upsert.cxx +2 -1
  75. package/deps/couchbase-cxx-client/core/origin.cxx +37 -17
  76. package/deps/couchbase-cxx-client/core/platform/base64.cc +1 -1
  77. package/deps/couchbase-cxx-client/core/platform/random.cc +2 -0
  78. package/deps/couchbase-cxx-client/core/platform/uuid.h +6 -6
  79. package/deps/couchbase-cxx-client/core/row_streamer.cxx +1 -1
  80. package/deps/couchbase-cxx-client/core/sasl/scram-sha/stringutils.cc +1 -1
  81. package/deps/couchbase-cxx-client/core/sasl/scram-sha/stringutils.h +4 -4
  82. package/deps/couchbase-cxx-client/core/topology/configuration.hxx +2 -0
  83. package/deps/couchbase-cxx-client/core/topology/configuration_json.hxx +8 -0
  84. package/deps/couchbase-cxx-client/core/tracing/constants.hxx +3 -0
  85. package/deps/couchbase-cxx-client/core/tracing/tracer_wrapper.cxx +87 -0
  86. package/deps/couchbase-cxx-client/core/tracing/tracer_wrapper.hxx +57 -0
  87. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.cxx +16 -15
  88. package/deps/couchbase-cxx-client/core/transactions/attempt_context_impl.hxx +2 -2
  89. package/deps/couchbase-cxx-client/core/transactions/staged_mutation.cxx +2 -2
  90. package/deps/couchbase-cxx-client/core/transactions/transactions.cxx +2 -2
  91. package/deps/couchbase-cxx-client/core/utils/connection_string.cxx +128 -52
  92. package/deps/couchbase-cxx-client/couchbase/analytics_options.hxx +4 -3
  93. package/deps/couchbase-cxx-client/couchbase/codec/tao_json_serializer.hxx +1 -1
  94. package/deps/couchbase-cxx-client/couchbase/mutate_in_specs.hxx +2 -2
  95. package/deps/couchbase-cxx-client/couchbase/query_options.hxx +4 -3
  96. package/deps/couchbase-cxx-client/couchbase/search_options.hxx +1 -1
  97. package/package.json +8 -8
  98. package/src/binding.cpp +13 -13
@@ -34,7 +34,7 @@ using namespace tao::pegtl;
34
34
 
35
35
  struct bucket_name : seq<uri::segment_nz> {
36
36
  };
37
- using param_key = star<sor<abnf::ALPHA, abnf::DIGIT, one<'_'>>>;
37
+ using param_key = star<sor<abnf::ALPHA, abnf::DIGIT, one<'_', '.'>>>;
38
38
  using param_value = star<sor<minus<uri::pchar, one<'=', '&', '?'>>, one<'/'>>>;
39
39
  struct param : seq<param_key, one<'='>, param_value> {
40
40
  };
@@ -237,38 +237,69 @@ parse_option(bool& receiver,
237
237
  }
238
238
 
239
239
  void
240
- parse_option(tls_verify_mode& receiver,
240
+ parse_option(io::ip_protocol& receiver,
241
241
  const std::string& name,
242
242
  const std::string& value,
243
243
  std::vector<std::string>& warnings)
244
244
  {
245
- if (value == "none") {
246
- receiver = tls_verify_mode::none;
247
- } else if (value == "peer") {
248
- receiver = tls_verify_mode::peer;
245
+ if (value == "any") {
246
+ receiver = io::ip_protocol::any;
247
+ } else if (value == "force_ipv4") {
248
+ receiver = io::ip_protocol::force_ipv4;
249
+ } else if (value == "force_ipv6") {
250
+ receiver = io::ip_protocol::force_ipv6;
249
251
  } else {
250
252
  warnings.push_back(fmt::format(
251
- R"(unable to parse "{}" parameter in connection string (value "{}" is not a valid TLS verification mode))",
253
+ R"(unable to parse "{}" parameter in connection string (value "{}" is not a valid IP protocol preference))",
252
254
  name,
253
255
  value));
254
256
  }
255
257
  }
256
258
 
259
+ #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
257
260
  void
258
- parse_option(io::ip_protocol& receiver,
261
+ parse_option(std::chrono::milliseconds& receiver,
259
262
  const std::string& name,
260
263
  const std::string& value,
261
264
  std::vector<std::string>& warnings)
262
265
  {
263
- if (value == "any") {
264
- receiver = io::ip_protocol::any;
265
- } else if (value == "force_ipv4") {
266
- receiver = io::ip_protocol::force_ipv4;
267
- } else if (value == "force_ipv6") {
268
- receiver = io::ip_protocol::force_ipv6;
266
+ try {
267
+ receiver = std::chrono::duration_cast<std::chrono::milliseconds>(
268
+ parse_duration(string_codec::url_decode(value)));
269
+ } catch (const duration_parse_error& dpe) {
270
+ warnings.push_back(
271
+ fmt::format(R"(unable to parse "{}" parameter in connection string (value: "{}"): {})",
272
+ name,
273
+ value,
274
+ dpe.what()));
275
+ } catch (const std::invalid_argument& ex1) {
276
+ warnings.push_back(fmt::format(
277
+ R"(unable to parse "{}" parameter in connection string (value "{}" is not a number): {})",
278
+ name,
279
+ value,
280
+ ex1.what()));
281
+ } catch (const std::out_of_range& ex2) {
282
+ warnings.push_back(fmt::format(
283
+ R"(unable to parse "{}" parameter in connection string (value "{}" is out of range): {})",
284
+ name,
285
+ value,
286
+ ex2.what()));
287
+ }
288
+ }
289
+ #else
290
+ void
291
+ parse_option(tls_verify_mode& receiver,
292
+ const std::string& name,
293
+ const std::string& value,
294
+ std::vector<std::string>& warnings)
295
+ {
296
+ if (value == "none") {
297
+ receiver = tls_verify_mode::none;
298
+ } else if (value == "peer") {
299
+ receiver = tls_verify_mode::peer;
269
300
  } else {
270
301
  warnings.push_back(fmt::format(
271
- R"(unable to parse "{}" parameter in connection string (value "{}" is not a valid IP protocol preference))",
302
+ R"(unable to parse "{}" parameter in connection string (value "{}" is not a valid TLS verification mode))",
272
303
  name,
273
304
  value));
274
305
  }
@@ -323,6 +354,7 @@ parse_option(std::chrono::milliseconds& receiver,
323
354
  }
324
355
  }
325
356
  }
357
+ #endif
326
358
 
327
359
  void
328
360
  extract_options(connection_string& connstr)
@@ -333,6 +365,54 @@ extract_options(connection_string& connstr)
333
365
  connstr.options.enable_dns_srv = false;
334
366
  }
335
367
  for (const auto& [name, value] : connstr.params) {
368
+ #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
369
+ if (name == "security.trust_only_pem_file") {
370
+ /**
371
+ * Set the trust cert path
372
+ */
373
+ parse_option(connstr.options.trust_certificate, name, value, connstr.warnings);
374
+ } else if (name == "security.disable_server_certificate_verification") {
375
+ /**
376
+ * Disable TLS server cert verification if set to true.
377
+ */
378
+ if (value == "true" || value == "yes" || value == "on" || value == "1") {
379
+ connstr.options.tls_verify = tls_verify_mode::none;
380
+ } else if (value == "false" || value == "no" || value == "off" || value == "0") {
381
+ connstr.options.tls_verify = tls_verify_mode::peer;
382
+ } else {
383
+ connstr.warnings.push_back(fmt::format(
384
+ R"(unable to parse "{}" parameter in connection string (value "{}" cannot be interpreted as a boolean))",
385
+ name,
386
+ value));
387
+ }
388
+
389
+ } else if (name == "timeout.connect_timeout") {
390
+ /**
391
+ * The period of time allocated to complete bootstrap
392
+ */
393
+ parse_option(connstr.options.bootstrap_timeout, name, value, connstr.warnings);
394
+ } else if (name == "timeout.dispatch_timeout") {
395
+ /**
396
+ * Number of seconds to wait before timing out a Query or N1QL request by the client.
397
+ */
398
+ parse_option(connstr.options.dispatch_timeout, name, value, connstr.warnings);
399
+ } else if (name == "timeout.query_timeout") {
400
+ /**
401
+ * Number of seconds to wait before timing out a Query or N1QL request by the client.
402
+ */
403
+ parse_option(connstr.options.query_timeout, name, value, connstr.warnings);
404
+ } else if (name == "timeout.resolve_timeout") {
405
+ /**
406
+ * The period of time to resolve DNS name of the node to IP address
407
+ */
408
+ parse_option(connstr.options.resolve_timeout, name, value, connstr.warnings);
409
+ } else if (name == "timeout.socket_connect_timeout") {
410
+ /**
411
+ * Number of seconds the client should wait while attempting to connect to a node’s KV service
412
+ * via a socket. Initial connection, reconnecting, node added, etc.
413
+ */
414
+ parse_option(connstr.options.connect_timeout, name, value, connstr.warnings);
415
+ #else
336
416
  if (name == "kv_connect_timeout") {
337
417
  /**
338
418
  * Number of seconds the client should wait while attempting to connect to a node’s KV service
@@ -404,6 +484,7 @@ extract_options(connection_string& connstr)
404
484
  if (force_ipv4) {
405
485
  connstr.options.use_ip_protocol = io::ip_protocol::force_ipv4;
406
486
  }
487
+ #endif
407
488
  } else if (name == "ip_protocol") {
408
489
  /**
409
490
  * Controls preference of IP protocol for name resolution
@@ -413,6 +494,37 @@ extract_options(connection_string& connstr)
413
494
  parse_option(connstr.options.config_poll_interval, name, value, connstr.warnings);
414
495
  } else if (name == "config_poll_floor") {
415
496
  parse_option(connstr.options.config_poll_floor, name, value, connstr.warnings);
497
+ } else if (name == "enable_dns_srv") {
498
+ if (connstr.bootstrap_nodes.size() == 1) {
499
+ parse_option(connstr.options.enable_dns_srv, name, value, connstr.warnings);
500
+ } else {
501
+ connstr.warnings.push_back(fmt::format(
502
+ R"(parameter "{}" requires single entry in bootstrap nodes list of the connection string, ignoring (value "{}"))",
503
+ name,
504
+ value));
505
+ }
506
+ } else if (name == "network") {
507
+ connstr.options.network =
508
+ value; /* current known values are "auto", "default" and "external" */
509
+ } else if (name == "user_agent_extra") {
510
+ /**
511
+ * string, that will be appended to identification fields of the server protocols (key in HELO
512
+ * packet for MCBP, "user-agent" header for HTTP)
513
+ */
514
+ parse_option(connstr.options.user_agent_extra, name, value, connstr.warnings);
515
+ } else if (name == "dump_configuration") {
516
+ /**
517
+ * Whether to dump every new configuration on TRACE level
518
+ */
519
+ parse_option(connstr.options.dump_configuration, name, value, connstr.warnings);
520
+ } else if (name == "enable_clustermap_notification") {
521
+ /**
522
+ * Allow the server to push configuration updates asynchronously.
523
+ */
524
+ parse_option(connstr.options.enable_clustermap_notification, name, value, connstr.warnings);
525
+ } else if (name == "disable_mozilla_ca_certificates") {
526
+ parse_option(connstr.options.disable_mozilla_ca_certificates, name, value, connstr.warnings);
527
+ #ifndef COUCHBASE_CXX_CLIENT_COLUMNAR
416
528
  } else if (name == "max_http_connections") {
417
529
  /**
418
530
  * The maximum number of HTTP connections allowed on a per-host and per-port basis. 0
@@ -429,40 +541,16 @@ extract_options(connection_string& connstr)
429
541
  * The period of time allocated to complete bootstrap
430
542
  */
431
543
  parse_option(connstr.options.bootstrap_timeout, name, value, connstr.warnings);
432
- #ifdef COUCHBASE_CXX_CLIENT_COLUMNAR
433
- } else if (name == "dispatch_timeout") {
434
- /**
435
- * The period of time allocated to complete HTTP session bootstrap
436
- */
437
- parse_option(connstr.options.dispatch_timeout, name, value, connstr.warnings);
438
- #endif
439
544
  } else if (name == "resolve_timeout") {
440
545
  /**
441
546
  * The period of time to resolve DNS name of the node to IP address
442
547
  */
443
548
  parse_option(connstr.options.resolve_timeout, name, value, connstr.warnings);
444
- } else if (name == "enable_dns_srv") {
445
- if (connstr.bootstrap_nodes.size() == 1) {
446
- parse_option(connstr.options.enable_dns_srv, name, value, connstr.warnings);
447
- } else {
448
- connstr.warnings.push_back(fmt::format(
449
- R"(parameter "{}" requires single entry in bootstrap nodes list of the connection string, ignoring (value "{}"))",
450
- name,
451
- value));
452
- }
453
- } else if (name == "network") {
454
- connstr.options.network =
455
- value; /* current known values are "auto", "default" and "external" */
456
549
  } else if (name == "show_queries") {
457
550
  /**
458
551
  * Whether to display N1QL, Analytics, Search queries on info level (default false)
459
552
  */
460
553
  parse_option(connstr.options.show_queries, name, value, connstr.warnings);
461
- } else if (name == "enable_clustermap_notification") {
462
- /**
463
- * Allow the server to push configuration updates asynchronously.
464
- */
465
- parse_option(connstr.options.enable_clustermap_notification, name, value, connstr.warnings);
466
554
  } else if (name == "enable_unordered_execution") {
467
555
  /**
468
556
  * Allow the server to reorder commands
@@ -487,25 +575,13 @@ extract_options(connection_string& connstr)
487
575
  parse_option(connstr.options.enable_metrics, name, value, connstr.warnings);
488
576
  } else if (name == "tls_verify") {
489
577
  parse_option(connstr.options.tls_verify, name, value, connstr.warnings);
490
- } else if (name == "disable_mozilla_ca_certificates") {
491
- parse_option(connstr.options.disable_mozilla_ca_certificates, name, value, connstr.warnings);
492
578
  } else if (name == "tls_disable_deprecated_protocols") {
493
579
  parse_option(connstr.options.tls_disable_deprecated_protocols, name, value, connstr.warnings);
494
580
  } else if (name == "tls_disable_v1_2") {
495
581
  parse_option(connstr.options.tls_disable_v1_2, name, value, connstr.warnings);
496
- } else if (name == "user_agent_extra") {
497
- /**
498
- * string, that will be appended to identification fields of the server protocols (key in HELO
499
- * packet for MCBP, "user-agent" header for HTTP)
500
- */
501
- parse_option(connstr.options.user_agent_extra, name, value, connstr.warnings);
502
- } else if (name == "dump_configuration") {
503
- /**
504
- * Whether to dump every new configuration on TRACE level
505
- */
506
- parse_option(connstr.options.dump_configuration, name, value, connstr.warnings);
507
582
  } else if (name == "server_group") {
508
583
  parse_option(connstr.options.server_group, name, value, connstr.warnings);
584
+ #endif
509
585
  } else {
510
586
  connstr.warnings.push_back(
511
587
  fmt::format(R"(unknown parameter "{}" in connection string (value "{}"))", name, value));
@@ -241,7 +241,7 @@ struct analytics_options : public common_options<analytics_options> {
241
241
  std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
242
242
  auto raw(std::string name, const Value& value) -> analytics_options&
243
243
  {
244
- raw_[std::move(name)] = std::move(Serializer::template serialize(value));
244
+ raw_[std::move(name)] = std::move(Serializer::template serialize<const Value&>(value));
245
245
  return self();
246
246
  }
247
247
 
@@ -359,7 +359,8 @@ private:
359
359
  std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
360
360
  void encode_positional_parameters(const Parameter& parameter, Rest... args)
361
361
  {
362
- positional_parameters_.emplace_back(std::move(Serializer::template serialize(parameter)));
362
+ positional_parameters_.emplace_back(
363
+ std::move(Serializer::template serialize<Parameter>(parameter)));
363
364
  if constexpr (sizeof...(args) > 0) {
364
365
  encode_positional_parameters<Serializer>(args...);
365
366
  }
@@ -373,7 +374,7 @@ private:
373
374
  void encode_named_parameters(const std::pair<Name, Parameter>& parameter, Rest... args)
374
375
  {
375
376
  named_parameters_[parameter.first] =
376
- std::move(Serializer::template serialize(parameter.second));
377
+ std::move(Serializer::template serialize<Parameter>(parameter.second));
377
378
  if constexpr (sizeof...(args) > 0) {
378
379
  encode_named_parameters<Serializer>(args...);
379
380
  }
@@ -47,7 +47,7 @@ public:
47
47
  static auto serialize([[maybe_unused]] Document document) -> binary
48
48
  {
49
49
  try {
50
- if constexpr (std::is_null_pointer_v<Document>) {
50
+ if constexpr (std::is_null_pointer_v<std::remove_reference_t<Document>>) {
51
51
  return core::utils::json::generate_binary(tao::json::null);
52
52
  } else {
53
53
  return core::utils::json::generate_binary(tao::json::value(document));
@@ -235,7 +235,7 @@ public:
235
235
  template<typename Value, typename Transcoder = codec::default_json_transcoder>
236
236
  static auto upsert(std::string path, const Value& value) -> subdoc::upsert
237
237
  {
238
- return { std::move(path), std::move(Transcoder::template encode(value).data) };
238
+ return { std::move(path), std::move(Transcoder::template encode<const Value&>(value).data) };
239
239
  }
240
240
 
241
241
  /**
@@ -453,7 +453,7 @@ public:
453
453
  template<typename Value, typename Transcoder = codec::default_json_transcoder>
454
454
  static auto array_add_unique(std::string path, const Value& value) -> subdoc::array_add_unique
455
455
  {
456
- return { std::move(path), std::move(Transcoder::template encode(value).data) };
456
+ return { std::move(path), std::move(Transcoder::template encode<Value>(value).data) };
457
457
  }
458
458
 
459
459
  /**
@@ -445,7 +445,7 @@ struct query_options : public common_options<query_options> {
445
445
  std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
446
446
  auto raw(std::string name, const Value& value) -> query_options&
447
447
  {
448
- raw_[std::move(name)] = std::move(Serializer::template serialize(value));
448
+ raw_[std::move(name)] = std::move(Serializer::template serialize<const Value&>(value));
449
449
  return self();
450
450
  }
451
451
 
@@ -563,7 +563,8 @@ private:
563
563
  std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
564
564
  void encode_positional_parameters(const Parameter& parameter, Rest... args)
565
565
  {
566
- positional_parameters_.emplace_back(std::move(Serializer::template serialize(parameter)));
566
+ positional_parameters_.emplace_back(
567
+ std::move(Serializer::template serialize<const Parameter&>(parameter)));
567
568
  if constexpr (sizeof...(args) > 0) {
568
569
  encode_positional_parameters<Serializer>(args...);
569
570
  }
@@ -577,7 +578,7 @@ private:
577
578
  void encode_named_parameters(const std::pair<Name, Parameter>& parameter, Rest... args)
578
579
  {
579
580
  named_parameters_[parameter.first] =
580
- std::move(Serializer::template serialize(parameter.second));
581
+ std::move(Serializer::template serialize<Parameter>(parameter.second));
581
582
  if constexpr (sizeof...(args) > 0) {
582
583
  encode_named_parameters<Serializer>(args...);
583
584
  }
@@ -192,7 +192,7 @@ struct search_options : public common_options<search_options> {
192
192
  std::enable_if_t<codec::is_serializer_v<Serializer>, bool> = true>
193
193
  auto raw(std::string name, const Value& value) -> search_options&
194
194
  {
195
- raw_[std::move(name)] = std::move(Serializer::template serialize(value));
195
+ raw_[std::move(name)] = std::move(Serializer::template serialize<Value>(value));
196
196
  return self();
197
197
  }
198
198
 
package/package.json CHANGED
@@ -54,7 +54,7 @@
54
54
  "type": "git",
55
55
  "url": "http://github.com/couchbase/couchnode.git"
56
56
  },
57
- "version": "4.4.2",
57
+ "version": "4.4.3",
58
58
  "config": {
59
59
  "native": false
60
60
  },
@@ -79,13 +79,13 @@
79
79
  ]
80
80
  },
81
81
  "optionalDependencies": {
82
- "@couchbase/couchbase-darwin-arm64-napi": "4.4.2",
83
- "@couchbase/couchbase-darwin-x64-napi": "4.4.2",
84
- "@couchbase/couchbase-linux-arm64-napi": "4.4.2",
85
- "@couchbase/couchbase-linuxmusl-arm64-napi": "4.4.2",
86
- "@couchbase/couchbase-linuxmusl-x64-napi": "4.4.2",
87
- "@couchbase/couchbase-linux-x64-napi": "4.4.2",
88
- "@couchbase/couchbase-win32-x64-napi": "4.4.2"
82
+ "@couchbase/couchbase-darwin-arm64-napi": "4.4.3",
83
+ "@couchbase/couchbase-darwin-x64-napi": "4.4.3",
84
+ "@couchbase/couchbase-linux-arm64-napi": "4.4.3",
85
+ "@couchbase/couchbase-linuxmusl-arm64-napi": "4.4.3",
86
+ "@couchbase/couchbase-linuxmusl-x64-napi": "4.4.3",
87
+ "@couchbase/couchbase-linux-x64-napi": "4.4.3",
88
+ "@couchbase/couchbase-win32-x64-napi": "4.4.3"
89
89
  },
90
90
  "files": [
91
91
  "LICENSE",
package/src/binding.cpp CHANGED
@@ -9,7 +9,6 @@
9
9
  #include <core/logger/configuration.hxx>
10
10
  #include <core/meta/version.hxx>
11
11
  #include <napi.h>
12
- #include <spdlog/spdlog.h>
13
12
 
14
13
  namespace couchnode
15
14
  {
@@ -39,40 +38,41 @@ Napi::Value shutdown_logger(const Napi::CallbackInfo &info)
39
38
 
40
39
  Napi::Object Init(Napi::Env env, Napi::Object exports)
41
40
  {
42
- spdlog::set_pattern("[%Y-%m-%d %T.%e] [%P,%t] [%^%l%$] %oms, %v");
43
-
44
- auto spdLogLevel = spdlog::level::off;
45
41
  auto cbppLogLevel = couchbase::core::logger::level::off;
46
42
  {
47
43
  const char *logLevelCstr = getenv("CBPPLOGLEVEL");
48
44
  if (logLevelCstr) {
49
45
  std::string logLevelStr = logLevelCstr;
50
46
  if (logLevelStr == "trace") {
51
- spdLogLevel = spdlog::level::trace;
52
47
  cbppLogLevel = couchbase::core::logger::level::trace;
53
48
  } else if (logLevelStr == "debug") {
54
- spdLogLevel = spdlog::level::debug;
55
49
  cbppLogLevel = couchbase::core::logger::level::debug;
56
50
  } else if (logLevelStr == "info") {
57
- spdLogLevel = spdlog::level::info;
58
51
  cbppLogLevel = couchbase::core::logger::level::info;
59
52
  } else if (logLevelStr == "warn") {
60
- spdLogLevel = spdlog::level::warn;
61
53
  cbppLogLevel = couchbase::core::logger::level::warn;
62
54
  } else if (logLevelStr == "err") {
63
- spdLogLevel = spdlog::level::err;
64
55
  cbppLogLevel = couchbase::core::logger::level::err;
65
56
  } else if (logLevelStr == "critical") {
66
- spdLogLevel = spdlog::level::critical;
67
57
  cbppLogLevel = couchbase::core::logger::level::critical;
68
58
  }
69
59
  }
70
60
  }
61
+
71
62
  if (cbppLogLevel != couchbase::core::logger::level::off) {
72
- couchbase::core::logger::create_console_logger();
63
+ const char *logFileCstr = getenv("CBPPLOGFILE");
64
+ if (logFileCstr) {
65
+ std::string logFileStr = logFileCstr;
66
+ couchbase::core::logger::configuration configuration{};
67
+ configuration.filename = logFileStr;
68
+ configuration.log_level = cbppLogLevel;
69
+ couchbase::core::logger::create_file_logger(configuration);
70
+
71
+ } else {
72
+ couchbase::core::logger::create_console_logger();
73
+ couchbase::core::logger::set_log_levels(cbppLogLevel);
74
+ }
73
75
  }
74
- spdlog::set_level(spdLogLevel);
75
- couchbase::core::logger::set_log_levels(cbppLogLevel);
76
76
 
77
77
  AddonData::Init(env, exports);
78
78
  Constants::Init(env, exports);