Merge branch '2.2' into 2.3
This commit is contained in:
@ -234,6 +234,53 @@ std::string get_version_string(SERVICE* service)
|
|||||||
return rval;
|
return rval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint8_t get_charset(SERVER_REF* servers)
|
||||||
|
{
|
||||||
|
uint8_t rval = 0;
|
||||||
|
|
||||||
|
for (SERVER_REF* s = servers; s; s = s->next)
|
||||||
|
{
|
||||||
|
if (s->active && s->server->is_active)
|
||||||
|
{
|
||||||
|
if (server_is_master(s->server))
|
||||||
|
{
|
||||||
|
// Master found, stop searching
|
||||||
|
rval = s->server->charset;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else if (server_is_slave(s->server) || (server_is_running(s->server) && rval == 0))
|
||||||
|
{
|
||||||
|
// Slaves precede Running servers
|
||||||
|
rval = s->server->charset;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (rval == 0)
|
||||||
|
{
|
||||||
|
// Charset 8 is latin1, the server default
|
||||||
|
rval = 8;
|
||||||
|
}
|
||||||
|
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool supports_extended_caps(SERVER_REF* servers)
|
||||||
|
{
|
||||||
|
bool rval = false;
|
||||||
|
|
||||||
|
for (SERVER_REF* s = servers; s; s = s->next)
|
||||||
|
{
|
||||||
|
if (s->active && s->server->is_active && s->server->version >= 100200)
|
||||||
|
{
|
||||||
|
rval = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return rval;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* MySQLSendHandshake
|
* MySQLSendHandshake
|
||||||
*
|
*
|
||||||
@ -254,25 +301,14 @@ int MySQLSendHandshake(DCB* dcb)
|
|||||||
uint8_t mysql_plugin_data[13] = "";
|
uint8_t mysql_plugin_data[13] = "";
|
||||||
uint8_t mysql_server_capabilities_one[2];
|
uint8_t mysql_server_capabilities_one[2];
|
||||||
uint8_t mysql_server_capabilities_two[2];
|
uint8_t mysql_server_capabilities_two[2];
|
||||||
uint8_t mysql_server_language = 8;
|
uint8_t mysql_server_language = get_charset(dcb->service->dbref);
|
||||||
uint8_t mysql_server_status[2];
|
uint8_t mysql_server_status[2];
|
||||||
uint8_t mysql_scramble_len = 21;
|
uint8_t mysql_scramble_len = 21;
|
||||||
uint8_t mysql_filler_ten[10] = {};
|
uint8_t mysql_filler_ten[10] = {};
|
||||||
/* uint8_t mysql_last_byte = 0x00; not needed */
|
/* uint8_t mysql_last_byte = 0x00; not needed */
|
||||||
char server_scramble[GW_MYSQL_SCRAMBLE_SIZE + 1] = "";
|
char server_scramble[GW_MYSQL_SCRAMBLE_SIZE + 1] = "";
|
||||||
|
|
||||||
bool is_maria = false;
|
bool is_maria = supports_extended_caps(dcb->service->dbref);
|
||||||
|
|
||||||
if (dcb->service->dbref)
|
|
||||||
{
|
|
||||||
mysql_server_language = dcb->service->dbref->server->charset;
|
|
||||||
|
|
||||||
if (dcb->service->dbref->server->version >= 100200)
|
|
||||||
{
|
|
||||||
/** The backend servers support the extended capabilities */
|
|
||||||
is_maria = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
MySQLProtocol* protocol = DCB_PROTOCOL(dcb, MySQLProtocol);
|
MySQLProtocol* protocol = DCB_PROTOCOL(dcb, MySQLProtocol);
|
||||||
GWBUF* buf;
|
GWBUF* buf;
|
||||||
|
Reference in New Issue
Block a user