データエクスプローラーを使用している際に、「Include query plan」が何のためにあるのか疑問に思いました。そこで、調べてみるために有効にしましたが、変化に気づきませんでした。
そこで、長年お世話になっている人に尋ねたところ、どのように表示されるべきかのスクリーンショットを共有してくれました。なぜ機能しないのか疑問に思い、確認したところ、リクエストには explain: true が含まれているものの、レスポンスには含まれていないことに気づきました。
どこで失われたのかを理解しようとしました。次にどこを見ればよいかわからなかったので、ChatGPTに尋ねました。それは非常に役立ち、デバッグ全体をナビゲートしてくれました。修正を試みたところ、explain: opts[:explain] を追加した後、クエリプランが表示されました。ただし、何をしているのかほとんどわかっていなかったことを認めなければなりません。そのため、ChatGPTにバグレポートの調査結果の要約を作成するように依頼しました。
バグの概要 – クエリ結果での `explain` の欠落 (Discourse Data Explorer) AI
問題:
リクエストで explain=true が渡された場合でも、データエクスプローラーの /run エンドポイントの JSON レスポンスに explain フィールドが含まれていませんでした。その結果、Postgres は正しく返していましたが、クエリプランはフロントエンド UI に表示されませんでした。
根本原因:
バックエンドはクエリ実行ロジックに opts[:explain] = true を正しく渡しており、result[:explain] 値は存在していましたが、この値は ResultFormatConverter に転送されていませんでした。ResultFormatConverter の to_json メソッドは、opts[:explain] == true の場合にのみ explain キーを含みます。しかし、このオプションは convert 呼び出しに含まれていませんでした。
修正:
ResultFormatConverter.convert の呼び出しに explain: opts[:explain] を追加します。
render json:
ResultFormatConverter.convert(
:json,
result,
query_params: query_params,
download: params[:download],
+ explain: opts[:explain]
)
結果:
正しく渡されると、explain フィールドが JSON レスポンスに含まれ、フロントエンド UI に正しくレンダリングされます。


