| 680 | } |
| 681 | |
| 682 | void print_keyuse_array_for_trace(THD *thd, DYNAMIC_ARRAY *keyuse_array) |
| 683 | { |
| 684 | DBUG_ASSERT(thd->trace_started()); |
| 685 | |
| 686 | Json_writer_object wrapper(thd); |
| 687 | Json_writer_array trace_key_uses(thd, "ref_optimizer_key_uses"); |
| 688 | |
| 689 | for (uint i=0; i < keyuse_array->elements; i++) |
| 690 | { |
| 691 | KEYUSE *keyuse= (KEYUSE*)dynamic_array_ptr(keyuse_array, i); |
| 692 | Json_writer_object keyuse_elem(thd); |
| 693 | keyuse_elem.add_table_name(keyuse->table->reginfo.join_tab); |
| 694 | if (keyuse->keypart != FT_KEYPART && !keyuse->is_for_hash_join()) |
| 695 | { |
| 696 | keyuse_elem.add("index", keyuse->table->key_info[keyuse->key].name); |
| 697 | } |
| 698 | keyuse_elem. |
| 699 | add("field", (keyuse->keypart == FT_KEYPART) ? "<fulltext>": |
| 700 | (keyuse->is_for_hash_join() ? |
| 701 | keyuse->table->field[keyuse->keypart] |
| 702 | ->field_name.str : |
| 703 | keyuse->table->key_info[keyuse->key] |
| 704 | .key_part[keyuse->keypart] |
| 705 | .field->field_name.str)). |
| 706 | add("equals",keyuse->val). |
| 707 | add("null_rejecting",keyuse->null_rejecting); |
| 708 | } |
| 709 | } |
| 710 | |
| 711 | |
| 712 | #ifndef DBUG_OFF |
no test coverage detected