Commit 392c3122 authored by unknown's avatar unknown

BUG#22178: Scan ordered performed also on engines not supporting ordered scans

Scan of ranges without start key should not use ordered scans unless it
is requested.


sql/ha_partition.cc:
  Scan of ranges without start key should not use ordered scans unless it
  is requested.
sql/ha_partition.h:
  Scan of ranges without start key should not use ordered scans unless it
  is requested.
parent c690c11f
...@@ -3655,7 +3655,10 @@ int ha_partition::read_range_first(const key_range *start_key, ...@@ -3655,7 +3655,10 @@ int ha_partition::read_range_first(const key_range *start_key,
if (!start_key) // Read first record if (!start_key) // Read first record
{ {
m_index_scan_type= partition_index_first; if (m_ordered)
m_index_scan_type= partition_index_first;
else
m_index_scan_type= partition_index_first_unordered;
error= common_first_last(m_rec0); error= common_first_last(m_rec0);
} }
else else
...@@ -3869,6 +3872,18 @@ int ha_partition::handle_unordered_scan_next_partition(byte * buf) ...@@ -3869,6 +3872,18 @@ int ha_partition::handle_unordered_scan_next_partition(byte * buf)
DBUG_PRINT("info", ("index_first on partition %d", i)); DBUG_PRINT("info", ("index_first on partition %d", i));
error= file->index_first(buf); error= file->index_first(buf);
break; break;
case partition_index_first_unordered:
/*
We perform a scan without sorting and this means that we
should not use the index_first since not all handlers
support it and it is also unnecessary to restrict sort
order.
*/
DBUG_PRINT("info", ("read_range_first on partition %d", i));
table->record[0]= buf;
error= file->read_range_first(0, end_range, eq_range, 0);
table->record[0]= m_rec0;
break;
default: default:
DBUG_ASSERT(FALSE); DBUG_ASSERT(FALSE);
DBUG_RETURN(1); DBUG_RETURN(1);
......
...@@ -45,9 +45,10 @@ class ha_partition :public handler ...@@ -45,9 +45,10 @@ class ha_partition :public handler
{ {
partition_index_read= 0, partition_index_read= 0,
partition_index_first= 1, partition_index_first= 1,
partition_index_last= 2, partition_index_first_unordered= 2,
partition_index_read_last= 3, partition_index_last= 3,
partition_no_index_scan= 4 partition_index_read_last= 4,
partition_no_index_scan= 5
}; };
/* Data for the partition handler */ /* Data for the partition handler */
int m_mode; // Open mode int m_mode; // Open mode
......
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