From fdfdaa9fc02a6db5d91de6bbc4b1da3fc1a39e4d Mon Sep 17 00:00:00 2001 From: Yuriy Dupyn <2153100+omedusyo@users.noreply.github.com> Date: Sat, 27 Jan 2024 23:42:03 +0100 Subject: [PATCH] Return table schema in SELECT response --- minisql/src/interpreter.rs | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/minisql/src/interpreter.rs b/minisql/src/interpreter.rs index b96dc40..dd0e870 100644 --- a/minisql/src/interpreter.rs +++ b/minisql/src/interpreter.rs @@ -18,7 +18,7 @@ pub struct State { // #[derive(Debug)] pub enum Response<'a> { - Selected(Box + 'a + Send>), + Selected(&'a TableSchema, Box + 'a + Send>), Inserted, Deleted(usize), // how many were deleted TableCreated, @@ -31,7 +31,7 @@ impl std::fmt::Debug for Response<'_> { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> { use Response::*; match self { - Selected(_rows) => + Selected(_schema, _rows) => // TODO: How can we iterate through the rows without having to take ownership of // them? f.write_str("Some rows... trust me"), @@ -104,7 +104,7 @@ impl State { } }; - Ok(Response::Selected(selected_rows)) + Ok(Response::Selected(table.schema(), selected_rows)) }, Insert(table_position, values) => { let table: &mut Table = self.table_at_mut(table_position); @@ -195,8 +195,8 @@ mod tests { let response: Response = state .interpret(Operation::Select(users_position, users_schema.all_selection(), None)) .unwrap(); - assert!(matches!(response, Response::Selected(_))); - let Response::Selected(rows) = response else { + assert!(matches!(response, Response::Selected(_, _))); + let Response::Selected(_schema, rows) = response else { panic!() }; let rows: Vec<_> = rows.collect(); @@ -237,8 +237,8 @@ mod tests { .interpret(Operation::Select(users, users_schema.all_selection(), None)) .unwrap(); - assert!(matches!(response, Response::Selected(_))); - let Response::Selected(rows) = response else { + assert!(matches!(response, Response::Selected(_, _))); + let Response::Selected(_schema, rows) = response else { panic!() }; let rows: Vec<_> = rows.collect(); @@ -304,8 +304,8 @@ mod tests { { let response: Response = state.interpret(Select(users_position, users_schema.all_selection(), None)).unwrap(); - assert!(matches!(response, Response::Selected(_))); - let Response::Selected(rows) = response else { + assert!(matches!(response, Response::Selected(_, _))); + let Response::Selected(_schema, rows) = response else { panic!() }; let rows: Vec<_> = rows.collect(); @@ -332,8 +332,8 @@ mod tests { Some(Eq(id_column, id0.clone())), )) .unwrap(); - assert!(matches!(response, Response::Selected(_))); - let Response::Selected(rows) = response else { + assert!(matches!(response, Response::Selected(_, _))); + let Response::Selected(_schema, rows) = response else { panic!() }; let rows: Vec<_> = rows.collect(); @@ -354,8 +354,8 @@ mod tests { Some(Eq(id_column, id0.clone())), )) .unwrap(); - assert!(matches!(response, Response::Selected(_))); - let Response::Selected(rows) = response else { + assert!(matches!(response, Response::Selected(_, _))); + let Response::Selected(_schema, rows) = response else { panic!() }; let rows: Vec<_> = rows.collect(); @@ -429,8 +429,8 @@ mod tests { let response: Response = state.interpret(Select(users_position, users_schema.all_selection(), None)).unwrap(); - assert!(matches!(response, Response::Selected(_))); - let Response::Selected(rows) = response else { + assert!(matches!(response, Response::Selected(_, _))); + let Response::Selected(_schema, rows) = response else { panic!() }; let rows: Vec<_> = rows.collect();