diff options
Diffstat (limited to 'src/dbgen.rs')
-rw-r--r-- | src/dbgen.rs | 40 |
1 files changed, 32 insertions, 8 deletions
diff --git a/src/dbgen.rs b/src/dbgen.rs index 816ea11..8e5ece5 100644 --- a/src/dbgen.rs +++ b/src/dbgen.rs @@ -5,6 +5,7 @@ use crate::chunkid::ChunkId; use crate::db::{Column, Database, DatabaseError, SqlResults, Table, Value}; use crate::fsentry::FilesystemEntry; use crate::genmeta::{GenerationMeta, GenerationMetaError}; +use crate::label::LabelChecksumKind; use crate::schema::{SchemaVersion, VersionComponent}; use log::error; use std::collections::HashMap; @@ -90,14 +91,15 @@ impl GenerationDb { pub fn create<P: AsRef<Path>>( filename: P, schema: SchemaVersion, + checksum_kind: LabelChecksumKind, ) -> Result<Self, GenerationDbError> { let meta_table = Self::meta_table(); let variant = match schema.version() { (V0_0::MAJOR, V0_0::MINOR) => { - GenerationDbVariant::V0_0(V0_0::create(filename, meta_table)?) + GenerationDbVariant::V0_0(V0_0::create(filename, meta_table, checksum_kind)?) } (V1_0::MAJOR, V1_0::MINOR) => { - GenerationDbVariant::V1_0(V1_0::create(filename, meta_table)?) + GenerationDbVariant::V1_0(V1_0::create(filename, meta_table, checksum_kind)?) } (major, minor) => return Err(GenerationDbError::Incompatible(major, minor)), }; @@ -240,11 +242,15 @@ impl V0_0 { const MINOR: VersionComponent = 0; /// Create a new generation database in read/write mode. - pub fn create<P: AsRef<Path>>(filename: P, meta: Table) -> Result<Self, GenerationDbError> { + pub fn create<P: AsRef<Path>>( + filename: P, + meta: Table, + checksum_kind: LabelChecksumKind, + ) -> Result<Self, GenerationDbError> { let db = Database::create(filename.as_ref())?; let mut moi = Self::new(db, meta); moi.created = true; - moi.create_tables()?; + moi.create_tables(checksum_kind)?; Ok(moi) } @@ -276,7 +282,7 @@ impl V0_0 { } } - fn create_tables(&mut self) -> Result<(), GenerationDbError> { + fn create_tables(&mut self, checksum_kind: LabelChecksumKind) -> Result<(), GenerationDbError> { self.db.create_table(&self.meta)?; self.db.create_table(&self.files)?; self.db.create_table(&self.chunks)?; @@ -295,6 +301,13 @@ impl V0_0 { Value::text("value", &format!("{}", Self::MINOR)), ], )?; + self.db.insert( + &self.meta, + &[ + Value::text("key", "checksum_kind"), + Value::text("value", checksum_kind.serialize()), + ], + )?; Ok(()) } @@ -483,11 +496,15 @@ impl V1_0 { const MINOR: VersionComponent = 0; /// Create a new generation database in read/write mode. - pub fn create<P: AsRef<Path>>(filename: P, meta: Table) -> Result<Self, GenerationDbError> { + pub fn create<P: AsRef<Path>>( + filename: P, + meta: Table, + checksum_kind: LabelChecksumKind, + ) -> Result<Self, GenerationDbError> { let db = Database::create(filename.as_ref())?; let mut moi = Self::new(db, meta); moi.created = true; - moi.create_tables()?; + moi.create_tables(checksum_kind)?; Ok(moi) } @@ -519,7 +536,7 @@ impl V1_0 { } } - fn create_tables(&mut self) -> Result<(), GenerationDbError> { + fn create_tables(&mut self, checksum_kind: LabelChecksumKind) -> Result<(), GenerationDbError> { self.db.create_table(&self.meta)?; self.db.create_table(&self.files)?; self.db.create_table(&self.chunks)?; @@ -538,6 +555,13 @@ impl V1_0 { Value::text("value", &format!("{}", Self::MINOR)), ], )?; + self.db.insert( + &self.meta, + &[ + Value::text("key", "checksum_kind"), + Value::text("value", checksum_kind.serialize()), + ], + )?; Ok(()) } |