Return table schema in SELECT response
This commit is contained in:
parent
80c4ff220e
commit
fdfdaa9fc0
1 changed files with 15 additions and 15 deletions
|
|
@ -18,7 +18,7 @@ pub struct State {
|
||||||
|
|
||||||
// #[derive(Debug)]
|
// #[derive(Debug)]
|
||||||
pub enum Response<'a> {
|
pub enum Response<'a> {
|
||||||
Selected(Box<dyn Iterator<Item=Row> + 'a + Send>),
|
Selected(&'a TableSchema, Box<dyn Iterator<Item=Row> + 'a + Send>),
|
||||||
Inserted,
|
Inserted,
|
||||||
Deleted(usize), // how many were deleted
|
Deleted(usize), // how many were deleted
|
||||||
TableCreated,
|
TableCreated,
|
||||||
|
|
@ -31,7 +31,7 @@ impl std::fmt::Debug for Response<'_> {
|
||||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
|
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
|
||||||
use Response::*;
|
use Response::*;
|
||||||
match self {
|
match self {
|
||||||
Selected(_rows) =>
|
Selected(_schema, _rows) =>
|
||||||
// TODO: How can we iterate through the rows without having to take ownership of
|
// TODO: How can we iterate through the rows without having to take ownership of
|
||||||
// them?
|
// them?
|
||||||
f.write_str("Some rows... trust me"),
|
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) => {
|
Insert(table_position, values) => {
|
||||||
let table: &mut Table = self.table_at_mut(table_position);
|
let table: &mut Table = self.table_at_mut(table_position);
|
||||||
|
|
@ -195,8 +195,8 @@ mod tests {
|
||||||
let response: Response = state
|
let response: Response = state
|
||||||
.interpret(Operation::Select(users_position, users_schema.all_selection(), None))
|
.interpret(Operation::Select(users_position, users_schema.all_selection(), None))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(matches!(response, Response::Selected(_)));
|
assert!(matches!(response, Response::Selected(_, _)));
|
||||||
let Response::Selected(rows) = response else {
|
let Response::Selected(_schema, rows) = response else {
|
||||||
panic!()
|
panic!()
|
||||||
};
|
};
|
||||||
let rows: Vec<_> = rows.collect();
|
let rows: Vec<_> = rows.collect();
|
||||||
|
|
@ -237,8 +237,8 @@ mod tests {
|
||||||
.interpret(Operation::Select(users, users_schema.all_selection(), None))
|
.interpret(Operation::Select(users, users_schema.all_selection(), None))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
assert!(matches!(response, Response::Selected(_)));
|
assert!(matches!(response, Response::Selected(_, _)));
|
||||||
let Response::Selected(rows) = response else {
|
let Response::Selected(_schema, rows) = response else {
|
||||||
panic!()
|
panic!()
|
||||||
};
|
};
|
||||||
let rows: Vec<_> = rows.collect();
|
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();
|
let response: Response = state.interpret(Select(users_position, users_schema.all_selection(), None)).unwrap();
|
||||||
|
|
||||||
assert!(matches!(response, Response::Selected(_)));
|
assert!(matches!(response, Response::Selected(_, _)));
|
||||||
let Response::Selected(rows) = response else {
|
let Response::Selected(_schema, rows) = response else {
|
||||||
panic!()
|
panic!()
|
||||||
};
|
};
|
||||||
let rows: Vec<_> = rows.collect();
|
let rows: Vec<_> = rows.collect();
|
||||||
|
|
@ -332,8 +332,8 @@ mod tests {
|
||||||
Some(Eq(id_column, id0.clone())),
|
Some(Eq(id_column, id0.clone())),
|
||||||
))
|
))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(matches!(response, Response::Selected(_)));
|
assert!(matches!(response, Response::Selected(_, _)));
|
||||||
let Response::Selected(rows) = response else {
|
let Response::Selected(_schema, rows) = response else {
|
||||||
panic!()
|
panic!()
|
||||||
};
|
};
|
||||||
let rows: Vec<_> = rows.collect();
|
let rows: Vec<_> = rows.collect();
|
||||||
|
|
@ -354,8 +354,8 @@ mod tests {
|
||||||
Some(Eq(id_column, id0.clone())),
|
Some(Eq(id_column, id0.clone())),
|
||||||
))
|
))
|
||||||
.unwrap();
|
.unwrap();
|
||||||
assert!(matches!(response, Response::Selected(_)));
|
assert!(matches!(response, Response::Selected(_, _)));
|
||||||
let Response::Selected(rows) = response else {
|
let Response::Selected(_schema, rows) = response else {
|
||||||
panic!()
|
panic!()
|
||||||
};
|
};
|
||||||
let rows: Vec<_> = rows.collect();
|
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();
|
let response: Response = state.interpret(Select(users_position, users_schema.all_selection(), None)).unwrap();
|
||||||
|
|
||||||
assert!(matches!(response, Response::Selected(_)));
|
assert!(matches!(response, Response::Selected(_, _)));
|
||||||
let Response::Selected(rows) = response else {
|
let Response::Selected(_schema, rows) = response else {
|
||||||
panic!()
|
panic!()
|
||||||
};
|
};
|
||||||
let rows: Vec<_> = rows.collect();
|
let rows: Vec<_> = rows.collect();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue