smoldb 0.1.0

Small type-safe nosql-ish object store built on SQLite
Documentation


extern crate smoldb;
use smoldb::*;


#[derive(Clone, Debug, PartialEq, Smoldb)]
pub struct Example {
    #[index]
    pub id: i64,

    #[index]
    pub name: String,

    pub description: String,
}

// SQL query generation tests

#[test]
fn sql_create() {
    assert_eq!(&Example::sql_create("test"), "CREATE TABLE test (id VARCHAR NOT NULL, name VARCHAR NOT NULL, __object BLOB NOT NULL);");
}

#[test]
fn sql_insert() {
    assert_eq!(&Example::sql_insert("test"), "INSERT INTO test (id, name, __object) VALUES (?1, ?2, ?3);");
}

#[test]
fn sql_select() {
    assert_eq!(&Example::sql_select("test", &[ExampleIndicies::Name("John Doe".to_string())]), "SELECT __object FROM test WHERE name = ?;");
}

#[test]
fn sql_update() {
    assert_eq!(&Example::sql_update("test", &[ExampleIndicies::Name("John Doe".to_string())]), "UPDATE test SET id = ?1, name = ?2, __object = ?3 WHERE name = ?;");
}

#[test]
fn sql_delete() {
    assert_eq!(&Example::sql_delete("test", &[ExampleIndicies::Name("John Doe".to_string())]), "DELETE FROM test WHERE name = ?;");
}

#[test]
fn index_id() {
    let i = ExampleIndicies::Id(16);

    assert_eq!(i.name(), "id");
    assert_eq!(i.value(), ToSqlOutput::Owned(Value::Integer(16)));
}

#[test]
fn index_name() {
    let i = ExampleIndicies::Name("abc".to_string());

    assert_eq!(i.name(), "name");
    assert_eq!(i.value(), ToSqlOutput::Owned(Value::Text("abc".to_string())));
}