Commit 1d7ac774 authored by mattiasj@witty's avatar mattiasj@witty

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)
parent 4f112fc9
...@@ -3983,7 +3983,8 @@ int ha_partition::handle_unordered_next(uchar *buf, bool is_next_same) ...@@ -3983,7 +3983,8 @@ int ha_partition::handle_unordered_next(uchar *buf, bool is_next_same)
} }
else if (!(error= file->index_next(buf))) 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; m_last_part= m_part_spec.start_part;
DBUG_RETURN(0); // Row was in range DBUG_RETURN(0); // Row was in range
...@@ -4060,7 +4061,8 @@ int ha_partition::handle_unordered_scan_next_partition(uchar * buf) ...@@ -4060,7 +4061,8 @@ int ha_partition::handle_unordered_scan_next_partition(uchar * buf)
} }
if (!error) if (!error)
{ {
if (compare_key(end_range) <= 0) if (!(file->table_flags() & HA_READ_ORDER) ||
compare_key(end_range) <= 0)
{ {
m_last_part= i; m_last_part= i;
DBUG_RETURN(0); DBUG_RETURN(0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment