Skip to main content

query_as

Macro query_as 

Source
query_as!() { /* proc-macro */ }
Expand description

Compile-time SQL schema generator.

Parses a SQL CREATE TABLE statement and generates typed table declarations equivalent to typed_query! { table ... }.

§Syntax

use sz_orm_macros::schema;

schema! {
    "CREATE TABLE users (id INTEGER PRIMARY KEY, name TEXT NOT NULL, email TEXT)"
}

生成与以下手动声明等价的代码:

typed_query! {
    table users {
        id: i64,
        name: String,
        email: Option<String>,
    }
}

类型化裸 SQL 查询宏(SQLx query_as! 风格)。

用法:query_as!(RecordType, "SELECT col1, col2 FROM table WHERE id = ?")

生成 sz_orm_core::queryable::QueryAs::<RecordType>::new("SELECT ...")。 在 db-verify feature + SZ_ORM_QUERY_VERIFY=1 环境下会连真 DB 执行 EXPLAIN 验证 SQL 合法性。

运行时列名验证(P0-2):QueryAs::fetch_all 会比对 DB 返回的列名 与 RecordType::row_desc()(由 #[derive(FromQueryResult)] 自动生成)。 若 SQL SELECT 列不在 struct 字段中,返回 DbError::QueryError

§示例

#[derive(FromQueryResult)]
struct User { id: i64, name: String }

let q = query_as!(User, "SELECT id, name FROM users WHERE id = 1");
let users: Vec<User> = q.fetch_all(&mut conn).await?;