use sqlx::{Result, SqliteConnection};
struct User {
id: i64,
name: String,
}
async fn get_user_by_id(db: &mut SqliteConnection, id: i64) -> Result<User> {
sqlx::query_as!(
User,
"SELECT id, name FROM User WHERE id = ?",
id,
)
.fetch_one(db)
.await
}
11c11
< "SELECT id, name FROM User WHERE id = ?",
---
> "SELECT id, name FROM User WHERE id = ? AND NOT deleted",
$ DATABASE_URL='sqlite:blog.db' cargo check
Checking sqlx_blog v0.1.0 (/.../sqlx_blog)
error: error returned from database: (code: 1) no such column: deleted
--> src/lib.rs:9:5
|
9 | / sqlx::query_as!(
10 | | User,
11 | | "SELECT id, name FROM User WHERE id = ? AND NOT deleted",
12 | | id,
13 | | )
| |_____^
|
= note: this error originates in the macro ...
error: could not compile `sqlx_blog` due to previous error
$ DATABASE_URL='sqlite:blog.db' cargo sqlx prepare
Compiling sqlx_blog v0.1.0 (/.../sqlx_blog)
Finished dev [unoptimized + debuginfo] target(s) in 0.10s
query data written to `sqlx-data.json` in the current directory; please ...
$ bat --plain sqlx-data.json
{
"db": "SQLite",
"{query_hash}": {
"describe": {
... // A lot of information on the query
},
"query": "SELECT id, name FROM User WHERE id = ?"
}
... // More entries for all other queries
}
$ hyperfine --warmup 1 --prepare 'touch src/lib.rs' 'cargo check'
Benchmark 1: cargo check
Time (mean ± σ): 19.273 s ± 0.202 s [User: 18.977 s, System: 0.542 s]
Range (min … max): 18.839 s … 19.524 s 10 runs
$ mv sqlx-data.json sqlx-data.json.pretty
$ cat sqlx-data.json.pretty | jq -c > sqlx-data.json
$ hyperfine --warmup 1 --prepare 'touch src/lib.rs' 'cargo check'
Benchmark 1: cargo check
Time (mean ± σ): 14.965 s ± 0.294 s [User: 14.685 s, System: 0.531 s]
Range (min … max): 14.449 s … 15.368 s 10 runs
[profile.dev.build-override]
opt-level = 3
$ hyperfine --warmup 1 --prepare 'touch src/lib.rs' 'cargo check'
Benchmark 1: cargo check
Time (mean ± σ): 7.021 s ± 0.077 s [User: 6.696 s, System: 0.539 s]
Range (min … max): 6.887 s … 7.176 s 10 runs
原文作者:Rust语言中文社区;如有侵权,请联系管理员删除。