List:Commits« Previous MessageNext Message »
From:Mats Kindahl Date:February 11 2008 10:17am
Subject:bk commit into 6.0 tree (mkindahl:1.2545)
View as plain text  
Below is the list of changes that have just been committed into a local
6.0 repository of mkindahl.  When mkindahl 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, 2008-02-11 11:16:47+01:00, mkindahl@stripped +13 -0
  Post-merge fixes for merging main tree with Falcon team tree.

  mysql-test/suite/binlog/r/binlog_innodb.result@stripped, 2008-02-11 11:15:34+01:00, mkindahl@stripped +19 -0
    Result change.

  sql/log_event.cc@stripped, 2008-02-11 11:15:40+01:00, mkindahl@stripped +13 -8
    Adding debug printouts of the cols bitset.
    Removed check for default values for NDB.
    We are not using all columns any more, so I removed the call to
    use_all_columns().

  sql/log_event_old.cc@stripped, 2008-02-11 11:15:42+01:00, mkindahl@stripped +4 -13
    Removed check for default values for NDB.
    We are not using all columns any more, so I removed the call to
    use_all_columns().

  sql/log_event_old.h@stripped, 2008-02-11 11:15:49+01:00, mkindahl@stripped +3 -12
    binlog_row_logging_function() no longer takes a cols vector.

  sql/protocol.cc@stripped, 2008-02-11 11:15:49+01:00, mkindahl@stripped +0 -1
    Removing redundant start comment causing warning.

  sql/rpl_injector.h@stripped, 2008-02-11 11:15:57+01:00, mkindahl@stripped +7 -0
    Adding documentation for class save_sets.

  sql/rpl_record.cc@stripped, 2008-02-11 11:15:57+01:00, mkindahl@stripped +48 -35
    Adding debug printouts for column bitsets.
    Fixed prepare_record() to not touch columns that are not in the
    column bitset.

  sql/sql_class.cc@stripped, 2008-02-11 11:16:03+01:00, mkindahl@stripped +11 -2
    Re-added check for comparing column bitset of pending event. This
    is necessary since NDB can mix rows with different column bitsets,
    while other engines does not.

  storage/myisam/mi_check.c@stripped, 2008-02-11 11:16:03+01:00, mkindahl@stripped +2 -2
    char -> uchar

  storage/myisam/mi_open.c@stripped, 2008-02-11 11:16:09+01:00, mkindahl@stripped +1 -1
    char -> uchar

  storage/myisam/mi_page.c@stripped, 2008-02-11 11:16:14+01:00, mkindahl@stripped +1 -1
    char -> uchar

  storage/myisam/mi_search.c@stripped, 2008-02-11 11:16:20+01:00, mkindahl@stripped +3 -3
    char -> uchar

  storage/myisammrg/myrg_create.c@stripped, 2008-02-11 11:16:20+01:00, mkindahl@stripped +1 -1
    char -> uchar

diff -Nrup a/mysql-test/suite/binlog/r/binlog_innodb.result b/mysql-test/suite/binlog/r/binlog_innodb.result
--- a/mysql-test/suite/binlog/r/binlog_innodb.result	2007-12-14 14:40:43 +01:00
+++ b/mysql-test/suite/binlog/r/binlog_innodb.result	2008-02-11 11:15:34 +01:00
@@ -74,6 +74,8 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
@@ -84,10 +86,17 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
@@ -98,18 +107,28 @@ master-bin.000001	#	Query	#	#	use `test`
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
+master-bin.000001	#	Update_rows	#	#	table_id: #
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 master-bin.000001	#	Query	#	#	use `test`; BEGIN
 master-bin.000001	#	Table_map	#	#	table_id: # (test.t1)
+master-bin.000001	#	Update_rows	#	#	table_id: #
 master-bin.000001	#	Update_rows	#	#	table_id: # flags: STMT_END_F
 master-bin.000001	#	Xid	#	#	COMMIT /* XID */
 DROP TABLE t1;
