Skip to content

slackers123/somedb

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SomeDb

Extremely simple database to store data.

Usage

use somedb::entity;
#[entity]
#[derive(Debug, PartialEq)]
struct MyStruct {
    #[entity_id(auto_generate)]
    id: i32,
    foo: String,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut db = somedb::db::Database::default(true)?;

    let entity = MyStruct {
        id: 0, // this will be ignored because auto_generate is active
        foo: "bar".to_string(),
    };

    let stored_entity = db.store(entity)?;

    let loaded_entity = db.find_by_id::<MyStruct>(stored_entity.id)?.unwrap();

    assert_eq!(stored_entity, loaded_entity);

    Ok(())
}

Queries

There are two types of queries. Simple queries are simply iterators over a list of entities.

let alans = db.query::<Person>()?
    .filter(|p| p.first_name == "Alan")
    .collect::<Vec<_>>()

Complex quereies are inspired by polars queries and will allow for more complex optimizations in the future and they can be saved back to the database immediately.

db.query_mut::<Person>()?
    .filter(|p| p.first_name().eq("Alan"))
    .save_to_db()?;

Features

  • Store entities
  • Load all entities
  • Load entities by id
  • Delete entities by id
  • general query iterator
  • better queries to support future storage model

Future Improvements

  • improved storage model to avoid loading entire database into memory

About

Extremely simple rust database for storing data.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages