Loading mysql-test/r/mysqlbinlog.result +20 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,26 @@ select * from t5 /* must be (1),(1) */; a 1 1 flush logs; drop table if exists t5; create table t5 (c1 int, c2 varchar(128) character set latin1 not null); insert into t5 values (1, date_format('2001-01-01','%W')); set lc_time_names=de_DE; insert into t5 values (2, date_format('2001-01-01','%W')); set lc_time_names=en_US; insert into t5 values (3, date_format('2001-01-01','%W')); select * from t5 order by c1; c1 c2 1 Monday 2 Montag 3 Monday flush logs; drop table t5; select * from t5 order by c1; c1 c2 1 Monday 2 Montag 3 Monday drop procedure if exists p1; flush logs; create procedure p1() Loading mysql-test/r/rpl_locale.result +4 −0 Original line number Diff line number Diff line Loading @@ -7,10 +7,14 @@ start slave; create table t1 (s1 char(10)); set lc_time_names= 'de_DE'; insert into t1 values (date_format('2001-01-01','%W')); set lc_time_names= 'en_US'; insert into t1 values (date_format('2001-01-01','%W')); select * from t1; s1 Montag Monday select * from t1; s1 Montag Monday drop table t1; mysql-test/t/mysqlbinlog.test +20 −2 Original line number Diff line number Diff line Loading @@ -136,6 +136,24 @@ flush logs; --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL select * from t5 /* must be (1),(1) */; # # Bug#22645 LC_TIME_NAMES: Statement not replicated # Check that a dump created by mysqlbinlog reproduces # lc_time_names dependent values correctly # flush logs; drop table if exists t5; create table t5 (c1 int, c2 varchar(128) character set latin1 not null); insert into t5 values (1, date_format('2001-01-01','%W')); set lc_time_names=de_DE; insert into t5 values (2, date_format('2001-01-01','%W')); set lc_time_names=en_US; insert into t5 values (3, date_format('2001-01-01','%W')); select * from t5 order by c1; flush logs; drop table t5; --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 | $MYSQL select * from t5 order by c1; # # Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails # Loading @@ -155,8 +173,8 @@ call p1(); drop procedure p1; --error 1305 call p1(); --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 | $MYSQL --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000009 --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000009 | $MYSQL call p1(); drop procedure p1; Loading mysql-test/t/rpl_locale.test +2 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ connection master; create table t1 (s1 char(10)); set lc_time_names= 'de_DE'; insert into t1 values (date_format('2001-01-01','%W')); set lc_time_names= 'en_US'; insert into t1 values (date_format('2001-01-01','%W')); select * from t1; sync_slave_with_master; connection slave; Loading sql/log_event.cc +34 −3 Original line number Diff line number Diff line Loading @@ -1289,7 +1289,8 @@ bool Query_log_event::write(IO_CACHE* file) 1+1+FN_REFLEN+ // code of catalog and catalog length and catalog 1+4+ // code of autoinc and the 2 autoinc variables 1+6+ // code of charset and charset 1+1+MAX_TIME_ZONE_NAME_LENGTH // code of tz and tz length and tz name 1+1+MAX_TIME_ZONE_NAME_LENGTH+ // code of tz and tz length and tz name 1+2 // code of lc_time_names and lc_time_names_number ], *start, *start_of_status; ulong event_length; Loading Loading @@ -1401,6 +1402,13 @@ bool Query_log_event::write(IO_CACHE* file) memcpy(start, time_zone_str, time_zone_len); start+= time_zone_len; } if (lc_time_names_number) { DBUG_ASSERT(lc_time_names_number <= 0xFFFF); *start++= Q_LC_TIME_NAMES_CODE; int2store(start, lc_time_names_number); start+= 2; } /* Here there could be code like if (command-line-option-which-says-"log_this_variable" && inited) Loading Loading @@ -1465,7 +1473,8 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg, flags2_inited(1), sql_mode_inited(1), charset_inited(1), sql_mode(thd_arg->variables.sql_mode), auto_increment_increment(thd_arg->variables.auto_increment_increment), auto_increment_offset(thd_arg->variables.auto_increment_offset) auto_increment_offset(thd_arg->variables.auto_increment_offset), lc_time_names_number(thd_arg->variables.lc_time_names->number) { time_t end_time; time(&end_time); Loading Loading @@ -1536,7 +1545,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, db(NullS), catalog_len(0), status_vars_len(0), flags2_inited(0), sql_mode_inited(0), charset_inited(0), auto_increment_increment(1), auto_increment_offset(1), time_zone_len(0) time_zone_len(0), lc_time_names_number(0) { ulong data_len; uint32 tmp; Loading Loading @@ -1637,6 +1646,10 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, pos+= catalog_len+2; // leap over end 0 catalog_nz= 0; // catalog has end 0 in event break; case Q_LC_TIME_NAMES_CODE: lc_time_names_number= uint2korr(pos); pos+= 2; break; default: /* That's why you must write status vars in growing order of code */ DBUG_PRINT("info",("Query_log_event has unknown status vars (first has\ Loading Loading @@ -1829,6 +1842,11 @@ void Query_log_event::print_query_header(IO_CACHE* file, memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1); } } if (lc_time_names_number != print_event_info->lc_time_names_number) { fprintf(file, "SET @@session.lc_time_names=%d;\n", lc_time_names_number); print_event_info->lc_time_names_number= lc_time_names_number; } } Loading Loading @@ -1971,6 +1989,19 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli, goto compare_errors; } } if (lc_time_names_number) { if (!(thd->variables.lc_time_names= my_locale_by_number(lc_time_names_number))) { my_printf_error(ER_UNKNOWN_ERROR, "Unknown locale: '%d'", MYF(0), lc_time_names_number); thd->variables.lc_time_names= &my_locale_en_US; goto compare_errors; } } else thd->variables.lc_time_names= &my_locale_en_US; /* Execute the query (note that we bypass dispatch_command()) */ mysql_parse(thd, thd->query, thd->query_length); Loading Loading
mysql-test/r/mysqlbinlog.result +20 −0 Original line number Diff line number Diff line Loading @@ -214,6 +214,26 @@ select * from t5 /* must be (1),(1) */; a 1 1 flush logs; drop table if exists t5; create table t5 (c1 int, c2 varchar(128) character set latin1 not null); insert into t5 values (1, date_format('2001-01-01','%W')); set lc_time_names=de_DE; insert into t5 values (2, date_format('2001-01-01','%W')); set lc_time_names=en_US; insert into t5 values (3, date_format('2001-01-01','%W')); select * from t5 order by c1; c1 c2 1 Monday 2 Montag 3 Monday flush logs; drop table t5; select * from t5 order by c1; c1 c2 1 Monday 2 Montag 3 Monday drop procedure if exists p1; flush logs; create procedure p1() Loading
mysql-test/r/rpl_locale.result +4 −0 Original line number Diff line number Diff line Loading @@ -7,10 +7,14 @@ start slave; create table t1 (s1 char(10)); set lc_time_names= 'de_DE'; insert into t1 values (date_format('2001-01-01','%W')); set lc_time_names= 'en_US'; insert into t1 values (date_format('2001-01-01','%W')); select * from t1; s1 Montag Monday select * from t1; s1 Montag Monday drop table t1;
mysql-test/t/mysqlbinlog.test +20 −2 Original line number Diff line number Diff line Loading @@ -136,6 +136,24 @@ flush logs; --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000006 | $MYSQL select * from t5 /* must be (1),(1) */; # # Bug#22645 LC_TIME_NAMES: Statement not replicated # Check that a dump created by mysqlbinlog reproduces # lc_time_names dependent values correctly # flush logs; drop table if exists t5; create table t5 (c1 int, c2 varchar(128) character set latin1 not null); insert into t5 values (1, date_format('2001-01-01','%W')); set lc_time_names=de_DE; insert into t5 values (2, date_format('2001-01-01','%W')); set lc_time_names=en_US; insert into t5 values (3, date_format('2001-01-01','%W')); select * from t5 order by c1; flush logs; drop table t5; --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 | $MYSQL select * from t5 order by c1; # # Bug#20396 Bin Log does not get DELIMETER cmd - Recover StoredProc fails # Loading @@ -155,8 +173,8 @@ call p1(); drop procedure p1; --error 1305 call p1(); --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000007 | $MYSQL --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000009 --exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000009 | $MYSQL call p1(); drop procedure p1; Loading
mysql-test/t/rpl_locale.test +2 −0 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ connection master; create table t1 (s1 char(10)); set lc_time_names= 'de_DE'; insert into t1 values (date_format('2001-01-01','%W')); set lc_time_names= 'en_US'; insert into t1 values (date_format('2001-01-01','%W')); select * from t1; sync_slave_with_master; connection slave; Loading
sql/log_event.cc +34 −3 Original line number Diff line number Diff line Loading @@ -1289,7 +1289,8 @@ bool Query_log_event::write(IO_CACHE* file) 1+1+FN_REFLEN+ // code of catalog and catalog length and catalog 1+4+ // code of autoinc and the 2 autoinc variables 1+6+ // code of charset and charset 1+1+MAX_TIME_ZONE_NAME_LENGTH // code of tz and tz length and tz name 1+1+MAX_TIME_ZONE_NAME_LENGTH+ // code of tz and tz length and tz name 1+2 // code of lc_time_names and lc_time_names_number ], *start, *start_of_status; ulong event_length; Loading Loading @@ -1401,6 +1402,13 @@ bool Query_log_event::write(IO_CACHE* file) memcpy(start, time_zone_str, time_zone_len); start+= time_zone_len; } if (lc_time_names_number) { DBUG_ASSERT(lc_time_names_number <= 0xFFFF); *start++= Q_LC_TIME_NAMES_CODE; int2store(start, lc_time_names_number); start+= 2; } /* Here there could be code like if (command-line-option-which-says-"log_this_variable" && inited) Loading Loading @@ -1465,7 +1473,8 @@ Query_log_event::Query_log_event(THD* thd_arg, const char* query_arg, flags2_inited(1), sql_mode_inited(1), charset_inited(1), sql_mode(thd_arg->variables.sql_mode), auto_increment_increment(thd_arg->variables.auto_increment_increment), auto_increment_offset(thd_arg->variables.auto_increment_offset) auto_increment_offset(thd_arg->variables.auto_increment_offset), lc_time_names_number(thd_arg->variables.lc_time_names->number) { time_t end_time; time(&end_time); Loading Loading @@ -1536,7 +1545,7 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, db(NullS), catalog_len(0), status_vars_len(0), flags2_inited(0), sql_mode_inited(0), charset_inited(0), auto_increment_increment(1), auto_increment_offset(1), time_zone_len(0) time_zone_len(0), lc_time_names_number(0) { ulong data_len; uint32 tmp; Loading Loading @@ -1637,6 +1646,10 @@ Query_log_event::Query_log_event(const char* buf, uint event_len, pos+= catalog_len+2; // leap over end 0 catalog_nz= 0; // catalog has end 0 in event break; case Q_LC_TIME_NAMES_CODE: lc_time_names_number= uint2korr(pos); pos+= 2; break; default: /* That's why you must write status vars in growing order of code */ DBUG_PRINT("info",("Query_log_event has unknown status vars (first has\ Loading Loading @@ -1829,6 +1842,11 @@ void Query_log_event::print_query_header(IO_CACHE* file, memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1); } } if (lc_time_names_number != print_event_info->lc_time_names_number) { fprintf(file, "SET @@session.lc_time_names=%d;\n", lc_time_names_number); print_event_info->lc_time_names_number= lc_time_names_number; } } Loading Loading @@ -1971,6 +1989,19 @@ int Query_log_event::exec_event(struct st_relay_log_info* rli, goto compare_errors; } } if (lc_time_names_number) { if (!(thd->variables.lc_time_names= my_locale_by_number(lc_time_names_number))) { my_printf_error(ER_UNKNOWN_ERROR, "Unknown locale: '%d'", MYF(0), lc_time_names_number); thd->variables.lc_time_names= &my_locale_en_US; goto compare_errors; } } else thd->variables.lc_time_names= &my_locale_en_US; /* Execute the query (note that we bypass dispatch_command()) */ mysql_parse(thd, thd->query, thd->query_length); Loading