diff -Nrup a/sql/log_event.cc b/sql/log_event.cc
--- a/sql/log_event.cc	2008-02-06 18:05:33 +01:00
+++ b/sql/log_event.cc	2008-02-11 11:15:40 +01:00
@@ -6109,6 +6109,7 @@ Rows_log_event::Rows_log_event(THD *thd_
                           m_width,
                           false)))
   {
+    DBUG_PRINT_BITSET("debug", "init cols: %s", cols);
     /* Cols can be zero if this is a dummy binrows event */
     if (likely(cols != NULL))
     {
@@ -6884,7 +6885,7 @@ bool Rows_log_event::write_data_body(IO_
   DBUG_DUMP("m_width", sbuf, (size_t) (sbuf_end - sbuf));
   res= res || my_b_safe_write(file, sbuf, (size_t) (sbuf_end - sbuf));
 
-  DBUG_DUMP("m_cols", (uchar*) m_cols.bitmap, no_bytes_in_map(&m_cols));
+  DBUG_PRINT_BITSET("debug", "writing cols: %s", &m_cols);
   res= res || my_b_safe_write(file, (uchar*) m_cols.bitmap,
                               no_bytes_in_map(&m_cols));
   /*
@@ -7682,8 +7683,18 @@ Rows_log_event::write_row(const Relay_lo
 
   /* fill table->record[0] with default values */
 
+  /*
+     We only check if the columns have default values for non-NDB
+     engines, for NDB we ignore the check since updates are sent as
+     writes, causing errors when trying to prepare the record.
+
+     TODO[ndb]: Elimiate this hard-coded dependency on NDB. Ideally,
+     the engine should be able to set a flag that it want the default
+     values filled in and one flag to handle the case that the default
+     values should be checked. Maybe these two flags can be combined.
+  */
   if ((error= prepare_record(rli, table, &m_cols, m_width,
-                             TRUE /* check if columns have def. values */)))
+                             table->file->ht->db_type != DB_TYPE_NDBCLUSTER)))
     DBUG_RETURN(error);
   
   /* unpack row into table->record[0] */
