List:Commits« Previous MessageNext Message »
From:Jon Olav Hauglid Date:November 17 2010 4:43pm
Subject:bzr push into mysql-5.5-runtime branch (jon.hauglid:3187 to 3188)
View as plain text  
 3188 Jon Olav Hauglid	2010-11-17 [merge]
      Merge from mysql-5.5-bugteam to mysql-5.5-runtime
      No conflicts

    modified:
      cmd-line-utils/readline/bind.c
      include/m_string.h
      include/my_compiler.h
      mysql-test/r/func_math.result
      mysql-test/t/func_math.test
      mysys/default.c
      mysys/mf_keycache.c
      regex/regexec.c
      sql/debug_sync.cc
      sql/field.cc
      sql/handler.cc
      sql/slave.cc
      sql/sql_partition.cc
      storage/myisam/ft_nlq_search.c
      storage/myisammrg/myrg_open.c
      tests/mysql_client_test.c
 3187 Jon Olav Hauglid	2010-11-17
      Bug #57663 Concurrent statement using stored function and DROP DATABASE
                 breaks SBR
      
      The problem was that DROP DATABASE ignored any metadata locks on stored
      functions and procedures held by other connections. This made it
      possible for DROP DATABASE to drop functions/procedures that were in use
      by other connections and therefore break statement based replication.
      (DROP DATABASE could appear in the binlog before a statement using a
      dropped function/procedure.)
      
      This problem was an issue left unresolved by the patch for Bug#30977
      where metadata locks for stored functions/procedures were introduced.
      
      This patch fixes the problem by making sure DROP DATABASE takes
      exclusive metadata locks on all stored functions/procedures to be
      dropped.
      
      Test case added to sp-lock.test.

    modified:
      mysql-test/r/sp-lock.result
      mysql-test/t/sp-lock.test
      sql/sp.cc
      sql/sp.h
      sql/sql_db.cc
