Skip to content

Commit 7bcda5c

Browse files
authored
RowMasks use bitmasks instead of bitmaps (#1346)
1 parent f6980bf commit 7bcda5c

File tree

7 files changed

+219
-145
lines changed

7 files changed

+219
-145
lines changed

Cargo.lock

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

vortex-file/Cargo.toml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ arrow-array = { workspace = true }
1818
arrow-buffer = { workspace = true }
1919
arrow-schema = { workspace = true }
2020
bytes = { workspace = true }
21-
croaring = { workspace = true }
2221
compio = { workspace = true, features = ["bytes", "macros"], optional = true }
2322
flatbuffers = { workspace = true }
2423
flume = { workspace = true }

vortex-file/src/read/buffered.rs

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,7 @@ impl BufferedLayoutReader {
2828
// TODO(robert): Support out of order reads
2929
fn buffer_read(&mut self, mask: &RowMask) -> VortexResult<Option<Vec<MessageLocator>>> {
3030
while let Some(((begin, end), layout)) = self.layouts.pop_front() {
31-
if mask.begin() <= begin && begin < mask.end()
32-
|| mask.begin() < end && end <= mask.end()
33-
{
31+
if mask.end() > begin && mask.begin() <= end {
3432
self.layouts.push_front(((begin, end), layout));
3533
break;
3634
}

vortex-file/src/read/layouts/chunked.rs

Lines changed: 26 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -150,13 +150,13 @@ mod tests {
150150
use std::iter;
151151
use std::sync::{Arc, RwLock};
152152

153+
use arrow_buffer::BooleanBufferBuilder;
153154
use bytes::Bytes;
154-
use croaring::Bitmap;
155155
use flatbuffers::{root_unchecked, FlatBufferBuilder};
156156
use futures_util::TryStreamExt;
157-
use vortex_array::array::{ChunkedArray, PrimitiveArray};
157+
use vortex_array::array::{BoolArray, ChunkedArray, PrimitiveArray};
158158
use vortex_array::{ArrayDType, IntoArrayData, IntoArrayVariant};
159-
use vortex_dtype::PType;
159+
use vortex_dtype::{Nullability, PType};
160160
use vortex_expr::{BinaryExpr, Identity, Literal, Operator};
161161
use vortex_flatbuffers::{footer, WriteFlatBuffer};
162162
use vortex_ipc::messages::writer::MessageWriter;
@@ -292,7 +292,7 @@ mod tests {
292292
&mut projection_layout,
293293
cache,
294294
&buf,
295-
&RowMask::try_new(Bitmap::from_range(0..500), 0, 500).unwrap(),
295+
&RowMask::new_valid_between(0, 500),
296296
);
297297

298298
assert!(arr.is_some());
@@ -309,10 +309,29 @@ mod tests {
309309
let cache = Arc::new(RwLock::new(LayoutMessageCache::default()));
310310
let (_, mut projection_layout, buf, _) =
311311
layout_and_bytes(cache.clone(), Scan::new(None)).await;
312+
313+
let mut first_range = BooleanBufferBuilder::new(200);
314+
first_range.append_n(150, true);
315+
first_range.append_n(50, false);
316+
317+
let mut snd_range = BooleanBufferBuilder::new(200);
318+
snd_range.append_n(50, false);
319+
snd_range.append_n(100, true);
320+
snd_range.append_n(50, false);
312321
let mut arr = [
313-
RowMask::try_new(Bitmap::from_range(0..150), 0, 200).unwrap(),
314-
RowMask::try_new(Bitmap::from_range(50..150), 200, 400).unwrap(),
315-
RowMask::try_new(Bitmap::from_range(0..100), 400, 500).unwrap(),
322+
RowMask::try_new(
323+
BoolArray::new(first_range.finish(), Nullability::NonNullable).into_array(),
324+
0,
325+
200,
326+
)
327+
.unwrap(),
328+
RowMask::try_new(
329+
BoolArray::new(snd_range.finish(), Nullability::NonNullable).into_array(),
330+
200,
331+
400,
332+
)
333+
.unwrap(),
334+
RowMask::new_valid_between(400, 500),
316335
]
317336
.into_iter()
318337
.flat_map(|s| read_layout_data(&mut projection_layout, cache.clone(), &buf, &s))

vortex-file/src/read/layouts/test_read.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ use std::collections::{BTreeSet, VecDeque};
22
use std::sync::{Arc, RwLock};
33

44
use bytes::Bytes;
5-
use croaring::Bitmap;
65
use itertools::Itertools;
76
use vortex_array::ArrayData;
87
use vortex_error::VortexUnwrap;
@@ -17,9 +16,7 @@ pub fn layout_splits(layout: &mut dyn LayoutReader, length: usize) -> Vec<RowMas
1716
splits
1817
.into_iter()
1918
.tuple_windows::<(usize, usize)>()
20-
.map(|(begin, end)| unsafe {
21-
RowMask::new_unchecked(Bitmap::from_range(begin as u32..end as u32), 0, end)
22-
})
19+
.map(|(begin, end)| RowMask::new_valid_between(begin, end))
2320
.collect::<Vec<_>>()
2421
}
2522

0 commit comments

Comments
 (0)