Skip to content

Commit

Permalink
wip
Browse files Browse the repository at this point in the history
  • Loading branch information
vincent-herlemont committed May 21, 2024
1 parent e811a1e commit fec95be
Show file tree
Hide file tree
Showing 42 changed files with 339 additions and 308 deletions.
4 changes: 2 additions & 2 deletions benches/overhead_data_size.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion};
use itertools::Itertools;
use native_db::*;
use native_model::{native_model, Model};
use once_cell::sync::Lazy;
use rand::prelude::SliceRandom;
use redb::{ReadableTable, TableDefinition};
use serde::{Deserialize, Serialize};
use itertools::Itertools;

// 1 byte * 10000, 10 bytes * 10000, 100 bytes * 5000, 1KB * 1000, 1MB * 100, 10MB * 10
const ITERATIONS: &'static [(usize, usize)] = &[
Expand Down Expand Up @@ -134,7 +134,7 @@ fn use_native_db_insert(db: &Database, data: Data) {

fn use_native_db_scan(db: &Database) -> Vec<Data> {
let r = db.r_transaction().unwrap();
let out= r.scan().primary().unwrap().all().try_collect().unwrap();
let out = r.scan().primary().unwrap().all().try_collect().unwrap();
out
}

Expand Down
26 changes: 13 additions & 13 deletions native_db_macro/src/model_native_db.rs
Original file line number Diff line number Diff line change
Expand Up @@ -26,25 +26,25 @@ impl ModelNativeDB {
let out = if key.is_field() {
if key.options.optional {
quote! {
let value: Option<native_db::db_type::DatabaseInnerKeyValue> = self.#key_ident.as_ref().map(|v|v.database_inner_key_value());
let value = native_db::db_type::DatabaseKeyValue::Optional(value);
let value: Option<native_db::db_type::Key> = self.#key_ident.as_ref().map(|v|v.to_key());
let value = native_db::db_type::KeyEntry::Optional(value);
}
} else {
quote! {
let value: native_db::db_type::DatabaseInnerKeyValue = self.#key_ident.database_inner_key_value();
let value = native_db::db_type::DatabaseKeyValue::Default(value);
let value: native_db::db_type::Key = self.#key_ident.to_key();
let value = native_db::db_type::KeyEntry::Default(value);
}
}
} else if key.is_function() {
if key.options.optional {
quote! {
let value: Option<native_db::db_type::DatabaseInnerKeyValue> = self.#key_ident().map(|v|v.database_inner_key_value());
let value = native_db::db_type::DatabaseKeyValue::Optional(value);
let value: Option<native_db::db_type::Key> = self.#key_ident().map(|v|v.to_key());
let value = native_db::db_type::KeyEntry::Optional(value);
}
} else {
quote! {
let value: native_db::db_type::DatabaseInnerKeyValue = self.#key_ident().database_inner_key_value();
let value = native_db::db_type::DatabaseKeyValue::Default(value);
let value: native_db::db_type::Key = self.#key_ident().to_key();
let value = native_db::db_type::KeyEntry::Default(value);
}
}
} else {
Expand All @@ -59,7 +59,7 @@ impl ModelNativeDB {
.collect::<Vec<_>>();

quote! {
fn native_db_secondary_keys(&self) -> std::collections::HashMap<native_db::db_type::DatabaseKeyDefinition<native_db::db_type::DatabaseSecondaryKeyOptions>, native_db::db_type::DatabaseKeyValue> {
fn native_db_secondary_keys(&self) -> std::collections::HashMap<native_db::db_type::DatabaseKeyDefinition<native_db::db_type::DatabaseSecondaryKeyOptions>, native_db::db_type::KeyEntry> {
let mut secondary_tables_name = std::collections::HashMap::new();
#(#tokens)*
secondary_tables_name
Expand All @@ -72,14 +72,14 @@ impl ModelNativeDB {
let ident = primary_key.ident();
if primary_key.is_function() {
quote! {
fn native_db_primary_key(&self) -> native_db::db_type::DatabaseInnerKeyValue {
self.#ident().database_inner_key_value()
fn native_db_primary_key(&self) -> native_db::db_type::Key {
self.#ident().to_key()
}
}
} else {
quote! {
fn native_db_primary_key(&self) -> native_db::db_type::DatabaseInnerKeyValue {
self.#ident.database_inner_key_value()
fn native_db_primary_key(&self) -> native_db::db_type::Key {
self.#ident.to_key()
}
}
}
Expand Down
2 changes: 1 addition & 1 deletion src/database_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,7 @@ impl DatabaseBuilder {
}

/// Similar to [redb::Builder::open(...)](https://docs.rs/redb/latest/redb/struct.Builder.html#method.open)
/// But it also upgrades the database if needed if
/// But it also upgrades the database if needed if
pub fn open(&self, path: impl AsRef<Path>) -> Result<Database> {
let builder = self.database_configuration.new_rdb_builder();
let database_instance = match DatabaseInstance::open_on_disk(builder, &path) {
Expand Down
9 changes: 3 additions & 6 deletions src/database_instance.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ use redb::Builder;
use std::path::Path;
use std::path::PathBuf;


pub(crate) struct DatabaseInstance {
kind: DatabaseInstanceKind,
}
Expand Down Expand Up @@ -33,9 +32,7 @@ impl DatabaseInstance {
let in_memory_backend = redb::backends::InMemoryBackend::new();
let db = builder.create_with_backend(in_memory_backend)?;
Ok(Self {
kind: DatabaseInstanceKind::InMemory {
redb_database: db,
},
kind: DatabaseInstanceKind::InMemory { redb_database: db },
})
}

Expand All @@ -52,14 +49,14 @@ enum DatabaseInstanceKind {
redb_database: redb::Database,
#[allow(dead_code)]
path: PathBuf,
}
},
}

impl DatabaseInstanceKind {
pub(crate) fn redb_database(&self) -> Result<&redb::Database> {
match self {
DatabaseInstanceKind::InMemory { redb_database } => Ok(redb_database),
DatabaseInstanceKind::OnDisk { redb_database, .. } => Ok(redb_database)
DatabaseInstanceKind::OnDisk { redb_database, .. } => Ok(redb_database),
}
}
}
20 changes: 10 additions & 10 deletions src/db_type/input.rs
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
use crate::db_type::{
composite_key, DatabaseInnerKeyValue, DatabaseKeyDefinition, DatabaseKeyValue,
composite_key, Key, DatabaseKeyDefinition, KeyEntry,
DatabaseSecondaryKeyOptions, Error, Result,
};

#[derive(Debug)]
pub struct DatabaseInput {
pub(crate) primary_key: DatabaseInnerKeyValue,
pub(crate) primary_key: Key,
pub(crate) secondary_keys: std::collections::HashMap<
DatabaseKeyDefinition<DatabaseSecondaryKeyOptions>,
DatabaseKeyValue,
KeyEntry,
>,
pub(crate) value: Vec<u8>,
}
Expand All @@ -17,7 +17,7 @@ impl DatabaseInput {
pub(crate) fn secondary_key_value(
&self,
secondary_key_def: &DatabaseKeyDefinition<DatabaseSecondaryKeyOptions>,
) -> Result<DatabaseKeyValue> {
) -> Result<KeyEntry> {
let secondary_key = self.secondary_keys.get(secondary_key_def).ok_or(
Error::SecondaryKeyDefinitionNotFound {
table: "".to_string(),
Expand All @@ -26,14 +26,14 @@ impl DatabaseInput {
)?;
let out = if !secondary_key_def.options.unique {
match secondary_key {
DatabaseKeyValue::Default(value) => {
DatabaseKeyValue::Default(composite_key(value, &self.primary_key))
KeyEntry::Default(value) => {
KeyEntry::Default(composite_key(value, &self.primary_key))
}
DatabaseKeyValue::Optional(value) => {
KeyEntry::Optional(value) => {
let value = value
.as_ref()
.map(|value| composite_key(value, &self.primary_key));
DatabaseKeyValue::Optional(value)
KeyEntry::Optional(value)
}
}
} else {
Expand All @@ -46,13 +46,13 @@ impl DatabaseInput {
pub trait Input: Sized + native_model::Model {
fn native_db_model() -> crate::DatabaseModel;

fn native_db_primary_key(&self) -> DatabaseInnerKeyValue;
fn native_db_primary_key(&self) -> Key;

fn native_db_secondary_keys(
&self,
) -> std::collections::HashMap<
DatabaseKeyDefinition<DatabaseSecondaryKeyOptions>,
DatabaseKeyValue,
KeyEntry,
>;
fn native_db_bincode_encode_to_vec(&self) -> Result<Vec<u8>>;
fn native_db_bincode_decode_from_slice(slice: &[u8]) -> Result<Self>;
Expand Down
3 changes: 1 addition & 2 deletions src/db_type/key/inner_key_value_redb1.rs
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
#![allow(dead_code)]

/// This module contains a legacy implementation of the `InnerKeyValue` trait for the `redb1` crate.

use super::DatabaseInnerKeyValue as NewDatabaseInnerKeyValue;
use super::Key as NewDatabaseInnerKeyValue;
use redb1::{RedbKey as Key, RedbValue as Value, TypeName};
use std::fmt::Debug;
use std::ops::{Bound, Range, RangeBounds, RangeFrom, RangeInclusive, RangeTo, RangeToInclusive};
Expand Down
Loading

0 comments on commit fec95be

Please sign in to comment.