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

Function create_hj_key_for_table

sql/sql_select.cc:13554–13662  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

13552*/
13553
13554static bool create_hj_key_for_table(JOIN *join, JOIN_TAB *join_tab,
13555 KEYUSE *org_keyuse, table_map used_tables)
13556{
13557 KEY *keyinfo;
13558 KEY_PART_INFO *key_part_info;
13559 KEYUSE *keyuse= org_keyuse;
13560 uint key_parts= 0;
13561 THD *thd= join->thd;
13562 TABLE *table= join_tab->table;
13563 bool first_keyuse= TRUE;
13564 DBUG_ENTER("create_hj_key_for_table");
13565
13566 do
13567 {
13568 if (!(~used_tables & keyuse->used_tables) &&
13569 join_tab->keyuse_is_valid_for_access_in_chosen_plan(join, keyuse) &&
13570 are_tables_local(join_tab, keyuse->used_tables))
13571 {
13572 if (first_keyuse)
13573 {
13574 key_parts++;
13575 }
13576 else
13577 {
13578 KEYUSE *curr= org_keyuse;
13579 for( ; curr < keyuse; curr++)
13580 {
13581 if (curr->keypart == keyuse->keypart &&
13582 !(~used_tables & curr->used_tables) &&
13583 join_tab->keyuse_is_valid_for_access_in_chosen_plan(join,
13584 curr) &&
13585 are_tables_local(join_tab, curr->used_tables))
13586 break;
13587 }
13588 if (curr == keyuse)
13589 key_parts++;
13590 }
13591 }
13592 first_keyuse= FALSE;
13593 keyuse++;
13594 } while (keyuse->table == table && keyuse->is_for_hash_join());
13595 if (!key_parts)
13596 DBUG_RETURN(TRUE);
13597 /* This memory is allocated only once for the joined table join_tab */
13598 if (!(keyinfo= thd->alloc<KEY>(1)) ||
13599 !(key_part_info = thd->alloc<KEY_PART_INFO>(key_parts)))
13600 DBUG_RETURN(TRUE);
13601 keyinfo->usable_key_parts= keyinfo->user_defined_key_parts = key_parts;
13602 keyinfo->ext_key_parts= keyinfo->user_defined_key_parts;
13603 keyinfo->key_part= key_part_info;
13604 keyinfo->key_length=0;
13605 keyinfo->algorithm= HA_KEY_ALG_UNDEF;
13606 keyinfo->flags= HA_GENERATED_KEY;
13607 keyinfo->is_statistics_from_stat_tables= FALSE;
13608 keyinfo->all_nulls_key_parts= 0;
13609 keyinfo->stat_storage_length= 0;
13610 keyinfo->name.str= "$hj";
13611 keyinfo->name.length= 3;

Callers 1

create_ref_for_keyFunction · 0.85

Calls 4

are_tables_localFunction · 0.85
is_for_hash_joinMethod · 0.80

Tested by

no test coverage detected