Abstract the session default database
The default database can now be manipulated with a set of functions exposed by the maxscale/protocol/mysql.h header. This removes the need to handle the structures themselves in the modules and is a step towards moving the dcb->data contents inside the session.
This commit is contained in:
@ -380,8 +380,7 @@ bool execute_sescmd_in_backend(backend_ref_t *backend_ref)
|
||||
MYSQL_session* data;
|
||||
unsigned int qlen;
|
||||
|
||||
data = (MYSQL_session*)dcb->session->client_dcb->data;
|
||||
*data->db = 0;
|
||||
mxs_mysql_set_current_db(dcb->session, "");
|
||||
tmpbuf = scur->scmd_cur_cmd->my_sescmd_buf;
|
||||
qlen = MYSQL_GET_PAYLOAD_LEN((unsigned char *) GWBUF_DATA(tmpbuf));
|
||||
if (qlen)
|
||||
@ -394,8 +393,10 @@ bool execute_sescmd_in_backend(backend_ref_t *backend_ref)
|
||||
qlen = MYSQL_DATABASE_MAXLEN;
|
||||
}
|
||||
|
||||
memcpy(data->db, (char*)GWBUF_DATA(tmpbuf) + 5, qlen);
|
||||
data->db[qlen] = 0;
|
||||
char db[qlen + 1];
|
||||
memcpy(db, (char*)GWBUF_DATA(tmpbuf) + 5, qlen);
|
||||
db[qlen] = 0;
|
||||
mxs_mysql_set_current_db(dcb->session, db);
|
||||
}
|
||||
}
|
||||
/** Fallthrough */
|
||||
|
||||
@ -54,8 +54,8 @@ void check_drop_tmp_table(ROUTER_CLIENT_SES *router_cli_ses, GWBUF *querybuf)
|
||||
|
||||
for (size_t i = 0; i < n_infos; i++)
|
||||
{
|
||||
MYSQL_session* data = static_cast<MYSQL_session*>(router_cli_ses->client_dcb->data);
|
||||
std::string table = info[i].database ? info[i].database : data->db;
|
||||
const char* db = mxs_mysql_get_current_db(router_cli_ses->client_dcb->session);
|
||||
std::string table = info[i].database ? info[i].database : db;
|
||||
table += ".";
|
||||
|
||||
if (info[i].table)
|
||||
@ -95,8 +95,8 @@ bool is_read_tmp_table(ROUTER_CLIENT_SES *router_cli_ses,
|
||||
|
||||
for (size_t i = 0; i < n_infos; i++)
|
||||
{
|
||||
MYSQL_session* data = static_cast<MYSQL_session*>(router_cli_ses->client_dcb->data);
|
||||
std::string table = info[i].database ? info[i].database : data->db;
|
||||
const char* db = mxs_mysql_get_current_db(router_cli_ses->client_dcb->session);
|
||||
std::string table = info[i].database ? info[i].database : db;
|
||||
table += ".";
|
||||
|
||||
if (info[i].table)
|
||||
@ -142,8 +142,8 @@ void check_create_tmp_table(ROUTER_CLIENT_SES *router_cli_ses,
|
||||
|
||||
if (tblname && *tblname)
|
||||
{
|
||||
MYSQL_session* data = static_cast<MYSQL_session*>(router_cli_ses->client_dcb->data);
|
||||
table += data->db;
|
||||
const char* db = mxs_mysql_get_current_db(router_cli_ses->client_dcb->session);
|
||||
table += db;
|
||||
table += ".";
|
||||
table += tblname;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user