Introduce customs updates

This commit is contained in:
Clément Renault 2019-10-11 15:33:35 +02:00
parent da6ab2753e
commit 02575a2ef6
No known key found for this signature in database
GPG key ID: 92ADA4E935E71FA4
4 changed files with 62 additions and 5 deletions

View file

@ -3,8 +3,10 @@ use std::convert::TryInto;
use meilidb_schema::Schema;
use rkv::Value;
use serde::de;
use crate::{RankedMap, MResult};
const CUSTOMS_KEY: &str = "customs-key";
const NUMBER_OF_DOCUMENTS_KEY: &str = "number-of-documents";
const RANKED_MAP_KEY: &str = "ranked-map";
const SCHEMA_KEY: &str = "schema";
@ -63,7 +65,7 @@ impl Main {
{
match self.main.get(reader, SCHEMA_KEY)? {
Some(Value::Blob(bytes)) => {
let schema = bincode::deserialize_from(bytes.as_ref())?;
let schema = bincode::deserialize_from(bytes)?;
Ok(Some(schema))
},
Some(value) => panic!("invalid type {:?}", value),
@ -151,4 +153,17 @@ impl Main {
None => Ok(0),
}
}
pub fn put_customs(&self, writer: &mut rkv::Writer, customs: &[u8]) -> MResult<()> {
self.main.put(writer, CUSTOMS_KEY, &Value::Blob(customs))?;
Ok(())
}
pub fn customs<'t>(&self, reader: &'t impl rkv::Readable) -> MResult<Option<&'t [u8]>> {
match self.main.get(reader, CUSTOMS_KEY)? {
Some(Value::Blob(bytes)) => Ok(Some(bytes)),
Some(value) => panic!("invalid type {:?}", value),
None => Ok(None),
}
}
}

View file

@ -16,7 +16,7 @@ pub use self::updates_results::UpdatesResults;
use std::collections::HashSet;
use meilidb_schema::{Schema, SchemaAttr};
use serde::de;
use serde::{ser, de};
use crate::criterion::Criteria;
use crate::serde::Deserializer;
use crate::{update, query_builder::QueryBuilder, DocumentId, MResult, Error};
@ -109,10 +109,14 @@ impl Index {
}
}
pub fn schema_update(&self, writer: &mut rkv::Writer, schema: Schema) -> MResult<()> {
pub fn schema_update(&self, writer: &mut rkv::Writer, schema: Schema) -> MResult<u64> {
let _ = self.updates_notifier.send(());
update::push_schema_update(writer, self.updates, self.updates_results, schema)?;
Ok(())
update::push_schema_update(writer, self.updates, self.updates_results, schema)
}
pub fn customs_update(&self, writer: &mut rkv::Writer, customs: Vec<u8>) -> MResult<u64> {
let _ = self.updates_notifier.send(());
update::push_customs_update(writer, self.updates, self.updates_results, customs)
}
pub fn documents_addition<D>(&self) -> update::DocumentsAddition<D> {