Added global variable mysql-default_charset

Issue #222
pull/248/head
René Cannaò 11 years ago
parent 6ba6c52826
commit f0ec7e509b

@ -280,6 +280,7 @@ class Standard_MySQL_Threads_Handler: public MySQL_Threads_Handler
char *connect_timeout_server_error;
char *default_schema;
char *server_version;
uint8_t default_charset;
bool servers_stats;
#ifdef DEBUG
bool session_debug;
@ -297,6 +298,7 @@ class Standard_MySQL_Threads_Handler: public MySQL_Threads_Handler
virtual void commit();
char *get_variable_string(char *name);
uint8_t get_variable_uint8(char *name);
uint16_t get_variable_uint16(char *name);
int get_variable_int(char *name);
virtual char * get_variable(char *name); // this is the public function, accessible from admin

@ -617,6 +617,7 @@ __thread int mysql_thread___ping_timeout_server;
__thread int mysql_thread___connect_timeout_server;
__thread char *mysql_thread___connect_timeout_server_error;
__thread uint16_t mysql_thread___server_capabilities;
__thread uint8_t mysql_thread___default_charset;
__thread int mysql_thread___poll_timeout;
__thread bool mysql_thread___servers_stats;
#ifdef DEBUG
@ -635,6 +636,7 @@ extern __thread int mysql_thread___ping_timeout_server;
extern __thread int mysql_thread___connect_timeout_server;
extern __thread char *mysql_thread___connect_timeout_server_error;
extern __thread uint16_t mysql_thread___server_capabilities;
extern __thread uint8_t mysql_thread___default_charset;
extern __thread int mysql_thread___poll_timeout;
extern __thread bool mysql_thread___servers_stats;
#ifdef DEBUG

