summaryrefslogtreecommitdiff
path: root/sql/log_event_server.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/log_event_server.cc')
-rw-r--r--sql/log_event_server.cc18
1 files changed, 18 insertions, 0 deletions
diff --git a/sql/log_event_server.cc b/sql/log_event_server.cc
index 535a2cf93de..7018f6a0d1d 100644
--- a/sql/log_event_server.cc
+++ b/sql/log_event_server.cc
@@ -1194,6 +1194,14 @@ bool Query_log_event::write()
int2store(start+2, auto_increment_offset);
start+= 4;
}
+
+ if (thd && (thd->used & THD::CHARACTER_SET_COLLATIONS_USED))
+ {
+ *start++= Q_CHARACTER_SET_COLLATIONS;
+ size_t len= thd->variables.character_set_collations.to_binary((char*)start);
+ start+= len;
+ }
+
if (charset_inited)
{
*start++= Q_CHARSET_CODE;
@@ -1989,6 +1997,16 @@ int Query_log_event::do_apply_event(rpl_group_info *rgi,
thd->variables.sql_mode=
(sql_mode_t) ((thd->variables.sql_mode & MODE_NO_DIR_IN_CREATE) |
(sql_mode & ~(sql_mode_t) MODE_NO_DIR_IN_CREATE));
+
+ size_t cslen= thd->variables.character_set_collations.from_binary(
+ character_set_collations.str,
+ character_set_collations.length);
+ if (cslen != character_set_collations.length)
+ {
+ thd->variables.character_set_collations.init();
+ goto compare_errors; // QQ: report an error here?
+ }
+
if (charset_inited)
{
rpl_sql_thread_info *sql_info= thd->system_thread_info.rpl_sql_info;