Cargo.toml
toml
[dependencies]
ormlib = "0.1.0"
```rust #[tokio::test] async fn test() -> Result<(), ORMError> {
#[derive(TableDeserialize, TableSerialize, Serialize, Deserialize, Debug, Clone)]
#[table(name = "user")]
pub struct User {
pub id: i32,
pub name: Option<String>,
pub age: i32,
}
let file = std::path::Path::new("file.db");
if file.exists() {
std::fs::remove_file(file)?;
}
let _ = env_logger::Builder::from_env(env_logger::Env::new().default_filter_or("debug")).try_init();
let user = User {
id: 0,
name: Some("John".to_string()),
age: 30,
};
let conn = ORM::connect("file.db".to_string())?;
let init_script = "create_table_1.sql".to_string();
conn.init(init_script).await?;
let insert_id: i64 = conn.insert(user.clone()).run().await?;
log::debug!("insert_id: {}", insert_id);
let updated_rows: usize = conn.query_update("insert into user (id, age) values (2, 33)".to_string()).exec().await?;
let query = format!("select * from user where name like {}", conn.protect("%oh%".to_string()));
let result_set: Vec<Row> = conn.query(query).exec().await?;
for row in result_set {
let id: i32 = row.get(0).unwrap();
let name: Option<String> = row.get(1);
log::debug!("id: {}, name: {:?}", id, name);
}
let user_opt: Option<User> = conn.findOne(format!("id = {insert_id}")).run().await?;
log::debug!("{:?}", user_opt);
let user = User {
id: 0,
name: None,
age: 40,
};
let insert_id:i64 = conn.insert(user.clone()).run().await?;
log::debug!("insert_id: {}", insert_id);
let user_vec: Vec<User> = conn.findMany("id > 0".to_string()).limit(2).run().await?;
log::debug!("{:?}", user_vec);
let user_vec: Vec<User> = conn.findAll().run().await?;
log::debug!("{:?}", user_vec);
let updated_rows: usize = conn.update(user.clone(), "id = 1".to_string()).run().await?;
let user_vec: Vec<User> = conn.findAll().run().await?;
log::debug!("{:?}", user_vec);
let query = "delete from user".to_string();
let updated_rows = conn.query_update(query).exec().await?;
log::debug!("updated_rows: {}", updated_rows);
Ok(())
}
```
Example output:
text
[2023-08-24T07:56:47Z DEBUG ormlib] CREATE TABLE user (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT,
age INTEGER
)
[2023-08-24T07:56:47Z DEBUG ormlib] insert into user (name,age) values ("John",30)
[2023-08-24T07:56:47Z DEBUG test::tests] insert_id: 1
[2023-08-24T07:56:47Z DEBUG ormlib] insert into user (id, age) values (2, 33)
[2023-08-24T07:56:47Z DEBUG ormlib] select * from user where name like "%oh%"
[2023-08-24T07:56:47Z DEBUG test::tests] id: 1, name: Some("John")
[2023-08-24T07:56:47Z DEBUG ormlib] select * from user where id = 1
[2023-08-24T07:56:47Z DEBUG test::tests] Some(User { id: 1, name: Some("John"), age: 30 })
[2023-08-24T07:56:47Z DEBUG ormlib] insert into user (name,age) values (null,40)
[2023-08-24T07:56:47Z DEBUG test::tests] insert_id: 3
[2023-08-24T07:56:47Z DEBUG ormlib] select * from user where id > 0 LIMIT 2
[2023-08-24T07:56:47Z DEBUG test::tests] [User { id: 1, name: Some("John"), age: 30 }, User { id: 2, name: None, age: 33 }]
[2023-08-24T07:56:47Z DEBUG ormlib] select * from user
[2023-08-24T07:56:47Z DEBUG test::tests] [User { id: 1, name: Some("John"), age: 30 }, User { id: 2, name: None, age: 33 }, User { id: 3, name: None, age: 40 }]
[2023-08-24T07:56:47Z DEBUG ormlib] update user set name = null,age = 40 where id = 1
[2023-08-24T07:56:47Z DEBUG ormlib] select * from user
[2023-08-24T07:56:47Z DEBUG test::tests] [User { id: 1, name: None, age: 40 }, User { id: 2, name: None, age: 33 }, User { id: 3, name: None, age: 40 }]
[2023-08-24T07:56:47Z DEBUG ormlib] delete from user
[2023-08-24T07:56:47Z DEBUG test::tests] updated_rows: 3