From e76215bf0701345219ac30b64ecdcd070be63a6f Mon Sep 17 00:00:00 2001 From: Markus Makela Date: Mon, 8 Dec 2014 11:15:10 +0200 Subject: [PATCH] Added detection of COM_INIT_DB --- server/modules/include/mysql_client_server_protocol.h | 1 + server/modules/routing/dbshard/dbshard.c | 10 ++++++++++ 2 files changed, 11 insertions(+) diff --git a/server/modules/include/mysql_client_server_protocol.h b/server/modules/include/mysql_client_server_protocol.h index f15c9e62b..e95f7ed49 100644 --- a/server/modules/include/mysql_client_server_protocol.h +++ b/server/modules/include/mysql_client_server_protocol.h @@ -297,6 +297,7 @@ typedef struct { #define MYSQL_GET_STMTOK_NATTR(payload) (gw_mysql_get_byte2(&payload[11])) #define MYSQL_IS_ERROR_PACKET(payload) (MYSQL_GET_COMMAND(payload)==0xff) #define MYSQL_IS_COM_QUIT(payload) (MYSQL_GET_COMMAND(payload)==0x01) +#define MYSQL_IS_COM_INIT_DB(payload) (MYSQL_GET_COMMAND(payload)==0x02) #define MYSQL_IS_CHANGE_USER(payload) (MYSQL_GET_COMMAND(payload)==0x11) #define MYSQL_GET_NATTR(payload) ((int)payload[4]) diff --git a/server/modules/routing/dbshard/dbshard.c b/server/modules/routing/dbshard/dbshard.c index 1ce8331d6..c5413678a 100644 --- a/server/modules/routing/dbshard/dbshard.c +++ b/server/modules/routing/dbshard/dbshard.c @@ -1647,6 +1647,8 @@ static int routeQuery( } ss_dassert(!GWBUF_IS_TYPE_UNDEFINED(querybuf)); + + packet = GWBUF_DATA(querybuf); packet_type = packet[4]; @@ -1683,6 +1685,14 @@ static int routeQuery( switch(packet_type) { case MYSQL_COM_QUIT: /*< 1 QUIT will close all sessions */ case MYSQL_COM_INIT_DB: /*< 2 DDL must go to the master */ + + if(GWBUF_LENGTH(querybuf) <= MYSQL_DATABASE_MAXLEN - 5) + { + strncpy(router_cli_ses->rses_mysql_session->db, + packet + 5, + GWBUF_LENGTH(querybuf) - 5); + } + case MYSQL_COM_REFRESH: /*< 7 - I guess this is session but not sure */ case MYSQL_COM_DEBUG: /*< 0d all servers dump debug info to stdout */ case MYSQL_COM_PING: /*< 0e all servers are pinged */