List:Commits« Previous MessageNext Message »
From:Mats Kindahl Date:December 11 2006 10:57am
Subject:bk commit into 5.1 tree (mats:1.2359)
View as plain text  
Below is the list of changes that have just been committed into a local
5.1 repository of mats. When mats 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-11 11:57:33+01:00, mats@romeo.(none) +3 -0
  Merge romeo.(none):/home/bkroot/mysql-5.1-new-rpl
  into  romeo.(none):/home/bk/b24490-mysql-5.1-new-rpl
  MERGE: 1.2303.171.1

  sql/field.cc@stripped, 2006-12-11 11:57:28+01:00, mats@romeo.(none) +0 -0
    SCCS merged
    MERGE: 1.352.3.1

  sql/field.h@stripped, 2006-12-11 11:37:51+01:00, mats@romeo.(none) +0 -0
    Auto merged
    MERGE: 1.190.6.1

  sql/log_event.cc@stripped, 2006-12-11 11:37:51+01:00, mats@romeo.(none) +0 -1
    Auto merged
    MERGE: 1.254.1.4

# 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:	mats
# Host:	romeo.(none)
# Root:	/home/bk/b24490-mysql-5.1-new-rpl/RESYNC

--- 1.359/sql/field.cc	2006-12-11 11:57:44 +01:00
+++ 1.360/sql/field.cc	2006-12-11 11:57:44 +01:00
@@ -8523,10 +8523,12 @@
 
 void Field_bit::set_default()
 {
-  my_ptrdiff_t const offset= (my_ptrdiff_t) (table->s->default_values -
-                                             table->record[0]);
-  uchar bits= (uchar) get_rec_bits(bit_ptr + offset, bit_ofs, bit_len);
-  set_rec_bits(bits, bit_ptr, bit_ofs, bit_len);
+  if (bit_len > 0)
+  {
+    my_ptrdiff_t const offset= table->s->default_values - table->record[0];
+    uchar bits= get_rec_bits(bit_ptr + offset, bit_ofs, bit_len);
+    set_rec_bits(bits, bit_ptr, bit_ofs, bit_len);
+  }
   Field::set_default();
 }
 

--- 1.196/sql/field.h	2006-12-11 11:57:44 +01:00
+++ 1.197/sql/field.h	2006-12-11 11:57:44 +01:00
@@ -1491,6 +1491,13 @@
 };
 
 
