mirror of
https://github.com/MariaDB/server.git
synced 2026-05-14 19:07:15 +02:00
merge with 5.3
sql/sql_insert.cc: CREATE ... IF NOT EXISTS may do nothing, but it is still not a failure. don't forget to my_ok it. ****** CREATE ... IF NOT EXISTS may do nothing, but it is still not a failure. don't forget to my_ok it. sql/sql_table.cc: small cleanup ****** small cleanup
This commit is contained in:
commit
76f0b94bb0
1705 changed files with 166479 additions and 39785 deletions
|
|
@ -303,7 +303,7 @@ uint32 table_def::calc_field_size(uint col, uchar *master_data) const
|
|||
always read the length in little-endian order.
|
||||
*/
|
||||
Field_blob fb(m_field_metadata[col]);
|
||||
length= fb.get_packed_size(master_data, TRUE);
|
||||
length= fb.get_packed_size(master_data);
|
||||
#else
|
||||
/*
|
||||
Compute the length of the data. We cannot use get_length() here
|
||||
|
|
@ -1056,3 +1056,58 @@ table_def::~table_def()
|
|||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
@param even_buf point to the buffer containing serialized event
|
||||
@param event_len length of the event accounting possible checksum alg
|
||||
|
||||
@return TRUE if test fails
|
||||
FALSE as success
|
||||
*/
|
||||
bool event_checksum_test(uchar *event_buf, ulong event_len, uint8 alg)
|
||||
{
|
||||
bool res= FALSE;
|
||||
uint16 flags= 0; // to store in FD's buffer flags orig value
|
||||
|
||||
if (alg != BINLOG_CHECKSUM_ALG_OFF && alg != BINLOG_CHECKSUM_ALG_UNDEF)
|
||||
{
|
||||
ha_checksum incoming;
|
||||
ha_checksum computed;
|
||||
|
||||
if (event_buf[EVENT_TYPE_OFFSET] == FORMAT_DESCRIPTION_EVENT)
|
||||
{
|
||||
#ifndef DBUG_OFF
|
||||
int8 fd_alg= event_buf[event_len - BINLOG_CHECKSUM_LEN -
|
||||
BINLOG_CHECKSUM_ALG_DESC_LEN];
|
||||
#endif
|
||||
/*
|
||||
FD event is checksummed and therefore verified w/o the binlog-in-use flag
|
||||
*/
|
||||
flags= uint2korr(event_buf + FLAGS_OFFSET);
|
||||
if (flags & LOG_EVENT_BINLOG_IN_USE_F)
|
||||
event_buf[FLAGS_OFFSET] &= ~LOG_EVENT_BINLOG_IN_USE_F;
|
||||
/*
|
||||
The only algorithm currently is CRC32. Zero indicates
|
||||
the binlog file is checksum-free *except* the FD-event.
|
||||
*/
|
||||
DBUG_ASSERT(fd_alg == BINLOG_CHECKSUM_ALG_CRC32 || fd_alg == 0);
|
||||
DBUG_ASSERT(alg == BINLOG_CHECKSUM_ALG_CRC32);
|
||||
/*
|
||||
Complile time guard to watch over the max number of alg
|
||||
*/
|
||||
compile_time_assert(BINLOG_CHECKSUM_ALG_ENUM_END <= 0x80);
|
||||
}
|
||||
incoming= uint4korr(event_buf + event_len - BINLOG_CHECKSUM_LEN);
|
||||
computed= my_checksum(0L, NULL, 0);
|
||||
/* checksum the event content but the checksum part itself */
|
||||
computed= my_checksum(computed, (const uchar*) event_buf,
|
||||
event_len - BINLOG_CHECKSUM_LEN);
|
||||
if (flags != 0)
|
||||
{
|
||||
/* restoring the orig value of flags of FD */
|
||||
DBUG_ASSERT(event_buf[EVENT_TYPE_OFFSET] == FORMAT_DESCRIPTION_EVENT);
|
||||
event_buf[FLAGS_OFFSET]= (uchar) flags;
|
||||
}
|
||||
res= !(computed == incoming);
|
||||
}
|
||||
return DBUG_EVALUATE_IF("simulate_checksum_test_failure", TRUE, res);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue