List:Commits« Previous MessageNext Message »
From:Bjorn Munch Date:November 9 2011 1:49pm
Subject:bzr push into mysql-trunk branch (bjorn.munch:3580 to 3582)
View as plain text  
 3582 Bjorn Munch	2011-11-09 [merge]
      null upmerge

 3581 Bjorn Munch	2011-11-09 [merge]
      merge trunk-mtr => trunk

    modified:
      client/mysqltest.cc
      mysql-test/extra/binlog_tests/ctype_ucs_binlog.test
      mysql-test/include/wait_for_slave_io_error.inc
      mysql-test/r/mysqltest.result
      mysql-test/suite/rpl/r/rpl_packet.result
      mysql-test/suite/rpl/t/rpl_packet.test
      mysql-test/t/mysqltest.test
 3580 Raghav Kapoor	2011-11-09
      BUG#13247871 - ER_EVENT_CANNOT_ALTER_IN_THE_PAST HAS WRONG MESSAGE 
      
      BACKGROUND:
      ALTER EVENT, produces the *error* ER_EVENT_CANNOT_ALTER_IN_THE_PAST, 
      but the message is wrong. The message string is the exact 
      same as for the CREATE EVENT warning: "Event execution
      time is in the past and ON COMPLETION NOT PRESERVE is set.
      The event was dropped immediately after creation."
      
      FIX:
      The error message for ER_EVENT_CANNOT_ALTER_IN_THE_PAST has
      been updated and says like this 
      "Event execution time is in the past and ON COMPLETION NOT PRESERVE 
      is set.The event was not changed. Specify a time in the future."

    modified:
      mysql-test/r/events_2.result
      mysql-test/r/events_bugs.result
      sql/share/errmsg-utf8.txt
=== modified file 'client/mysqltest.cc'
--- a/client/mysqltest.cc	2011-10-28 12:45:35 +0000
+++ b/client/mysqltest.cc	2011-11-08 15:01:50 +0000
@@ -516,6 +516,31 @@ struct st_command *curr_command= 0;
 
 char builtin_echo[FN_REFLEN];
 
+struct st_replace_regex
+{
+DYNAMIC_ARRAY regex_arr; /* stores a list of st_regex subsitutions */
+
+/*
+Temporary storage areas for substitutions. To reduce unnessary copying
+and memory freeing/allocation, we pre-allocate two buffers, and alternate
+their use, one for input/one for output, the roles changing on the next
+st_regex substition. At the end of substitutions  buf points to the
+one containing the final result.
+*/
+char* buf;
+char* even_buf;
+char* odd_buf;
+int even_buf_len;
+int odd_buf_len;
+};
+
+struct st_replace_regex *glob_replace_regex= 0;
+
+struct st_replace;
+struct st_replace *glob_replace= 0;
+void replace_strings_append(struct st_replace *rep, DYNAMIC_STRING* ds,
+const char *from, int len);
+
 static void cleanup_and_exit(int exit_code) __attribute__((noreturn));
 
 void die(const char *fmt, ...)
@@ -545,6 +570,7 @@ void str_to_file2(const char *fname, cha
 
 void fix_win_paths(const char *val, int len);
 const char *get_errname_from_code (uint error_code);
+int multi_reg_replace(struct st_replace_regex* r,char* val);
 
 #ifdef __WIN__
 void free_tmp_sh_file();
@@ -2453,7 +2479,23 @@ void var_query_set(VAR *var, const char
       if (row[i])
       {
         /* Add column to tab separated string */
-	dynstr_append_mem(&result, row[i], lengths[i]);
+	char *val= row[i];
+	int len= lengths[i];
+	
+	if (glob_replace_regex)
+	{
+	  /* Regex replace */
+	  if (!multi_reg_replace(glob_replace_regex, (char*)val))
+	  {
+	    val= glob_replace_regex->buf;
+	    len= strlen(val);
+	  }
+	}
+	
+	if (glob_replace)
+	  replace_strings_append(glob_replace, &result, val, len);
+	else
+	  dynstr_append_mem(&result, val, len);
       }
       dynstr_append_mem(&result, "\t", 1);
     }
@@ -3332,8 +3374,9 @@ void do_copy_file(struct st_command *com
                      ' ');
 
   DBUG_PRINT("info", ("Copy %s to %s", ds_from_file.str, ds_to_file.str));
+  /* MY_HOLD_ORIGINAL_MODES prevents attempts to chown the file */
   error= (my_copy(ds_from_file.str, ds_to_file.str,
-                  MYF(MY_DONT_OVERWRITE_FILE)) != 0);
+                  MYF(MY_DONT_OVERWRITE_FILE | MY_HOLD_ORIGINAL_MODES)) != 0);
   handle_command_error(command, error);
   dynstr_free(&ds_from_file);
   dynstr_free(&ds_to_file);
