1
0
mirror of https://github.com/MariaDB/server.git synced 2025-07-29 05:21:33 +03:00

Bug #28476: force index on a disabled myisam index gives error 124

When processing the USE/FORCE index hints
the optimizer was not checking if the indexes 
specified are enabled (see ALTER TABLE).
Fixed by:
 Backporting the fix for bug 20604 to 5.0


mysql-test/r/key.result:
  Test for BUG 20604.
  The important part of the test is the explain output that 
  tests what indexes are used.
mysql-test/r/myisam.result:
  Bug #28476: test cases
mysql-test/t/key.test:
  Bug 20604: 
  The minimal test case that reveals the bug. The optimizer for 
  aggregates relies on keys disabled with ALTER TABLE ... DISABLE KEYS
  not being in the set TABLE::keys_in_use_for_query.
  When the execution engine tries to use a disabled index, MyISAM
  returns an error.
mysql-test/t/myisam.test:
  Bug #28476: test cases
sql/sql_base.cc:
  Bug #28476: 
   - Ignore disabled indexes in USE/FORCE index
sql/sql_select.cc:
  Bug 20604 : The intersection operation between table->s->keys_in_use 
  and table->keys_in_use_for_query is no longer necessary.
  We can trust that the latter is a subset of the former.
sql/table.h:
  Bug 20604:
  Added comments to TABLE_SHARE::keys_in_use and
  TABLE::keys_in_use_for_query.
This commit is contained in:
unknown
2007-05-22 15:58:30 +03:00
parent b015146e41
commit 3332b80130
7 changed files with 93 additions and 6 deletions

View File

@ -4811,7 +4811,12 @@ bool setup_tables(THD *thd, Name_resolution_context *context,
get_key_map_from_key_list(&map, table, table_list->use_index);
if (map.is_set_all())
DBUG_RETURN(1);
table->keys_in_use_for_query=map;
/*
Don't introduce keys in keys_in_use_for_query that weren't there
before. FORCE/USE INDEX should not add keys, it should only remove
all keys except the key(s) specified in the hint.
*/
table->keys_in_use_for_query.intersect(map);
}
if (table_list->ignore_index)
{