rust-postgres/rust-postgres

different type for `params` between query_typed and query_typed_raw

Opened this issue · 0 comments

Pardon the possible dumb question, but is there a good reason for the difference between:

query_typed_raw:

params: I
where
    P: BorrowToSql,
    I: IntoIterator<Item = (P, Type)>,

and query_typed:

params: &[(&(dyn ToSql + Sync), Type)],

I'm forced to have 2 different implems for passing the same values:

query_typed:

    let p1 = serde_json::to_value(&query.params);
    let p2 = serde_json::to_value(&query);
    let sql_params: Vec<(&(dyn ToSql + Sync), Type)> = vec![
        (p1.as_ref().map_err(internal_error)?, Type::JSONB),
        (p2.as_ref().map_err(internal_error)?, Type::JSONB),
    ];

    let rows: Vec<String> = tx.query_typed(&query.sql, sql_params.as_slice()).await.map_err(internal_error)?;

query_typed_raw:

    let sql_params = vec![
        (serde_json::to_value(&query.params).map_err(internal_error)?, Type::JSONB),
        (serde_json::to_value(&query).map_err(internal_error)?, Type::JSONB),
    ];

    let rows = tx.query_typed_raw(&query.sql, sql_params).await.map_err(internal_error)?;

Am I doing something wrong?
Thanks :)