diff --git a/minisql/src/interpreter2.rs b/minisql/src/interpreter2.rs index 2ef8765..72271e7 100644 --- a/minisql/src/interpreter2.rs +++ b/minisql/src/interpreter2.rs @@ -174,6 +174,7 @@ mod tests { use super::*; use crate::operation::Operation; use crate::schema::Column; + use crate::response_writer::ResponseWriterStub; use crate::type_system::{DbType, IndexableValue, Value}; use std::collections::HashSet; @@ -202,8 +203,12 @@ mod tests { let users_schema = users_schema(); let users = users_schema.table_name().clone(); + let db_path = Path::new("db-test-0"); + + let mut response_writer = ResponseWriterStub::new(); + // state - // .interpret(Operation::CreateTable(users_schema)) + // .interpret(db_path, &mut response_writer, Operation::CreateTable(users_schema)).await // .unwrap(); // assert!(state.tables.len() == 1); diff --git a/minisql/src/response_writer.rs b/minisql/src/response_writer.rs index 15bd788..30158c5 100644 --- a/minisql/src/response_writer.rs +++ b/minisql/src/response_writer.rs @@ -34,3 +34,53 @@ pub trait ResponseWriter { async fn write_table_row(&mut self, row: &RestrictedRow) -> anyhow::Result<()>; async fn write_command_complete(&mut self, status: CompleteStatus) -> anyhow::Result<()>; } + +// ===Stub implementation for testing=== +// +pub struct ResponseWriterStub {} + +impl ResponseWriterStub { + pub fn new() -> Self { + ResponseWriterStub {} + } +} + +#[async_trait] +impl ResponseWriter for ResponseWriterStub +{ + async fn write_table_header( + &mut self, + table_schema: &TableSchema, + columns: &ColumnSelection, + ) -> anyhow::Result<()> { + let column_names = table_schema.get_columns(); + for &column in columns { + let column_name = column_names[column]; + print!("{}, ", column_name) + } + println!(); + + Ok(()) + } + + async fn write_table_row(&mut self, row: &RestrictedRow) -> anyhow::Result<()> { + for (_, value) in row.iter() { + print!("{:?}", value) + } + println!(); + + Ok(()) + } + + async fn write_command_complete(&mut self, status: CompleteStatus) -> anyhow::Result<()> { + use CompleteStatus::*; + match status { + Insert { oid, rows } => println!("oid = {}, rows = {}", oid, rows), + Delete(count) => println!("Deleted {}", count), + Select(count) => println!("Selected {}", count), + CreateTable => println!("Table created"), + CreateIndex => println!("Index created"), + } + Ok(()) + } +}