ormlib 0.1.0

Indeed, an ORM library, not a framework, written in Rust
Documentation
ormlib-0.1.0 has been yanked.

orm-lib

Usage

Cargo.toml

[dependencies]
ormlib = "0.1.0"
   #[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:

[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