From e17048eddfe2df86abd2d498da2a33b9c3dd8a72 Mon Sep 17 00:00:00 2001 From: Jan Tuomi Date: Fri, 2 May 2025 23:38:23 +0300 Subject: Add sort_asc param, impl demo chat app --- log_db/src/engine.rs | 23 ++++++++++++++++++++--- 1 file changed, 20 insertions(+), 3 deletions(-) (limited to 'log_db/src/engine.rs') diff --git a/log_db/src/engine.rs b/log_db/src/engine.rs index 0701191..6fb9edf 100644 --- a/log_db/src/engine.rs +++ b/log_db/src/engine.rs @@ -306,13 +306,19 @@ impl Engine { tagged.extend(mapped); } + if !params.sort_asc { + tagged.reverse(); + } let bound_low = params.offset; let bound_high = (params.offset + params.limit).min(tagged.len()); let sliced = &tagged[bound_low..bound_high]; - let tagged_records = self.read_tagged_log_keys(sliced.into_iter())?; + let mut tagged_records = self.read_tagged_log_keys(sliced.into_iter())?; debug!("Read {} records", tagged_records.len()); + if !params.sort_asc { + tagged_records.reverse(); + } Ok(tagged_records) } @@ -420,15 +426,26 @@ impl Engine { self.secondary_memtables[index].range(indexable_bounds) }; - let log_key_batches: Vec<(usize, &LogKey)> = + let mut log_key_batches: Vec<(usize, &LogKey)> = log_keys.into_iter().map(|log_key| (0, log_key)).collect(); + if !params.sort_asc { + log_key_batches.reverse(); + } + let bound_low = params.offset; let bound_high = (params.offset + params.limit).min(log_key_batches.len()); let sliced = &log_key_batches[bound_low..bound_high]; let tagged_records = self.read_tagged_log_keys(sliced.into_iter()); - Ok(tagged_records?.into_iter().map(|(_, rec)| rec).collect()) + let mut result_records: Vec = + tagged_records?.into_iter().map(|(_, rec)| rec).collect(); + + if !params.sort_asc { + result_records.reverse(); + } + + Ok(result_records) } /// Ensures that the `self.metadata_file` and `self.data_file` handles are still pointing to the correct files. -- cgit v1.3