easy-sqlite 0.4.1

Little sqlite framework
Documentation
use crate::{
    AMSQLConnection, IAsyncExecutor, IDbRepo, IExecutor, INewDbRepo, ITable, SStr, SVec,
    TableManager,
};

struct Tbl;

impl ITable for Tbl {
    const NAME: SStr = "my_table";
    const COLUMNS: SVec<(SStr, SStr)> = &[
        ("id", "INTEGER PRIMARY KEY"),
        ("key", "TEXT"),
        ("value", "TEXT"),
    ];
    const INDEXES: SVec<SStr> = &["key"];
    const UNIQUE: SVec<SStr> = &["key"];
}

async fn cnn_with_tbl() -> AMSQLConnection {
    let cnn = AMSQLConnection::new(":memory:").unwrap();
    let lock = cnn.lock().await;
    let man = TableManager::<_, Tbl>::create(lock);
    man.init().unwrap();
    cnn
}

#[tokio::test]
async fn test_no_lock_insert_select() {
    let cnn = cnn_with_tbl().await;
    cnn.execute(
        &format!("INSERT INTO {t} (key, value) VALUES (?, ?)", t = Tbl::NAME,),
        &[&"\'", &"\""],
    )
    .await
    .unwrap();
    let str_pairs: Vec<(String, String)> = cnn
        .get_many(
            &format!("SELECT key, value FROM {t}", t = Tbl::NAME),
            &[],
            |row| Ok((row.get(0)?, row.get(1)?)),
        )
        .await
        .unwrap();
    assert_eq!(str_pairs, vec![("\'".to_string(), "\"".to_string())])
}

#[tokio::test]
async fn test_lock_insert_select() {
    let cnn = cnn_with_tbl().await;
    let lock = cnn.lock().await;
    lock.execute(
        &format!("INSERT INTO {t} (key, value) VALUES (?, ?)", t = Tbl::NAME,),
        &[&"\'", &"\""],
    )
    .unwrap();
    let str_pairs: Vec<(String, String)> = lock
        .get_many(
            &format!("SELECT key, value FROM {t}", t = Tbl::NAME),
            &[],
            |row| Ok((row.get(0)?, row.get(1)?)),
        )
        .unwrap();
    assert_eq!(str_pairs, vec![("\'".to_string(), "\"".to_string())])
}