diff --git a/minisql/src/interpreter2.rs b/minisql/src/interpreter2.rs index 9ca3de1..5105597 100644 --- a/minisql/src/interpreter2.rs +++ b/minisql/src/interpreter2.rs @@ -142,14 +142,13 @@ impl State { Ok(count) } - async fn delete_all_rows(table_name: String, mut cursor: WriteCursor<'_, Value>, response_writer: &mut Writer) -> DbResult { - // cursor. + async fn delete_all_rows(table_name: String, mut cursor: WriteCursor<'_, Value>) -> DbResult { let count = cursor.delete_all_entries(true) .await.map_err(|e| RuntimeError::StorageEngineError(table_name, e))?; Ok(count) } - async fn delete_all_eq(table_name: String, mut cursor: WriteCursor<'_, Value>, response_writer: &mut Writer, eq_column: Column, value: Value) -> DbResult { + async fn delete_all_eq(table_name: String, mut cursor: WriteCursor<'_, Value>, eq_column: Column, value: Value) -> DbResult { let count = cursor.delete_entries_where_eq(eq_column as storage_engine::store::Column, &value, true) .await.map_err(|e| RuntimeError::StorageEngineError(table_name, e))?; @@ -206,8 +205,8 @@ impl StateHandler { let mut cursor = table.write().await?; let count = match maybe_condition { - None => State::delete_all_rows(table_name, cursor, response_writer).await?, - Some(Condition::Eq(eq_column, value)) => State::delete_all_eq(table_name, cursor, response_writer, eq_column, value).await? + None => State::delete_all_rows(table_name, cursor).await?, + Some(Condition::Eq(eq_column, value)) => State::delete_all_eq(table_name, cursor, eq_column, value).await? }; response_writer.write_command_complete(CompleteStatus::Delete(count)).await.map_err(|e| RuntimeError::AnyhowError(e)) diff --git a/storage_engine/src/cursor.rs b/storage_engine/src/cursor.rs index 43b0ca5..5c76577 100644 --- a/storage_engine/src/cursor.rs +++ b/storage_engine/src/cursor.rs @@ -247,7 +247,12 @@ impl <'cursor, T> WriteCursor<'cursor, T> pub async fn delete_all_entries(&mut self, enable_garbage_collector: bool) -> Result where T: Encode + Decode + Ord + Send + Sync + Clone { - let count = todo!(); + let mut count = 0; + while let Some(entry) = self.next_alive().await? { + count += 1; + self.mark_deleted_at(entry.file_position, false).await? + } + if enable_garbage_collector { self.attempt_garbage_collection_if_necessary().await?; }