mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix for Bug#16905 Log tables: unicode statements are logged incorrectly
This commit is contained in:
@ -52,3 +52,15 @@ select "Mark that we woke up from TRUNCATE in the test"
|
|||||||
as "test passed";
|
as "test passed";
|
||||||
test passed
|
test passed
|
||||||
Mark that we woke up from TRUNCATE in the test
|
Mark that we woke up from TRUNCATE in the test
|
||||||
|
use test;
|
||||||
|
truncate table mysql.general_log;
|
||||||
|
set names utf8;
|
||||||
|
create table bug16905 (s char(15) character set utf8 default 'пусто');
|
||||||
|
insert into bug16905 values ('новое');
|
||||||
|
select * from mysql.general_log;
|
||||||
|
event_time user_host thread_id server_id command_type argument
|
||||||
|
TIMESTAMP root[root] @ localhost [] 2 1 Query set names utf8
|
||||||
|
TIMESTAMP root[root] @ localhost [] 2 1 Query create table bug16905 (s char(15) character set utf8 default 'пусто')
|
||||||
|
TIMESTAMP root[root] @ localhost [] 2 1 Query insert into bug16905 values ('новое')
|
||||||
|
TIMESTAMP root[root] @ localhost [] 2 1 Query select * from mysql.general_log
|
||||||
|
drop table bug16905;
|
||||||
|
@ -144,7 +144,25 @@ reap;
|
|||||||
select "Mark that we woke up from TRUNCATE in the test"
|
select "Mark that we woke up from TRUNCATE in the test"
|
||||||
as "test passed";
|
as "test passed";
|
||||||
|
|
||||||
|
connection con1;
|
||||||
|
|
||||||
disconnect con2;
|
disconnect con2;
|
||||||
|
|
||||||
|
use test;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug #16905 Log tables: unicode statements are logged incorrectly
|
||||||
|
#
|
||||||
|
|
||||||
|
truncate table mysql.general_log;
|
||||||
|
set names utf8;
|
||||||
|
create table bug16905 (s char(15) character set utf8 default 'пусто');
|
||||||
|
insert into bug16905 values ('новое');
|
||||||
|
--replace_column 1 TIMESTAMP
|
||||||
|
select * from mysql.general_log;
|
||||||
|
drop table bug16905;
|
||||||
|
|
||||||
|
|
||||||
disconnect con1;
|
disconnect con1;
|
||||||
--enable_ps_protocol
|
--enable_ps_protocol
|
||||||
|
|
||||||
|
23
sql/log.cc
23
sql/log.cc
@ -310,7 +310,8 @@ bool Log_to_csv_event_handler::
|
|||||||
log_general(time_t event_time, const char *user_host,
|
log_general(time_t event_time, const char *user_host,
|
||||||
uint user_host_len, int thread_id,
|
uint user_host_len, int thread_id,
|
||||||
const char *command_type, uint command_type_len,
|
const char *command_type, uint command_type_len,
|
||||||
const char *sql_text, uint sql_text_len)
|
const char *sql_text, uint sql_text_len,
|
||||||
|
CHARSET_INFO *client_cs)
|
||||||
{
|
{
|
||||||
TABLE *table= general_log.table;
|
TABLE *table= general_log.table;
|
||||||
|
|
||||||
@ -325,11 +326,11 @@ bool Log_to_csv_event_handler::
|
|||||||
/* set default value (which is CURRENT_TIMESTAMP) */
|
/* set default value (which is CURRENT_TIMESTAMP) */
|
||||||
table->field[0]->set_null();
|
table->field[0]->set_null();
|
||||||
|
|
||||||
table->field[1]->store(user_host, user_host_len, &my_charset_latin1);
|
table->field[1]->store(user_host, user_host_len, client_cs);
|
||||||
table->field[2]->store((longlong) thread_id);
|
table->field[2]->store((longlong) thread_id);
|
||||||
table->field[3]->store((longlong) server_id);
|
table->field[3]->store((longlong) server_id);
|
||||||
table->field[4]->store(command_type, command_type_len, &my_charset_latin1);
|
table->field[4]->store(command_type, command_type_len, client_cs);
|
||||||
table->field[5]->store(sql_text, sql_text_len, &my_charset_latin1);
|
table->field[5]->store(sql_text, sql_text_len, client_cs);
|
||||||
table->file->ha_write_row(table->record[0]);
|
table->file->ha_write_row(table->record[0]);
|
||||||
|
|
||||||
reenable_binlog(current_thd);
|
reenable_binlog(current_thd);
|
||||||
@ -375,6 +376,7 @@ bool Log_to_csv_event_handler::
|
|||||||
{
|
{
|
||||||
/* table variables */
|
/* table variables */
|
||||||
TABLE *table= slow_log.table;
|
TABLE *table= slow_log.table;
|
||||||
|
CHARSET_INFO *client_cs= thd->variables.character_set_client;
|
||||||
|
|
||||||
DBUG_ENTER("log_slow_to_csv");
|
DBUG_ENTER("log_slow_to_csv");
|
||||||
|
|
||||||
@ -395,7 +397,7 @@ bool Log_to_csv_event_handler::
|
|||||||
table->field[0]->set_null();
|
table->field[0]->set_null();
|
||||||
|
|
||||||
/* store the value */
|
/* store the value */
|
||||||
table->field[1]->store(user_host, user_host_len, &my_charset_latin1);
|
table->field[1]->store(user_host, user_host_len, client_cs);
|
||||||
|
|
||||||
if (query_start_arg)
|
if (query_start_arg)
|
||||||
{
|
{
|
||||||
@ -418,7 +420,7 @@ bool Log_to_csv_event_handler::
|
|||||||
|
|
||||||
if (thd->db)
|
if (thd->db)
|
||||||
/* fill database field */
|
/* fill database field */
|
||||||
table->field[6]->store(thd->db, thd->db_length, &my_charset_latin1);
|
table->field[6]->store(thd->db, thd->db_length, client_cs);
|
||||||
else
|
else
|
||||||
table->field[6]->set_null();
|
table->field[6]->set_null();
|
||||||
|
|
||||||
@ -436,8 +438,7 @@ bool Log_to_csv_event_handler::
|
|||||||
table->field[9]->store((longlong) server_id);
|
table->field[9]->store((longlong) server_id);
|
||||||
|
|
||||||
/* sql_text */
|
/* sql_text */
|
||||||
table->field[10]->store(sql_text,sql_text_len,
|
table->field[10]->store(sql_text,sql_text_len, client_cs);
|
||||||
&my_charset_latin1);
|
|
||||||
|
|
||||||
/* write the row */
|
/* write the row */
|
||||||
table->file->ha_write_row(table->record[0]);
|
table->file->ha_write_row(table->record[0]);
|
||||||
@ -493,7 +494,8 @@ bool Log_to_file_event_handler::
|
|||||||
log_general(time_t event_time, const char *user_host,
|
log_general(time_t event_time, const char *user_host,
|
||||||
uint user_host_len, int thread_id,
|
uint user_host_len, int thread_id,
|
||||||
const char *command_type, uint command_type_len,
|
const char *command_type, uint command_type_len,
|
||||||
const char *sql_text, uint sql_text_len)
|
const char *sql_text, uint sql_text_len,
|
||||||
|
CHARSET_INFO *client_cs)
|
||||||
{
|
{
|
||||||
return mysql_log.write(event_time, user_host, user_host_len,
|
return mysql_log.write(event_time, user_host, user_host_len,
|
||||||
thread_id, command_type, command_type_len,
|
thread_id, command_type, command_type_len,
|
||||||
@ -809,7 +811,8 @@ bool LOGGER::general_log_print(THD *thd, enum enum_server_command command,
|
|||||||
user_host_len, id,
|
user_host_len, id,
|
||||||
command_name[(uint) command].str,
|
command_name[(uint) command].str,
|
||||||
command_name[(uint) command].length,
|
command_name[(uint) command].length,
|
||||||
message_buff, message_buff_len) || error;
|
message_buff, message_buff_len,
|
||||||
|
thd->variables.character_set_client) || error;
|
||||||
unlock();
|
unlock();
|
||||||
}
|
}
|
||||||
return error;
|
return error;
|
||||||
|
@ -368,7 +368,8 @@ public:
|
|||||||
virtual bool log_general(time_t event_time, const char *user_host,
|
virtual bool log_general(time_t event_time, const char *user_host,
|
||||||
uint user_host_len, int thread_id,
|
uint user_host_len, int thread_id,
|
||||||
const char *command_type, uint command_type_len,
|
const char *command_type, uint command_type_len,
|
||||||
const char *sql_text, uint sql_text_len)= 0;
|
const char *sql_text, uint sql_text_len,
|
||||||
|
CHARSET_INFO *client_cs)= 0;
|
||||||
virtual ~Log_event_handler() {}
|
virtual ~Log_event_handler() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -403,7 +404,8 @@ public:
|
|||||||
virtual bool log_general(time_t event_time, const char *user_host,
|
virtual bool log_general(time_t event_time, const char *user_host,
|
||||||
uint user_host_len, int thread_id,
|
uint user_host_len, int thread_id,
|
||||||
const char *command_type, uint command_type_len,
|
const char *command_type, uint command_type_len,
|
||||||
const char *sql_text, uint sql_text_len);
|
const char *sql_text, uint sql_text_len,
|
||||||
|
CHARSET_INFO *client_cs);
|
||||||
bool flush(THD *thd, TABLE_LIST *close_slow_Log,
|
bool flush(THD *thd, TABLE_LIST *close_slow_Log,
|
||||||
TABLE_LIST* close_general_log);
|
TABLE_LIST* close_general_log);
|
||||||
void close_log_table(uint log_type, bool lock_in_use);
|
void close_log_table(uint log_type, bool lock_in_use);
|
||||||
@ -431,7 +433,8 @@ public:
|
|||||||
virtual bool log_general(time_t event_time, const char *user_host,
|
virtual bool log_general(time_t event_time, const char *user_host,
|
||||||
uint user_host_len, int thread_id,
|
uint user_host_len, int thread_id,
|
||||||
const char *command_type, uint command_type_len,
|
const char *command_type, uint command_type_len,
|
||||||
const char *sql_text, uint sql_text_len);
|
const char *sql_text, uint sql_text_len,
|
||||||
|
CHARSET_INFO *client_cs);
|
||||||
void flush();
|
void flush();
|
||||||
void init_pthread_objects();
|
void init_pthread_objects();
|
||||||
};
|
};
|
||||||
|
Reference in New Issue
Block a user