Como esta é uma função de alta chamada, há alguma diferença se eu declarar const QUERY
dentro ou fora dela fn insert()
?
impl Player {
pub async fn insert(
db: sqlx::PgConnection,
input: &InputPlayer,
) -> Result<Self> {
const QUERY: &str = r#"INSERT INTO "player" ("team_id", "id", "other_fields") VALUES ($1, $2, $3, $4, $5, $6, $7)"#;
let result = sqlx::query_as::<_, Self>(QUERY)
.bind(input.team_id())
.bind(input.id())
.bind(input.other())
.bind(input.other())
.bind(input.other())
.bind(input.other())
.fetch_one(db)
.await?;
Ok(result)
}
}
Ele será avaliado em tempo de compilação, independentemente de você declará-lo dentro ou fora da função. Então não deve haver nenhuma diferença de desempenho.
Vamos dar uma olhada na documentação :
Você pode confirmar esse comportamento com um teste de assembly simples. Vamos dar uma olhada no código a seguir:
Isso compila o seguinte assembly amd64 :
Como você pode ver, ambas as strings acabam ficando no mesmo local — armazenadas estaticamente como dados no binário resultante.
Então, uma resposta curta é: não, não há diferença de desempenho, já que em ambos os casos será uma string estática em algum lugar na seção de dados do binário.