This is an automated email from the ASF dual-hosted git repository.

alamb pushed a commit to branch active_release
in repository https://gitbox.apache.org/repos/asf/arrow-rs.git


The following commit(s) were added to refs/heads/active_release by this push:
     new 4ca0d95  Cherry pick of Support binary data type in build_struct_array 
(#705)
4ca0d95 is described below

commit 4ca0d95fa71d9733b20cbcb4bad92d024e680589
Author: Andrew Lamb <[email protected]>
AuthorDate: Mon Aug 23 17:03:59 2021 -0400

    Cherry pick of Support binary data type in build_struct_array (#705)
    
    * Support binary data type in `build_struct_array`. (#702)
    
    * Support binary data type in `build_struct_array`.
    
    * Modify test case.
    
    * cargo fmt
    
    Co-authored-by: Andrew Lamb <[email protected]>
    
    * Remove accidentally included test
    
    Co-authored-by: Yuan Zhou <[email protected]>
---
 arrow/src/json/reader.rs | 40 ++++++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)

diff --git a/arrow/src/json/reader.rs b/arrow/src/json/reader.rs
index 0b220eb..2e716eb 100644
--- a/arrow/src/json/reader.rs
+++ b/arrow/src/json/reader.rs
@@ -1224,6 +1224,14 @@ impl Decoder {
                             })
                             .collect::<StringArray>(),
                     ) as ArrayRef),
+                    DataType::Binary => Ok(Arc::new(
+                        rows.iter()
+                            .map(|row| {
+                                let maybe_value = row.get(field.name());
+                                maybe_value.and_then(|value| value.as_str())
+                            })
+                            .collect::<BinaryArray>(),
+                    ) as ArrayRef),
                     DataType::List(ref list_field) => {
                         match list_field.data_type() {
                             DataType::Dictionary(ref key_ty, _) => {
@@ -2964,6 +2972,38 @@ mod tests {
     }
 
     #[test]
+    fn test_json_read_binary_structs() {
+        let schema = Schema::new(vec![Field::new("c1", DataType::Binary, 
true)]);
+        let decoder = Decoder::new(Arc::new(schema), 1024, None);
+        let batch = decoder
+            .next_batch(
+                &mut vec![
+                    Ok(serde_json::json!({
+                        "c1": "₁₂₃",
+                    })),
+                    Ok(serde_json::json!({
+                        "c1": "foo",
+                    })),
+                ]
+                .into_iter(),
+            )
+            .unwrap()
+            .unwrap();
+        let data = batch.columns().iter().collect::<Vec<_>>();
+
+        let schema = Schema::new(vec![Field::new("c1", DataType::Binary, 
true)]);
+        let binary_values = BinaryArray::from(vec!["₁₂₃".as_bytes(), 
"foo".as_bytes()]);
+        let expected_batch =
+            RecordBatch::try_new(Arc::new(schema), 
vec![Arc::new(binary_values)])
+                .unwrap();
+        let expected_data = 
expected_batch.columns().iter().collect::<Vec<_>>();
+
+        assert_eq!(data, expected_data);
+        assert_eq!(batch.num_columns(), 1);
+        assert_eq!(batch.num_rows(), 2);
+    }
+
+    #[test]
     fn test_json_iterator() {
         let builder = 
ReaderBuilder::new().infer_schema(None).with_batch_size(5);
         let reader: Reader<File> = builder

Reply via email to