@@ -8068,12 +8079,6 @@ int Rows_log_event::find_row(const Relay
 
   // We can't use position() - try other methods.
   
-  /* 
-    We need to retrieve all fields
-    TODO: Move this out from this function to main loop 
-   */
-  table->use_all_columns();
-
   /*
     Save copy of the record in table->record[1]. It might be needed 
     later if linear search is used to find exact match.
diff -Nrup a/sql/log_event_old.cc b/sql/log_event_old.cc
--- a/sql/log_event_old.cc	2008-01-09 15:34:59 +01:00
+++ b/sql/log_event_old.cc	2008-02-11 11:15:42 +01:00
@@ -738,10 +738,6 @@ static int find_and_fetch_row(TABLE *tab
     DBUG_RETURN(error);
   }
 
-  /* We need to retrieve all fields */
-  /* TODO: Move this out from this function to main loop */
-  table->use_all_columns();
-
   if (table->s->keys > 0)
   {
     int error;
@@ -2078,8 +2074,8 @@ Old_rows_log_event::write_row(const Rela
 
   /* fill table->record[0] with default values */
 
-  if ((error= prepare_record(rli, table, m_width,
-                             TRUE /* check if columns have def. values */)))
+  if ((error= prepare_record(rli, table, table->write_set, m_width,
+                             table->file->ht->db_type != DB_TYPE_NDBCLUSTER)))
     DBUG_RETURN(error);
   
   /* unpack row into table->record[0] */
@@ -2289,7 +2285,8 @@ int Old_rows_log_event::find_row(const R
   /* unpack row - missing fields get default values */
 
   // TODO: shall we check and report errors here?
-  prepare_record(NULL,table,m_width,FALSE /* don't check errors */); 
+  prepare_record(NULL, table, table->read_set, m_width,
+                 FALSE /* don't check errors */); 
   error= unpack_current_row(rli); 
 
 #ifndef DBUG_OFF
@@ -2330,12 +2327,6 @@ int Old_rows_log_event::find_row(const R
 
   // We can't use position() - try other methods.
   
-  /* 
-    We need to retrieve all fields
-    TODO: Move this out from this function to main loop 
-   */
-  table->use_all_columns();
-
   /*
     Save copy of the record in table->record[1]. It might be needed 
     later if linear search is used to find exact match.
diff -Nrup a/sql/log_event_old.h b/sql/log_event_old.h
--- a/sql/log_event_old.h	2008-02-06 18:30:45 +01:00
+++ b/sql/log_event_old.h	2008-02-11 11:15:49 +01:00
@@ -367,14 +367,11 @@ public:
 #if !defined(MYSQL_CLIENT) 
   static bool binlog_row_logging_function(THD *thd, TABLE *table,
                                           bool is_transactional,
-                                          MY_BITMAP *cols,
-                                          uint fields,
                                           const uchar *before_record
                                           __attribute__((unused)),
                                           const uchar *after_record)
   {
-    return thd->binlog_write_row(table, is_transactional,
-                                 cols, fields, after_record);
+    return thd->binlog_write_row(table, is_transactional, after_record);
   }
 #endif
 
@@ -444,13 +441,10 @@ public:
 #if !defined(MYSQL_CLIENT) 
   static bool binlog_row_logging_function(THD *thd, TABLE *table,
                                           bool is_transactional,
-                                          MY_BITMAP *cols,
-                                          uint fields,
                                           const uchar *before_record,
                                           const uchar *after_record)
   {
-    return thd->binlog_update_row(table, is_transactional,
-                                  cols, fields, before_record, after_record);
+    return thd->binlog_update_row(table, is_transactional, before_record, after_record);
   }
 #endif
 
@@ -518,14 +512,11 @@ public:
 #if !defined(MYSQL_CLIENT) 
   static bool binlog_row_logging_function(THD *thd, TABLE *table,
                                           bool is_transactional,
-                                          MY_BITMAP *cols,
-                                          uint fields,
                                           const uchar *before_record,
                                           const uchar *after_record
                                           __attribute__((unused)))
   {
-    return thd->binlog_delete_row(table, is_transactional,
-                                  cols, fields, before_record);
+    return thd->binlog_delete_row(table, is_transactional, before_record);
   }
 #endif
   
diff -Nrup a/sql/protocol.cc b/sql/protocol.cc
--- a/sql/protocol.cc	2008-01-25 18:40:46 +01:00
+++ b/sql/protocol.cc	2008-02-11 11:15:49 +01:00
@@ -116,7 +116,6 @@ bool Protocol::net_store_data(const ucha
 #endif
 
 
-/*
 /**
   Send a error string to client.
 
diff -Nrup a/sql/rpl_injector.h b/sql/rpl_injector.h
--- a/sql/rpl_injector.h	2007-12-19 09:27:25 +01:00
+++ b/sql/rpl_injector.h	2008-02-11 11:15:57 +01:00
@@ -117,6 +117,13 @@ public:
       class table 
       {
       public:
+        /**
+           Class used to save away the read and write sets for the table temporarily.
+
+           When created, this class accepts a read- and write-set and
+           installs these as current sets for the table. When
+           destroyed, the old sets are restored.
+         */
         class save_sets {
         public:
           save_sets(table const &tbl, MY_BITMAP const *new_rs, MY_BITMAP const *new_ws)
diff -Nrup a/sql/rpl_record.cc b/sql/rpl_record.cc
--- a/sql/rpl_record.cc	2008-02-06 18:30:45 +01:00
+++ b/sql/rpl_record.cc	2008-02-11 11:15:57 +01:00
@@ -77,7 +77,7 @@ pack_row(TABLE *table, MY_BITMAP const* 
   unsigned int null_mask= 1U;
   DBUG_PRINT("debug", ("null ptr: 0x%lx; row start: %p; null bytes: %d",
                        (ulong) null_ptr, row_data, null_byte_count));
-  DBUG_DUMP("cols", (uchar*) cols->bitmap, cols->last_word_ptr - cols->bitmap + 1);
+  DBUG_PRINT_BITSET("debug", "cols: %s", cols);
   for ( ; (field= *p_field) ; p_field++)
   {
     DBUG_PRINT("debug", ("field: %s; null mask: 0x%x",
@@ -213,12 +213,14 @@ unpack_row(Relay_log_info const *rli,
   unsigned int null_bits= *null_ptr++;
   uint i= 0;
   table_def *tabledef= ((Relay_log_info*)rli)->get_tabledef(table);
+  DBUG_PRINT_BITSET("debug", "cols: %s", cols);
   for (field_ptr= begin_ptr ; field_ptr < end_ptr && *field_ptr ; ++field_ptr)
   {
     Field *const f= *field_ptr;
 
-    DBUG_PRINT("debug", ("field: %s; null mask: 0x%x; null bits: 0x%lx;"
+    DBUG_PRINT("debug", ("%sfield: %s; null mask: 0x%x; null bits: 0x%lx;"
                          " row start: %p; null bytes: %ld",
+                         bitmap_is_set(cols, field_ptr -  begin_ptr) ? "+" : "-",
                          f->field_name, null_mask, (ulong) null_bits,
                          pack_ptr, (ulong) master_null_byte_count));
 
@@ -326,21 +328,28 @@ unpack_row(Relay_log_info const *rli,
   First @c empty_record() is called and then, additionally, fields are
   initialized explicitly with a call to @c set_default().
 
-  For optimization reasons, the explicit initialization can be skipped for
-  first @c skip fields. This is useful if later we are going to fill these 
-  fields from other source (e.g. from a Rows replication event).
-
-  If @c check is true, fields are explicitly initialized only if they have
-  default value or can be NULL. Otherwise error is reported.
- 
-  @param log    Used to report errors.
-  @param table  Table whose record[0] buffer is prepared. 
-  @param skip   Number of columns for which default value initialization 
-                should be skipped.
-  @param check  Indicates if errors should be checked when setting default
-                values.
-                
-  @returns 0 on success. 
+  For optimization reasons, the explicit initialization can be skipped
+  for fields that are not marked in the @c cols vector. These fields
+  will be set later, and filling them with default values is
+  unnecessary.
+
+  If @c check is true, fields are explicitly initialized only if they
+  have default value or can be NULL. Otherwise error is reported. If
+  @c check is false, no error is reported and the field is not set to
+  any value.
+
+  @todo When flag is added to allow engine to handle default values
+  itself, the record should not be emptied and default values not set.
+
+  @param log[in]       Used to report errors.
+  @param table[in,out] Table whose record[0] buffer is prepared. 
+  @param cols[in]      Vector of bits denoting columns that will be set
+                       elsewhere
+  @param check[in]     Indicates if errors should be checked when setting default
+                       values.
+
+  @retval 0                       Success
+  @retval ER_NO_DEFAULT_FOR_FIELD Default value could not be set for a field
  */ 
 int prepare_record(const Slave_reporting_capability *const log, 
                    TABLE *const table, 
@@ -358,27 +367,31 @@ int prepare_record(const Slave_reporting
     have no sensible default.
   */
 
+  DBUG_PRINT_BITSET("debug", "cols: %s", cols);
   for (Field **field_ptr= table->field ; *field_ptr ; ++field_ptr)
   {
-    uint32 const mask= NOT_NULL_FLAG | NO_DEFAULT_VALUE_FLAG;
-    Field *const f= *field_ptr;
-
-    if (check && ((f->flags & mask) == mask))
+    if ((uint) (field_ptr - table->field) >= cols->n_bits ||
+        !bitmap_is_set(cols, field_ptr - table->field))
     {
-      DBUG_ASSERT(log);
-      error= ER_NO_DEFAULT_FOR_FIELD;
-      log->report(ERROR_LEVEL, error,
-                  "Field `%s` of table `%s`.`%s` "
-                  "has no default value and cannot be NULL",
-                  f->field_name, table->s->db.str,
-                  table->s->table_name.str);
-      my_error(error, MYF(0), f->field_name);
-    }
-    else if ((uint) (field_ptr - table->field) >= cols->n_bits ||
-             !bitmap_is_set(cols, field_ptr - table->field))
-    {
-      DBUG_PRINT("debug", ("Set default; field: %s", f->field_name));
-      f->set_default();
+      uint32 const mask= NOT_NULL_FLAG | NO_DEFAULT_VALUE_FLAG;
+      Field *const f= *field_ptr;
+
+      if (check && ((f->flags & mask) == mask))
+      {
+        DBUG_ASSERT(log);
+        error= ER_NO_DEFAULT_FOR_FIELD;
+        log->report(ERROR_LEVEL, error,
+                    "Field `%s` of table `%s`.`%s` "
+                    "has no default value and cannot be NULL",
+                    f->field_name, table->s->db.str,
+                    table->s->table_name.str);
+        my_error(error, MYF(0), f->field_name);
+      }
+      else
+      {
+        DBUG_PRINT("debug", ("Set default; field: %s", f->field_name));
+        f->set_default();
+      }
     }
   }
 
diff -Nrup a/sql/sql_class.cc b/sql/sql_class.cc
--- a/sql/sql_class.cc	2008-02-06 18:05:39 +01:00
+++ b/sql/sql_class.cc	2008-02-11 11:16:03 +01:00
@@ -3099,13 +3099,22 @@ THD::binlog_prepare_pending_rows_event(T
     (between Write, Update and Delete), or not the same affected columns, or
     going to be too big, flush this event to disk and create a new pending
     event.
+
+    The last test is necessary for the Cluster injector to work
+    correctly. The reason is that the Cluster can inject two write
+    rows with different column bitmaps if there is an insert followed
+    by an update in the same transaction, and these are grouped into a
+    single epoch/transaction when fed to the injector.
+
+    TODO: Fix the code so that the last test can be removed.
   */
   if (!pending ||
       pending->server_id != serv_id || 
       pending->get_table_id() != table->s->table_map_id ||
       pending->get_type_code() != type_code || 
-      pending->get_data_size() + needed > opt_binlog_rows_event_max_size) 
-  {
+      pending->get_data_size() + needed > opt_binlog_rows_event_max_size ||
+      !bitmap_cmp(pending->get_cols(), table->write_set))
+    {
     /* Create a new RowsEventT... */
     Rows_log_event* const
 	ev= new RowsEventT(this, table, table->s->table_map_id,
diff -Nrup a/storage/myisam/mi_check.c b/storage/myisam/mi_check.c
--- a/storage/myisam/mi_check.c	2007-12-13 13:56:22 +01:00
+++ b/storage/myisam/mi_check.c	2008-02-11 11:16:03 +01:00
@@ -803,7 +803,7 @@ static int chk_index(MI_CHECK *param, MI
     {
       DBUG_DUMP("old",(uchar*) info->lastkey, info->lastkey_length);
       DBUG_DUMP("new",(uchar*) key, key_length);
-      DBUG_DUMP("new_in_page",(char*) old_keypos,(uint) (keypos-old_keypos));
+      DBUG_DUMP("new_in_page",(uchar*) old_keypos,(uint) (keypos-old_keypos));
 
       if (comp_flag & SEARCH_FIND && flag == 0)
 	mi_check_print_error(param,"Found duplicated key at page %s",llstr(page,llbuff));
@@ -873,7 +873,7 @@ static int chk_index(MI_CHECK *param, MI
 			 llstr(page,llbuff),llstr(record,llbuff2),
 			 llstr(info->state->data_file_length,llbuff3)));
       DBUG_DUMP("key",(uchar*) key,key_length);
-      DBUG_DUMP("new_in_page",(char*) old_keypos,(uint) (keypos-old_keypos));
+      DBUG_DUMP("new_in_page",(uchar*) old_keypos,(uint) (keypos-old_keypos));
       goto err;
     }
     param->record_checksum+=(ha_checksum) record;
diff -Nrup a/storage/myisam/mi_open.c b/storage/myisam/mi_open.c
--- a/storage/myisam/mi_open.c	2007-12-21 20:27:49 +01:00
+++ b/storage/myisam/mi_open.c	2008-02-11 11:16:09 +01:00
@@ -132,7 +132,7 @@ MI_INFO *mi_open(const char *name, int m
 	       (uchar*) myisam_file_magic, 4))
     {
       DBUG_PRINT("error",("Wrong header in %s",name_buff));
-      DBUG_DUMP("error_dump",(char*) share->state.header.file_version,
+      DBUG_DUMP("error_dump",(uchar*) share->state.header.file_version,
 		head_length);
       my_errno=HA_ERR_NOT_A_TABLE;
       goto err;
diff -Nrup a/storage/myisam/mi_page.c b/storage/myisam/mi_page.c
--- a/storage/myisam/mi_page.c	2007-08-13 15:11:16 +02:00
+++ b/storage/myisam/mi_page.c	2008-02-11 11:16:14 +01:00
@@ -49,7 +49,7 @@ uchar *_mi_fetch_keypage(register MI_INF
   {
     DBUG_PRINT("error",("page %lu had wrong page length: %u",
 			(ulong) page, page_size));
-    DBUG_DUMP("page", (char*) tmp, keyinfo->block_length);
+    DBUG_DUMP("page", (uchar*) tmp, keyinfo->block_length);
     info->last_keypage = HA_OFFSET_ERROR;
     mi_print_error(info->s, HA_ERR_CRASHED);
     my_errno = HA_ERR_CRASHED;
diff -Nrup a/storage/myisam/mi_search.c b/storage/myisam/mi_search.c
--- a/storage/myisam/mi_search.c	2007-08-13 15:11:16 +02:00
+++ b/storage/myisam/mi_search.c	2008-02-11 11:16:20 +01:00
@@ -816,7 +816,7 @@ uint _mi_get_pack_key(register MI_KEYDEF
 	    DBUG_PRINT("error",
                        ("Found too long null packed key: %u of %u at 0x%lx",
                         length, keyseg->length, (long) *page_pos));
-	    DBUG_DUMP("key",(char*) *page_pos,16);
+	    DBUG_DUMP("key",(uchar*) *page_pos,16);
             mi_print_error(keyinfo->share, HA_ERR_CRASHED);
 	    my_errno=HA_ERR_CRASHED;
 	    return 0;
@@ -873,7 +873,7 @@ uint _mi_get_pack_key(register MI_KEYDEF
       {
         DBUG_PRINT("error",("Found too long packed key: %u of %u at 0x%lx",
                             length, keyseg->length, (long) *page_pos));
-        DBUG_DUMP("key",(char*) *page_pos,16);
+        DBUG_DUMP("key",(uchar*) *page_pos,16);
         mi_print_error(keyinfo->share, HA_ERR_CRASHED);
         my_errno=HA_ERR_CRASHED;
         return 0;                               /* Error */
@@ -945,7 +945,7 @@ uint _mi_get_binary_pack_key(register MI
       DBUG_PRINT("error",
                  ("Found too long binary packed key: %u of %u at 0x%lx",
                   length, keyinfo->maxlength, (long) *page_pos));
-      DBUG_DUMP("key",(char*) *page_pos,16);
+      DBUG_DUMP("key",(uchar*) *page_pos,16);
       mi_print_error(keyinfo->share, HA_ERR_CRASHED);
       my_errno=HA_ERR_CRASHED;
       DBUG_RETURN(0);                                 /* Wrong key */
diff -Nrup a/storage/myisammrg/myrg_create.c b/storage/myisammrg/myrg_create.c
--- a/storage/myisammrg/myrg_create.c	2007-08-13 15:11:17 +02:00
+++ b/storage/myisammrg/myrg_create.c	2008-02-11 11:16:20 +01:00
@@ -46,7 +46,7 @@ int myrg_create(const char *name, const 
 	fn_same(buff,name,4);
       *(end=strend(buff))='\n';
       end[1]=0;
-      if (my_write(file,(char*) buff,(uint) (end-buff+1),
+      if (my_write(file,(uchar*) buff,(uint) (end-buff+1),
 		   MYF(MY_WME | MY_NABP)))
 	goto err;
     }
Thread
bk commit into 6.0 tree (mkindahl:1.2545)Mats Kindahl11 Feb