@ -603,7 +603,7 @@ int MySQL_Protocol::parse_mysql_pkt(PtrSize_t *PS_entry, MySQL_Data_Stream *__my
static unsigned char protocol_version=10;
//static uint16_t server_capabilities=CLIENT_FOUND_ROWS | CLIENT_PROTOCOL_41 | CLIENT_IGNORE_SIGPIPE | CLIENT_TRANSACTIONS | CLIENT_SECURE_CONNECTION | CLIENT_CONNECT_WITH_DB | CLIENT_SSL;
static uint8_t server_language=33;
//static uint8_t server_language=33;
static uint16_t server_status=1;
//static char *mysql_server_version = (char *)"5.1.30";
@ -1234,7 +1234,7 @@ bool MySQL_Protocol::generate_pkt_initial_handshake(bool send, void **ptr, unsig
//+ sizeof(glovars.server_language)
//+ sizeof(glovars.server_status)
+ sizeof(mysql_thread___server_capabilities)
+ sizeof(server_language)
+ sizeof(mysql_thread___default_charset)
+ sizeof(server_status)
+ 3 // unknown stuff
+ 10 // filler
@ -1281,7 +1281,7 @@ bool MySQL_Protocol::generate_pkt_initial_handshake(bool send, void **ptr, unsig
memcpy(_ptr+l, (*myds)->myconn->scramble_buff+0, 8); l+=8;
_ptr[l]=0x00; l+=1; //0x00
memcpy(_ptr+l,&mysql_thread___server_capabilities, sizeof(mysql_thread___server_capabilities)); l+=sizeof(mysql_thread___server_capabilities);
memcpy(_ptr+l,&server_language, sizeof(server_language)); l+=sizeof(server_language);
memcpy(_ptr+l,&mysql_thread___default_charset, sizeof(mysql_thread___default_charset)); l+=sizeof(mysql_thread___default_charset);
memcpy(_ptr+l,&server_status, sizeof(server_status)); l+=sizeof(server_status);
memcpy(_ptr+l,"\x0f\x80\x15",3); l+=3;
for (i=0;i<10; i++) { _ptr[l]=0x00; l++; } //filler

@ -188,6 +188,7 @@ volatile static unsigned int __global_MySQL_Thread_Variables_version;
static char * mysql_thread_variables_names[]= {
(char *)"connect_timeout_server",
(char *)"connect_timeout_server_error",
(char *)"default_charset",
(char *)"ping_interval_server",
(char *)"ping_timeout_server",
(char *)"default_schema",
@ -274,6 +275,7 @@ Standard_MySQL_Threads_Handler::Standard_MySQL_Threads_Handler() {
variables.ping_timeout_server=100;
variables.connect_timeout_server_error=strdup((char *)"#2003:Can't connect to MySQL server");
variables.default_schema=strdup((char *)"information_schema");
variables.default_charset=33;
variables.server_version=strdup((char *)"5.1.30");
variables.server_capabilities=CLIENT_FOUND_ROWS | CLIENT_PROTOCOL_41 | CLIENT_IGNORE_SIGPIPE | CLIENT_TRANSACTIONS | CLIENT_SECURE_CONNECTION | CLIENT_CONNECT_WITH_DB | CLIENT_SSL;
variables.poll_timeout=2000;
@ -311,6 +313,12 @@ uint16_t Standard_MySQL_Threads_Handler::get_variable_uint16(char *name) {
return 0;
}
uint8_t Standard_MySQL_Threads_Handler::get_variable_uint8(char *name) {
if (!strcmp(name,"default_charset")) return variables.default_charset;
proxy_error("Not existing variable: %s\n", name); assert(0);
return 0;
}
int Standard_MySQL_Threads_Handler::get_variable_int(char *name) {
#ifdef DEBUG
if (!strcmp(name,"session_debug")) return (int)variables.session_debug;
@ -336,6 +344,10 @@ char * Standard_MySQL_Threads_Handler::get_variable(char *name) { // this is the
sprintf(intbuf,"%d",variables.server_capabilities);
return strdup(intbuf);
}
if (!strcmp(name,"default_charset")) {
sprintf(intbuf,"%d",variables.default_charset);
return strdup(intbuf);
}
if (!strcasecmp(name,"connect_timeout_server")) {
sprintf(intbuf,"%d",variables.connect_timeout_server);
return strdup(intbuf);
@ -447,10 +459,19 @@ bool Standard_MySQL_Threads_Handler::set_variable(char *name, char *value) { //
return false;
}
}
if (!strcmp(name,"server_capabilities")) {
if (!strcmp(name,"poll_timeout")) {
int intv=atoi(value);
if (intv > 10 && intv < 20000) {
variables.poll_timeout=intv;
return true;
} else {
return false;
}
}
if (!strcmp(name,"default_charset")) {
int intv=atoi(value);
if (intv > 0) {
variables.server_capabilities=intv;
if (intv > 0 && intv < 256) {
variables.default_charset=intv;
return true;
} else {
return false;
@ -1005,6 +1026,7 @@ void Standard_MySQL_Thread::refresh_variables() {
if (mysql_thread___default_schema) free(mysql_thread___default_schema);
mysql_thread___default_schema=GloMTH->get_variable_string((char *)"default_schema");
mysql_thread___server_capabilities=GloMTH->get_variable_uint16((char *)"server_capabilities");
mysql_thread___default_charset=GloMTH->get_variable_uint8((char *)"default_charset");
mysql_thread___poll_timeout=GloMTH->get_variable_int((char *)"poll_timeout");
mysql_thread___servers_stats=(bool)GloMTH->get_variable_int((char *)"servers_stats");
#ifdef DEBUG
@ -1154,7 +1176,7 @@ SQLite3_result * Standard_MySQL_Thread::SQL3_Thread_status(MySQL_Session *sess)
status_str+="\ndefault_schema : "; status_str.append(mysql_thread___default_schema);
status_str+="\nserver_version : "; status_str.append(mysql_thread___server_version);
sprintf(buf,"\ncapabilities : %d\npoll_timeout : %d\n", mysql_thread___server_capabilities, mysql_thread___poll_timeout);
sprintf(buf,"\ncapabilities : %d\npoll_timeout : %d\ncharset : %d\n", mysql_thread___server_capabilities, mysql_thread___poll_timeout, mysql_thread___default_charset);
status_str.append(buf);
status_str+= "\n";

Loading…
Cancel
Save