diff options
author | unknown <monty@mashka.mysql.fi> | 2003-03-05 16:10:40 +0200 |
---|---|---|
committer | unknown <monty@mashka.mysql.fi> | 2003-03-05 16:10:40 +0200 |
commit | 401f3fb41807062707ae949a9554765db3ba9351 (patch) | |
tree | 107cc1c587a09929a1712977c5f835904e0228af /sql/log_event.cc | |
parent | a6c0ea72d657d6562974c54d418856665d58e436 (diff) | |
download | mariadb-git-401f3fb41807062707ae949a9554765db3ba9351.tar.gz |
Fixed character set bug when replicating user variables
sql/log_event.cc:
Fixed character set bug when replicating user variables.
Simple optimisation of User_var_log_event::write_data
Diffstat (limited to 'sql/log_event.cc')
-rw-r--r-- | sql/log_event.cc | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/sql/log_event.cc b/sql/log_event.cc index 2774a6a3e9b..12921eb0c01 100644 --- a/sql/log_event.cc +++ b/sql/log_event.cc @@ -2030,6 +2030,7 @@ User_var_log_event::User_var_log_event(const char* buf, bool old_format) if (is_null) { type= STRING_RESULT; + charset_number= my_charset_bin.number; val_len= 0; val= 0; } @@ -2050,15 +2051,22 @@ int User_var_log_event::write_data(IO_CACHE* file) char buf[UV_NAME_LEN_SIZE]; char buf1[UV_VAL_IS_NULL + UV_VAL_TYPE_SIZE + UV_CHARSET_NUMBER_SIZE + UV_VAL_LEN_SIZE]; - char buf2[8]; - char *pos= buf2; + char buf2[8], *pos= buf2; + uint buf1_length; + int4store(buf, name_len); - buf1[0]= is_null; - if (!is_null) + + if ((buf1[0]= is_null)) + { + buf1_length= 1; + val_len= 0; + } + else { buf1[1]= type; int4store(buf1 + 2, charset_number); int4store(buf1 + 2 + UV_CHARSET_NUMBER_SIZE, val_len); + buf1_length= 10; switch (type) { case REAL_RESULT: @@ -2075,17 +2083,14 @@ int User_var_log_event::write_data(IO_CACHE* file) DBUG_ASSERT(1); return 0; } - return (my_b_safe_write(file, (byte*) buf, sizeof(buf)) || - my_b_safe_write(file, (byte*) name, name_len) || - my_b_safe_write(file, (byte*) buf1, sizeof(buf1)) || - my_b_safe_write(file, (byte*) pos, val_len)); } - return (my_b_safe_write(file, (byte*) buf, sizeof(buf)) || - my_b_safe_write(file, (byte*) name, name_len) || - my_b_safe_write(file, (byte*) buf1, 1)); + my_b_safe_write(file, (byte*) name, name_len) || + my_b_safe_write(file, (byte*) buf1, buf1_length) || + my_b_safe_write(file, (byte*) pos, val_len)); } + /***************************************************************************** User_var_log_event::print() @@ -2142,7 +2147,7 @@ void User_var_log_event::print(FILE* file, bool short_form, char* last_db) int User_var_log_event::exec_event(struct st_relay_log_info* rli) { Item *it= 0; - CHARSET_INFO *charset= 0; + CHARSET_INFO *charset= get_charset(charset_number, MYF(0)); LEX_STRING user_var_name; user_var_name.str= name; user_var_name.length= name_len; @@ -2179,7 +2184,6 @@ int User_var_log_event::exec_event(struct st_relay_log_info* rli) DBUG_ASSERT(1); return 0; } - charset= get_charset(charset_number, MYF(0)); } Item_func_set_user_var e(user_var_name, it); e.fix_fields(thd, 0, 0); |