Browse Source

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.
pull/843/head
Sergey Petrunya 12 years ago
parent
commit
9a780a59d5
  1. 4
      storage/maria/ma_range.c

4
storage/maria/ma_range.c

@ -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'.

Loading…
Cancel
Save