Planos de consulta ausentes no Data Explorer

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.


  1. \n

    \n ↩︎

  2. \n

    \n ↩︎

  3. Adicionei o link do GitHub e formatei o trecho de código ↩︎

3 curtidas

Bom trabalho em descobrir o problema!
Acho que é uma regressão de FEATURE: Allows CSV file result to be attached in automated PMs (#318) · discourse/discourse-data-explorer@cbae98f · GitHub.
O código foi refatorado, mas o parâmetro explain foi omitido.

2 curtidas

Obrigado por relatar este problema. Ele foi corrigido neste PR:

6 curtidas