MCPcopy Create free account
hub / github.com/MariaDB/server / generate_derived_keys_for_table

Function generate_derived_keys_for_table

sql/sql_select.cc:15192–15256  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15190}
15191
15192static
15193bool generate_derived_keys_for_table(KEYUSE *keyuse, uint count, uint keys)
15194{
15195 TABLE *table= keyuse->table;
15196 if (table->alloc_keys(keys))
15197 return TRUE;
15198 uint key_count= 0;
15199 KEYUSE *first_keyuse= keyuse;
15200 uint prev_part= keyuse->keypart;
15201 uint parts= 0;
15202 uint i= 0;
15203
15204 for ( ; i < count && key_count < keys; )
15205 {
15206 do
15207 {
15208 keyuse->key= table->s->keys;
15209 keyuse->keypart_map= (key_part_map)1 << parts;
15210 keyuse++;
15211 i++;
15212 }
15213 while (i < count && keyuse->used_tables == first_keyuse->used_tables &&
15214 keyuse->keypart == prev_part);
15215 parts++;
15216 if (i < count && keyuse->used_tables == first_keyuse->used_tables)
15217 {
15218 prev_part= keyuse->keypart;
15219 }
15220 else
15221 {
15222 KEYUSE *save_first_keyuse= first_keyuse;
15223 if (table->check_tmp_key(table->s->keys, parts,
15224 get_next_field_for_derived_key_simple,
15225 (uchar *) &first_keyuse))
15226
15227 {
15228 JOIN_TAB *tab;
15229 first_keyuse= save_first_keyuse;
15230 if (table->add_tmp_key(table->s->keys, parts,
15231 get_next_field_for_derived_key,
15232 (uchar *) &first_keyuse,
15233 FALSE))
15234 return TRUE;
15235 table->reginfo.join_tab->keys.set_bit(table->s->keys - 1);
15236 tab= table->reginfo.join_tab;
15237 for (uint i=0; i < parts; i++)
15238 tab->key_dependent|= save_first_keyuse[i].used_tables;
15239 }
15240 else
15241 {
15242 /* Mark keyuses for this key to be excluded */
15243 for (KEYUSE *curr=save_first_keyuse; curr < keyuse; curr++)
15244 {
15245 curr->key= MAX_KEY;
15246 }
15247 }
15248 first_keyuse= keyuse;
15249 key_count++;

Callers 1

generate_derived_keysFunction · 0.85

Calls 4

alloc_keysMethod · 0.80
check_tmp_keyMethod · 0.80
add_tmp_keyMethod · 0.80
set_bitMethod · 0.45

Tested by

no test coverage detected