#sql #statement #derive #traits #procedural #proc-macro #table

derive-sql-statement

伴随 derive-sql 包。实现了 DeriveSqlStatement 过程宏,以实现允许读取/写入/更新等语句功能的特性。

6 个版本

新版本 0.12.1 2024年8月26日
0.12.0 2024年8月26日
0.11.3 2024年7月22日

#89 in #statement

Download history 278/week @ 2024-07-15 156/week @ 2024-07-22 59/week @ 2024-07-29

每月下载量 291
4 个包中使用 (通过 derive-sql)

MIT 许可证

30KB
398

过程宏,用于自动生成SQL语句特性 TableStatementSelectStatementInsertStatementDeleteStatement,为提供的结构体以及SQL参数到和从SQL行之间的转换。

如何使用

您编写

#[derive(derive_sql::DeriveSqlStatement)]
pub struct Person {
  name: String,
  age: u32,
}

然后您可以使用

use derive_sql::structs::*;

fn handle<Con, Row>(s: &mut Con) 
where Con: traits::Connection<Row>,
      Row: traits::Row,
{
  use derive_sql::traits::{Table, SelectV2, Insert, Delete, Update};
  let db = SqlPerson::default();

  // initialise
  db.create(s).unwrap();

  // Insert entries
  db.insert(s, &Person {name: "Abi".to_string(), age: 31 }).unwrap();
  db.insert(s, &Person {name: "Bert".to_string(), age: 32 }).unwrap();
  db.insert(s, &Person {name: "Charlie".to_string(), age: 33 }).unwrap();

  // Query
  let persons: Vec<Person> = db.select_with_filter(s, &Field::from("age").eq(32)).unwrap();
  assert!(persons[0].name.eq("Bert"));

  // Update
  db.update_with_filter(s, &Field::from("name").eq("Abi"), &Person { name: "Abi".to_string(), age: 32 }).unwrap();

  // Delete
  db.delete_with_filter(s, &Field::from("name").eq("Abi")).unwrap();

  // Clear the table
  db.drop(s).unwrap();
}

let pool = ::mysql::Pool::new("mysql://test@localhost/simpledb").unwrap();
let mut connection = pool.get_conn().unwrap();
handle(&mut connection);

容器属性

  • #[derive_sqlite(ident = ...)] 覆盖包装器的名称,从 Sql{class};
  • #[derive_sqlite(table_name = "...")] 指定表名(默认为容器名称的小写);
  • #[derive_sqlite(read_only = true/false)] 指定是否实现只读(即表、选择、插入、更新、删除,参数转换和行转换)或只读语句(即选择和行转换)

字段属性

  • #[derive_sqlite(is_primary_key = true)] 指定字段之一为主键。只能指定一个主键。主键字段在表中是唯一的。主键不能是字符串 - 以下代码将无法编译
#[derive(DeriveMysql)]
pub struct Person {
  #[derive_sqlite(is_primary_key = true)]
  name: String,
  age: u32,
}

依赖关系

~0.7–1.2MB
~24K SLoC