Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
4 changes: 2 additions & 2 deletions parquet-variant-compute/src/shred_variant.rs
Original file line number Diff line number Diff line change
Expand Up @@ -267,7 +267,7 @@ impl<'a> VariantToShreddedObjectVariantRowBuilder<'a> {
};

// Route the object's fields by name as either shredded or unshredded
let mut metadata_builder = ReadOnlyMetadataBuilder::new(value.metadata().clone());
let mut metadata_builder = ReadOnlyMetadataBuilder::new(value.metadata());
let state = self.value_builder.parent_state(&mut metadata_builder);
let mut object_builder = ObjectBuilder::new(state, false);
let mut seen = std::collections::HashSet::new();
Expand Down Expand Up @@ -795,7 +795,7 @@ mod tests {
let object_with_foo_field = |i| {
use parquet_variant::{ParentState, ValueBuilder, VariantMetadata};
let metadata = VariantMetadata::new(metadata.value(i));
let mut metadata_builder = ReadOnlyMetadataBuilder::new(metadata.clone());
let mut metadata_builder = ReadOnlyMetadataBuilder::new(&metadata);
let mut value_builder = ValueBuilder::new();
let state = ParentState::variant(&mut value_builder, &mut metadata_builder);
ObjectBuilder::new(state, false)
Expand Down
9 changes: 5 additions & 4 deletions parquet-variant-compute/src/variant_array_builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -294,7 +294,8 @@ impl VariantValueArrayBuilder {
/// builder.append_value(Variant::from(42));
/// ```
pub fn append_value(&mut self, value: Variant<'_, '_>) {
let mut metadata_builder = ReadOnlyMetadataBuilder::new(value.metadata().clone());
let metadata = value.metadata().clone(); // have to clone because the builder consumes `value`
let mut metadata_builder = ReadOnlyMetadataBuilder::new(&metadata);
ValueBuilder::append_variant_bytes(self.parent_state(&mut metadata_builder), value);
}

Expand All @@ -312,7 +313,7 @@ impl VariantValueArrayBuilder {
/// let Variant::Object(obj) = value else {
/// panic!("Not a variant object");
/// };
/// let mut metadata_builder = ReadOnlyMetadataBuilder::new(obj.metadata.clone());
/// let mut metadata_builder = ReadOnlyMetadataBuilder::new(&obj.metadata);
/// let state = value_array_builder.parent_state(&mut metadata_builder);
/// let mut object_builder = ObjectBuilder::new(state, false);
/// for (field_name, field_value) in obj.iter() {
Expand Down Expand Up @@ -489,7 +490,7 @@ mod test {

// filtering fields takes more work because we need to manually create an object builder
let value = array.value(1);
let mut metadata_builder = ReadOnlyMetadataBuilder::new(value.metadata().clone());
let mut metadata_builder = ReadOnlyMetadataBuilder::new(value.metadata());
let state = builder.parent_state(&mut metadata_builder);
ObjectBuilder::new(state, false)
.with_field("name", value.get_object_field("name").unwrap())
Expand All @@ -498,7 +499,7 @@ mod test {

// same bytes, but now nested and duplicated inside a list
let value = array.value(2);
let mut metadata_builder = ReadOnlyMetadataBuilder::new(value.metadata().clone());
let mut metadata_builder = ReadOnlyMetadataBuilder::new(value.metadata());
let state = builder.parent_state(&mut metadata_builder);
ListBuilder::new(state, false)
.with_value(value.clone())
Expand Down
16 changes: 8 additions & 8 deletions parquet-variant/src/builder.rs
Original file line number Diff line number Diff line change
Expand Up @@ -498,15 +498,15 @@ impl MetadataBuilder for WritableMetadataBuilder {
/// time `finish` is called, a different trait impl will be needed.
#[derive(Debug)]
pub struct ReadOnlyMetadataBuilder<'m> {
metadata: VariantMetadata<'m>,
metadata: &'m VariantMetadata<'m>,
// A cache that tracks field names this builder has already seen, because finding the field id
// for a given field name is expensive -- O(n) for a large and unsorted metadata dictionary.
known_field_names: HashMap<&'m str, u32>,
}

impl<'m> ReadOnlyMetadataBuilder<'m> {
/// Creates a new read-only metadata builder from the given metadata dictionary.
pub fn new(metadata: VariantMetadata<'m>) -> Self {
pub fn new(metadata: &'m VariantMetadata<'m>) -> Self {
Self {
metadata,
known_field_names: HashMap::new(),
Expand Down Expand Up @@ -3357,7 +3357,7 @@ mod tests {

// Use the metadata to build new variant values
let metadata = VariantMetadata::try_new(&metadata_bytes).unwrap();
let mut metadata_builder = ReadOnlyMetadataBuilder::new(metadata);
let mut metadata_builder = ReadOnlyMetadataBuilder::new(&metadata);
let mut value_builder = ValueBuilder::new();

{
Expand Down Expand Up @@ -3390,7 +3390,7 @@ mod tests {

// Use the metadata to build new variant values
let metadata = VariantMetadata::try_new(&metadata_bytes).unwrap();
let mut metadata_builder = ReadOnlyMetadataBuilder::new(metadata);
let mut metadata_builder = ReadOnlyMetadataBuilder::new(&metadata);
let mut value_builder = ValueBuilder::new();

{
Expand Down Expand Up @@ -3438,7 +3438,7 @@ mod tests {

// Copy using the new bytes API
let metadata = VariantMetadata::new(&metadata);
let mut metadata = ReadOnlyMetadataBuilder::new(metadata);
let mut metadata = ReadOnlyMetadataBuilder::new(&metadata);
let mut builder2 = ValueBuilder::new();
let state = ParentState::variant(&mut builder2, &mut metadata);
ValueBuilder::append_variant_bytes(state, variant1);
Expand Down Expand Up @@ -3466,7 +3466,7 @@ mod tests {

// Create a new object copying subset of fields interleaved with new ones
let metadata2 = VariantMetadata::new(&metadata1);
let mut metadata2 = ReadOnlyMetadataBuilder::new(metadata2);
let mut metadata2 = ReadOnlyMetadataBuilder::new(&metadata2);
let mut builder2 = ValueBuilder::new();
let state = ParentState::variant(&mut builder2, &mut metadata2);
{
Expand Down Expand Up @@ -3530,7 +3530,7 @@ mod tests {

// Create a new list copying subset of elements interleaved with new ones
let metadata2 = VariantMetadata::new(&metadata1);
let mut metadata2 = ReadOnlyMetadataBuilder::new(metadata2);
let mut metadata2 = ReadOnlyMetadataBuilder::new(&metadata2);
let mut builder2 = ValueBuilder::new();
let state = ParentState::variant(&mut builder2, &mut metadata2);
{
Expand Down Expand Up @@ -3626,7 +3626,7 @@ mod tests {

// Create filtered/modified version: only copy active users and inject new data
let metadata2 = VariantMetadata::new(&metadata1);
let mut metadata2 = ReadOnlyMetadataBuilder::new(metadata2);
let mut metadata2 = ReadOnlyMetadataBuilder::new(&metadata2);
let mut builder2 = ValueBuilder::new();
let state = ParentState::variant(&mut builder2, &mut metadata2);
{
Expand Down
Loading