mirror of
https://github.com/MariaDB/server.git
synced 2025-01-29 10:14:19 +01:00
Merge mysql.com:/usr/local/mysql/mysql-5.1-bug20549
into mysql.com:/usr/local/mysql/tmp-5.1 sql/ha_ndbcluster_binlog.cc: Auto merged sql/sql_class.cc: Auto merged
This commit is contained in:
commit
a5e194ed52
2 changed files with 24 additions and 5 deletions
|
@ -311,8 +311,10 @@ ndbcluster_binlog_open_table(THD *thd, NDB_SHARE *share,
|
|||
if (!reopen)
|
||||
{
|
||||
// allocate memory on ndb share so it can be reused after online alter table
|
||||
share->record[0]= (byte*) alloc_root(&share->mem_root, table->s->rec_buff_length);
|
||||
share->record[1]= (byte*) alloc_root(&share->mem_root, table->s->rec_buff_length);
|
||||
(void)multi_alloc_root(&share->mem_root,
|
||||
&(share->record[0]), table->s->rec_buff_length,
|
||||
&(share->record[1]), table->s->rec_buff_length,
|
||||
NULL);
|
||||
}
|
||||
{
|
||||
my_ptrdiff_t row_offset= share->record[0] - table->record[0];
|
||||
|
@ -2159,6 +2161,9 @@ int ndb_add_binlog_index(THD *thd, void *_row)
|
|||
break;
|
||||
}
|
||||
|
||||
// Set all fields non-null.
|
||||
if(binlog_index->s->null_bytes > 0)
|
||||
bzero(binlog_index->record[0], binlog_index->s->null_bytes);
|
||||
binlog_index->field[0]->store(row.master_log_pos);
|
||||
binlog_index->field[1]->store(row.master_log_file,
|
||||
strlen(row.master_log_file),
|
||||
|
@ -3275,6 +3280,13 @@ pthread_handler_t ndb_binlog_thread_func(void *arg)
|
|||
thd= new THD; /* note that contructor of THD uses DBUG_ */
|
||||
THD_CHECK_SENTRY(thd);
|
||||
|
||||
/* We need to set thd->thread_id before thd->store_globals, or it will
|
||||
set an invalid value for thd->variables.pseudo_thread_id.
|
||||
*/
|
||||
pthread_mutex_lock(&LOCK_thread_count);
|
||||
thd->thread_id= thread_id++;
|
||||
pthread_mutex_unlock(&LOCK_thread_count);
|
||||
|
||||
thd->thread_stack= (char*) &thd; /* remember where our stack is */
|
||||
if (thd->store_globals())
|
||||
{
|
||||
|
@ -3307,7 +3319,6 @@ pthread_handler_t ndb_binlog_thread_func(void *arg)
|
|||
pthread_detach_this_thread();
|
||||
thd->real_id= pthread_self();
|
||||
pthread_mutex_lock(&LOCK_thread_count);
|
||||
thd->thread_id= thread_id++;
|
||||
threads.append(thd);
|
||||
pthread_mutex_unlock(&LOCK_thread_count);
|
||||
thd->lex->start_transaction_opt= 0;
|
||||
|
@ -3643,6 +3654,10 @@ restart:
|
|||
injector::transaction::table tbl(table, TRUE);
|
||||
int ret= trans.use_table(::server_id, tbl);
|
||||
DBUG_ASSERT(ret == 0);
|
||||
|
||||
// Set all fields non-null.
|
||||
if(table->s->null_bytes > 0)
|
||||
bzero(table->record[0], table->s->null_bytes);
|
||||
table->field[0]->store((longlong)::server_id);
|
||||
table->field[1]->store((longlong)gci);
|
||||
trans.write_row(::server_id,
|
||||
|
|
|
@ -2506,15 +2506,19 @@ my_size_t THD::pack_row(TABLE *table, MY_BITMAP const* cols, byte *row_data,
|
|||
int n_null_bytes= table->s->null_bytes;
|
||||
byte *ptr;
|
||||
uint i;
|
||||
my_ptrdiff_t const offset= (my_ptrdiff_t) (record - (byte*)
|
||||
table->record[0]);
|
||||
my_ptrdiff_t const rec_offset= record - table->record[0];
|
||||
my_ptrdiff_t const def_offset= table->s->default_values - table->record[0];
|
||||
memcpy(row_data, record, n_null_bytes);
|
||||
ptr= row_data+n_null_bytes;
|
||||
|
||||
for (i= 0 ; (field= *p_field) ; i++, p_field++)
|
||||
{
|
||||
if (bitmap_is_set(cols,i))
|
||||
{
|
||||
my_ptrdiff_t const offset=
|
||||
field->is_null(rec_offset) ? def_offset : rec_offset;
|
||||
ptr= (byte*)field->pack((char *) ptr, field->ptr + offset);
|
||||
}
|
||||
}
|
||||
return (static_cast<my_size_t>(ptr - row_data));
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue