List:Commits« Previous MessageNext Message »
From:Chad MILLER Date:April 23 2007 11:58pm
Subject:bk commit into 5.1 tree (cmiller:1.2620) BUG#Contributed patch from Jorge Bernal Ordová27894
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of cmiller. When cmiller 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, 2007-04-23 17:58:33-04:00, cmiller@stripped +3 -0
  Contributed patch from Jorge Bernal Ordovás.  CLA#42
  
  Bug#27894: mysqlbinlog formats timestamp wrong in comment
  
  Date stamps lack zero padding, and so are meaningless.
  
  Implement minimum-width zero padding for the percent-escape sequences
  used in the logging code.

  mysql-test/r/mysqlbinlog2.result@stripped, 2007-04-23 17:58:31-04:00,
cmiller@stripped +26 -0
    Include the long form, so we notice that it may be broken.  Replace
    away specific elements that vary from run to run.

  mysql-test/t/mysqlbinlog2.test@stripped, 2007-04-23 17:58:31-04:00,
cmiller@stripped +2 -1
    Include the long form, so we notice that it may be broken.  Replace
    away specific elements that vary from run to run.

  mysys/mf_iocache2.c@stripped, 2007-04-23 17:58:31-04:00, cmiller@stripped +35 -3
    Implement minimum-width padding for printf-style percent-expressions.

# 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:	cmiller
# Host:	zippy.cornsilk.net
# Root:	/home/cmiller/work/mysql/mysql-5.1-new-maint--bug27894

--- 1.13/mysql-test/r/mysqlbinlog2.result	2007-04-05 15:34:30 -04:00
+++ 1.14/mysql-test/r/mysqlbinlog2.result	2007-04-23 17:58:31 -04:00
@@ -18,7 +18,11 @@ insert into t1 values(null, "f");
 /*!40019 SET @@session.max_insert_delayed_threads=0*/;
 /*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;
 DELIMITER /*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos} 	Start: binlog v 4, server v
5.1.18-beta-debug-log created {yymmdd} {HH:MM:SS} at startup
 ROLLBACK/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos}
	Query	thread_id={integer}	exec_time={integer}	error_code=0
 use test/*!*/;
 SET TIMESTAMP=1579609942/*!*/;
 SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=1,
@@session.unique_checks=1/*!*/;
@@ -26,21 +30,43 @@ SET @@session.sql_mode=0/*!*/;
 /*!\C latin1 *//*!*/;
 SET
@@session.character_set_client=8,@@session.collation_connection=8,@@session.collation_server=8/*!*/;
 create table t1 (a int auto_increment not null primary key, b char(3))/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos} 	Intvar
 SET INSERT_ID=1/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos}
	Query	thread_id={integer}	exec_time={integer}	error_code=0
 SET TIMESTAMP=1579609942/*!*/;
 insert into t1 values(null, "a")/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos} 	Intvar
 SET INSERT_ID=2/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos}
	Query	thread_id={integer}	exec_time={integer}	error_code=0
 SET TIMESTAMP=1579609942/*!*/;
 insert into t1 values(null, "b")/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos} 	Intvar
 SET INSERT_ID=3/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos}
	Query	thread_id={integer}	exec_time={integer}	error_code=0
 SET TIMESTAMP=1579609944/*!*/;
 insert into t1 values(null, "c")/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos} 	Intvar
 SET INSERT_ID=4/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos}
	Query	thread_id={integer}	exec_time={integer}	error_code=0
 SET TIMESTAMP=1579609946/*!*/;
 insert into t1 values(null, "d")/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos} 	Intvar
 SET INSERT_ID=5/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos}
	Query	thread_id={integer}	exec_time={integer}	error_code=0
 SET TIMESTAMP=1579609946/*!*/;
 insert into t1 values(null, "e")/*!*/;
+# at {pos}
+#{yymmdd} {HH:MM:SS} server id 1  end_log_pos {pos} 	Rotate to master-bin.000002  pos:
{pos}
 DELIMITER ;
 # End of log file
 ROLLBACK /* added by mysqlbinlog */;

