Skip to content

Commit 5349116

Browse files
committed
refine the check logic
1 parent e65b69a commit 5349116

File tree

1 file changed

+26
-6
lines changed

1 file changed

+26
-6
lines changed

src/query/storages/fuse/src/io/read/block_reader_parquet.rs

+26-6
Original file line numberDiff line numberDiff line change
@@ -328,13 +328,13 @@ impl BlockReader {
328328
}
329329
let now = SystemTime::now();
330330
let mut final_result = Vec::new();
331-
let mut merge_results = futures::future::try_join_all(merge_io_handlers).await?;
332-
merge_results.sort_by(|a, b| a.0.cmp(&b.0));
331+
let merge_results = futures::future::try_join_all(merge_io_handlers).await?;
333332
for index in indices.keys() {
334333
let column_meta = &part.columns_meta[index];
335334
let column_start = column_meta.offset;
336335
let column_end = column_start + column_meta.len;
337336

337+
// Find the range index and range.
338338
let range_idx = range_merger.get(column_start..column_end);
339339
let (idx, range) = match range_idx {
340340
None => Err(ErrorCode::Internal(format!(
@@ -343,10 +343,30 @@ impl BlockReader {
343343
))),
344344
Some((i, r)) => Ok((i, r)),
345345
}?;
346-
let data = &merge_results[idx].1;
347-
let column_data = data
348-
[(column_start - range.start) as usize..(column_end - column_start) as usize]
349-
.to_vec();
346+
347+
// For loop but not move data.
348+
let mut range_data = None;
349+
for (i, data) in &merge_results {
350+
if *i == idx {
351+
range_data = Some(data);
352+
break;
353+
}
354+
}
355+
356+
// Range must contain the column range [start, end].
357+
// [1,5]: ----- rr
358+
// [2,4]: --- r2
359+
// [1,5]: ----- r3
360+
// r2 data is:
361+
// start = r2.start - rr.start - 1 = 1
362+
// end = r2.end - rr.start - 1 = 3
363+
// r3 data is:
364+
// start = r3.start - rr.start = 0
365+
// end = r3.end - rr.start = 4
366+
// Here has data copy.
367+
let start = (range.start - column_start) as usize;
368+
let end = (range.end - column_start) as usize;
369+
let column_data = range_data.unwrap()[start..=end].to_vec();
350370
final_result.push((*index, column_data));
351371
}
352372

0 commit comments

Comments
 (0)