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)
|
Ok(count)
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn delete_all_rows<Writer: ResponseWriter>(table_name: String, mut cursor: WriteCursor<'_, Value>, response_writer: &mut Writer) -> DbResult<usize> {
|
async fn delete_all_rows(table_name: String, mut cursor: WriteCursor<'_, Value>) -> DbResult<usize> {
|
||||||
// cursor.
|
|
||||||
let count = cursor.delete_all_entries(true)
|
let count = cursor.delete_all_entries(true)
|
||||||
.await.map_err(|e| RuntimeError::StorageEngineError(table_name, e))?;
|
.await.map_err(|e| RuntimeError::StorageEngineError(table_name, e))?;
|
||||||
Ok(count)
|
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 =
|
let count =
|
||||||
cursor.delete_entries_where_eq(eq_column as storage_engine::store::Column, &value, true)
|
cursor.delete_entries_where_eq(eq_column as storage_engine::store::Column, &value, true)
|
||||||
.await.map_err(|e| RuntimeError::StorageEngineError(table_name, e))?;
|
.await.map_err(|e| RuntimeError::StorageEngineError(table_name, e))?;
|
||||||
|
|
@ -206,8 +205,8 @@ impl StateHandler {
|
||||||
let mut cursor = table.write().await?;
|
let mut cursor = table.write().await?;
|
||||||
|
|
||||||
let count = match maybe_condition {
|
let count = match maybe_condition {
|
||||||
None => State::delete_all_rows(table_name, cursor, response_writer).await?,
|
None => State::delete_all_rows(table_name, cursor).await?,
|
||||||
Some(Condition::Eq(eq_column, value)) => State::delete_all_eq(table_name, cursor, response_writer, eq_column, value).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))
|
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>
|
pub async fn delete_all_entries(&mut self, enable_garbage_collector: bool) -> Result<usize>
|
||||||
where T: Encode + Decode + Ord + Send + Sync + Clone
|
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 {
|
if enable_garbage_collector {
|
||||||
self.attempt_garbage_collection_if_necessary().await?;
|
self.attempt_garbage_collection_if_necessary().await?;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue