I'm new to Rust, and trying to implement an API using sqlx and PostgresQL.
When reading about PostgresQL, it seems like it doesn't support u64
, as MySQL does. So I have changed my code to i64
, as documented here.
However it seems like some of my code still expects a u64
value:
An example of the code:
pub async fn drop_table(&self) -> Result<i64, sqlx::Error> {
sqlx::query("DROP TABLE IF EXISTS users;")
.execute(&*self.pool)
.await
}
And the error it produces:
error[E0308]: mismatched types
--> src\dao\user_dao.rs:7:9
|
7 | / sqlx::query("DROP TABLE IF EXISTS users;")
8 | | .execute(&*self.pool)
9 | | .await
| |__________________^ expected `i64`, found `u64`
|
= note: expected enum `std::result::Result<i64, _>`
found enum `std::result::Result<u64, _>`
I could probably cast the variable, but that could end up in a panic at runtime, so what would be the proper way to handle it?
I've used this as a reference application.
The reference application is using sqlx v0.3.5 and in that version of sqlx
the execute
method always returns a Result<u64, sqlx::Error>
regardless of whether you're executing the query on a PostgresQL connection or a MySQL connection. The u64
represents the number of rows affected by executing the query and will always be unsigned. You should update the signature of drop_table
to reflect that:
pub async fn drop_table(&self) -> Result<u64, sqlx::Error> {
sqlx::query("DROP TABLE IF EXISTS users;")
.execute(&*self.pool)
.await
}