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

Function save_agg_explain_data

sql/sql_select.cc:31555–31606  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

31553*/
31554
31555bool save_agg_explain_data(JOIN *join, Explain_select *xpl_sel)
31556{
31557 JOIN_TAB *join_tab=join->join_tab + join->exec_join_tab_cnt();
31558 Explain_aggr_node *prev_node;
31559 Explain_aggr_node *node= xpl_sel->aggr_tree;
31560 bool is_analyze= join->thd->lex->analyze_stmt;
31561 THD *thd= join->thd;
31562
31563 for (uint i= 0; i < join->aggr_tables; i++, join_tab++)
31564 {
31565 // Each aggregate means a temp.table
31566 prev_node= node;
31567 if (!(node= new (thd->mem_root) Explain_aggr_tmp_table))
31568 return 1;
31569 node->child= prev_node;
31570
31571 if (join_tab->window_funcs_step)
31572 {
31573 Explain_aggr_node *new_node=
31574 join_tab->window_funcs_step->save_explain_plan(thd->mem_root,
31575 is_analyze);
31576 if (!new_node)
31577 return 1;
31578
31579 prev_node=node;
31580 node= new_node;
31581 node->child= prev_node;
31582 }
31583
31584 /* The below matches execution in join_init_read_record() */
31585 if (join_tab->distinct)
31586 {
31587 prev_node= node;
31588 if (!(node= new (thd->mem_root) Explain_aggr_remove_dups))
31589 return 1;
31590 node->child= prev_node;
31591 }
31592
31593 if (join_tab->filesort)
31594 {
31595 Explain_aggr_filesort *eaf =
31596 new (thd->mem_root) Explain_aggr_filesort(thd->mem_root, is_analyze, join_tab->filesort);
31597 if (!eaf)
31598 return 1;
31599 prev_node= node;
31600 node= eaf;
31601 node->child= prev_node;
31602 }
31603 }
31604 xpl_sel->aggr_tree= node;
31605 return 0;
31606}
31607
31608
31609/**

Callers 1

Calls 2

exec_join_tab_cntMethod · 0.80
save_explain_planMethod · 0.80

Tested by

no test coverage detected