microrm 0.6.3

Lightweight ORM using sqlite as a backend
Documentation
use microrm::prelude::*;
use test_log::test;

mod common;

#[derive(Clone, Entity, PartialEq)]
struct Container {
    value: usize,
}

#[derive(Schema)]
struct Schema {
    containers: microrm::IDMap<Container>,
}

fn simple_test_data(txn: &mut microrm::Transaction, db: &Schema) {
    db.containers.insert(txn, Container { value: 5 }).unwrap();
    db.containers.insert(txn, Container { value: 4 }).unwrap();
    db.containers.insert(txn, Container { value: 9 }).unwrap();
    db.containers.insert(txn, Container { value: 7 }).unwrap();
}

#[test]
fn repeated_limit() {
    let (pool, db): (_, Schema) = common::open_test_db!();
    let mut txn = pool.start().unwrap();
    let Err(microrm::Error::LogicError(msg)) = db.containers.limit(1).limit(1).count(&mut txn)
    else {
        panic!("should have failed")
    };
    assert_eq!(msg, "repeated limit on query");
}

#[test]
fn simple_limit() {
    let (pool, db): (_, Schema) = common::open_test_db!();

    {
        let mut txn = pool.start().unwrap();
        simple_test_data(&mut txn, &db);
        txn.commit().unwrap();
    }

    {
        let mut txn = pool.start().unwrap();

        assert_eq!(db.containers.limit(2).get(&mut txn).unwrap().len(), 2);
        assert_eq!(db.containers.limit(5).get(&mut txn).unwrap().len(), 4);
    }
}

#[test]
fn limit_count_interaction() {
    let (pool, db): (_, Schema) = common::open_test_db!();

    {
        let mut txn = pool.start().unwrap();
        simple_test_data(&mut txn, &db);
        txn.commit().unwrap();
    }

    {
        let mut txn = pool.start().unwrap();

        assert_eq!(db.containers.limit(2).count(&mut txn).unwrap(), 4);
        assert_eq!(db.containers.limit(5).count(&mut txn).unwrap(), 4);
    }
}