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

Function generate_derived_keys

sql/sql_select.cc:15289–15354  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

15287*/
15288
15289static
15290bool generate_derived_keys(DYNAMIC_ARRAY *keyuse_array)
15291{
15292 KEYUSE *keyuse, *end_keyuse;
15293 size_t elements= keyuse_array->elements;
15294 TABLE *prev_table= 0;
15295
15296 DBUG_ASSERT(elements > 0);
15297 /* The last element is an end marker */
15298 DBUG_ASSERT(dynamic_element(keyuse_array, elements-1,
15299 KEYUSE*)[0].table == 0);
15300
15301 for (keyuse= dynamic_element(keyuse_array, 0, KEYUSE*),
15302 end_keyuse= keyuse + elements - 1;
15303 keyuse < end_keyuse;
15304 keyuse++)
15305 {
15306 DBUG_ASSERT(keyuse->table);
15307
15308 KEYUSE *first_table_keyuse= NULL;
15309 table_map last_used_tables= 0;
15310 uint count= 0;
15311 uint keys= 0;
15312 TABLE_LIST *derived= NULL;
15313
15314 if (keyuse->table != prev_table)
15315 derived= keyuse->table->pos_in_table_list;
15316
15317 if (!derived->is_materialized_derived())
15318 continue;
15319
15320 for (;;)
15321 {
15322 if (keyuse->table != prev_table)
15323 {
15324 prev_table= keyuse->table;
15325 while (keyuse->table == prev_table && keyuse->key != MAX_KEY)
15326 keyuse++;
15327 if (keyuse->table != prev_table)
15328 {
15329 keyuse--;
15330 break;
15331 }
15332 first_table_keyuse= keyuse;
15333 last_used_tables= keyuse->used_tables;
15334 count= 0;
15335 keys= 0;
15336 }
15337 else if (keyuse->used_tables != last_used_tables)
15338 {
15339 keys++;
15340 last_used_tables= keyuse->used_tables;
15341 }
15342 count++;
15343 keyuse++;
15344 if (keyuse->table != prev_table)
15345 {
15346 if (generate_derived_keys_for_table(first_table_keyuse, count, ++keys))

Callers 1

sort_and_filter_keyuseFunction · 0.85

Calls 2

Tested by

no test coverage detected