Disentangle table.rs from operation.rs
This commit is contained in:
parent
f9b874f302
commit
bfb5042896
2 changed files with 28 additions and 34 deletions
|
|
@ -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) => {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue