Disentangle table.rs from operation.rs

This commit is contained in:
Yuriy Dupyn 2023-12-29 06:57:24 +01:00
parent f9b874f302
commit bfb5042896
2 changed files with 28 additions and 34 deletions

View file

@ -68,25 +68,44 @@ impl State {
// the client, but the details of communication are hidden behind an interface
//
// writer: impl SqlResponseConsumer
fn interpret(&mut self, operation: Operation) -> DbResult<Response> {
pub fn interpret(&mut self, operation: Operation) -> DbResult<Response> {
// TODO: lock stuff
use Operation::*;
match operation {
Select(table_name, column_selection, maybe_condition) => {
let table: &Table = self.table_from_name(&table_name)?;
Ok(Response::Selected(table.select_where(column_selection, maybe_condition)?))
let selected_column_positions: Vec<ColumnPosition> = table.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.column_position_from_column_name(&eq_column_name)?;
table.select_rows_where_eq(&selected_column_positions, eq_column_position, value)?
}
};
Ok(Response::Selected(selected_rows))
},
Insert(table_name, values) => {
let table: &mut Table = self.table_from_name_mut(&table_name)?;
let _ = table.insert(values)?;
let (id, row) = table.schema.row_from_insertion_values(values)?;
let _ = table.insert_row_at(id, row)?;
Ok(Response::Inserted)
},
Delete(table_name, maybe_condition) => {
let table: &mut Table = self.table_from_name_mut(&table_name)?;
let rows_affected = table.delete_rows_where(maybe_condition)?;
let rows_affected = match maybe_condition {
None => table.delete_all_rows(),
Some(Condition::Eq(eq_column_name, value)) => {
let eq_column_position = table.schema.column_position_from_column_name(&eq_column_name)?;
table.delete_rows_where_eq(eq_column_position, value)?
}
};
Ok(Response::Deleted(rows_affected))
},
CreateTable(table_name, table_schema) => {