From 966c9bf28479593f940cc91cb35342603fefd8cd Mon Sep 17 00:00:00 2001 From: Yuriy Dupyn <2153100+omedusyo@users.noreply.github.com> Date: Mon, 8 Jan 2024 13:37:09 +0100 Subject: [PATCH] Make Table struct fields private --- minisql/src/internals/table.rs | 18 +++++++++++++++--- minisql/src/interpreter.rs | 20 ++++++++++---------- 2 files changed, 25 insertions(+), 13 deletions(-) diff --git a/minisql/src/internals/table.rs b/minisql/src/internals/table.rs index 975a4b8..a36b2e6 100644 --- a/minisql/src/internals/table.rs +++ b/minisql/src/internals/table.rs @@ -9,10 +9,10 @@ use crate::type_system::{IndexableValue, Uuid, Value}; #[derive(Debug)] pub struct Table { - pub schema: TableSchema, - pub rows: Rows, // TODO: Consider wrapping this in a lock. Also consider if we need to have the + schema: TableSchema, + rows: Rows, // TODO: Consider wrapping this in a lock. Also consider if we need to have the // same lock for both rows and indexes - pub indexes: HashMap, + indexes: HashMap, } pub type Rows = BTreeMap; @@ -26,6 +26,18 @@ impl Table { } } + pub fn schema(&self) -> &TableSchema { + &self.schema + } + + pub fn rows(&self) -> &Rows { + &self.rows + } + + pub fn indexes(&self) -> &HashMap { + &self.indexes + } + // ======Selection====== fn get_row_by_id(&self, id: Uuid) -> Option { self.rows.get(&id).cloned() diff --git a/minisql/src/interpreter.rs b/minisql/src/interpreter.rs index 1554570..38bd354 100644 --- a/minisql/src/interpreter.rs +++ b/minisql/src/interpreter.rs @@ -80,14 +80,14 @@ impl State { let table: &Table = self.table_from_name(&table_name)?; let selected_column_positions: Vec = table - .schema + .schema() .column_positions_from_column_selection(&column_selection)?; let selected_rows = match maybe_condition { None => table.select_all_rows(&selected_column_positions), Some(Condition::Eq(eq_column_name, value)) => { let eq_column_position = table - .schema + .schema() .column_position_from_column_name(&eq_column_name)?; table.select_rows_where_eq( &selected_column_positions, @@ -102,7 +102,7 @@ impl State { Insert(table_name, values) => { let table: &mut Table = self.table_from_name_mut(&table_name)?; - let (id, row) = table.schema.row_from_insertion_values(values)?; + let (id, row) = table.schema().row_from_insertion_values(values)?; table.insert_row_at(id, row)?; Ok(Response::Inserted) } @@ -113,7 +113,7 @@ impl State { None => table.delete_all_rows(), Some(Condition::Eq(eq_column_name, value)) => { let eq_column_position = table - .schema + .schema() .column_position_from_column_name(&eq_column_name)?; table.delete_rows_where_eq(eq_column_position, value)? } @@ -130,7 +130,7 @@ impl State { CreateIndex(table_name, column_name) => { let table: &mut Table = self.table_from_name_mut(&table_name)?; let column_position: ColumnPosition = table - .schema + .schema() .column_position_from_column_name(&column_name)?; table.attach_index(column_position)?; @@ -180,9 +180,9 @@ mod tests { assert!(state.tables.len() == 1); let table = &state.tables[0]; - assert!(table.rows.len() == 0); + assert!(table.rows().len() == 0); - assert!(table.schema.table_name == users); + assert!(table.schema().table_name == users); } #[test] @@ -497,12 +497,12 @@ mod tests { assert!(state.tables.len() == 1); let table = &state.tables[0]; - assert!(table.rows.len() == 2); + assert!(table.rows().len() == 2); let user: ColumnPosition = 1; - assert!(table.indexes.contains_key(&user)); + assert!(table.indexes().contains_key(&user)); - let index = table.indexes.get(&user).unwrap(); + let index = table.indexes().get(&user).unwrap(); let plato_id = 0; let aristotle_id = 1;