diff --git a/crates/storage/db/src/tables/mod.rs b/crates/storage/db/src/tables/mod.rs index 9ff21261eee5..8a11c4ac055d 100644 --- a/crates/storage/db/src/tables/mod.rs +++ b/crates/storage/db/src/tables/mod.rs @@ -98,6 +98,15 @@ pub trait TableViewer { } } +/// General trait for defining the set of tables +/// Used to initialize database +pub trait TableSet { + /// Returns all the table names in the database. + fn table_names(&self) -> Vec<&'static str>; + /// Returns `true` if the table at the given index is a `DUPSORT` table. + fn is_dupsort(&self, idx: usize) -> bool; +} + /// Defines all the tables in the database. #[macro_export] macro_rules! tables { @@ -243,6 +252,18 @@ macro_rules! tables { } } + impl TableSet for Tables { + fn table_names(&self) -> Vec<&'static str> { + //vec![$(table_names::$name,)*] + Self::ALL.iter().map(|t| t.name()).collect() + } + + fn is_dupsort(&self, idx: usize) -> bool { + let table: Self = self.table_names()[idx].parse().expect("should be valid table name"); + table.is_dupsort() + } + } + // Need constants to match on in the `FromStr` implementation. #[allow(non_upper_case_globals)] mod table_names {