Return table schema in SELECT response

This commit is contained in:
Yuriy Dupyn 2024-01-27 23:42:03 +01:00
parent 80c4ff220e
commit fdfdaa9fc0

View file

@ -18,7 +18,7 @@ pub struct State {
// #[derive(Debug)]
pub enum Response<'a> {
Selected(Box<dyn Iterator<Item=Row> + 'a + Send>),
Selected(&'a TableSchema, Box<dyn Iterator<Item=Row> + '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();