From 8b09ec56cf87ff03dcd13ddc31f76f839b6020c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 26 Apr 2018 15:44:09 +0300 Subject: [PATCH] Add resultset helper function to mariadb_func.h Added a function that converts resultsets into matrices of strings. --- maxscale-system-test/mariadb_func.cpp | 18 +++++++++++------- maxscale-system-test/mariadb_func.h | 13 ++++++++++++- 2 files changed, 23 insertions(+), 8 deletions(-) diff --git a/maxscale-system-test/mariadb_func.cpp b/maxscale-system-test/mariadb_func.cpp index da886c881..4e24c5999 100644 --- a/maxscale-system-test/mariadb_func.cpp +++ b/maxscale-system-test/mariadb_func.cpp @@ -523,21 +523,19 @@ int find_field(MYSQL* conn, const char* sql, const char* field_name, char* value return ret; } -Row get_row(MYSQL* conn, std::string sql) +Result get_result(MYSQL* conn, std::string sql) { - Row rval; + Result rval; MYSQL_RES* res; if (mysql_query(conn, sql.c_str()) == 0 && (res = mysql_store_result(conn))) { MYSQL_ROW row = mysql_fetch_row(res); - if (row) + while (row) { - for (unsigned int i = 0; i < mysql_num_fields(res); i++) - { - rval.push_back(row[i]); - } + rval.emplace_back(&row[0], &row[mysql_num_fields(res)]); + row = mysql_fetch_row(res); } mysql_free_result(res); } @@ -549,6 +547,12 @@ Row get_row(MYSQL* conn, std::string sql) return rval; } +Row get_row(MYSQL* conn, std::string sql) +{ + Result res = get_result(conn, sql); + return res.empty() ? Row{} : res[0]; +} + int get_int_version(std::string version) { std::istringstream str(version); diff --git a/maxscale-system-test/mariadb_func.h b/maxscale-system-test/mariadb_func.h index f039fab0b..e7157789c 100644 --- a/maxscale-system-test/mariadb_func.h +++ b/maxscale-system-test/mariadb_func.h @@ -27,6 +27,7 @@ #include typedef std::vector Row; +typedef std::vector Result; /** * Opens connection to DB: wropper over mysql_real_connect @@ -215,7 +216,17 @@ int find_field(MYSQL* conn, const char* sql, const char* field_name, char* value * * @return The first row as a list of strings */ -std::vector get_row(MYSQL* conn, std::string sql); +Row get_row(MYSQL* conn, std::string sql); + +/** + * Execute a query and return the result + * + * @param conn The connection to use + * @param sql The query to execute + * + * @return The result as a list of rows + */ +Result get_result(MYSQL* conn, std::string sql); int get_int_version(std::string version);