List:Commits« Previous MessageNext Message »
From:bar Date:December 7 2006 6:32am
Subject:bk commit into 5.0 tree (bar:1.2312) BUG#22645
View as plain text  
Below is the list of changes that have just been committed into a local
5.0 repository of bar. When bar does a push these changes will
be propagated to the main repository and, within 24 hours after the
push, to the public repository.
For information on how to access the public repository
see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html

ChangeSet@stripped, 2006-12-07 09:31:53+04:00, bar@stripped +7 -0
  Bug#22645 LC_TIME_NAMES: Statement not replicated
  Implementing event based replication of LC_TIME_NAMES for 5.0
  (as a replacement of previously made ONE_SHOT replication)

  mysql-test/r/mysqlbinlog.result@stripped, 2006-12-07 09:31:48+04:00, bar@stripped +20 -0
    Fixing results

  mysql-test/r/rpl_locale.result@stripped, 2006-12-07 09:31:48+04:00, bar@stripped +4 -0
    Fixing results

  mysql-test/t/disabled.def@stripped, 2006-12-07 09:31:48+04:00, bar@stripped +0 -1
    Enabling rpl_locale

  mysql-test/t/mysqlbinlog.test@stripped, 2006-12-07 09:31:48+04:00, bar@stripped +19 -0
    Check "mysqlbinlog | mysql" reproduces lc_time_names correctly.

  mysql-test/t/rpl_locale.test@stripped, 2006-12-07 09:31:48+04:00, bar@stripped +2 -0
    Adding new test: that setting lc_time_names back to en_US works fine.

  sql/log_event.cc@stripped, 2006-12-07 09:31:48+04:00, bar@stripped +34 -3
    Implementing event based replication of LC_TIME_NAMES for 5.0
    (as a replacement of previously made ONE_SHOT replication)

  sql/log_event.h@stripped, 2006-12-07 09:31:48+04:00, bar@stripped +6 -1
    Adding new Q_*_CODE
    Adding "lc_time_names_number" members into Query_log_event and PRINT_EVENT_INFO

# This is a BitKeeper patch.  What follows are the unified diffs for the
# set of deltas contained in the patch.  The rest of the patch, the part
# that BitKeeper cares about, is below these diffs.
# User:	bar
# Host:	bar.intranet.mysql.r18.ru
# Root:	/usr/home/bar/mysql-5.0.b22645

--- 1.216/sql/log_event.cc	2006-12-07 09:32:02 +04:00
+++ 1.217/sql/log_event.cc	2006-12-07 09:32:02 +04:00
@@ -1088,7 +1088,8 @@ bool Query_log_event::write(IO_CACHE* fi
             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
             ], *start, *start_of_status;
   ulong event_length;
 
@@ -1200,6 +1201,13 @@ bool Query_log_event::write(IO_CACHE* fi
     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)
@@ -1264,7 +1272,8 @@ Query_log_event::Query_log_event(THD* th
    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);
@@ -1334,7 +1343,7 @@ Query_log_event::Query_log_event(const c
    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;
@@ -1435,6 +1444,10 @@ Query_log_event::Query_log_event(const c
       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\
@@ -1619,6 +1632,11 @@ void Query_log_event::print_query_header
       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;
+  }
 }
 
 
@@ -1771,6 +1789,19 @@ int Query_log_event::exec_event(struct s
           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);

--- 1.126/sql/log_event.h	2006-12-07 09:32:02 +04:00
+++ 1.127/sql/log_event.h	2006-12-07 09:32:02 +04:00
@@ -271,6 +271,8 @@ struct sql_ex_info
 */
 #define Q_CATALOG_NZ_CODE       6
 
+#define Q_LC_TIME_NAMES_CODE    7
+
 /* Intvar event post-header */
 
 #define I_TYPE_OFFSET        0
@@ -507,9 +509,11 @@ typedef struct st_print_event_info
   bool charset_inited;
   char charset[6]; // 3 variables, each of them storable in 2 bytes
   char time_zone_str[MAX_TIME_ZONE_NAME_LENGTH];
+  uint lc_time_names_number;
   st_print_event_info()
     :flags2_inited(0), sql_mode_inited(0),
-     auto_increment_increment(1),auto_increment_offset(1), charset_inited(0)
+     auto_increment_increment(1),auto_increment_offset(1), charset_inited(0),
+     lc_time_names_number(0)
     {
       /*
         Currently we only use static PRINT_EVENT_INFO objects, so zeroed at
@@ -784,6 +788,7 @@ public:
   char charset[6];
   uint time_zone_len; /* 0 means uninited */
   const char *time_zone_str;
+  uint lc_time_names_number; /* 0 means en_US */
 
 #ifndef MYSQL_CLIENT
 

--- 1.1/mysql-test/r/rpl_locale.result	2006-12-07 09:32:02 +04:00
+++ 1.2/mysql-test/r/rpl_locale.result	2006-12-07 09:32:02 +04:00
@@ -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;

--- 1.1/mysql-test/t/rpl_locale.test	2006-12-07 09:32:02 +04:00
+++ 1.2/mysql-test/t/rpl_locale.test	2006-12-07 09:32:02 +04:00
@@ -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;

--- 1.24/mysql-test/r/mysqlbinlog.result	2006-12-07 09:32:02 +04:00
+++ 1.25/mysql-test/r/mysqlbinlog.result	2006-12-07 09:32:02 +04:00
@@ -194,4 +194,24 @@ 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 table t1, t2, t03, t04, t3, t4, t5;

--- 1.33/mysql-test/t/mysqlbinlog.test	2006-12-07 09:32:02 +04:00
+++ 1.34/mysql-test/t/mysqlbinlog.test	2006-12-07 09:32:02 +04:00
@@ -134,6 +134,25 @@ 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;
+
 # clean up
 drop table t1, t2, t03, t04, t3, t4, t5; 
 

--- 1.35/mysql-test/t/disabled.def	2006-12-07 09:32:02 +04:00
+++ 1.36/mysql-test/t/disabled.def	2006-12-07 09:32:02 +04:00
@@ -11,6 +11,5 @@
 ##############################################################################
 
 ndb_load        : Bug#17233
-rpl_locale	: Bug#22645
 user_limits     : Bug#23921 random failure of user_limits.test
 
Thread
bk commit into 5.0 tree (bar:1.2312) BUG#22645bar7 Dec