Skip to content

Commit 34565b0

Browse files
authored
chore: optimize ExprBloomFilter to use references instead of clones (#18157)
* refactor(fuse): optimize ExprBloomFilter to use references instead of clones This change modifies the ExprBloomFilter implementation to accept a reference to BinaryFuse16 instead of taking ownership of the filter. This optimization eliminates unnecessary cloning when applying runtime bloom filters during data deserialization in data sources. Key changes: - Add lifetime parameter to ExprBloomFilter struct - Change filter field from owned BinaryFuse16 to a reference - Update constructor to accept and store references - Remove redundant clone() calls in native and parquet deserializers * chore: resolve rebase conflicts
1 parent 489eb9c commit 34565b0

File tree

3 files changed

+6
-7
lines changed

3 files changed

+6
-7
lines changed

โ€Žsrc/query/storages/fuse/src/operations/read/native_data_source_deserializer.rsโ€Ž

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -666,8 +666,7 @@ impl NativeDeserializeDataTransform {
666666
let mut bitmap = MutableBitmap::from_len_zeroed(probe_block.num_rows());
667667
let probe_column = probe_block.get_last_column().clone();
668668
// Apply the filter to the probe column.
669-
ExprBloomFilter::new(runtime_filter.filter.clone())
670-
.apply(probe_column, &mut bitmap)?;
669+
ExprBloomFilter::new(&runtime_filter.filter).apply(probe_column, &mut bitmap)?;
671670

672671
let unset_bits = bitmap.null_count();
673672
let elapsed = start.elapsed();

โ€Žsrc/query/storages/fuse/src/operations/read/parquet_data_source_deserializer.rsโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ impl DeserializeDataTransform {
181181

182182
// Apply bloom filter
183183
let start = Instant::now();
184-
ExprBloomFilter::new(runtime_filter.filter.clone()).apply(probe_column, &mut bitmap)?;
184+
ExprBloomFilter::new(&runtime_filter.filter).apply(probe_column, &mut bitmap)?;
185185
let elapsed = start.elapsed();
186186
let unset_bits = bitmap.null_count();
187187
runtime_filter

โ€Žsrc/query/storages/fuse/src/pruning/expr_bloom_filter.rsโ€Ž

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -27,13 +27,13 @@ use xorf::BinaryFuse16;
2727
use xorf::Filter;
2828

2929
/// Bloom filter for runtime filtering of data rows.
30-
pub struct ExprBloomFilter {
31-
filter: BinaryFuse16,
30+
pub struct ExprBloomFilter<'a> {
31+
filter: &'a BinaryFuse16,
3232
}
3333

34-
impl ExprBloomFilter {
34+
impl<'a> ExprBloomFilter<'a> {
3535
/// Create a new bloom filter.
36-
pub fn new(filter: BinaryFuse16) -> Self {
36+
pub fn new(filter: &'a BinaryFuse16) -> ExprBloomFilter<'a> {
3737
Self { filter }
3838
}
3939

0 commit comments

Comments
ย (0)