Addition of BLR_TYPE_STRING and BLR_TYPE_INT

Addition of BLR_TYPE_STRING and BLR_TYPE_INT for SQL variable names
replies
This commit is contained in:
MassimilianoPinto
2015-08-24 10:11:26 +02:00
parent 1b3ce9e16b
commit e103aa46a8
3 changed files with 52 additions and 37 deletions

View File

@ -157,6 +157,10 @@
/* default heartbeat interval in seconds */ /* default heartbeat interval in seconds */
#define BLR_HEARTBEAT_DEFAULT_INTERVAL 300 #define BLR_HEARTBEAT_DEFAULT_INTERVAL 300
/* strings and numbers in SQL replies */
#define BLR_TYPE_STRING 0xf
#define BLR_TYPE_INT 0x03
/** /**
* Some useful macros for examining the MySQL Response packets * Some useful macros for examining the MySQL Response packets
*/ */

View File

@ -348,8 +348,11 @@ int rc = 0;
} }
else if (strcmp(options[i], "master-id") == 0) else if (strcmp(options[i], "master-id") == 0)
{ {
inst->masterid = atoi(value); int master_id = atoi(value);
inst->set_master_server_id = value; if (master_id > 0) {
inst->masterid = master_id;
inst->set_master_server_id = strdup(value);
}
} }
else if (strcmp(options[i], "master_uuid") == 0) else if (strcmp(options[i], "master_uuid") == 0)
{ {

View File

@ -130,7 +130,7 @@ static int blr_set_master_password(ROUTER_INSTANCE *router, char *password);
static int blr_parse_change_master_command(char *input, char *error_string, CHANGE_MASTER_OPTIONS *config); static int blr_parse_change_master_command(char *input, char *error_string, CHANGE_MASTER_OPTIONS *config);
static int blr_handle_change_master_token(char *input, char *error, CHANGE_MASTER_OPTIONS *config); static int blr_handle_change_master_token(char *input, char *error, CHANGE_MASTER_OPTIONS *config);
static void blr_master_free_parsed_options(CHANGE_MASTER_OPTIONS *options); static void blr_master_free_parsed_options(CHANGE_MASTER_OPTIONS *options);
static int blr_slave_send_var_value(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *variable, char *value); static int blr_slave_send_var_value(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *variable, char *value, int column_type);
static int blr_slave_send_variable(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *variable, char *value, int column_type); static int blr_slave_send_variable(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *variable, char *value, int column_type);
static int blr_slave_send_columndef_with_info_schema(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *name, int type, int len, uint8_t seqno); static int blr_slave_send_columndef_with_info_schema(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *name, int type, int len, uint8_t seqno);
@ -367,7 +367,7 @@ extern char *strcasestr();
{ {
free(query_text); free(query_text);
if (router->set_master_version) if (router->set_master_version)
return blr_slave_send_var_value(router, slave, "VERSION()", router->set_master_version); return blr_slave_send_var_value(router, slave, "VERSION()", router->set_master_version, BLR_TYPE_STRING);
else else
return blr_slave_replay(router, slave, router->saved_master.selectver); return blr_slave_replay(router, slave, router->saved_master.selectver);
} }
@ -375,10 +375,10 @@ extern char *strcasestr();
{ {
free(query_text); free(query_text);
if (router->set_master_version) if (router->set_master_version)
return blr_slave_send_var_value(router, slave, "@@version", router->set_master_version); return blr_slave_send_var_value(router, slave, "@@version", router->set_master_version, BLR_TYPE_STRING);
else { else {
char *version = blr_extract_column(router->saved_master.selectver, 1); char *version = blr_extract_column(router->saved_master.selectver, 1);
return blr_slave_send_var_value(router, slave, "@@version", version); return blr_slave_send_var_value(router, slave, "@@version", version, BLR_TYPE_STRING);
} }
} }
else if (strcasecmp(word, "@@version_comment") == 0) else if (strcasecmp(word, "@@version_comment") == 0)
@ -394,7 +394,7 @@ extern char *strcasestr();
{ {
free(query_text); free(query_text);
if (router->set_master_hostname) if (router->set_master_hostname)
return blr_slave_send_var_value(router, slave, "@@hostname", router->set_master_hostname); return blr_slave_send_var_value(router, slave, "@@hostname", router->set_master_hostname, BLR_TYPE_STRING);
else else
return blr_slave_replay(router, slave, router->saved_master.selecthostname); return blr_slave_replay(router, slave, router->saved_master.selecthostname);
} }
@ -402,10 +402,10 @@ extern char *strcasestr();
{ {
free(query_text); free(query_text);
if (router->set_master_uuid) if (router->set_master_uuid)
return blr_slave_send_var_value(router, slave, "@@server_uuid", router->master_uuid); return blr_slave_send_var_value(router, slave, "@@server_uuid", router->master_uuid, BLR_TYPE_STRING);
else { else {
char *master_uuid = blr_extract_column(router->saved_master.uuid, 2); char *master_uuid = blr_extract_column(router->saved_master.uuid, 2);
return blr_slave_send_var_value(router, slave, "@@server_uuid", master_uuid); return blr_slave_send_var_value(router, slave, "@@server_uuid", master_uuid, BLR_TYPE_STRING);
} }
} }
else if (strcasecmp(word, "@@max_allowed_packet") == 0) else if (strcasecmp(word, "@@max_allowed_packet") == 0)
@ -420,8 +420,11 @@ extern char *strcasestr();
} }
else if (strcasecmp(word, "@@server_id") == 0) else if (strcasecmp(word, "@@server_id") == 0)
{ {
char server_id[40];
sprintf(server_id, "%d", router->masterid);
free(query_text); free(query_text);
return blr_slave_send_server_id(router, slave); return blr_slave_send_var_value(router, slave, "@@server_id", server_id, BLR_TYPE_INT);
} }
} }
else if (strcasecmp(word, "SHOW") == 0) else if (strcasecmp(word, "SHOW") == 0)
@ -451,16 +454,18 @@ extern char *strcasestr();
{ {
free(query_text); free(query_text);
if (router->set_master_server_id) if (router->set_master_server_id) {
return blr_slave_send_variable(router, slave, "'SERVER_ID'", router->set_master_server_id, 0x03); char server_id[40];
else sprintf(server_id, "%d", router->masterid);
return blr_slave_send_variable(router, slave, "'SERVER_ID'", server_id, BLR_TYPE_INT);
} else
return blr_slave_replay(router, slave, router->saved_master.server_id); return blr_slave_replay(router, slave, router->saved_master.server_id);
} }
else if (strcasecmp(word, "'SERVER_UUID'") == 0) else if (strcasecmp(word, "'SERVER_UUID'") == 0)
{ {
free(query_text); free(query_text);
if (router->set_master_uuid) if (router->set_master_uuid)
return blr_slave_send_variable(router, slave, "'SERVER_UUID'", router->master_uuid, 0xf); return blr_slave_send_variable(router, slave, "'SERVER_UUID'", router->master_uuid, BLR_TYPE_STRING);
else else
return blr_slave_replay(router, slave, router->saved_master.uuid); return blr_slave_replay(router, slave, router->saved_master.uuid);
} }
@ -957,7 +962,7 @@ int len, vers_len;
sprintf(version, "%s", MAXSCALE_VERSION); sprintf(version, "%s", MAXSCALE_VERSION);
vers_len = strlen(version); vers_len = strlen(version);
blr_slave_send_fieldcount(router, slave, 1); blr_slave_send_fieldcount(router, slave, 1);
blr_slave_send_columndef(router, slave, "MAXSCALE_VERSION", 0xf, vers_len, 2); blr_slave_send_columndef(router, slave, "MAXSCALE_VERSION", BLR_TYPE_STRING, vers_len, 2);
blr_slave_send_eof(router, slave, 3); blr_slave_send_eof(router, slave, 3);
len = 5 + vers_len; len = 5 + vers_len;
@ -992,7 +997,7 @@ int len, id_len;
sprintf(server_id, "%d", router->masterid); sprintf(server_id, "%d", router->masterid);
id_len = strlen(server_id); id_len = strlen(server_id);
blr_slave_send_fieldcount(router, slave, 1); blr_slave_send_fieldcount(router, slave, 1);
blr_slave_send_columndef(router, slave, "SERVER_ID", 0x03, id_len, 2); blr_slave_send_columndef(router, slave, "SERVER_ID", BLR_TYPE_INT, id_len, 2);
blr_slave_send_eof(router, slave, 3); blr_slave_send_eof(router, slave, 3);
len = 5 + id_len; len = 5 + id_len;
@ -1027,8 +1032,8 @@ uint8_t *ptr;
int len, vers_len, seqno = 2; int len, vers_len, seqno = 2;
blr_slave_send_fieldcount(router, slave, 2); blr_slave_send_fieldcount(router, slave, 2);
blr_slave_send_columndef(router, slave, "Variable_name", 0xf, 40, seqno++); blr_slave_send_columndef(router, slave, "Variable_name", BLR_TYPE_STRING, 40, seqno++);
blr_slave_send_columndef(router, slave, "Value", 0xf, 40, seqno++); blr_slave_send_columndef(router, slave, "Value", BLR_TYPE_STRING, 40, seqno++);
blr_slave_send_eof(router, slave, seqno++); blr_slave_send_eof(router, slave, seqno++);
sprintf(version, "%s", MAXSCALE_VERSION); sprintf(version, "%s", MAXSCALE_VERSION);
@ -1070,11 +1075,11 @@ uint8_t *ptr;
int len, file_len; int len, file_len;
blr_slave_send_fieldcount(router, slave, 5); blr_slave_send_fieldcount(router, slave, 5);
blr_slave_send_columndef(router, slave, "File", 0xf, 40, 2); blr_slave_send_columndef(router, slave, "File", BLR_TYPE_STRING, 40, 2);
blr_slave_send_columndef(router, slave, "Position", 0xf, 40, 3); blr_slave_send_columndef(router, slave, "Position", BLR_TYPE_STRING, 40, 3);
blr_slave_send_columndef(router, slave, "Binlog_Do_DB", 0xf, 40, 4); blr_slave_send_columndef(router, slave, "Binlog_Do_DB", BLR_TYPE_STRING, 40, 4);
blr_slave_send_columndef(router, slave, "Binlog_Ignore_DB", 0xf, 40, 5); blr_slave_send_columndef(router, slave, "Binlog_Ignore_DB", BLR_TYPE_STRING, 40, 5);
blr_slave_send_columndef(router, slave, "Execute_Gtid_Set", 0xf, 40, 6); blr_slave_send_columndef(router, slave, "Execute_Gtid_Set", BLR_TYPE_STRING, 40, 6);
blr_slave_send_eof(router, slave, 7); blr_slave_send_eof(router, slave, 7);
sprintf(file, "%s", router->binlog_name); sprintf(file, "%s", router->binlog_name);
@ -1145,7 +1150,7 @@ char *dyn_column=NULL;
blr_slave_send_fieldcount(router, slave, ncols); blr_slave_send_fieldcount(router, slave, ncols);
seqno = 2; seqno = 2;
for (i = 0; slave_status_columns[i]; i++) for (i = 0; slave_status_columns[i]; i++)
blr_slave_send_columndef(router, slave, slave_status_columns[i], 0xf, 40, seqno++); blr_slave_send_columndef(router, slave, slave_status_columns[i], BLR_TYPE_STRING, 40, seqno++);
blr_slave_send_eof(router, slave, seqno++); blr_slave_send_eof(router, slave, seqno++);
len = 5 + (ncols * 41) + 250; // Max length + 250 bytes error message len = 5 + (ncols * 41) + 250; // Max length + 250 bytes error message
@ -1444,11 +1449,11 @@ int len, seqno;
ROUTER_SLAVE *sptr; ROUTER_SLAVE *sptr;
blr_slave_send_fieldcount(router, slave, 5); blr_slave_send_fieldcount(router, slave, 5);
blr_slave_send_columndef(router, slave, "Server_id", 0xf, 40, 2); blr_slave_send_columndef(router, slave, "Server_id", BLR_TYPE_STRING, 40, 2);
blr_slave_send_columndef(router, slave, "Host", 0xf, 40, 3); blr_slave_send_columndef(router, slave, "Host", BLR_TYPE_STRING, 40, 3);
blr_slave_send_columndef(router, slave, "Port", 0xf, 40, 4); blr_slave_send_columndef(router, slave, "Port", BLR_TYPE_STRING, 40, 4);
blr_slave_send_columndef(router, slave, "Master_id", 0xf, 40, 5); blr_slave_send_columndef(router, slave, "Master_id", BLR_TYPE_STRING, 40, 5);
blr_slave_send_columndef(router, slave, "Slave_UUID", 0xf, 40, 6); blr_slave_send_columndef(router, slave, "Slave_UUID", BLR_TYPE_STRING, 40, 6);
blr_slave_send_eof(router, slave, 7); blr_slave_send_eof(router, slave, 7);
seqno = 8; seqno = 8;
@ -2315,8 +2320,8 @@ int len, id_len, seqno = 2;
return 0; return 0;
blr_slave_send_fieldcount(router, slave, 2); blr_slave_send_fieldcount(router, slave, 2);
blr_slave_send_columndef(router, slave, "server_id", 0x03, 40, seqno++); blr_slave_send_columndef(router, slave, "server_id", BLR_TYPE_INT, 40, seqno++);
blr_slave_send_columndef(router, slave, "state", 0xf, 40, seqno++); blr_slave_send_columndef(router, slave, "state", BLR_TYPE_STRING, 40, seqno++);
blr_slave_send_eof(router, slave, seqno++); blr_slave_send_eof(router, slave, seqno++);
ptr = GWBUF_DATA(pkt); ptr = GWBUF_DATA(pkt);
@ -2427,8 +2432,8 @@ blr_slave_disconnect_all(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave)
/* preparing output result */ /* preparing output result */
blr_slave_send_fieldcount(router, slave, 2); blr_slave_send_fieldcount(router, slave, 2);
blr_slave_send_columndef(router, slave, "server_id", 0x03, 40, 2); blr_slave_send_columndef(router, slave, "server_id", BLR_TYPE_INT, 40, 2);
blr_slave_send_columndef(router, slave, "state", 0xf, 40, 3); blr_slave_send_columndef(router, slave, "state", BLR_TYPE_STRING, 40, 3);
blr_slave_send_eof(router, slave, 4); blr_slave_send_eof(router, slave, 4);
seqno = 5; seqno = 5;
@ -3602,10 +3607,11 @@ blr_master_free_parsed_options(CHANGE_MASTER_OPTIONS *options) {
* @param slave The slave server to which we are sending the response * @param slave The slave server to which we are sending the response
* @param variable The variable name * @param variable The variable name
* @param value The variable value * @param value The variable value
* @param column_type The variable value type (string or int)
* @return Non-zero if data was sent * @return Non-zero if data was sent
*/ */
static int static int
blr_slave_send_var_value(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *variable, char *value) blr_slave_send_var_value(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, char *variable, char *value, int column_type)
{ {
GWBUF *pkt; GWBUF *pkt;
uint8_t *ptr; uint8_t *ptr;
@ -3613,7 +3619,7 @@ int len, vers_len;
vers_len = strlen(value); vers_len = strlen(value);
blr_slave_send_fieldcount(router, slave, 1); blr_slave_send_fieldcount(router, slave, 1);
blr_slave_send_columndef(router, slave, variable, 0xf, vers_len, 2); blr_slave_send_columndef(router, slave, variable, column_type, vers_len, 2);
blr_slave_send_eof(router, slave, 3); blr_slave_send_eof(router, slave, 3);
len = 5 + vers_len; len = 5 + vers_len;
@ -3636,6 +3642,9 @@ int len, vers_len;
* *
* @param router The binlog router instance * @param router The binlog router instance
* @param slave The slave server to which we are sending the response * @param slave The slave server to which we are sending the response
* @param variable The variable name
* @param value The variable value
* @param column_type The variable value type (string or int)
* @return Non-zero if data was sent * @return Non-zero if data was sent
*/ */
static int static int
@ -3663,7 +3672,7 @@ char *old_ptr = p;
blr_slave_send_fieldcount(router, slave, 2); blr_slave_send_fieldcount(router, slave, 2);
blr_slave_send_columndef_with_info_schema(router, slave, "Variable_name", 0xf, 40, seqno++); blr_slave_send_columndef_with_info_schema(router, slave, "Variable_name", BLR_TYPE_STRING, 40, seqno++);
blr_slave_send_columndef_with_info_schema(router, slave, "Value", column_type, 40, seqno++); blr_slave_send_columndef_with_info_schema(router, slave, "Value", column_type, 40, seqno++);
blr_slave_send_eof(router, slave, seqno++); blr_slave_send_eof(router, slave, seqno++);
@ -3758,4 +3767,3 @@ int packet_data_len = 22 + strlen(name) + info_len + virtual_table_name_len + ta
return slave->dcb->func.write(slave->dcb, pkt); return slave->dcb->func.write(slave->dcb, pkt);
} }