Decodes the row content into the requested document type using the given serializer.
#include <spdlog/fmt/bundled/format.h>
#include <tao/json.hpp>
#include <cstdint>
#include <string>
int
main(int argc, const char* argv[])
{
if (argc != 4) {
fmt::print("USAGE: ./analytics_stream couchbase://127.0.0.1 Administrator password\n");
return 1;
}
const std::string connection_string{ argv[1] };
const std::string username{ argv[2] };
const std::string password{ argv[3] };
auto [connect_err, cluster] =
.get();
if (connect_err) {
fmt::print("unable to connect to the cluster: {}\n", connect_err);
return 1;
}
auto [err, result] =
if (err) {
fmt::print("unable to start the streaming analytics query: {}\n", err);
return 1;
}
if (const auto signature = result.signature(); signature) {
fmt::println(
"signature: {}",
std::string{ reinterpret_cast<const char*>(signature->data()), signature->size() });
}
std::uint64_t sum{ 0 };
while (true) {
auto [row_err, row] = result.next().get();
if (row_err) {
fmt::print("streaming analytics query failed mid-stream: {}\n", row_err);
return 1;
}
if (!row) {
break;
}
const auto value = row->content_as<couchbase::codec::tao_json_serializer, tao::json::value>();
sum += value.at("n").as<std::uint64_t>();
}
fmt::println("sum of the streamed rows: {}", sum);
auto [meta_err, meta] = result.meta_data().get();
if (meta_err) {
fmt::print("unable to retrieve the analytics metadata: {}\n", meta_err);
return 1;
}
fmt::println("status={}, rows={}", meta.status(), meta.metrics().result_count());
return 0;
}