mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
BUG#920255: Wrong result (extra rows) with loosescan and IN subquery
The problem was that LooseScan execution code assumed that tab->key holds the index used for looseScan. This is only true when range or full index scan are used. In case of ref access, the index is in tab->ref.key (and tab->index==0 which explains how LooseScan passed tests with ref access: they used one index) Fixed by setting/using loosescan_key, which always the correct index#.
This commit is contained in:
@@ -4107,6 +4107,7 @@ int setup_semijoin_dups_elimination(JOIN *join, ulonglong options,
|
||||
for (uint kp=0; kp < pos->loosescan_picker.loosescan_parts; kp++)
|
||||
keylen += tab->table->key_info[keyno].key_part[kp].store_length;
|
||||
|
||||
tab->loosescan_key= keyno;
|
||||
tab->loosescan_key_len= keylen;
|
||||
if (pos->n_sj_tables > 1)
|
||||
tab[pos->n_sj_tables - 1].do_firstmatch= tab;
|
||||
|
Reference in New Issue
Block a user