=== modified file 'cmd-line-utils/readline/bind.c'
--- a/cmd-line-utils/readline/bind.c	2009-08-28 16:21:54 +0000
+++ b/cmd-line-utils/readline/bind.c	2010-11-10 21:14:47 +0000
@@ -855,7 +855,7 @@ _rl_read_init_file (filename, include_le
 {
   register int i;
   char *buffer, *openname, *line, *end;
-  size_t file_size;
+  size_t file_size = 0;
 
   current_readline_init_file = filename;
   current_readline_init_include_level = include_level;

=== modified file 'include/m_string.h'
--- a/include/m_string.h	2010-07-23 20:17:55 +0000
+++ b/include/m_string.h	2010-11-17 09:50:19 +0000
@@ -76,7 +76,9 @@ extern "C" {
 extern void *(*my_str_malloc)(size_t);
 extern void (*my_str_free)(void *);
 
-#if defined(HAVE_STPCPY)
+#if defined(HAVE_STPCPY) && MY_GNUC_PREREQ(3, 4)
+#define strmov(A,B) __builtin_stpcpy((A),(B))
+#elif defined(HAVE_STPCPY)
 #define strmov(A,B) stpcpy((A),(B))
 #ifndef stpcpy
 extern char *stpcpy(char *, const char *);	/* For AIX with gcc 2.95.3 */

=== modified file 'include/my_compiler.h'
--- a/include/my_compiler.h	2010-10-20 18:21:40 +0000
+++ b/include/my_compiler.h	2010-11-10 21:14:47 +0000
@@ -76,6 +76,11 @@
 /**
   Generic (compiler-independent) features.
 */
+
+#ifndef MY_GNUC_PREREQ
+# define MY_GNUC_PREREQ(maj, min) (0)
+#endif
+
 #ifndef MY_ALIGNOF
 # ifdef __cplusplus
     template<typename type> struct my_alignof_helper { char m1; type m2; };

=== modified file 'mysql-test/r/func_math.result'
--- a/mysql-test/r/func_math.result	2010-10-08 09:52:09 +0000
+++ b/mysql-test/r/func_math.result	2010-11-17 15:39:35 +0000
@@ -607,3 +607,12 @@ SELECT floor(log10(format(concat_ws(5445
 as foo;
 foo
 2
+#
+# Bug #58137 char(0) column cause:
+#            my_gcvt: Assertion `width > 0 && to != ((void *)0)' failed
+#
+CREATE TABLE t1(a char(0));
+INSERT INTO t1 (SELECT -pi());
+Warnings:
+Warning	1265	Data truncated for column 'a' at row 1
+DROP TABLE t1;

=== modified file 'mysql-test/t/func_math.test'
--- a/mysql-test/t/func_math.test	2010-10-08 09:52:09 +0000
+++ b/mysql-test/t/func_math.test	2010-11-17 15:39:35 +0000
@@ -464,3 +464,11 @@ SELECT -9223372036854775808 MOD -1;
 --echo #
 SELECT floor(log10(format(concat_ws(5445796E25, 5306463, 30837), -358821)))
 as foo;
+
+--echo #
+--echo # Bug #58137 char(0) column cause:
+--echo #            my_gcvt: Assertion `width > 0 && to != ((void *)0)' failed
+--echo #
+CREATE TABLE t1(a char(0));
+INSERT INTO t1 (SELECT -pi());
+DROP TABLE t1;

=== modified file 'mysys/default.c'
--- a/mysys/default.c	2010-11-04 10:00:59 +0000
+++ b/mysys/default.c	2010-11-16 10:58:39 +0000
@@ -68,6 +68,9 @@ const char *my_defaults_file=0;
 const char *my_defaults_group_suffix=0;
 const char *my_defaults_extra_file=0;
 
+static char my_defaults_file_buffer[FN_REFLEN];
+static char my_defaults_extra_file_buffer[FN_REFLEN];
+
 static my_bool defaults_already_read= FALSE;
 
 /* Which directories are searched for options (and in which order) */
@@ -152,22 +155,19 @@ static char *remove_end_comment(char *pt
  */
 
 static int
-fn_expand(const char *filename, const char **filename_var)
+fn_expand(const char *filename, char *result_buf)
 {
-  char dir[FN_REFLEN], buf[FN_REFLEN];
+  char dir[FN_REFLEN];
   const int flags= MY_UNPACK_FILENAME | MY_SAFE_PATH | MY_RELATIVE_PATH;
-  const char *result_path= NULL;
   DBUG_ENTER("fn_expand");
-  DBUG_PRINT("enter", ("filename: %s, buf: 0x%lx", filename, (unsigned long) buf));
+  DBUG_PRINT("enter", ("filename: %s, result_buf: 0x%lx",
+                       filename, (unsigned long) result_buf));
   if (my_getwd(dir, sizeof(dir), MYF(0)))
     DBUG_RETURN(3);
   DBUG_PRINT("debug", ("dir: %s", dir));
-  if (fn_format(buf, filename, dir, NULL, flags) == NULL ||
-      (result_path= my_strdup(buf, MYF(0))) == NULL)
+  if (fn_format(result_buf, filename, dir, NULL, flags) == NULL)
     DBUG_RETURN(2);
-  DBUG_PRINT("return", ("result: %s", result_path));
-  DBUG_ASSERT(result_path != NULL);
-  *filename_var= result_path;
+  DBUG_PRINT("return", ("result: %s", result_buf));
   DBUG_RETURN(0);
 }
 
@@ -224,16 +224,18 @@ int my_search_option_files(const char *c
 
   if (forced_extra_defaults && !defaults_already_read)
   {
-    int error= fn_expand(forced_extra_defaults, &my_defaults_extra_file);
+    int error= fn_expand(forced_extra_defaults, my_defaults_extra_file_buffer);
     if (error)
       DBUG_RETURN(error);
+    my_defaults_extra_file= my_defaults_extra_file_buffer;
   }
 
   if (forced_default_file && !defaults_already_read)
   {
-    int error= fn_expand(forced_default_file, &my_defaults_file);
+    int error= fn_expand(forced_default_file, my_defaults_file_buffer);
     if (error)
       DBUG_RETURN(error);
+    my_defaults_file= my_defaults_file_buffer;
   }
 
   defaults_already_read= TRUE;

=== modified file 'mysys/mf_keycache.c'
--- a/mysys/mf_keycache.c	2010-07-23 20:15:41 +0000
+++ b/mysys/mf_keycache.c	2010-11-16 09:45:07 +0000
@@ -3963,11 +3963,11 @@ restart:
             if (!(block->status & (BLOCK_IN_EVICTION | BLOCK_IN_SWITCH |
                                    BLOCK_REASSIGNED)))
             {
-              struct st_hash_link *next_hash_link;
-              my_off_t            next_diskpos;
-              File                next_file;
-              uint                next_status;
-              uint                hash_requests;
+              struct st_hash_link *UNINIT_VAR(next_hash_link);
+              my_off_t UNINIT_VAR(next_diskpos);
+              File UNINIT_VAR(next_file);
+              uint UNINIT_VAR(next_status);
+              uint UNINIT_VAR(hash_requests);
 
               total_found++;
               found++;

=== modified file 'regex/regexec.c'
--- a/regex/regexec.c	2007-03-28 17:46:42 +0000
+++ b/regex/regexec.c	2010-11-10 21:14:47 +0000
@@ -117,6 +117,7 @@ size_t nmatch;
 my_regmatch_t pmatch[];
 int eflags;
 {
+	char *pstr = (char *) str;
 	register struct re_guts *g = preg->re_g;
 #ifdef REDEBUG
 #	define	GOODFLAGS(f)	(f)
@@ -133,7 +134,7 @@ int eflags;
 
 	if ((size_t) g->nstates <= CHAR_BIT*sizeof(states1) &&
 	    !(eflags&REG_LARGE))
-		return(smatcher(preg->charset, g, (char *)str, nmatch, pmatch, eflags));
+		return(smatcher(preg->charset, g, pstr, nmatch, pmatch, eflags));
 	else
-		return(lmatcher(preg->charset, g, (char *)str, nmatch, pmatch, eflags));
+		return(lmatcher(preg->charset, g, pstr, nmatch, pmatch, eflags));
 }

=== modified file 'sql/debug_sync.cc'
--- a/sql/debug_sync.cc	2010-07-08 21:20:08 +0000
+++ b/sql/debug_sync.cc	2010-11-16 09:45:07 +0000
@@ -1691,7 +1691,7 @@ static void debug_sync_execute(THD *thd,
 
   if (action->execute)
   {
-    const char  *old_proc_info;
+    const char *UNINIT_VAR(old_proc_info);
 
     action->execute--;
 

=== modified file 'sql/field.cc'
--- a/sql/field.cc	2010-10-29 09:35:07 +0000
+++ b/sql/field.cc	2010-11-17 15:39:35 +0000
@@ -6327,10 +6327,13 @@ int Field_str::store(double nr)
   ASSERT_COLUMN_MARKED_FOR_WRITE;
   char buff[DOUBLE_TO_STRING_CONVERSION_BUFFER_SIZE];
   uint local_char_length= field_length / charset()->mbmaxlen;
-  size_t length;
-  my_bool error;
+  size_t length= 0;
+  my_bool error= (local_char_length == 0);
+
+  // my_gcvt() requires width > 0, and we may have a CHAR(0) column.
+  if (!error)
+    length= my_gcvt(nr, MY_GCVT_ARG_DOUBLE, local_char_length, buff, &error);
 
-  length= my_gcvt(nr, MY_GCVT_ARG_DOUBLE, local_char_length, buff, &error);
   if (error)
   {
     if (table->in_use->abort_on_warning)

=== modified file 'sql/handler.cc'
--- a/sql/handler.cc	2010-11-11 17:11:05 +0000
+++ b/sql/handler.cc	2010-11-17 16:42:28 +0000
@@ -4184,7 +4184,7 @@ int handler::read_multi_range_first(KEY_
 */
 int handler::read_multi_range_next(KEY_MULTI_RANGE **found_range_p)
 {
-  int result;
+  int UNINIT_VAR(result);
   DBUG_ENTER("handler::read_multi_range_next");
 
   /* We should not be called after the last call returned EOF. */

=== modified file 'sql/slave.cc'
--- a/sql/slave.cc	2010-10-22 11:58:09 +0000
+++ b/sql/slave.cc	2010-11-17 16:42:28 +0000
@@ -2521,7 +2521,7 @@ static int exec_relay_log_event(THD* thd
 
     if (slave_trans_retries)
     {
-      int temp_err;
+      int UNINIT_VAR(temp_err);
       if (exec_res && (temp_err= has_temporary_error(thd)))
       {
         const char *errmsg;

=== modified file 'sql/sql_partition.cc'
--- a/sql/sql_partition.cc	2010-11-05 13:16:27 +0000
+++ b/sql/sql_partition.cc	2010-11-16 09:45:07 +0000
@@ -7484,8 +7484,8 @@ int get_part_iter_for_interval_via_mappi
                                            PARTITION_ITERATOR *part_iter)
 {
   Field *field= part_info->part_field_array[0];
-  uint32             max_endpoint_val;
-  get_endpoint_func  get_endpoint;
+  uint32             UNINIT_VAR(max_endpoint_val);
+  get_endpoint_func  UNINIT_VAR(get_endpoint);
   bool               can_match_multiple_values;  /* is not '=' */
   uint field_len= field->pack_length_in_rec();
   DBUG_ENTER("get_part_iter_for_interval_via_mapping");

=== modified file 'storage/myisam/ft_nlq_search.c'
--- a/storage/myisam/ft_nlq_search.c	2010-07-23 20:16:29 +0000
+++ b/storage/myisam/ft_nlq_search.c	2010-11-16 09:45:07 +0000
@@ -63,7 +63,7 @@ static int FT_SUPERDOC_cmp(void* cmp_arg
 
 static int walk_and_match(FT_WORD *word, uint32 count, ALL_IN_ONE *aio)
 {
-  int	       subkeys, r;
+  int	       UNINIT_VAR(subkeys), r;
   uint	       keylen, doc_cnt;
   FT_SUPERDOC  sdoc, *sptr;
   TREE_ELEMENT *selem;

=== modified file 'storage/myisammrg/myrg_open.c'
--- a/storage/myisammrg/myrg_open.c	2010-07-20 19:30:10 +0000
+++ b/storage/myisammrg/myrg_open.c	2010-11-16 09:45:07 +0000
@@ -220,7 +220,7 @@ MYRG_INFO *myrg_parent_open(const char *
                             int (*callback)(void*, const char*),
                             void *callback_param)
 {
-  MYRG_INFO *m_info;
+  MYRG_INFO *UNINIT_VAR(m_info);
   int       rc;
   int       errpos;
   int       save_errno;

=== modified file 'tests/mysql_client_test.c'
--- a/tests/mysql_client_test.c	2010-11-16 09:05:19 +0000
+++ b/tests/mysql_client_test.c	2010-11-17 16:42:28 +0000
@@ -1199,7 +1199,7 @@ my_bool fetch_n(const char **query_list,
 
 /* Separate thread query to test some cases */
 
-static my_bool thread_query(char *query)
+static my_bool thread_query(const char *query)
 {
   MYSQL *l_mysql;
   my_bool error;
@@ -1221,7 +1221,7 @@ static my_bool thread_query(char *query)
     goto end;
   }
   l_mysql->reconnect= 1;
-  if (mysql_query(l_mysql, (char *)query))
+  if (mysql_query(l_mysql, query))
   {
      fprintf(stderr, "Query failed (%s)\n", mysql_error(l_mysql));
      error= 1;
@@ -6447,7 +6447,7 @@ static void test_prepare_alter()
   rc= mysql_stmt_execute(stmt);
   check_execute(stmt, rc);
 
-  if (thread_query((char *)"ALTER TABLE test_prep_alter change id id_new varchar(20)"))
+  if (thread_query("ALTER TABLE test_prep_alter change id id_new varchar(20)"))
     exit(1);
 
   is_null= 1;

No bundle (reason: useless for push emails).
Thread
bzr push into mysql-5.5-runtime branch (jon.hauglid:3187 to 3188) Jon Olav Hauglid17 Nov