adjust Dictionary::sorted_ords_to_term_cb() to allow duplicates

This commit is contained in:
Eric Ridge
2024-10-28 14:45:09 -04:00
committed by Stu Hood
parent 4e84c70387
commit 2f01152a3c
2 changed files with 84 additions and 9 deletions

View File

@@ -515,16 +515,25 @@ impl<TSSTable: SSTable> Dictionary<TSSTable> {
let mut current_sstable_delta_reader =
self.sstable_delta_reader_block(current_block_addr.clone())?;
let mut current_ordinal = 0;
let mut prev_ord = None;
for ord in ord {
assert!(ord >= current_ordinal);
// check if block changed for new term_ord
let new_block_addr = self.sstable_index.get_block_with_ord(ord);
if new_block_addr != current_block_addr {
current_block_addr = new_block_addr;
current_ordinal = current_block_addr.first_ordinal;
current_sstable_delta_reader =
self.sstable_delta_reader_block(current_block_addr.clone())?;
bytes.clear();
// only advance forward if the new ord is different than the one we just processed
//
// this allows the input TermOrdinal iterator to contain duplicates, so long as it's
// still sorted
if Some(ord) != prev_ord {
assert!(ord >= current_ordinal);
// check if block changed for new term_ord
let new_block_addr = self.sstable_index.get_block_with_ord(ord);
if new_block_addr != current_block_addr {
current_block_addr = new_block_addr;
current_ordinal = current_block_addr.first_ordinal;
current_sstable_delta_reader =
self.sstable_delta_reader_block(current_block_addr.clone())?;
bytes.clear();
}
prev_ord = Some(ord);
}
// move to ord inside that block