Ao usar o explorador de dados, recentemente me perguntei para que servia ‘Incluir plano de consulta’. Então o ativei para descobrir - mas não notei nenhuma mudança.
Então perguntei a alguém de quem aprendi muito ao longo dos anos e ele compartilhou uma captura de tela de como deveria parecer. Fiquei curioso para saber por que não estava funcionando, então verifiquei e notei que explain: true está incluído na solicitação enviada[1], mas não incluído na resposta[2]. Então tentei entender onde ele se perdeu. Em algum momento, perguntei ao ChatGPT porque não tinha certeza de onde procurar a seguir. Foi muito útil e me guiou durante toda a depuração. Tentei a correção, depois de adicionar explain: opts[:explain], o plano de consulta apareceu. Embora eu tenha que admitir que tenho apenas uma vaga ideia do que estava fazendo. É por isso que pedi ao ChatGPT para escrever um resumo de nossas descobertas para o relatório de bug[3]:
Resumo do Bug – `explain` Ausente nos Resultados da Consulta (Discourse Data Explorer) AI
Problema:
O campo explain não estava sendo incluído na resposta JSON do endpoint /run do Data Explorer, mesmo quando explain=true era passado na solicitação. Como resultado, os planos de consulta não estavam visíveis na interface do usuário frontal, embora o Postgres os retornasse corretamente.
Causa Raiz:
Embora o backend tenha passado corretamente opts[:explain] = true para a lógica de execução da consulta e o valor result[:explain] estivesse presente, esse valor não foi encaminhado para o ResultFormatConverter. O método to_json em ResultFormatConverter inclui a chave explain apenas se opts[:explain] == true. No entanto, essa opção não foi incluída na chamada convert.
Correção:
Adicione explain: opts[:explain] à chamada para ResultFormatConverter.convert, assim:
render json:
ResultFormatConverter.convert(
:json,
result,
query_params: query_params,
download: params[:download],
+ explain: opts[:explain]
)
Resultado:
Uma vez passado corretamente, o campo explain é incluído na resposta JSON e renderizado adequadamente na interface do usuário frontal.


