From 1d7ac77479d22e25c58c37f36ba086e8ebb5356b Mon Sep 17 00:00:00 2001 From: "mattiasj@witty." <> Date: Mon, 3 Dec 2007 16:12:25 +0100 Subject: [PATCH] Bug#30480: Falcon: searches fail if LIKE and key partition (also fixes the bugs: Bug#29320, Bug#29493 and Bug#30536) Problem: Partitioning did not handle unordered scans correctly for engines with unordered read order. Solution: do not stop scanning fi a recored is out of range, since there can be more records within the range afterwards. Note: this is the patch that fixes the bug, but since there are no storage engines shipped with mysql 5.1 (falcon comes in 6.0) there are no test cases (it is a separate patch that only goes into 6.0) --- sql/ha_partition.cc | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sql/ha_partition.cc b/sql/ha_partition.cc index 1400d9da753..5abdf873c81 100644 --- a/sql/ha_partition.cc +++ b/sql/ha_partition.cc @@ -3983,7 +3983,8 @@ int ha_partition::handle_unordered_next(uchar *buf, bool is_next_same) } else if (!(error= file->index_next(buf))) { - if (compare_key(end_range) <= 0) + if (!(file->table_flags() & HA_READ_ORDER) || + compare_key(end_range) <= 0) { m_last_part= m_part_spec.start_part; DBUG_RETURN(0); // Row was in range @@ -4060,7 +4061,8 @@ int ha_partition::handle_unordered_scan_next_partition(uchar * buf) } if (!error) { - if (compare_key(end_range) <= 0) + if (!(file->table_flags() & HA_READ_ORDER) || + compare_key(end_range) <= 0) { m_last_part= i; DBUG_RETURN(0);