結果をクエリキャッシュに格納するタイミングについて
SELECT文が投げられた場合、sql/sql_parse.ccの以下の2667行目付近を通過する。これはSQLCOMのswitchがSQLCOM_SELECTと判定されて、かつExplainではないと判定された場合の、パーサ処理完了後かつオプティマイザ処理開始前に走るコード(のはず)。
else { if (!sel_result && !(sel_result= new select_send())) goto error; query_cache_store_query(thd, all_tables); res= handle_select(thd, lex, sel_result, 0); if (sel_result != lex->result) delete sel_result; }
このhandle_selectの行でオプティマイザ→実行レイヤ→ストレージエンジンといった順序で呼出が行われて、さらにネットワーク系APIを使ってクライアントに結果送信が行われる、という風に理解してたのだけど、query_cache_store_queryの呼出がhandle_selectよりも前なのはなんでだろう?