Post-merge fixes: merge MariaDB's fix for MDEV-5177 and MDEV-5555
with Oracle's fix for Bug#17588348 by reverting Oracle's fix.
This commit is contained in:
parent
b594e31b6b
commit
fd9e34ffd7
@ -7711,29 +7711,19 @@ uint ha_partition::min_record_length(uint options) const
|
|||||||
|
|
||||||
int ha_partition::cmp_ref(const uchar *ref1, const uchar *ref2)
|
int ha_partition::cmp_ref(const uchar *ref1, const uchar *ref2)
|
||||||
{
|
{
|
||||||
int cmp;
|
uint part_id;
|
||||||
my_ptrdiff_t diff1, diff2;
|
my_ptrdiff_t diff1, diff2;
|
||||||
|
handler *file;
|
||||||
DBUG_ENTER("ha_partition::cmp_ref");
|
DBUG_ENTER("ha_partition::cmp_ref");
|
||||||
|
|
||||||
cmp = m_file[0]->cmp_ref((ref1 + PARTITION_BYTES_IN_POS),
|
|
||||||
(ref2 + PARTITION_BYTES_IN_POS));
|
|
||||||
if (cmp)
|
|
||||||
DBUG_RETURN(cmp);
|
|
||||||
|
|
||||||
if ((ref1[0] == ref2[0]) && (ref1[1] == ref2[1]))
|
if ((ref1[0] == ref2[0]) && (ref1[1] == ref2[1]))
|
||||||
{
|
{
|
||||||
/* This means that the references are same and are in same partition.*/
|
part_id= uint2korr(ref1);
|
||||||
DBUG_RETURN(0);
|
file= m_file[part_id];
|
||||||
|
DBUG_ASSERT(part_id < m_tot_parts);
|
||||||
|
DBUG_RETURN(file->cmp_ref((ref1 + PARTITION_BYTES_IN_POS),
|
||||||
|
(ref2 + PARTITION_BYTES_IN_POS)));
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
In Innodb we compare with either primary key value or global DB_ROW_ID so
|
|
||||||
it is not possible that the two references are equal and are in different
|
|
||||||
partitions, but in myisam it is possible since we are comparing offsets.
|
|
||||||
Remove this assert if DB_ROW_ID is changed to be per partition.
|
|
||||||
*/
|
|
||||||
DBUG_ASSERT(!m_innodb);
|
|
||||||
|
|
||||||
diff1= ref2[1] - ref1[1];
|
diff1= ref2[1] - ref1[1];
|
||||||
diff2= ref2[0] - ref1[0];
|
diff2= ref2[0] - ref1[0];
|
||||||
if (diff1 > 0)
|
if (diff1 > 0)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user