+/**
+  BIT field represented as chars for non-MyISAM tables.
+
+  @todo The inheritance relationship is backwards since Field_bit is
+  an extended version of Field_bit_as_char and not the other way
+  around. Hence, we should refactor it to fix the hierarchy order.
+ */
 class Field_bit_as_char: public Field_bit {
 public:
   Field_bit_as_char(char *ptr_arg, uint32 len_arg, uchar *null_ptr_arg,

--- 1.255/sql/log_event.cc	2006-12-11 11:57:44 +01:00
+++ 1.256/sql/log_event.cc	2006-12-11 11:57:44 +01:00
@@ -846,7 +846,7 @@
                         LOG_EVENT_MINIMAL_HEADER_LEN);
 
   LOCK_MUTEX;
-  DBUG_PRINT("info", ("my_b_tell=%lu", my_b_tell(file)));
+  DBUG_PRINT("info", ("my_b_tell: %lu", (ulong) my_b_tell(file)));
   if (my_b_read(file, (byte *) head, header_size))
   {
     DBUG_PRINT("info", ("Log_event::read_log_event(IO_CACHE*,Format_desc*) \
@@ -994,7 +994,7 @@
   case FORMAT_DESCRIPTION_EVENT:
     ev = new Format_description_log_event(buf, event_len, description_event); 
     break;
-#if defined(HAVE_REPLICATION) && defined(HAVE_ROW_BASED_REPLICATION)
+#if defined(HAVE_REPLICATION) 
   case WRITE_ROWS_EVENT:
     ev = new Write_rows_log_event(buf, event_len, description_event);
     break;
@@ -1162,11 +1162,11 @@
                              bool more)
 {
   const uchar *ptr= (const uchar *)temp_buf;
-  my_off_t size= uint4korr(ptr + EVENT_LEN_OFFSET);
+  uint32 size= uint4korr(ptr + EVENT_LEN_OFFSET);
 
   DBUG_ENTER("Log_event::print_base64");
 
-  size_t const tmp_str_sz= base64_needed_encoded_length(size);
+  size_t const tmp_str_sz= base64_needed_encoded_length((int) size);
   char *const tmp_str= (char *) my_malloc(tmp_str_sz, MYF(MY_WME));
   if (!tmp_str) {
     fprintf(stderr, "\nError: Out of memory. "
@@ -1174,7 +1174,7 @@
     DBUG_VOID_RETURN;
   }
 
-  int const res= base64_encode(ptr, size, tmp_str);
+  int const res= base64_encode(ptr, (size_t) size, tmp_str);
   DBUG_ASSERT(res == 0);
 
   if (my_b_tell(file) == 0)
@@ -1183,7 +1183,7 @@
   my_b_printf(file, "%s\n", tmp_str);
 
   if (!more)
-    my_b_printf(file, "';\n");
+    my_b_printf(file, "'%s\n", print_event_info->delimiter);
 
   my_free(tmp_str, MYF(0));
   DBUG_VOID_RETURN;
@@ -1499,7 +1499,8 @@
   }
   else
     time_zone_len= 0;
-  DBUG_PRINT("info",("Query_log_event has flags2=%lu sql_mode=%lu",flags2,sql_mode));
+  DBUG_PRINT("info",("Query_log_event has flags2: %lu  sql_mode: %lu",
+                     (ulong) flags2, sql_mode));
 }
 #endif /* MYSQL_CLIENT */
 
@@ -1547,7 +1548,7 @@
 
   common_header_len= description_event->common_header_len;
   post_header_len= description_event->post_header_len[event_type-1];
-  DBUG_PRINT("info",("event_len=%ld, common_header_len=%d, post_header_len=%d",
+  DBUG_PRINT("info",("event_len: %u  common_header_len: %d  post_header_len: %d",
                      event_len, common_header_len, post_header_len));
   
   /*
@@ -1595,7 +1596,7 @@
     case Q_FLAGS2_CODE:
       flags2_inited= 1;
       flags2= uint4korr(pos);
-      DBUG_PRINT("info",("In Query_log_event, read flags2: %lu", flags2));
+      DBUG_PRINT("info",("In Query_log_event, read flags2: %lu", (ulong) flags2));
       pos+= 4;
       break;
     case Q_SQL_MODE_CODE:
@@ -1708,15 +1709,16 @@
     if (different_db= memcmp(print_event_info->db, db, db_len + 1))
       memcpy(print_event_info->db, db, db_len + 1);
     if (db[0] && different_db) 
-      my_b_printf(file, "use %s;\n", db);
+      my_b_printf(file, "use %s%s\n", db, print_event_info->delimiter);
   }
 
   end=int10_to_str((long) when, strmov(buff,"SET TIMESTAMP="),10);
-  *end++=';';
+  end= strmov(end, print_event_info->delimiter);
   *end++='\n';
   my_b_write(file, (byte*) buff, (uint) (end-buff));
   if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
-    my_b_printf(file,"SET @@session.pseudo_thread_id=%lu;\n",(ulong)thread_id);
+    my_b_printf(file,"SET @@session.pseudo_thread_id=%lu%s\n",
+                (ulong)thread_id, print_event_info->delimiter);
 
   /*
     If flags2_inited==0, this is an event from 3.23 or 4.0; nothing to
@@ -1745,7 +1747,7 @@
                    "@@session.sql_auto_is_null", &need_comma);
       print_set_option(file, tmp, OPTION_RELAXED_UNIQUE_CHECKS, ~flags2,
                    "@@session.unique_checks", &need_comma);
-      my_b_printf(file,";\n");
+      my_b_printf(file,"%s\n", print_event_info->delimiter);
       print_event_info->flags2= flags2;
     }
   }
@@ -1773,15 +1775,17 @@
     }
     if (unlikely(print_event_info->sql_mode != sql_mode))
     {
-      my_b_printf(file,"SET @@session.sql_mode=%lu;\n",(ulong)sql_mode);
+      my_b_printf(file,"SET @@session.sql_mode=%lu%s\n",
+                  (ulong)sql_mode, print_event_info->delimiter);
       print_event_info->sql_mode= sql_mode;
     }
   }
   if (print_event_info->auto_increment_increment != auto_increment_increment ||
       print_event_info->auto_increment_offset != auto_increment_offset)
   {
-    my_b_printf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu;\n",
-            auto_increment_increment,auto_increment_offset);
+    my_b_printf(file,"SET @@session.auto_increment_increment=%lu, @@session.auto_increment_offset=%lu%s\n",
+                auto_increment_increment,auto_increment_offset,
+                print_event_info->delimiter);
     print_event_info->auto_increment_increment= auto_increment_increment;
     print_event_info->auto_increment_offset=    auto_increment_offset;
   }
@@ -1801,16 +1805,18 @@
       if (cs_info)
       {
         /* for mysql client */
-        my_b_printf(file, "/*!\\C %s */;\n", cs_info->csname);
+        my_b_printf(file, "/*!\\C %s */%s\n",
+                    cs_info->csname, print_event_info->delimiter);
       }
       my_b_printf(file,"SET "
                   "@@session.character_set_client=%d,"
                   "@@session.collation_connection=%d,"
                   "@@session.collation_server=%d"
-                  ";\n",
+                  "%s\n",
                   uint2korr(charset),
                   uint2korr(charset+2),
-                  uint2korr(charset+4));
+                  uint2korr(charset+4),
+                  print_event_info->delimiter);
       memcpy(print_event_info->charset, charset, 6);
     }
   }
@@ -1818,7 +1824,8 @@
   {
     if (bcmp(print_event_info->time_zone_str, time_zone_str, time_zone_len+1))
     {
-      my_b_printf(file,"SET @@session.time_zone='%s';\n", time_zone_str);
+      my_b_printf(file,"SET @@session.time_zone='%s'%s\n",
+                  time_zone_str, print_event_info->delimiter);
       memcpy(print_event_info->time_zone_str, time_zone_str, time_zone_len+1);
     }
   }
@@ -1831,7 +1838,7 @@
 
   print_query_header(&cache, print_event_info);
   my_b_write(&cache, (byte*) query, q_len);
-  my_b_printf(&cache, ";\n");
+  my_b_printf(&cache, "%s\n", print_event_info->delimiter);
 }
 #endif /* MYSQL_CLIENT */
 
