Implement delete
This commit is contained in:
parent
997162c555
commit
9af6ad90f3
2 changed files with 10 additions and 6 deletions
|
|
@ -142,14 +142,13 @@ impl State {
|
|||
Ok(count)
|
||||
}
|
||||
|
||||
async fn delete_all_rows<Writer: ResponseWriter>(table_name: String, mut cursor: WriteCursor<'_, Value>, response_writer: &mut Writer) -> DbResult<usize> {
|
||||
// cursor.
|
||||
async fn delete_all_rows(table_name: String, mut cursor: WriteCursor<'_, Value>) -> DbResult<usize> {
|
||||
let count = cursor.delete_all_entries(true)
|
||||
.await.map_err(|e| RuntimeError::StorageEngineError(table_name, e))?;
|
||||
Ok(count)
|
||||
}
|
||||
|
||||
async fn delete_all_eq<Writer: ResponseWriter>(table_name: String, mut cursor: WriteCursor<'_, Value>, response_writer: &mut Writer, eq_column: Column, value: Value) -> DbResult<usize> {
|
||||
async fn delete_all_eq(table_name: String, mut cursor: WriteCursor<'_, Value>, eq_column: Column, value: Value) -> DbResult<usize> {
|
||||
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))
|
||||
|
|
|
|||
|
|
@ -247,7 +247,12 @@ impl <'cursor, T> WriteCursor<'cursor, T>
|
|||
pub async fn delete_all_entries(&mut self, enable_garbage_collector: bool) -> Result<usize>
|
||||
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?;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue