Merge bk@192.168.21.1:mysql-5.1-opt
into mysql.com:/home/hf/work/28430/my51-28430 sql/ha_partition.h: Auto merged sql/ha_partition.cc: merging sql/log_event.cc: merging
This commit is contained in:
commit
1e3be8ca64
@ -3235,14 +3235,9 @@ end_dont_reset_start_part:
|
||||
|
||||
void ha_partition::position(const uchar *record)
|
||||
{
|
||||
handler *file;
|
||||
handler *file= m_file[m_last_part];
|
||||
DBUG_ENTER("ha_partition::position");
|
||||
|
||||
if (unlikely(get_part_for_delete(record, m_rec0, m_part_info, &m_last_part)))
|
||||
m_last_part= 0;
|
||||
|
||||
file= m_file[m_last_part];
|
||||
|
||||
file->position(record);
|
||||
int2store(ref, m_last_part);
|
||||
memcpy((ref + PARTITION_BYTES_IN_POS), file->ref,
|
||||
@ -3300,6 +3295,36 @@ int ha_partition::rnd_pos(uchar * buf, uchar *pos)
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
Read row using position using given record to find
|
||||
|
||||
SYNOPSIS
|
||||
rnd_pos_by_record()
|
||||
record Current record in MySQL Row Format
|
||||
|
||||
RETURN VALUE
|
||||
>0 Error code
|
||||
0 Success
|
||||
|
||||
DESCRIPTION
|
||||
this works as position()+rnd_pos() functions, but does some extra work,
|
||||
calculating m_last_part - the partition to where the 'record'
|
||||
should go.
|
||||
|
||||
called from replication (log_event.cc)
|
||||
*/
|
||||
|
||||
int ha_partition::rnd_pos_by_record(uchar *record)
|
||||
{
|
||||
DBUG_ENTER("ha_partition::rnd_pos_by_record");
|
||||
|
||||
if (unlikely(get_part_for_delete(record, m_rec0, m_part_info, &m_last_part)))
|
||||
DBUG_RETURN(1);
|
||||
|
||||
DBUG_RETURN(handler::rnd_pos_by_record(record));
|
||||
}
|
||||
|
||||
|
||||
/****************************************************************************
|
||||
MODULE index scan
|
||||
****************************************************************************/
|
||||
|
@ -353,6 +353,7 @@ public:
|
||||
virtual int rnd_end();
|
||||
virtual int rnd_next(uchar * buf);
|
||||
virtual int rnd_pos(uchar * buf, uchar * pos);
|
||||
virtual int rnd_pos_by_record(uchar *record);
|
||||
virtual void position(const uchar * record);
|
||||
|
||||
/*
|
||||
|
@ -1343,6 +1343,17 @@ public:
|
||||
virtual int ft_read(uchar *buf) { return HA_ERR_WRONG_COMMAND; }
|
||||
virtual int rnd_next(uchar *buf)=0;
|
||||
virtual int rnd_pos(uchar * buf, uchar *pos)=0;
|
||||
/*
|
||||
one has to use this method when to find
|
||||
random position by record as the plain
|
||||
position() call doesn't work for some
|
||||
handlers for random position
|
||||
*/
|
||||
virtual int rnd_pos_by_record(uchar *record)
|
||||
{
|
||||
position(record);
|
||||
return rnd_pos(record, ref);
|
||||
}
|
||||
virtual int read_first_row(uchar *buf, uint primary_key);
|
||||
/*
|
||||
The following function is only needed for tables that may be temporary
|
||||
|
@ -7501,8 +7501,7 @@ int Rows_log_event::find_row(const Relay_log_info *rli)
|
||||
|
||||
*/
|
||||
DBUG_PRINT("info",("locating record using primary key (position)"));
|
||||
table->file->position(table->record[0]);
|
||||
error= table->file->rnd_pos(table->record[0], table->file->ref);
|
||||
int error= table->file->rnd_pos_by_record(table->record[0]);
|
||||
if (error)
|
||||
{
|
||||
DBUG_PRINT("info",("rnd_pos returns error %d",error));
|
||||
|
Loading…
x
Reference in New Issue
Block a user