@@ -9226,16 +9269,11 @@ typedef struct st_pointer_array {		/* wh
   uint	array_allocs,max_count,length,max_length;
 } POINTER_ARRAY;
 
-struct st_replace;
 struct st_replace *init_replace(char * *from, char * *to, uint count,
 				char * word_end_chars);
 int insert_pointer_name(reg1 POINTER_ARRAY *pa,char * name);
-void replace_strings_append(struct st_replace *rep, DYNAMIC_STRING* ds,
-                            const char *from, int len);
 void free_pointer_array(POINTER_ARRAY *pa);
 
-struct st_replace *glob_replace;
-
 /*
   Get arguments for replace. The syntax is:
   replace from to [from to ...]
@@ -9379,26 +9417,6 @@ struct st_regex
   int icase; /* true if the match is case insensitive */
 };
 
-struct st_replace_regex
-{
-  DYNAMIC_ARRAY regex_arr; /* stores a list of st_regex subsitutions */
-
-  /*
-    Temporary storage areas for substitutions. To reduce unnessary copying
-    and memory freeing/allocation, we pre-allocate two buffers, and alternate
-    their use, one for input/one for output, the roles changing on the next
-    st_regex substition. At the end of substitutions  buf points to the
-    one containing the final result.
-  */
-  char* buf;
-  char* even_buf;
-  char* odd_buf;
-  int even_buf_len;
-  int odd_buf_len;
-};
-
-struct st_replace_regex *glob_replace_regex= 0;
-
 int reg_replace(char** buf_p, int* buf_len_p, char *pattern, char *replace,
                 char *string, int icase);
 
@@ -9597,7 +9615,13 @@ void do_get_replace_regex(struct st_comm
 {
   char *expr= command->first_argument;
   free_replace_regex();
-  if (!(glob_replace_regex=init_replace_regex(expr)))
+  /* Allow variable for the *entire* list of replacements */
+  if (*expr == '$') 
+  {
+    VAR *val= var_get(expr, NULL, 0, 1);
+    expr= val ? val->str_val : NULL;
+  }
+  if (expr && *expr && !(glob_replace_regex=init_replace_regex(expr)))
     die("Could not init replace_regex");
   command->last_argument= command->end;
 }

=== modified file 'mysql-test/extra/binlog_tests/ctype_ucs_binlog.test'
--- a/mysql-test/extra/binlog_tests/ctype_ucs_binlog.test	2007-12-12 17:19:24 +0000
+++ b/mysql-test/extra/binlog_tests/ctype_ucs_binlog.test	2011-11-09 08:58:18 +0000
@@ -15,7 +15,6 @@ source include/show_binlog_events.inc;
 # absolutely need variables names to be quoted and strings to be
 # escaped).
 flush logs;
---replace_result $MYSQL_TEST_DIR MYSQL_TEST_DIR
 let $MYSQLD_DATADIR= `select @@datadir`;
 --exec $MYSQL_BINLOG --short-form $MYSQLD_DATADIR/master-bin.000001 
 drop table t2;

=== modified file 'mysql-test/include/wait_for_slave_io_error.inc'
--- a/mysql-test/include/wait_for_slave_io_error.inc	2011-02-07 15:31:01 +0000
+++ b/mysql-test/include/wait_for_slave_io_error.inc	2011-11-08 15:01:50 +0000
@@ -33,6 +33,10 @@
 #     (e.g., temporary connection error) and does not cause the slave
 #     IO thread to stop.
 # 
+#   $slave_io_error_replace
+#     If set, one or more regex patterns for replacing variable
+#     text in the error message. Syntax as --replace-regex
+#
 #   $slave_timeout
 #     See include/wait_for_slave_param.inc
 # 
@@ -72,6 +76,7 @@ if ($show_slave_io_error)
 {
   --let $_wait_for_slave_io_error_error= query_get_value("SHOW SLAVE STATUS", Last_IO_Error, 1)
   # remove timestamp and mask absolute path
+  --replace_regex $slave_io_error_replace
   --let $_wait_for_slave_io_error_error= `SELECT REPLACE("$_wait_for_slave_io_error_error", '$MYSQL_TEST_DIR', 'MYSQL_TEST_DIR')`
   --echo Last_IO_Error = '$_wait_for_slave_io_error_error'
 }

=== modified file 'mysql-test/r/mysqltest.result'
--- a/mysql-test/r/mysqltest.result	2011-10-19 07:29:57 +0000
+++ b/mysql-test/r/mysqltest.result	2011-11-08 15:01:50 +0000
@@ -548,6 +548,7 @@ mysqltest: At line 1: Wrong column numbe
 select "LONG_STRING" as x;
 x
 LONG_STRING
+dog
 mysqltest: At line 1: Invalid integer argument "10!"
 mysqltest: At line 1: Invalid integer argument "a"
 mysqltest: At line 1: Missing required argument 'connection name' to command 'connect'
@@ -661,6 +662,11 @@ a	D
 1	1
 1	4
 drop table t1;
+y
+txt
+b is b and more is more
+txt
+a is a and less is more
 create table t2 ( a char(10));
 garbage;
 ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'garbage' at line 1

=== modified file 'mysql-test/suite/rpl/r/rpl_packet.result'
--- a/mysql-test/suite/rpl/r/rpl_packet.result	2011-10-28 21:22:19 +0000
+++ b/mysql-test/suite/rpl/r/rpl_packet.result	2011-11-08 15:01:50 +0000
@@ -37,6 +37,7 @@ DROP TABLE t1;
 CREATE TABLE t1 (f1 int PRIMARY KEY, f2 LONGTEXT, f3 LONGTEXT) ENGINE=MyISAM;
 INSERT INTO t1(f1, f2, f3) VALUES(1, REPEAT('a', @@global.max_allowed_packet), REPEAT('b', @@global.max_allowed_packet));
 include/wait_for_slave_io_error.inc [errno=1236]
+Last_IO_Error = 'Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the last event was read from 'master-bin.000001' at XXX, the last byte read was read from 'master-bin.000001' at XXX.''
 STOP SLAVE;
 RESET SLAVE;
 RESET MASTER;

=== modified file 'mysql-test/suite/rpl/t/rpl_packet.test'
--- a/mysql-test/suite/rpl/t/rpl_packet.test	2011-10-28 21:22:19 +0000
+++ b/mysql-test/suite/rpl/t/rpl_packet.test	2011-11-08 15:01:50 +0000
@@ -144,12 +144,8 @@ connection slave;
 # The slave I/O thread must stop after receiving
 # 1236=ER_MASTER_FATAL_ERROR_READING_BINLOG error message from master.
 --let $slave_io_errno= 1236
-#
-# Win and Unix path is printed differently: BUG#13055685. So
-# show_slave_io_error is made 0 until the bug fixes provide necessary
-# facilities
-#
---let $show_slave_io_error= 0
+# Mask line numbers, and whether master-bin is preceded by "./" or "."
+--let $slave_io_error_replace= / at [0-9]*/ at XXX/ /\.\/*master-bin/master-bin/
 --source include/wait_for_slave_io_error.inc
 
 # Remove the bad binlog and clear error status on slave.

=== modified file 'mysql-test/t/mysqltest.test'
--- a/mysql-test/t/mysqltest.test	2011-10-19 07:29:57 +0000
+++ b/mysql-test/t/mysqltest.test	2011-11-08 15:01:50 +0000
@@ -1735,6 +1735,12 @@ let $long_rep= $long_rep,$long_rep;
 --replace_result $long_rep LONG_STRING
 eval select "$long_rep" as x;
 
+# Test replace within ``
+
+--replace_result cat dog
+--let $animal= `select "cat" as pet`
+--echo $animal
+
 # ----------------------------------------------------------------------------
 # Test sync_with_master
 # ----------------------------------------------------------------------------
@@ -2055,6 +2061,23 @@ insert into t1 values (2,4);
 select * from t1;
 drop table t1;
 
+# Test usage with ``
+
+--replace_regex /x/y/
+--let $result= `select "x" as col`
+--echo $result
+
+# Test usage with a variable as pattern list
+
+--disable_query_log
+--let $patt= /a /b / /less/more/
+--replace_regex $patt
+select "a is a and less is more" as txt;
+--let $patt=
+--replace_regex $patt
+select "a is a and less is more" as txt;
+--enable_query_log
+
 #-------------------------------------------------------------------------
 # BUG #11754855 : Passing variable to --error  
 #-------------------------------------------------------------------------

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-trunk branch (bjorn.munch:3580 to 3582) Bjorn Munch11 Nov