Move query result helper class to maxsql

Added some asserts to ensure the class is used correctly.
This commit is contained in:
Esa Korhonen
2019-01-09 17:50:20 +02:00
parent 07cbda7771
commit b4d91d4b9a
8 changed files with 230 additions and 190 deletions

View File

@ -27,10 +27,11 @@
#include <stdbool.h>
#include <errmsg.h>
#include <maxbase/atomic.hh>
#include <maxbase/format.hh>
#include <maxsql/mariadb.hh>
#include <maxscale/alloc.h>
#include <maxscale/config.hh>
#include <maxbase/atomic.hh>
/**
* @brief Calculate the length of a length-encoded integer in bytes
@ -358,3 +359,25 @@ void mxs_mysql_update_server_version(SERVER* dest, MYSQL* source)
mxb_assert(version_string != NULL && version_num != 0);
dest->set_version(version_num, version_string);
}
namespace maxscale
{
std::unique_ptr<mxq::QueryResult> execute_query(MYSQL* conn, const std::string& query,
std::string* errmsg_out)
{
using mxq::QueryResult;
std::unique_ptr<QueryResult> rval;
MYSQL_RES* result = NULL;
if (mxs_mysql_query(conn, query.c_str()) == 0 && (result = mysql_store_result(conn)) != NULL)
{
rval = std::unique_ptr<QueryResult>(new QueryResult(result));
}
else if (errmsg_out)
{
*errmsg_out = mxb::string_printf("Query '%s' failed: '%s'.", query.c_str(), mysql_error(conn));
}
return rval;
}
}