mirror of
https://github.com/MariaDB/server.git
synced 2025-01-16 20:12:31 +01:00
[MDEV-6877] Removed unnecesary bitmap in binlog_write_row
The bitmap is now deduced from the table's read and write set.
This commit is contained in:
parent
8bd5301a1e
commit
8a1b7c9c65
1 changed files with 12 additions and 27 deletions
|
@ -5675,39 +5675,24 @@ static int binlog_log_row(TABLE* table,
|
||||||
|
|
||||||
if (check_table_binlog_row_based(thd, table))
|
if (check_table_binlog_row_based(thd, table))
|
||||||
{
|
{
|
||||||
MY_BITMAP cols;
|
|
||||||
/* Potential buffer on the stack for the bitmap */
|
|
||||||
uint32 bitbuf[BITMAP_STACKBUF_SIZE/sizeof(uint32)];
|
|
||||||
uint n_fields= table->s->fields;
|
|
||||||
my_bool use_bitbuf= n_fields <= sizeof(bitbuf)*8;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If there are no table maps written to the binary log, this is
|
If there are no table maps written to the binary log, this is
|
||||||
the first row handled in this statement. In that case, we need
|
the first row handled in this statement. In that case, we need
|
||||||
to write table maps for all locked tables to the binary log.
|
to write table maps for all locked tables to the binary log.
|
||||||
*/
|
*/
|
||||||
if (likely(!(error= my_bitmap_init(&cols,
|
if (likely(!(error= write_locked_table_maps(thd))))
|
||||||
use_bitbuf ? bitbuf : NULL,
|
|
||||||
(n_fields + 7) & ~7UL,
|
|
||||||
FALSE))))
|
|
||||||
{
|
{
|
||||||
bitmap_set_all(&cols);
|
/*
|
||||||
if (likely(!(error= write_locked_table_maps(thd))))
|
We need to have a transactional behavior for SQLCOM_CREATE_TABLE
|
||||||
{
|
(i.e. CREATE TABLE... SELECT * FROM TABLE) in order to keep a
|
||||||
/*
|
compatible behavior with the STMT based replication even when
|
||||||
We need to have a transactional behavior for SQLCOM_CREATE_TABLE
|
the table is not transactional. In other words, if the operation
|
||||||
(i.e. CREATE TABLE... SELECT * FROM TABLE) in order to keep a
|
fails while executing the insert phase nothing is written to the
|
||||||
compatible behavior with the STMT based replication even when
|
binlog.
|
||||||
the table is not transactional. In other words, if the operation
|
*/
|
||||||
fails while executing the insert phase nothing is written to the
|
bool const has_trans= thd->lex->sql_command == SQLCOM_CREATE_TABLE ||
|
||||||
binlog.
|
table->file->has_transactions();
|
||||||
*/
|
error= (*log_func)(thd, table, has_trans, before_record, after_record);
|
||||||
bool const has_trans= thd->lex->sql_command == SQLCOM_CREATE_TABLE ||
|
|
||||||
table->file->has_transactions();
|
|
||||||
error= (*log_func)(thd, table, has_trans, before_record, after_record);
|
|
||||||
}
|
|
||||||
if (!use_bitbuf)
|
|
||||||
my_bitmap_free(&cols);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return error ? HA_ERR_RBR_LOGGING_FAILED : 0;
|
return error ? HA_ERR_RBR_LOGGING_FAILED : 0;
|
||||||
|
|
Loading…
Reference in a new issue