#sqlite #derive #traits #sql #procedural #proc-macro #derive-sqlite

derive-sql-sqlite

伴随 derive-sql 包。实现了 DeriveSqlite 过程宏,用于为SQLite实现特性。

13个版本 (7个破坏性版本)

新增 0.12.1 2024年8月26日
0.11.3 2024年7月22日
0.8.1 2024年3月18日
0.6.0 2023年11月11日

#385 in #procedural

Download history 132/week @ 2024-06-03 54/week @ 2024-06-10 9/week @ 2024-06-17 11/week @ 2024-07-01 290/week @ 2024-07-15 156/week @ 2024-07-22 68/week @ 2024-07-29 5/week @ 2024-08-12 6/week @ 2024-08-19

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

MIT 协议

24KB
409

过程宏,用于自动为提供的结构体生成与SQLite数据库兼容的Sqlable特性。

使用方法

您编写

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

然后您可以使用


let connection = rusqlite::Connection::open_in_memory().unwrap();
let mut db: PersonSqlite<_> = connection.into();

// initialise
db.create_table().unwrap();

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

// Query
let persons: Vec<Person> = db.select(Box::new(SimpleFilter::try_from(("age", 32)).unwrap())).unwrap();
assert!(persons[0].name.eq("Bert"));

// Update
db.update(Box::new(SimpleFilter::try_from(("name", "Abi")).unwrap()), Person { name: "Abi".to_string(), age: 32 }).unwrap();

// Delete
db.delete(Box::new(SimpleFilter::try_from(("name", "Abi")).unwrap())).unwrap();

// Clear the table
db.delete_table().unwrap();

容器属性

  • #[derive_sqlite(ident = ...)] 覆盖来自 {class}Sqliterusqlite 包装器名称;
  • #[derive_sqlite(table_name = "...")] 指定表的名称(默认为容器名称的小写);

字段属性

  • #[derive_sqlite(is_primary_key = true)] 指定其中一个字段为主键。只能指定一个主键。主键字段在表中是唯一的。
  • #[derive_sqlite(on_insert = ...)] 指定一个类型为 fn() -> {type} 的函数,该类型与字段的类型相对应。当项目插入时调用该函数,并将函数返回的值分配给字段,在项目插入之前。典型用途是分配创建日期。
  • #[derive_sqlite(on_update = ...)] 指定一个类型为 fn() -> {type} 的函数,该类型与字段的类型相对应。当项目更新时调用该函数,并将函数返回的值分配给字段,在项目更新之前。典型用途是分配最后修改日期。

依赖项

~0.8–1.3MB
~26K SLoC