in sources/cg_query_plan.c [378:454]
static void emit_print_query_plan_stat_proc(charbuf *output) {
bprintf(output,
"%s",
"CREATE PROC print_query_plan_stat(id_ integer not null)\n"
"BEGIN\n"
" CALL printf(\" [\\n\");\n"
" DECLARE Ca CURSOR FOR\n"
" WITH\n"
" scan(name, count, priority) AS (\n"
" SELECT 'SCAN', COUNT(*), 0 \n"
" FROM plan_temp \n"
" WHERE zdetail LIKE '%scan%' AND sql_id = id_\n"
" ),\n"
" search(name, count, priority) AS (\n"
" SELECT 'SEARCH', COUNT(*), 4 \n"
" FROM plan_temp \n"
" WHERE zdetail LIKE '%search%' AND iselectid NOT IN (\n"
" SELECT iselectid \n"
" FROM plan_temp \n"
" WHERE zdetail LIKE '%search%using%covering%'\n"
" ) AND sql_id = id_\n"
" ),\n"
" search_fast(name, count, priority) AS (\n"
" SELECT 'SEARCH USING COVERING', COUNT(*), 5 \n"
" FROM plan_temp \n"
" WHERE zdetail LIKE '%search%using%covering%' AND sql_id = id_\n"
" ),\n"
" b_tree(name, count, priority) AS (\n"
" SELECT 'TEMP B-TREE', COUNT(*), 1 \n"
" FROM plan_temp \n"
" WHERE zdetail LIKE '%temp b-tree%' AND sql_id = id_\n"
" ),\n"
" compound_subqueries(name, count, priority) AS (\n"
" SELECT 'COMPOUND SUBQUERIES', COUNT(*), 2 \n"
" FROM plan_temp \n"
" WHERE zdetail LIKE '%compound subqueries%' AND sql_id = id_\n"
" ),\n"
" execute_scalar(name, count, priority) AS (\n"
" SELECT 'EXECUTE SCALAR', COUNT(*), 3 \n"
" FROM plan_temp \n"
" WHERE zdetail LIKE '%execute scalar%' AND sql_id = id_\n"
" )\n"
" SELECT \n"
" CASE name\n"
" WHEN 'SCAN' THEN '{\"value\": \"' || name || '\", \"style\": {\"fontSize\": 14, \"color\": \"red\", \"fontWeight\": \"bold\"}}'\n"
" WHEN 'TEMP B-TREE' THEN '{\"value\": \"' || name || '\", \"style\": {\"fontSize\": 14, \"color\": \"red\", \"fontWeight\": \"bold\"}}'\n"
" ELSE '\"' || name || '\"'\n"
" END name,\n"
" CASE name\n"
" WHEN 'SCAN' THEN '{\"value\": ' || count || ', \"style\": {\"fontSize\": 14, \"color\": \"red\", \"fontWeight\": \"bold\"}}'\n"
" WHEN 'TEMP B-TREE' THEN '{\"value\": ' || count || ', \"style\": {\"fontSize\": 14, \"color\": \"red\", \"fontWeight\": \"bold\"}}'\n"
" ELSE '' || count\n"
" END value\n"
" FROM (\n"
" SELECT * FROM scan\n"
" UNION ALL\n"
" SELECT * FROM search\n"
" UNION ALL\n"
" SELECT * FROM search_fast\n"
" UNION ALL\n"
" SELECT * FROM b_tree\n"
" UNION ALL\n"
" SELECT * FROM compound_subqueries\n"
" UNION ALL\n"
" SELECT * FROM execute_scalar\n"
" )\n"
" WHERE count > 0 ORDER BY priority ASC, count DESC;\n"
" CALL printf(\" [],\\n\");\n"
" LOOP FETCH Ca\n"
" BEGIN\n"
" CALL printf(\" [%s, %s],\\n\", Ca.name, Ca.value);\n"
" END;\n"
" CALL printf(\" []\\n\");\n"
" CALL printf(\" ],\\n\");\n"
"END;\n"
);
}