修改 session.rs,严格按照如下设计思路进行: 1、DriverManager 管理全局 Driver,从 DriverManager 中的 session 方法获取到 Option; 2、不管从哪里调用session中的 begin 方法,都将事务上下文放入本地线程变量中,不管从哪里调用 session 的 execute 和 query 都可以从本地线程变量中获取事务上下文,用带事务的链接执行; 3、示例用法:
fn test() {
let session = UORM.session(&db_name).unwrap();
session.begin(); session .execute( "INSERT INTO users(name, age) VALUES (#{name}, #{age})", &NewUser { name: "alice", age: 18, }, ) .await .unwrap();
}
fn exec() { let session = UORM.session(&db_name).unwrap(); session .execute( "INSERT INTO users(name, age) VALUES (#{name}, #{age})", &NewUser { name: "bob", age: 20, }, ) .await .unwrap();
let mut rows: Vec<User> = session
.query("SELECT id, name, age FROM users ORDER BY id", &NoArgs {})
.await
.unwrap();
session.commit();
}