@@ -2188,9 +2195,9 @@
       and rollback unfinished transaction.
       Probably this can be done with RESET CONNECTION (syntax to be defined).
     */
-    my_b_printf(&cache,"RESET CONNECTION;\n");
+    my_b_printf(&cache,"RESET CONNECTION%s\n", print_event_info->delimiter);
 #else
-    my_b_printf(&cache,"ROLLBACK;\n");
+    my_b_printf(&cache,"ROLLBACK%s\n", print_event_info->delimiter);
 #endif
   }
   DBUG_VOID_RETURN;
@@ -2945,15 +2952,16 @@
   }
   
   if (db && db[0] && different_db)
-    my_b_printf(&cache, "%suse %s;\n", 
+    my_b_printf(&cache, "%suse %s%s\n", 
             commented ? "# " : "",
-            db);
+            db, print_event_info->delimiter);
 
   if (flags & LOG_EVENT_THREAD_SPECIFIC_F)
-    my_b_printf(&cache,"%sSET @@session.pseudo_thread_id=%lu;\n",
-            commented ? "# " : "", (ulong)thread_id);
+    my_b_printf(&cache,"%sSET @@session.pseudo_thread_id=%lu%s\n",
+            commented ? "# " : "", (ulong)thread_id,
+            print_event_info->delimiter);
   my_b_printf(&cache, "%sLOAD DATA ",
-          commented ? "# " : "");
+              commented ? "# " : "");
   if (check_fname_outside_temp_buf())
     my_b_printf(&cache, "LOCAL ");
   my_b_printf(&cache, "INFILE '%-*s' ", fname_len, fname);
@@ -3003,7 +3011,7 @@
     my_b_printf(&cache, ")");
   }
 
-  my_b_printf(&cache, ";\n");
+  my_b_printf(&cache, "%s\n", print_event_info->delimiter);
   DBUG_VOID_RETURN;
 }
 #endif /* MYSQL_CLIENT */
@@ -3370,8 +3378,8 @@
 #ifndef DBUG_OFF
   char buff[22];
   DBUG_ENTER("Rotate_log_event::Rotate_log_event(...,flags)");
