This is an automated email from the ASF dual-hosted git repository.
tustvold pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git
The following commit(s) were added to refs/heads/master by this push:
new 32867e332 Add test case (#2083)
32867e332 is described below
commit 32867e332ba901542a6adc5c81b61bc66002c751
Author: Liang-Chi Hsieh <[email protected]>
AuthorDate: Fri Jul 15 13:15:36 2022 -0700
Add test case (#2083)
---
arrow/src/ipc/writer.rs | 48 ++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/arrow/src/ipc/writer.rs b/arrow/src/ipc/writer.rs
index ed713e586..3847661db 100644
--- a/arrow/src/ipc/writer.rs
+++ b/arrow/src/ipc/writer.rs
@@ -1784,4 +1784,52 @@ mod tests {
assert_eq!(record_batch_slice, deserialized_batch);
}
+
+ #[test]
+ fn truncate_ipc_struct_array() {
+ fn create_batch() -> RecordBatch {
+ let strings: StringArray = [Some("foo"), None, Some("bar"),
Some("baz")]
+ .into_iter()
+ .collect();
+ let ints: Int32Array =
+ [Some(0), Some(2), None, Some(1)].into_iter().collect();
+
+ let struct_array = StructArray::from(vec![
+ (
+ Field::new("s", DataType::Utf8, true),
+ Arc::new(strings) as ArrayRef,
+ ),
+ (
+ Field::new("c", DataType::Int32, false),
+ Arc::new(ints) as ArrayRef,
+ ),
+ ]);
+
+ let schema = Schema::new(vec![Field::new(
+ "struct_array",
+ struct_array.data_type().clone(),
+ true,
+ )]);
+
+ RecordBatch::try_new(Arc::new(schema),
vec![Arc::new(struct_array)]).unwrap()
+ }
+
+ let record_batch = create_batch();
+ let record_batch_slice = record_batch.slice(1, 2);
+ let deserialized_batch = deserialize(serialize(&record_batch_slice));
+
+ assert!(serialize(&record_batch).len() >
serialize(&record_batch_slice).len());
+
+ let structs = deserialized_batch
+ .column(0)
+ .as_any()
+ .downcast_ref::<StructArray>()
+ .unwrap();
+
+ assert!(structs.column(0).is_null(0));
+ assert!(structs.column(0).is_valid(1));
+ assert!(structs.column(1).is_valid(0));
+ assert!(structs.column(1).is_null(1));
+ assert_eq!(record_batch_slice, deserialized_batch);
+ }
}