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 Kindahl | 11 Feb |