-  DBUG_PRINT("enter",("new_log_ident %s pos %s flags %lu", new_log_ident_arg,
-                      llstr(pos_arg, buff), flags));
+  DBUG_PRINT("enter",("new_log_ident: %s  pos: %s  flags: %lu", new_log_ident_arg,
+                      llstr(pos_arg, buff), (ulong) flags));
 #endif
   if (flags & DUP_NAME)
     new_log_ident= my_strndup(new_log_ident_arg, ident_len, MYF(MY_WME));
@@ -3582,7 +3590,8 @@
     msg="INVALID_INT";
     break;
   }
-  my_b_printf(&cache, "%s=%s;\n", msg, llstr(val,llbuff));
+  my_b_printf(&cache, "%s=%s%s\n",
+              msg, llstr(val,llbuff), print_event_info->delimiter);
 }
 #endif
 
@@ -3660,8 +3669,9 @@
     print_header(&cache, print_event_info, FALSE);
     my_b_printf(&cache, "\tRand\n");
   }
-  my_b_printf(&cache, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s;\n",
-              llstr(seed1, llbuff),llstr(seed2, llbuff2));
+  my_b_printf(&cache, "SET @@RAND_SEED1=%s, @@RAND_SEED2=%s%s\n",
+              llstr(seed1, llbuff),llstr(seed2, llbuff2),
+              print_event_info->delimiter);
 }
 #endif /* MYSQL_CLIENT */
 
@@ -3734,7 +3744,7 @@
     print_header(&cache, print_event_info, FALSE);
     my_b_printf(&cache, "\tXid = %s\n", buf);
   }
-  my_b_printf(&cache, "COMMIT;\n");
+  my_b_printf(&cache, "COMMIT%s\n", print_event_info->delimiter);
 }
 #endif /* MYSQL_CLIENT */
 
@@ -3939,7 +3949,7 @@
 
   if (is_null)
   {
-    my_b_printf(&cache, ":=NULL;\n");
+    my_b_printf(&cache, ":=NULL%s\n", print_event_info->delimiter);
   }
   else
   {
@@ -3947,12 +3957,12 @@
     case REAL_RESULT:
       double real_val;
       float8get(real_val, val);
-      my_b_printf(&cache, ":=%.14g;\n", real_val);
+      my_b_printf(&cache, ":=%.14g%s\n", real_val, print_event_info->delimiter);
       break;
     case INT_RESULT:
       char int_buf[22];
       longlong10_to_str(uint8korr(val), int_buf, -10);
-      my_b_printf(&cache, ":=%s;\n", int_buf);
+      my_b_printf(&cache, ":=%s%s\n", int_buf, print_event_info->delimiter);
       break;
     case DECIMAL_RESULT:
     {
@@ -3968,7 +3978,7 @@
       bin2decimal(val+2, &dec, precision, scale);
       decimal2string(&dec, str_buf, &str_len, 0, 0, 0);
       str_buf[str_len]= 0;
-      my_b_printf(&cache, ":=%s;\n",str_buf);
+      my_b_printf(&cache, ":=%s%s\n", str_buf, print_event_info->delimiter);
       break;
     }
     case STRING_RESULT:
@@ -4004,9 +4014,11 @@
           Generate an unusable command (=> syntax error) is probably the best
           thing we can do here.
         */
-        my_b_printf(&cache, ":=???;\n");
+        my_b_printf(&cache, ":=???%s\n", print_event_info->delimiter);
       else
-        my_b_printf(&cache, ":=_%s %s COLLATE `%s`;\n", cs->csname, hex_str, cs->name);
+        my_b_printf(&cache, ":=_%s %s COLLATE `%s`%s\n",
+                    cs->csname, hex_str, cs->name,
+                    print_event_info->delimiter);
       my_afree(hex_str);
     }
       break;
@@ -4152,7 +4164,7 @@
     memcpy(master_log, rli->group_master_log_name, master_log_len + 1);
     master_port = mi->port;
     master_pos = rli->group_master_log_pos;
-    DBUG_PRINT("info", ("master_log: %s  pos: %d", master_log,
+    DBUG_PRINT("info", ("master_log: %s  pos: %lu", master_log,
 			(ulong) master_pos));
   }
   else
@@ -5108,12 +5120,12 @@
       my_b_printf(&cache, " REPLACE");
     my_b_printf(&cache, " INTO");
     my_b_write(&cache, (byte*) query + fn_pos_end, q_len-fn_pos_end);
-    my_b_printf(&cache, ";\n");
+    my_b_printf(&cache, "%s\n", print_event_info->delimiter);
   }
   else
   {
     my_b_write(&cache, (byte*) query, q_len);
-    my_b_printf(&cache, ";\n");
+    my_b_printf(&cache, "%s\n", print_event_info->delimiter);
   }
 
   if (!print_event_info->short_form)
