Add Connection helper class

This is intended to make querying a "server" easier by wrapping common
functionality into one class.
This commit is contained in:
Markus Mäkelä 2018-06-24 22:01:41 +03:00
parent 12398bfc26
commit 56f274d74a
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19
2 changed files with 97 additions and 0 deletions

View File

@ -232,4 +232,77 @@ Result get_result(MYSQL* conn, std::string sql);
int get_int_version(std::string version);
// Helper class for performing queries
class Connection
{
public:
Connection(Connection&) = delete;
Connection& operator=(Connection&) = delete;
Connection(std::string host, int port, std::string user, std::string password, std::string db = "", bool ssl = false):
m_host(host),
m_port(port),
m_user(user),
m_pw(password),
m_db(db),
m_ssl(ssl)
{
}
Connection(Connection&& rhs):
m_host(rhs.m_host),
m_port(rhs.m_port),
m_user(rhs.m_user),
m_pw(rhs.m_pw),
m_db(rhs.m_db),
m_ssl(rhs.m_ssl),
m_conn(rhs.m_conn)
{
rhs.m_conn = nullptr;
}
virtual ~Connection()
{
mysql_close(m_conn);
}
bool connect()
{
mysql_close(m_conn);
m_conn = open_conn_db(m_port, m_host, m_db, m_user, m_pw, m_ssl);
return m_conn != nullptr;
}
void disconnect()
{
mysql_close(m_conn);
m_conn = nullptr;
}
bool query(std::string q)
{
return execute_query_silent(m_conn, q.c_str()) == 0;
}
bool check(std::string q, std::string res)
{
Row row = get_row(m_conn, q);
return !row.empty() && row[0] == res;
}
const char* error() const
{
return mysql_error(m_conn);
}
private:
std::string m_host;
int m_port;
std::string m_user;
std::string m_pw;
std::string m_db;
bool m_ssl;
MYSQL* m_conn = nullptr;
};
#endif // MARIADB_FUNC_H

View File

@ -156,6 +156,14 @@ public:
return open_conn(rwsplit_port[m], IP[m], user_name, password, ssl);
}
/**
* Get a readwritesplit Connection
*/
Connection rwsplit(int m = 0)
{
return Connection(IP[m], rwsplit_port[m], user_name, password, "test", ssl);
}
/**
* @brief OpenReadMasterConn Opens new connections to ReadConn master and returns MYSQL struct
* To close connection mysql_close() have to be called
@ -167,6 +175,14 @@ public:
password, ssl);
}
/**
* Get a readconnroute master Connection
*/
Connection readconn_master(int m = 0)
{
return Connection(IP[m], readconn_master_port[m], user_name, password, "test", ssl);
}
/**
* @brief OpenReadSlaveConn Opens new connections to ReadConn slave and returns MYSQL struct
* To close connection mysql_close() have to be called
@ -178,6 +194,14 @@ public:
password, ssl);
}
/**
* Get a readconnroute slave Connection
*/
Connection readconn_slave(int m = 0)
{
return Connection(IP[m], readconn_slave_port[m], user_name, password, "test", ssl);
}
/**
* @brief CloseRWSplit Closes RWplit connections stored in maxscales->conn_rwsplit[0]
*/