summaryrefslogtreecommitdiff
path: root/sql/sql_base.cc
diff options
context:
space:
mode:
Diffstat (limited to 'sql/sql_base.cc')
-rw-r--r--sql/sql_base.cc42
1 files changed, 22 insertions, 20 deletions
diff --git a/sql/sql_base.cc b/sql/sql_base.cc
index a926c6e66fe..b151400db68 100644
--- a/sql/sql_base.cc
+++ b/sql/sql_base.cc
@@ -1675,7 +1675,7 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length,
goto found;
}
}
- if (allow_rowid &&
+ if (allow_rowid &&
!my_strcasecmp(system_charset_info, name, "_rowid") &&
(field=table->rowid_field))
goto found;
@@ -1688,7 +1688,7 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length,
{
field->query_id=thd->query_id;
table->used_fields++;
- table->used_keys&= field->part_of_key;
+ table->used_keys.intersect(field->part_of_key);
}
else
thd->dupp_field=field;
@@ -1717,7 +1717,7 @@ Field *find_field_in_table(THD *thd,TABLE *table,const char *name,uint length,
RETURN VALUES
0 Field is not found or field is not unique- error
message is reported
- not_found_field Function was called with report_error == FALSE and
+ not_found_field Function was called with report_error == FALSE and
field was not found. no error message reported.
found field
*/
@@ -2041,21 +2041,21 @@ bool setup_tables(TABLE_LIST *tables)
table->used_keys= table->keys_for_keyread;
if (table_list->use_index)
{
- key_map map= get_key_map_from_key_list(table,
- table_list->use_index);
- if (map == ~(key_map) 0)
+ key_map map;
+ 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;
}
if (table_list->ignore_index)
{
- key_map map= get_key_map_from_key_list(table,
- table_list->ignore_index);
- if (map == ~(key_map) 0)
+ key_map map;
+ get_key_map_from_key_list(&map, table, table_list->ignore_index);
+ if (map.is_set_all())
DBUG_RETURN(1);
- table->keys_in_use_for_query &= ~map;
+ table->keys_in_use_for_query.subtract(map);
}
- table->used_keys &= table->keys_in_use_for_query;
+ table->used_keys.intersect(table->keys_in_use_for_query);
if (table_list->shared || table->clear_query_id)
{
table->clear_query_id= 0;
@@ -2073,24 +2073,26 @@ bool setup_tables(TABLE_LIST *tables)
}
-key_map get_key_map_from_key_list(TABLE *table,
- List<String> *index_list)
+void get_key_map_from_key_list(key_map *map, TABLE *table,
+ List<String> *index_list)
{
- key_map map=0;
List_iterator_fast<String> it(*index_list);
String *name;
uint pos;
+
+ map->clear_all();
while ((name=it++))
{
if ((pos=find_type(name->c_ptr(), &table->keynames, 1+2)) <= 0)
{
my_error(ER_KEY_COLUMN_DOES_NOT_EXITS, MYF(0), name->c_ptr(),
table->real_name);
- return (~ (key_map) 0);
+ map->set_all();
+ return;
}
- map|= ((key_map) 1) << (pos-1);
+ map->set_bit(pos-1);
}
- return map;
+ return;
}
/****************************************************************************
@@ -2135,7 +2137,7 @@ insert_fields(THD *thd,TABLE_LIST *tables, const char *db_name,
if (field->query_id == thd->query_id)
thd->dupp_field=field;
field->query_id=thd->query_id;
- table->used_keys&= field->part_of_key;
+ table->used_keys.intersect(field->part_of_key);
}
/* All fields are used */
table->used_fields=table->fields;
@@ -2226,8 +2228,8 @@ int setup_conds(THD *thd,TABLE_LIST *tables,COND **conds)
/* Mark field used for table cache */
t1->field[i]->query_id=t2->field[j]->query_id=thd->query_id;
cond_and->list.push_back(tmp);
- t1->used_keys&= t1->field[i]->part_of_key;
- t2->used_keys&= t2->field[j]->part_of_key;
+ t1->used_keys.intersect(t1->field[i]->part_of_key);
+ t2->used_keys.intersect(t2->field[j]->part_of_key);
break;
}
}