From 0f1ca35b05b9b3b40d230c4e25395d13c69afdcb Mon Sep 17 00:00:00 2001 From: Denis Cornehl Date: Wed, 28 Feb 2024 15:15:31 +0100 Subject: [PATCH] switch to using sqlx::query! macro in web::features --- ...e2ff0304cd9f28c3c8bc056c5b2a20952fc99.json | 46 +++++++++++++++++++ src/web/features.rs | 19 ++++---- 2 files changed, 56 insertions(+), 9 deletions(-) create mode 100644 .sqlx/query-27e9c3c8c3f7770a31967760fdce2ff0304cd9f28c3c8bc056c5b2a20952fc99.json diff --git a/.sqlx/query-27e9c3c8c3f7770a31967760fdce2ff0304cd9f28c3c8bc056c5b2a20952fc99.json b/.sqlx/query-27e9c3c8c3f7770a31967760fdce2ff0304cd9f28c3c8bc056c5b2a20952fc99.json new file mode 100644 index 000000000..68b8f882c --- /dev/null +++ b/.sqlx/query-27e9c3c8c3f7770a31967760fdce2ff0304cd9f28c3c8bc056c5b2a20952fc99.json @@ -0,0 +1,46 @@ +{ + "db_name": "PostgreSQL", + "query": "\n SELECT releases.features as \"features?: Vec\"\n FROM releases\n INNER JOIN crates ON crates.id = releases.crate_id\n WHERE crates.name = $1 AND releases.version = $2", + "describe": { + "columns": [ + { + "ordinal": 0, + "name": "features?: Vec", + "type_info": { + "Custom": { + "name": "_feature", + "kind": { + "Array": { + "Custom": { + "name": "feature", + "kind": { + "Composite": [ + [ + "name", + "Text" + ], + [ + "subfeatures", + "TextArray" + ] + ] + } + } + } + } + } + } + } + ], + "parameters": { + "Left": [ + "Text", + "Text" + ] + }, + "nullable": [ + true + ] + }, + "hash": "27e9c3c8c3f7770a31967760fdce2ff0304cd9f28c3c8bc056c5b2a20952fc99" +} diff --git a/src/web/features.rs b/src/web/features.rs index 08ed87dbd..cb118f00d 100644 --- a/src/web/features.rs +++ b/src/web/features.rs @@ -10,7 +10,6 @@ use crate::{ use anyhow::anyhow; use axum::{extract::Path, response::IntoResponse}; use serde::Serialize; -use sqlx::Row as _; use std::collections::{HashMap, VecDeque}; const DEFAULT_NAME: &str = "default"; @@ -57,13 +56,15 @@ pub(crate) async fn build_features_handler( let metadata = MetaData::from_crate(&mut conn, &name, &version, &version_or_latest).await?; - let row = sqlx::query( - "SELECT releases.features FROM releases - INNER JOIN crates ON crates.id = releases.crate_id - WHERE crates.name = $1 AND releases.version = $2", + let row = sqlx::query!( + r#" + SELECT releases.features as "features?: Vec" + FROM releases + INNER JOIN crates ON crates.id = releases.crate_id + WHERE crates.name = $1 AND releases.version = $2"#, + name, + version ) - .bind(&name) - .bind(&version) .fetch_optional(&mut *conn) .await? .ok_or_else(|| anyhow!("missing release"))?; @@ -71,8 +72,8 @@ pub(crate) async fn build_features_handler( let mut features = None; let mut default_len = 0; - if let Some(raw) = row.get(0) { - let result = order_features_and_count_default_len(raw); + if let Some(raw_features) = row.features { + let result = order_features_and_count_default_len(raw_features); features = Some(result.0); default_len = result.1; }