@@ -5287,8 +5299,6 @@
 }
 
 
-#ifdef HAVE_ROW_BASED_REPLICATION
-
 /**************************************************************************
 	Rows_log_event member functions
 **************************************************************************/
@@ -5344,8 +5354,8 @@
   uint8 const common_header_len= description_event->common_header_len;
   uint8 const post_header_len= description_event->post_header_len[event_type-1];
 
-  DBUG_PRINT("enter",("event_len=%ld, common_header_len=%d, "
-		      "post_header_len=%d",
+  DBUG_PRINT("enter",("event_len: %u  common_header_len: %d  "
+		      "post_header_len: %d",
 		      event_len, common_header_len,
 		      post_header_len));
 
@@ -5359,7 +5369,7 @@
   }
   else
   {
-    m_table_id= uint6korr(post_start);
+    m_table_id= (ulong) uint6korr(post_start);
     post_start+= RW_FLAGS_OFFSET;
   }
 
@@ -5375,7 +5385,7 @@
   const byte* const ptr_rows_data= var_start + byte_count + 1;
 
   my_size_t const data_size= event_len - (ptr_rows_data - (const byte *) buf);
-  DBUG_PRINT("info",("m_table_id=%lu, m_flags=%d, m_width=%u, data_size=%lu",
+  DBUG_PRINT("info",("m_table_id: %lu  m_flags: %d  m_width: %lu  data_size: %lu",
                      m_table_id, m_flags, m_width, data_size));
 
   m_rows_buf= (byte*)my_malloc(data_size, MYF(MY_WME));
@@ -5416,7 +5426,7 @@
   */
   DBUG_ENTER("Rows_log_event::do_add_row_data");
   DBUG_PRINT("enter", ("row_data: 0x%lx  length: %lu", (ulong) row_data,
-                       length));
+                       (ulong) length));
   /*
     Don't print debug messages when running valgrind since they can
     trigger false warnings.
@@ -5467,14 +5477,13 @@
 
 #if !defined(MYSQL_CLIENT) && defined(HAVE_REPLICATION)
 /*
-  Unpack a row into a record.
+  Unpack a row into table->record[0].
   
   SYNOPSIS
     unpack_row()
     rli     Relay log info
     table   Table to unpack into
     colcnt  Number of columns to read from record
-    record  Record where the data should be unpacked
     row     Packed row data
     cols    Pointer to columns data to fill in
     row_end Pointer to variable that will hold the value of the
@@ -5487,6 +5496,11 @@
 
   DESCRIPTION
 
+      The function will always unpack into the table->record[0]
+      record.  This is because there are too many dependencies on
+      where the various member functions of Field and subclasses
+      expect to write.
+
       The row is assumed to only consist of the fields for which the
       bitset represented by 'arr' and 'bits'; the other parts of the
       record are left alone.
@@ -5505,15 +5519,15 @@
  */
 static int
 unpack_row(RELAY_LOG_INFO *rli,
-           TABLE *table, uint const colcnt, byte *record,
+           TABLE *table, uint const colcnt,
            char const *row, MY_BITMAP const *cols,
            char const **row_end, ulong *master_reclength,
            MY_BITMAP* const rw_set, Log_event_type const event_type)
 {
+  byte *const record= table->record[0];
   DBUG_ENTER("unpack_row");
   DBUG_ASSERT(record && row);
-  DBUG_PRINT("enter", ("row=0x%lx; record=0x%lx", row, record));
-  my_ptrdiff_t const offset= record - (byte*) table->record[0];
+  DBUG_PRINT("enter", ("row: 0x%lx  table->record[0]: 0x%lx", (long) row, (long) record));
   my_size_t master_null_bytes= table->s->null_bytes;
 
   if (colcnt != table->s->fields)
@@ -5553,13 +5567,12 @@
 
     if (bitmap_is_set(cols, field_ptr -  begin_ptr))
     {
-      DBUG_ASSERT(table->record[0] <= f->ptr);
-      DBUG_ASSERT(f->ptr < table->record[0] + table->s->reclength + (f->pack_length_in_rec() == 0));
-      f->move_field_offset(offset);
-
-      DBUG_PRINT("info", ("unpacking column '%s' to 0x%lx", f->field_name, f->ptr));
+      DBUG_ASSERT((char *)table->record[0] <= f->ptr);
+      DBUG_ASSERT(f->ptr < (char *)table->record[0] + table->s->reclength + 
+                           (f->pack_length_in_rec() == 0));
+      DBUG_PRINT("info", ("unpacking column '%s' to 0x%lx", f->field_name,
+                          (long) f->ptr));
       ptr= f->unpack(f->ptr, ptr);
-      f->move_field_offset(-offset);
       /* Field...::unpack() cannot return 0 */
       DBUG_ASSERT(ptr != NULL);
     }
@@ -5590,9 +5603,11 @@
   for ( ; *field_ptr ; ++field_ptr)
   {
     uint32 const mask= NOT_NULL_FLAG | NO_DEFAULT_VALUE_FLAG;
+    Field *const f= *field_ptr;
 
-    if (event_type == WRITE_ROWS_EVENT &&
-        ((*field_ptr)->flags & mask) == mask)
+    DBUG_PRINT("info", ("processing column '%s' @ 0x%lx", f->field_name,
+                        (long) f->ptr));
+    if (event_type == WRITE_ROWS_EVENT && (f->flags & mask) == mask)
     {
       slave_print_msg(ERROR_LEVEL, rli, ER_NO_DEFAULT_FOR_FIELD,
                       "Field `%s` of table `%s`.`%s` "
@@ -5602,7 +5617,7 @@
       error = ER_NO_DEFAULT_FOR_FIELD;
     }
     else
-      (*field_ptr)->set_default();
+      f->set_default();
   }
 
   DBUG_RETURN(error);
@@ -6067,7 +6082,7 @@
 
   uint8 common_header_len= description_event->common_header_len;
   uint8 post_header_len= description_event->post_header_len[TABLE_MAP_EVENT-1];
-  DBUG_PRINT("info",("event_len=%ld, common_header_len=%d, post_header_len=%d",
+  DBUG_PRINT("info",("event_len: %u  common_header_len: %d  post_header_len: %d",
                      event_len, common_header_len, post_header_len));
 
   /*
@@ -6091,7 +6106,7 @@
   else
   {
     DBUG_ASSERT(post_header_len == TABLE_MAP_HEADER_LEN);
-    m_table_id= uint6korr(post_start);
+    m_table_id= (ulong) uint6korr(post_start);
     post_start+= TM_FLAGS_OFFSET;
   }
 
@@ -6115,10 +6130,10 @@
   uchar *ptr_after_colcnt= (uchar*) ptr_colcnt;
   m_colcnt= net_field_length(&ptr_after_colcnt);
 
-  DBUG_PRINT("info",("m_dblen=%d off=%d m_tbllen=%d off=%d m_colcnt=%d off=%d",
-                     m_dblen, ptr_dblen-(const byte*)vpart, 
-                     m_tbllen, ptr_tbllen-(const byte*)vpart,
-                     m_colcnt, ptr_colcnt-(const byte*)vpart));
+  DBUG_PRINT("info",("m_dblen: %lu  off: %ld  m_tbllen: %lu  off: %ld  m_colcnt: %lu  off: %ld",
+                     m_dblen, (long) (ptr_dblen-(const byte*)vpart), 
+                     m_tbllen, (long) (ptr_tbllen-(const byte*)vpart),
+                     m_colcnt, (long) (ptr_colcnt-(const byte*)vpart)));
 
   /* Allocate mem for all fields in one go. If fails, catched in is_valid() */
   m_memory= my_multi_malloc(MYF(MY_WME),
@@ -6458,10 +6473,8 @@
   DBUG_ASSERT(row_start && row_end);
 
   int error;
-  error= unpack_row(rli,
-                    table, m_width, table->record[0],
-                    row_start, &m_cols, row_end, &m_master_reclength,
-                    table->write_set, WRITE_ROWS_EVENT);
+  error= unpack_row(rli, table, m_width, row_start, &m_cols, row_end,
+                    &m_master_reclength, table->write_set, WRITE_ROWS_EVENT);
   bitmap_copy(table->read_set, table->write_set);
   return error;
 }
@@ -6522,11 +6535,11 @@
                          my_size_t master_reclength,
                          my_ptrdiff_t master_fields)
 {
-  DBUG_PRINT("info", ("Copying to %p "
-                      "from field %ld at offset %u "
-                      "to field %d at offset %u",
-                      table->record[0],
-                      master_fields, master_reclength,
+  DBUG_PRINT("info", ("Copying to 0x%lx "
+                      "from field %lu at offset %lu "
+                      "to field %d at offset %lu",
+                      (long) table->record[0],
+                      (ulong) master_fields, (ulong) master_reclength,
                       table->s->fields, table->s->reclength));
   /*
     Copying the extra fields of the slave that does not exist on
@@ -6841,8 +6854,8 @@
     trigger false warnings.
    */
 #ifndef HAVE_purify
-    DBUG_DUMP("table->record[0]", table->record[0], table->s->reclength);
-    DBUG_DUMP("table->record[1]", table->record[1], table->s->reclength);
+    DBUG_DUMP("table->record[0]", (char *)table->record[0], table->s->reclength);
+    DBUG_DUMP("table->record[1]", (char *)table->record[1], table->s->reclength);
 #endif
 
     /*
@@ -6868,8 +6881,8 @@
     trigger false warnings.
    */
 #ifndef HAVE_purify
-    DBUG_DUMP("table->record[0]", table->record[0], table->s->reclength);
-    DBUG_DUMP("table->record[1]", table->record[1], table->s->reclength);
+    DBUG_DUMP("table->record[0]", (char *)table->record[0], table->s->reclength);
+    DBUG_DUMP("table->record[1]", (char *)table->record[1], table->s->reclength);
 #endif
     /*
       Below is a minor "optimization".  If the key (i.e., key number
@@ -7066,10 +7079,8 @@
   */
   DBUG_ASSERT(table->s->fields >= m_width);
 
-  error= unpack_row(rli,
-                    table, m_width, table->record[0], 
-                    row_start, &m_cols, row_end, &m_master_reclength,
-                    table->read_set, DELETE_ROWS_EVENT);
+  error= unpack_row(rli, table, m_width, row_start, &m_cols, row_end,
+                    &m_master_reclength, table->read_set, DELETE_ROWS_EVENT);
   /*
     If we will access rows using the random access method, m_key will
     be set to NULL, so we do not need to make a key copy in that case.
@@ -7203,25 +7214,30 @@
   */
   DBUG_ASSERT(table->s->fields >= m_width);
 
+  /*
+    We need to perform some juggling below since unpack_row() always
+    unpacks into table->record[0]. For more information, see the
+    comments for unpack_row().
+  */
+
   /* record[0] is the before image for the update */
-  error= unpack_row(rli,
-                    table, m_width, table->record[0],
-                    row_start, &m_cols, row_end, &m_master_reclength,
-                    table->read_set, UPDATE_ROWS_EVENT);
+  error= unpack_row(rli, table, m_width, row_start, &m_cols, row_end,
+                    &m_master_reclength, table->read_set, UPDATE_ROWS_EVENT);
+  store_record(table, record[1]);
   char const *next_start = *row_end;
   /* m_after_image is the after image for the update */
-  error= unpack_row(rli,
-                    table, m_width, m_after_image,
-                    next_start, &m_cols, row_end, &m_master_reclength,
-                    table->write_set, UPDATE_ROWS_EVENT);
+  error= unpack_row(rli, table, m_width, next_start, &m_cols, row_end,
+                    &m_master_reclength, table->write_set, UPDATE_ROWS_EVENT);
+  bmove_align(m_after_image, table->record[0], table->s->reclength);
+  restore_record(table, record[1]);
 
   /*
     Don't print debug messages when running valgrind since they can
     trigger false warnings.
    */
 #ifndef HAVE_purify
-  DBUG_DUMP("record[0]", (const char *)table->record[0], m_master_reclength);
-  DBUG_DUMP("m_after_image", (const char *)m_after_image, m_master_reclength);
+  DBUG_DUMP("record[0]", (const char *)table->record[0], table->s->reclength);
+  DBUG_DUMP("m_after_image", (const char *)m_after_image, table->s->reclength);
 #endif
 
   /*
@@ -7282,4 +7298,3 @@
 }
 #endif
 
-#endif /* defined(HAVE_ROW_BASED_REPLICATION) */
Thread
bk commit into 5.1 tree (mats:1.2359)Mats Kindahl11 Dec