Piani di query mancanti in Data Explorer

Durante l’utilizzo dell’esplora dati, mi sono recentemente chiesto a cosa servisse “Includi piano di query”. Quindi l’ho abilitato per scoprirlo, ma non ho notato alcun cambiamento.

Così ho chiesto a qualcuno da cui ho imparato molto nel corso degli anni e lui ha condiviso uno screenshot di come dovrebbe apparire. Ero curioso di sapere perché non funzionasse, così ho controllato e ho notato che explain: true è incluso nella richiesta inviata[1], ma non è incluso nella risposta[2]. Quindi ho cercato di capire dove si fosse perso. A un certo punto ho chiesto a ChatGPT perché non ero sicuro di dove guardare dopo. È stato molto utile e mi ha guidato attraverso tutto il debug. Ho provato la correzione, dopo aver aggiunto explain: opts[:explain] è apparso il piano di query. Anche se devo ammettere che ho solo una vaga idea di quello che stavo facendo. Ecco perché ho chiesto a ChatGPT di scrivere un riassunto delle nostre scoperte per il bug report[3]:

Riepilogo Bug – `explain` mancante nei Risultati Query (Discourse Data Explorer) AI

Problema:
Il campo explain non veniva incluso nella risposta JSON dell’endpoint /run del Data Explorer, anche quando explain=true veniva passato nella richiesta. Di conseguenza, i piani di query non erano visibili nell’interfaccia utente frontend, sebbene Postgres li restituisse correttamente.

Causa principale:
Mentre il backend passava correttamente opts[:explain] = true nella logica di esecuzione della query e il valore result[:explain] era presente, questo valore non veniva inoltrato a ResultFormatConverter. Il metodo to_json in ResultFormatConverter include la chiave explain solo se opts[:explain] == true. Tuttavia, questa opzione non era inclusa nella chiamata convert.

Correzione:
Aggiungere explain: opts[:explain] alla chiamata a ResultFormatConverter.convert, in questo modo:

render json:
          ResultFormatConverter.convert(
            :json,
            result,
            query_params: query_params,
            download: params[:download],
+           explain: opts[:explain]
          )

Risultato:
Una volta passato correttamente, il campo explain viene incluso nella risposta JSON e reso correttamente nell’interfaccia utente frontend.


  1. \n

    \n ↩︎

  2. \n

    \n ↩︎

  3. Ho aggiunto il link a GitHub e formattato lo snippet di codice ↩︎

3 Mi Piace

Ottimo lavoro nell’individuare il problema!
Penso che sia una regressione da FEATURE: Allows CSV file result to be attached in automated PMs (#318) · discourse/discourse-data-explorer@cbae98f · GitHub.
Il codice è stato refattorizzato, ma il parametro explain è stato omesso.

2 Mi Piace

Grazie per aver segnalato questo problema. È stato risolto in questa PR:

6 Mi Piace