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
每月下载量 85次
在 4 个包中使用(通过 derive-sql)
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}Sqlite
的rusqlite
包装器名称;#[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