TEST_F(DistributedTests, test_serialize_distributed_query_result) { DistributedQueryResult r; r.request.query = "foo"; r.request.id = "bar"; Row r1; r1["foo"] = "bar"; r.results = {r1}; r.columns = {"foo"}; // rapidjson::Document d(rapidjson::kObjectType); auto doc = JSON::newObject(); auto s = serializeDistributedQueryResult(r, doc, doc.doc()); EXPECT_TRUE(s.ok()); // EXPECT_TRUE(doc.doc().IsObject()); EXPECT_EQ(doc.doc()["request"]["query"], "foo"); EXPECT_EQ(doc.doc()["request"]["id"], "bar"); EXPECT_TRUE(doc.doc()["results"].IsArray()); for (const auto& q : doc.doc()["results"].GetArray()) { for (const auto& row : q.GetObject()) { EXPECT_EQ(row.name, "foo"); EXPECT_EQ(q[row.name], "bar"); } } }
Status serializeDistributedQueryResultJSON(const DistributedQueryResult& r, std::string& json) { pt::ptree tree; auto s = serializeDistributedQueryResult(r, tree); if (!s.ok()) { return s; } std::stringstream ss; try { pt::write_json(ss, tree, false); } catch (const pt::ptree_error& e) { return Status(1, "Error serializing JSON: " + std::string(e.what())); } json = ss.str(); return Status(0, "OK"); }
TEST_F(DistributedTests, test_serialize_distributed_query_result) { DistributedQueryResult r; r.request.query = "foo"; r.request.id = "bar"; Row r1; r1["foo"] = "bar"; r.results = {r1}; pt::ptree tree; auto s = serializeDistributedQueryResult(r, tree); EXPECT_TRUE(s.ok()); EXPECT_EQ(tree.get<std::string>("request.query"), "foo"); EXPECT_EQ(tree.get<std::string>("request.id"), "bar"); auto& results = tree.get_child("results"); for (const auto& q : results) { for (const auto& row : q.second) { EXPECT_EQ(row.first, "foo"); EXPECT_EQ(q.second.get<std::string>(row.first), "bar"); } } }