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 Ordov | Chad MILLER | 23 Apr |