Skip to content

Commit

Permalink
Don't serialize empty array metadata (#678)
Browse files Browse the repository at this point in the history
  • Loading branch information
kylebarron authored Jul 24, 2024
1 parent 1c7a3bc commit 2035705
Show file tree
Hide file tree
Showing 11 changed files with 68 additions and 40 deletions.
10 changes: 6 additions & 4 deletions src/array/binary/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -107,10 +107,12 @@ impl<O: OffsetSizeTrait> GeometryArrayTrait for WKBArray<O> {
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
10 changes: 6 additions & 4 deletions src/array/geometrycollection/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,12 @@ impl<O: OffsetSizeTrait, const D: usize> GeometryArrayTrait for GeometryCollecti
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
10 changes: 6 additions & 4 deletions src/array/linestring/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,12 @@ impl<O: OffsetSizeTrait, const D: usize> GeometryArrayTrait for LineStringArray<
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
8 changes: 8 additions & 0 deletions src/array/metadata.rs
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,14 @@ pub struct ArrayMetadata {
pub edges: Option<Edges>,
}

impl ArrayMetadata {
/// Decide whether this [ArrayMetadata] should be written to Arrow metadata (aka if it is
/// non-empty)
pub fn should_serialize(&self) -> bool {
self.crs.is_some() || self.edges.is_some()
}
}

impl TryFrom<&Field> for ArrayMetadata {
type Error = GeoArrowError;

Expand Down
10 changes: 6 additions & 4 deletions src/array/mixed/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -317,10 +317,12 @@ impl<O: OffsetSizeTrait, const D: usize> GeometryArrayTrait for MixedGeometryArr
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
10 changes: 6 additions & 4 deletions src/array/multilinestring/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -199,10 +199,12 @@ impl<O: OffsetSizeTrait, const D: usize> GeometryArrayTrait for MultiLineStringA
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
10 changes: 6 additions & 4 deletions src/array/multipoint/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -162,10 +162,12 @@ impl<O: OffsetSizeTrait, const D: usize> GeometryArrayTrait for MultiPointArray<
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
10 changes: 6 additions & 4 deletions src/array/multipolygon/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -236,10 +236,12 @@ impl<O: OffsetSizeTrait, const D: usize> GeometryArrayTrait for MultiPolygonArra
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
10 changes: 6 additions & 4 deletions src/array/point/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -124,10 +124,12 @@ impl<const D: usize> GeometryArrayTrait for PointArray<D> {
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
10 changes: 6 additions & 4 deletions src/array/polygon/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -200,10 +200,12 @@ impl<O: OffsetSizeTrait, const D: usize> GeometryArrayTrait for PolygonArray<O,
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down
10 changes: 6 additions & 4 deletions src/array/rect/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,10 +110,12 @@ impl<const D: usize> GeometryArrayTrait for RectArray<D> {
"ARROW:extension:name".to_string(),
self.extension_name().to_string(),
);
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
if self.metadata.should_serialize() {
metadata.insert(
"ARROW:extension:metadata".to_string(),
serde_json::to_string(self.metadata.as_ref()).unwrap(),
);
}
Arc::new(Field::new("geometry", self.storage_type(), true).with_metadata(metadata))
}

Expand Down

0 comments on commit 2035705

Please sign in to comment.