MDEV-4687: impossible where with < operation, but =-5 return one row

- Let _ma_record_pos() set SEARCH_PART_KEY when doing a search on
  a prefix of a [unique] key.  Otherwise, _ma_search_pos() would 
  find the first key equal to search key, and assume it is also 
  the last one, which will make a wrong estimate of key's position.

  A wrong key position may cause min_pos > max_pos and records_in_range()
  will return 0, which will make the optimizer think it's an impossible 
  range while in fact it is not.
This commit is contained in:
Sergey Petrunya 2013-07-25 22:42:26 +04:00
parent 9e13011efb
commit 9a780a59d5

View file

@ -144,6 +144,10 @@ static ha_rows _ma_record_pos(MARIA_HA *info, const uchar *key_data,
(HA_KEYSEG**) 0);
DBUG_EXECUTE("key", _ma_print_key(DBUG_FILE, &key););
nextflag=maria_read_vec[search_flag];
/* Indicate if we're doing a search on a key prefix */
if (((((key_part_map)1) << key.keyinfo->keysegs) - 1) != keypart_map)
nextflag |= SEARCH_PART_KEY;
/*
my_handler.c:ha_compare_text() has a flag 'skip_end_space'.