Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 26 additions & 2 deletions mgclient_cpp/include/mgclient.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,6 +113,8 @@ class Client {
/// \brief Fetches all results.
std::optional<std::vector<std::vector<Value>>> FetchAll();

const std::vector<std::string> &GetColumns() const;

/// \brief Start a transaction.
/// \return true when the transaction was successfully started, false
/// otherwise.
Expand All @@ -138,6 +140,7 @@ class Client {
explicit Client(mg_session *session);

mg_session *session_;
std::vector<std::string> columns_;
};

inline std::unique_ptr<Client> Client::Connect(const Client::Params &params) {
Expand Down Expand Up @@ -177,8 +180,9 @@ inline int Client::Init() { return mg_init(); }
inline void Client::Finalize() { mg_finalize(); }

inline bool Client::Execute(const std::string &statement) {
const mg_list *columns;
int status = mg_session_run(session_, statement.c_str(), nullptr, nullptr,
nullptr, nullptr);
&columns, nullptr);
if (status < 0) {
return false;
}
Expand All @@ -188,13 +192,21 @@ inline bool Client::Execute(const std::string &statement) {
return false;
}

const size_t list_length = mg_list_size(columns);
columns_.clear();
for (size_t i = 0; i < list_length; i++) {
columns_.push_back(
std::string(Value(mg_list_at(columns, i)).ValueString()));
}

return true;
}

inline bool Client::Execute(const std::string &statement,
const ConstMap &params) {
const mg_list *columns;
int status = mg_session_run(session_, statement.c_str(), params.ptr(),
nullptr, nullptr, nullptr);
nullptr, &columns, nullptr);
if (status < 0) {
return false;
}
Expand All @@ -203,6 +215,14 @@ inline bool Client::Execute(const std::string &statement,
if (status < 0) {
return false;
}

const size_t list_length = mg_list_size(columns);
columns_.clear();
for (size_t i = 0; i < list_length; i++) {
columns_.push_back(
std::string(Value(mg_list_at(columns, i)).ValueString()));
}

return true;
}

Expand Down Expand Up @@ -248,6 +268,10 @@ inline std::optional<std::vector<std::vector<Value>>> Client::FetchAll() {
return data;
}

inline const std::vector<std::string> &Client::GetColumns() const {
return columns_;
}

inline bool Client::BeginTransaction() {
return mg_session_begin_transaction(session_, nullptr) == 0;
}
Expand Down