Mientras usaba el explorador de datos, recientemente me pregunté para qué servía ‘Incluir plan de consulta’. Así que lo habilité para averiguarlo, pero no noté ningún cambio.
Así que le pregunté a alguien de quien he aprendido mucho a lo largo de los años y él compartió una captura de pantalla de cómo se supone que debe verse. Tenía curiosidad por saber por qué no funcionaba, así que lo comprobé y noté que explain: true está incluido en la solicitud enviada[1], pero no incluido en la respuesta[2]. Así que intenté entender dónde se perdió. En algún momento le pregunté a ChatGPT porque no estaba seguro de dónde buscar a continuación. Fue muy útil y me guió a través de toda la depuración. Probé la solución, después de agregar explain: opts[:explain], apareció el plan de consulta. Aunque tengo que admitir que solo tengo una vaga idea de lo que estaba haciendo. Es por eso que le pedí a ChatGPT que escribiera un resumen de nuestros hallazgos para el informe de errores[3]:
Resumen del error – Falta `explain` en los resultados de la consulta (Explorador de datos de Discourse) AI
Problema:
El campo explain no se incluía en la respuesta JSON del endpoint /run del Explorador de datos, incluso cuando se pasaba explain=true en la solicitud. Como resultado, los planes de consulta no eran visibles en la interfaz de usuario frontal, a pesar de que Postgres los devolvía correctamente.
Causa raíz:
Si bien el backend pasó correctamente opts[:explain] = true a la lógica de ejecución de la consulta y el valor result[:explain] estaba presente, este valor no se reenvió al ResultFormatConverter. El método to_json en ResultFormatConverter solo incluye la clave explain si opts[:explain] == true. Sin embargo, esta opción no se incluyó en la llamada convert.
Solución:
Agregue explain: opts[:explain] a la llamada a ResultFormatConverter.convert, de la siguiente manera:
render json:
ResultFormatConverter.convert(
:json,
result,
query_params: query_params,
download: params[:download],
+ explain: opts[:explain]
)
Resultado:
Una vez pasado correctamente, el campo explain se incluye en la respuesta JSON y se representa adecuadamente en la interfaz de usuario frontal.


