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 USizeContainer {
    value: usize,
}

#[derive(Clone, Entity, PartialEq)]
struct StringContainer {
    value: String,
}

#[derive(Schema)]
struct Schema {
    usize_containers: microrm::IDMap<USizeContainer>,
    string_containers: microrm::IDMap<StringContainer>,
}

#[test]
fn filter_lt() {
    let (pool, db): (_, Schema) = common::open_test_db!();
    {
        let mut txn = pool.start().unwrap();

        db.usize_containers
            .insert(&mut txn, USizeContainer { value: 5 })
            .unwrap();
        db.usize_containers
            .insert(&mut txn, USizeContainer { value: 4 })
            .unwrap();
        db.usize_containers
            .insert(&mut txn, USizeContainer { value: 9 })
            .unwrap();
        db.usize_containers
            .insert(&mut txn, USizeContainer { value: 7 })
            .unwrap();

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

        assert_eq!(
            db.usize_containers
                .filter_lt(USizeContainer::Value, 6usize)
                .count(&mut txn)
                .unwrap(),
            2
        );
    }
    {
        let mut txn = pool.start().unwrap();

        assert_eq!(
            db.usize_containers
                .with(USizeContainer::Value, 4usize)
                .filter_lt(USizeContainer::Value, 10usize)
                .count(&mut txn)
                .unwrap(),
            1
        );
        assert_eq!(
            db.usize_containers
                .filter_lt(USizeContainer::Value, 10usize)
                .with(USizeContainer::Value, 4usize)
                .count(&mut txn)
                .unwrap(),
            1
        );
    }
}

#[test]
fn filter_glob() {
    let (pool, db): (_, Schema) = common::open_test_db!();
    {
        let mut txn = pool.start().unwrap();

        db.string_containers
            .insert_ref(&mut txn, StringContainerRef { value: "abc" })
            .unwrap();
        db.string_containers
            .insert_ref(&mut txn, StringContainerRef { value: "abcd" })
            .unwrap();
        db.string_containers
            .insert_ref(&mut txn, StringContainerRef { value: "bcde" })
            .unwrap();
        db.string_containers
            .insert_ref(&mut txn, StringContainerRef { value: "cdef" })
            .unwrap();

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

        assert_eq!(
            db.string_containers
                .filter_glob(StringContainer::Value, "????")
                .count(&mut txn)
                .unwrap(),
            3
        );

        assert_eq!(
            db.string_containers
                .filter_glob(StringContainer::Value, "a*")
                .count(&mut txn)
                .unwrap(),
            2
        );
        assert_eq!(
            db.string_containers
                .filter_glob(StringContainer::Value, "b*")
                .count(&mut txn)
                .unwrap(),
            1
        );
    }
}

#[cfg(feature = "regex")]
#[test]
fn filter_regex() {
    let (pool, db): (_, Schema) = common::open_test_db!();
    {
        let mut txn = pool.start().unwrap();

        db.string_containers
            .insert_ref(&mut txn, StringContainerRef { value: "abc" })
            .unwrap();
        db.string_containers
            .insert_ref(&mut txn, StringContainerRef { value: "abcd" })
            .unwrap();
        db.string_containers
            .insert_ref(&mut txn, StringContainerRef { value: "bcde" })
            .unwrap();
        db.string_containers
            .insert_ref(&mut txn, StringContainerRef { value: "cdef" })
            .unwrap();

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

        assert_eq!(
            db.string_containers
                .filter_regex(StringContainer::Value, "...")
                .count(&mut txn)
                .unwrap(),
            4
        );
        assert_eq!(
            db.string_containers
                .filter_regex(StringContainer::Value, "....")
                .count(&mut txn)
                .unwrap(),
            3
        );

        assert_eq!(
            db.string_containers
                .filter_regex(StringContainer::Value, "^[ab]")
                .count(&mut txn)
                .unwrap(),
            3
        );

        assert_eq!(
            db.string_containers
                .filter_regex(StringContainer::Value, "^[ab]$")
                .count(&mut txn)
                .unwrap(),
            0
        );
    }
}