--- 1.15/mysql-test/t/mysqlbinlog2.test	2007-04-05 15:34:30 -04:00
+++ 1.16/mysql-test/t/mysqlbinlog2.test	2007-04-23 17:58:31 -04:00
@@ -43,7 +43,8 @@ select "--- Local --" as "";
 # be time dependent (the Start events). Better than nothing.
 #
 
---exec $MYSQL_BINLOG --short-form $MYSQLTEST_VARDIR/log/master-bin.000001 
+--replace_regex /[[:<:]][0-9]{6} [0-9 ][0-9]:[0-9]{2}:[0-9]{2}[[:>:]]/{yymmdd}
{HH:MM:SS}/  /=[0-9]+	/={integer}	/  /# at [0-9]+/# at {pos}/  /(pos:?) [0-9]+/\1 {pos}/
+--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000001 
 
 --disable_query_log
 select "--- offset --" as "";

--- 1.33/mysys/mf_iocache2.c	2007-02-24 05:43:10 -05:00
+++ 1.34/mysys/mf_iocache2.c	2007-04-23 17:58:31 -04:00
@@ -299,6 +299,7 @@ uint my_b_vprintf(IO_CACHE *info, const 
   uint minimum_width; /* as yet unimplemented */
   uint minimum_width_sign;
   uint precision; /* as yet unimplemented for anything but %b */
+  my_bool is_zero_padded;
 
   /*
     Store the location of the beginning of a format directive, for the
@@ -334,11 +335,27 @@ uint my_b_vprintf(IO_CACHE *info, const 
     backtrack= fmt;
     fmt++;
 
+    is_zero_padded= FALSE;
+    minimum_width_sign= 1;
     minimum_width= 0;
     precision= 0;
-    minimum_width_sign= 1;
     /* Skip if max size is used (to be compatible with printf) */
-    while (*fmt == '-') { fmt++; minimum_width_sign= -1; }
+
+process_flags:
+    switch (*fmt)
+    {
+      case '-': 
+        minimum_width_sign= -1; fmt++; goto process_flags;
+      case '0':
+        is_zero_padded= TRUE; fmt++; goto process_flags;
+      case '#':
+        /** @todo Implement "#" conversion flag. */  fmt++; goto process_flags;
+      case ' ':
+        /** @todo Implement " " conversion flag. */  fmt++; goto process_flags;
+      case '+':
+        /** @todo Implement "+" conversion flag. */  fmt++; goto process_flags;
+    }
+
     if (*fmt == '*') {
       precision= (int) va_arg(args, int);
       fmt++;
@@ -367,7 +384,7 @@ uint my_b_vprintf(IO_CACHE *info, const 
     {
       reg2 char *par = va_arg(args, char *);
       uint length2 = (uint) strlen(par);
-      /* TODO: implement minimum width and precision */
+      /* TODO: implement precision */
       out_length+= length2;
       if (my_b_write(info, par, length2))
 	goto err;
@@ -390,6 +407,21 @@ uint my_b_vprintf(IO_CACHE *info, const 
 	length2= (uint) (int10_to_str((long) iarg,buff, -10) - buff);
       else
 	length2= (uint) (int10_to_str((long) (uint) iarg,buff,10)- buff);
+
+      /* minimum width padding */
+      if (minimum_width > length2) 
+      {
+        char *buffz;
+                    
+        buffz= my_alloca(minimum_width - length2);
+        if (is_zero_padded)
+          memset(buffz, '0', minimum_width - length2);
+        else
+          memset(buffz, ' ', minimum_width - length2);
+        my_b_write(info, buffz, minimum_width - length2);
+        my_afree(buffz);
+      }
+
       out_length+= length2;
       if (my_b_write(info, buff, length2))
 	goto err;
Thread
bk commit into 5.1 tree (cmiller:1.2620) BUG#Contributed patch from Jorge Bernal OrdovChad MILLER23 Apr