El problema es cuando escribo un código como este.
let data = sqlx::query("SELECT id, name FROM test") .fetch_all(&pool) .await; Obtengo un no method named `fetch_all` found for struct `sqlx_core::query::Query<'_, _>` in the current scope . A continuación, el archivo Léame oficial de introducción. Esto también es aplicable al método query_as . Sospecho que, por alguna razón, el compilador no "ve" los métodos de rasgo de sqlx::Query , pero no sé cómo incluirlos en el alcance.
Aunque cuando uso macro sqlx::query! , .fetch_all existe.
Además, existe el inconveniente de que el LSP rust-analyzer me dice que el tipo de la variable de data es std::result::Result<[type error], [type error]> , lo que elimina cualquier posibilidad de usar el autocompletado y la verificación de tipos , aparte de ejecutar (notoriamente lento) el compilador de óxido.
PD: uso PostgreSQL como una solución de base de datos, si eso puede ayudar.
La variable de entorno PSS DATABASE_URL se establece en el momento de la compilación y es correcta, por lo que las macros hacen todo el trabajo de validación en el momento de la compilación.
Navegando docs.rs un poco, encontré que type sqlx::Query ni siquiera tiene finalizadores que no sean fetch . En cuanto a sqlx::query_as , el rasgo que estaba buscando se llamaba PgQueryAs , que en realidad contiene fetch_all , fetch_optional , fetch_one , etc. Y agregar use sqlx::postgress::PgQueryAs solucionó el problema.
A pesar de eso, todavía no conozco una solución para evaluar macros para obtener tipos decentes en mi IDE.