| 787 | */ |
| 788 | |
| 789 | void Explain_union::print_explain_json_regular( |
| 790 | Explain_query *query, Json_writer *writer, bool is_analyze) |
| 791 | { |
| 792 | Json_writer_nesting_guard guard(writer); |
| 793 | char table_name_buffer[SAFE_NAME_LEN]; |
| 794 | |
| 795 | bool started_object= print_explain_json_cache(writer, is_analyze); |
| 796 | |
| 797 | writer->add_member("query_block").start_object(); |
| 798 | |
| 799 | if (is_recursive_cte) |
| 800 | writer->add_member("recursive_union").start_object(); |
| 801 | else |
| 802 | writer->add_member("union_result").start_object(); |
| 803 | |
| 804 | if (using_tmp) |
| 805 | { |
| 806 | make_union_table_name(table_name_buffer); |
| 807 | writer->add_member("table_name").add_str(table_name_buffer); |
| 808 | writer->add_member("access_type").add_str("ALL"); // not very useful |
| 809 | |
| 810 | /* r_loops (not present in tabular output) */ |
| 811 | if (is_analyze) |
| 812 | { |
| 813 | writer->add_member("r_loops").add_ll( |
| 814 | fake_select_lex_tracker.get_loops()); |
| 815 | } |
| 816 | |
| 817 | /* `r_rows` */ |
| 818 | if (is_analyze) |
| 819 | { |
| 820 | writer->add_member("r_rows"); |
| 821 | if (fake_select_lex_tracker.has_scans()) |
| 822 | writer->add_double(fake_select_lex_tracker.get_avg_rows()); |
| 823 | else |
| 824 | writer->add_null(); |
| 825 | } |
| 826 | } |
| 827 | writer->add_member("query_specifications").start_array(); |
| 828 | |
| 829 | for (int i= 0; i < (int) union_members.elements(); i++) |
| 830 | { |
| 831 | writer->start_object(); |
| 832 | //writer->add_member("dependent").add_str("TODO"); |
| 833 | //writer->add_member("cacheable").add_str("TODO"); |
| 834 | Explain_select *sel= query->get_select(union_members.at(i)); |
| 835 | sel->print_explain_json(query, writer, is_analyze); |
| 836 | writer->end_object(); |
| 837 | } |
| 838 | writer->end_array(); |
| 839 | |
| 840 | print_explain_json_for_children(query, writer, is_analyze); |
| 841 | |
| 842 | writer->end_object(); // union_result |
| 843 | writer->end_object(); // query_block |
| 844 | |
| 845 | if (started_object) |
| 846 | writer->end_object(); |
nothing calls this directly
no test coverage detected