Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions rust/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

16 changes: 4 additions & 12 deletions rust/src/models/decoders/csv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -913,12 +913,8 @@ fn build_categorical_col_inline(
codes[r] = code;
}
Ok(Array::TextArray(TextArray::Categorical32(
minarrow::CategoricalArray {
data: Buffer::from(codes),
unique_values: uniques.into(),
null_mask: Some(mask_to_bitmask(null_bools)),
}
.into(),
minarrow::CategoricalArray::new(codes, uniques.into(), Some(mask_to_bitmask(null_bools)))
.into(),
)))
}

Expand Down Expand Up @@ -961,12 +957,8 @@ fn build_categorical_col_inline(
codes[r] = code;
}
Ok(Array::TextArray(TextArray::Categorical8(
minarrow::CategoricalArray {
data: Buffer::from(codes),
unique_values: uniques.into(),
null_mask: Some(mask_to_bitmask(null_bools)),
}
.into(),
minarrow::CategoricalArray::new(codes, uniques.into(), Some(mask_to_bitmask(null_bools)))
.into(),
)))
}

Expand Down
24 changes: 12 additions & 12 deletions rust/src/models/decoders/ipc/parser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -1553,35 +1553,35 @@ fn make_categorical_array(
feature = "extended_categorical"
))]
CategoricalIndexType::UInt32 => {
Array::TextArray(TextArray::Categorical32(Arc::new(CategoricalArray {
data: minarrow::Buffer::from_shared(idx_data),
Array::TextArray(TextArray::Categorical32(Arc::new(CategoricalArray::new(
minarrow::Buffer::from_shared(idx_data),
unique_values,
null_mask,
})))
))))
}
#[cfg(feature = "default_categorical_8")]
CategoricalIndexType::UInt8 => {
Array::TextArray(TextArray::Categorical8(Arc::new(CategoricalArray {
data: minarrow::Buffer::from_shared(idx_data),
Array::TextArray(TextArray::Categorical8(Arc::new(CategoricalArray::new(
minarrow::Buffer::from_shared(idx_data),
unique_values,
null_mask,
})))
))))
}
#[cfg(feature = "extended_categorical")]
CategoricalIndexType::UInt16 => {
Array::TextArray(TextArray::Categorical16(Arc::new(CategoricalArray {
data: minarrow::Buffer::from_shared(idx_data),
Array::TextArray(TextArray::Categorical16(Arc::new(CategoricalArray::new(
minarrow::Buffer::from_shared(idx_data),
unique_values,
null_mask,
})))
))))
}
#[cfg(feature = "extended_categorical")]
CategoricalIndexType::UInt64 => {
Array::TextArray(TextArray::Categorical64(Arc::new(CategoricalArray {
data: minarrow::Buffer::from_shared(idx_data),
Array::TextArray(TextArray::Categorical64(Arc::new(CategoricalArray::new(
minarrow::Buffer::from_shared(idx_data),
unique_values,
null_mask,
})))
))))
}
#[allow(unreachable_patterns)]
_ => {
Expand Down
2 changes: 1 addition & 1 deletion rust/src/models/decoders/json/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -503,7 +503,7 @@ mod tests {
));
match &fa.array {
Array::TextArray(TextArray::Categorical8(arr)) => {
assert_eq!(arr.unique_values.len(), 3);
assert_eq!(arr.unique_values().len(), 3);
assert_eq!(arr.data.as_ref(), &[0u8, 1, 0, 2, 1, 0]);
}
_ => panic!(),
Expand Down
8 changes: 4 additions & 4 deletions rust/src/models/encoders/csv.rs
Original file line number Diff line number Diff line change
Expand Up @@ -375,7 +375,7 @@ pub fn encode_table_csv<W: Write>(
// dictionary lookup - always clean UTF-8
let idx = arr.data.as_ref()[row] as usize;
let s = arr
.unique_values
.unique_values()
.get(idx)
.map(String::as_str)
.unwrap_or("<invalid>");
Expand All @@ -385,7 +385,7 @@ pub fn encode_table_csv<W: Write>(
Array::TextArray(TextArray::Categorical8(arr)) => {
let idx = arr.data.as_ref()[row] as usize;
let s = arr
.unique_values
.unique_values()
.get(idx)
.map(String::as_str)
.unwrap_or("<invalid>");
Expand All @@ -395,7 +395,7 @@ pub fn encode_table_csv<W: Write>(
Array::TextArray(TextArray::Categorical16(arr)) => {
let idx = arr.data.as_ref()[row] as usize;
let s = arr
.unique_values
.unique_values()
.get(idx)
.map(String::as_str)
.unwrap_or("<invalid>");
Expand All @@ -405,7 +405,7 @@ pub fn encode_table_csv<W: Write>(
Array::TextArray(TextArray::Categorical64(arr)) => {
let idx = arr.data.as_ref()[row] as usize;
let s = arr
.unique_values
.unique_values()
.get(idx)
.map(String::as_str)
.unwrap_or("<invalid>");
Expand Down
70 changes: 35 additions & 35 deletions rust/src/models/encoders/ipc/table_stream.rs
Original file line number Diff line number Diff line change
Expand Up @@ -273,11 +273,11 @@ mod tests {
None,
);

let arr = CategoricalArray {
data: Buffer::from(Vec64::from_slice(&[1u32, 0, 2, 1])),
unique_values: Vec64::from(dict_strs()),
null_mask: Some(make_bitmask(&[true, false, true, true])),
};
let arr = CategoricalArray::new(
Buffer::from(Vec64::from_slice(&[1u32, 0, 2, 1])),
Vec64::from(dict_strs()),
Some(make_bitmask(&[true, false, true, true])),
);

writer.register_dictionary(0, dict_strs());

Expand Down Expand Up @@ -322,11 +322,11 @@ mod tests {
None,
);

let arr = CategoricalArray {
data: Buffer::from(Vec64::from_slice(&[1u8, 0, 2, 1])),
unique_values: Vec64::from(dict_strs()),
null_mask: Some(make_bitmask(&[true, false, true, true])),
};
let arr = CategoricalArray::new(
Buffer::from(Vec64::from_slice(&[1u8, 0, 2, 1])),
Vec64::from(dict_strs()),
Some(make_bitmask(&[true, false, true, true])),
);

writer.register_dictionary(0, dict_strs());

Expand Down Expand Up @@ -371,11 +371,11 @@ mod tests {
None,
);

let arr = CategoricalArray {
data: Buffer::from(Vec64::from_slice(&[1u8, 0, 2, 1])),
unique_values: Vec64::from(dict_strs()),
null_mask: Some(make_bitmask(&[true, true, false, true])),
};
let arr = CategoricalArray::new(
Buffer::from(Vec64::from_slice(&[1u8, 0, 2, 1])),
Vec64::from(dict_strs()),
Some(make_bitmask(&[true, true, false, true])),
);

writer.register_dictionary(0, dict_strs());

Expand Down Expand Up @@ -416,11 +416,11 @@ mod tests {
None,
);

let arr = CategoricalArray {
data: Buffer::from(Vec64::from_slice(&[2u16, 1, 0, 2])),
unique_values: Vec64::from(dict_strs()),
null_mask: None,
};
let arr = CategoricalArray::new(
Buffer::from(Vec64::from_slice(&[2u16, 1, 0, 2])),
Vec64::from(dict_strs()),
None,
);

writer.register_dictionary(0, dict_strs());

Expand Down Expand Up @@ -461,11 +461,11 @@ mod tests {
None,
);

let arr = CategoricalArray {
data: Buffer::from(Vec64::from_slice(&[0u64, 2, 1, 0])),
unique_values: Vec64::from(dict_strs()),
null_mask: None,
};
let arr = CategoricalArray::new(
Buffer::from(Vec64::from_slice(&[0u64, 2, 1, 0])),
Vec64::from(dict_strs()),
None,
);

writer.register_dictionary(0, dict_strs());

Expand Down Expand Up @@ -506,11 +506,11 @@ mod tests {
None,
);

let arr = CategoricalArray {
data: Buffer::from(Vec64::from_slice(&[0u32, 1, 1, 2])),
unique_values: Vec64::from(dict_strs()),
null_mask: Some(make_bitmask(&[true, false, true, true])),
};
let arr = CategoricalArray::new(
Buffer::from(Vec64::from_slice(&[0u32, 1, 1, 2])),
Vec64::from(dict_strs()),
Some(make_bitmask(&[true, false, true, true])),
);

writer.register_dictionary(0, dict_strs());

Expand Down Expand Up @@ -570,11 +570,11 @@ mod tests {
None,
);

let arr = CategoricalArray {
data: Buffer::from(Vec64::from_slice(&[0u8, 1, 1, 2])),
unique_values: Vec64::from(dict_strs()),
null_mask: Some(make_bitmask(&[true, false, true, true])),
};
let arr = CategoricalArray::new(
Buffer::from(Vec64::from_slice(&[0u8, 1, 1, 2])),
Vec64::from(dict_strs()),
Some(make_bitmask(&[true, false, true, true])),
);

writer.register_dictionary(0, dict_strs());

Expand Down
8 changes: 4 additions & 4 deletions rust/src/models/encoders/json.rs
Original file line number Diff line number Diff line change
Expand Up @@ -240,19 +240,19 @@ fn collect_cat_maps(table: &Table) -> Vec<Option<&[String]>> {
feature = "extended_categorical"
))]
Array::TextArray(TextArray::Categorical32(arr)) => {
cat_maps.push(Some(&arr.unique_values))
cat_maps.push(Some(&arr.unique_values()))
}
#[cfg(feature = "default_categorical_8")]
Array::TextArray(TextArray::Categorical8(arr)) => {
cat_maps.push(Some(&arr.unique_values))
cat_maps.push(Some(&arr.unique_values()))
}
#[cfg(feature = "extended_categorical")]
Array::TextArray(TextArray::Categorical16(arr)) => {
cat_maps.push(Some(&arr.unique_values))
cat_maps.push(Some(&arr.unique_values()))
}
#[cfg(feature = "extended_categorical")]
Array::TextArray(TextArray::Categorical64(arr)) => {
cat_maps.push(Some(&arr.unique_values))
cat_maps.push(Some(&arr.unique_values()))
}
_ => cat_maps.push(None),
}
Expand Down
16 changes: 8 additions & 8 deletions rust/src/models/readers/chunked/parquet.rs
Original file line number Diff line number Diff line change
Expand Up @@ -189,23 +189,23 @@ mod tests {
let indices: Vec64<u8> = (0..n_rows).map(|i| (i % 3) as u8).collect();
(
ArrowType::Dictionary(CategoricalIndexType::UInt8),
Array::TextArray(TextArray::Categorical8(Arc::new(CategoricalArray {
data: Buffer::from(indices),
Array::TextArray(TextArray::Categorical8(Arc::new(CategoricalArray::new(
Buffer::from(indices),
unique_values,
null_mask: Some(Bitmask::new_set_all(n_rows, true)),
}))),
Some(Bitmask::new_set_all(n_rows, true)),
)))),
)
};
#[cfg(not(feature = "default_categorical_8"))]
let (dtype, array) = {
let indices: Vec64<u32> = (0..n_rows).map(|i| (i % 3) as u32).collect();
(
ArrowType::Dictionary(CategoricalIndexType::UInt32),
Array::TextArray(TextArray::Categorical32(Arc::new(CategoricalArray {
data: Buffer::from(indices),
Array::TextArray(TextArray::Categorical32(Arc::new(CategoricalArray::new(
Buffer::from(indices),
unique_values,
null_mask: Some(Bitmask::new_set_all(n_rows, true)),
}))),
Some(Bitmask::new_set_all(n_rows, true)),
)))),
)
};
let dict_col = FieldArray::new(
Expand Down
14 changes: 3 additions & 11 deletions rust/src/models/readers/ipc/table.rs
Original file line number Diff line number Diff line change
Expand Up @@ -89,28 +89,20 @@ impl<B: StreamBuffer + Unpin + 'static> TableReader<B> {
n: Option<usize>,
) -> io::Result<SuperTable> {
let mut batches = Vec::new();
let mut schema: Option<Vec<std::sync::Arc<Field>>> = None;
let mut n_rows = 0usize;
let mut count = 0usize;
while let Some(batch) = self.next().await {
let batch = batch?;
if schema.is_none() {
schema = Some(batch.cols.iter().map(|f| f.field.clone()).collect());
}
n_rows += batch.n_rows;
batches.push(Arc::new(batch));
count += 1;
if let Some(max) = n
&& count >= max {
break;
}
}
Ok(SuperTable {
Ok(SuperTable::from_batches(
batches,
schema: schema.unwrap_or_default(),
n_rows,
name: name.unwrap_or_else(|| "SuperTable".to_string()),
})
Some(name.unwrap_or_else(|| "SuperTable".to_string())),
))
}

/// Read all batches and concatenate into a single `Table` row-wise.
Expand Down
8 changes: 2 additions & 6 deletions rust/src/models/readers/ipc/window.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ use std::sync::Arc;

use minarrow::{
Array, Bitmask, BooleanArray, Buffer, CategoricalArray, FieldArray, FloatArray, Integer,
IntegerArray, NumericArray, StringArray, Table, TextArray, Vec64,
IntegerArray, MaskedArray, NumericArray, StringArray, Table, TextArray, Vec64,
};
#[cfg(feature = "decimal")]
use minarrow::DecimalArray;
Expand Down Expand Up @@ -225,11 +225,7 @@ fn window_categorical<T: Integer>(
offset: usize,
len: usize,
) -> CategoricalArray<T> {
CategoricalArray {
data: window_buffer(&arr.data, offset, len),
unique_values: arr.unique_values.clone(),
null_mask: window_mask(arr.null_mask.as_ref(), offset, len),
}
arr.slice_clone(offset, len)
}

/// Window a buffer to elements `[offset, offset + len)`. Shared-backed
Expand Down
Loading
Loading