You are viewing a plain text version of this content. The canonical link for it is here.
Posted to github@arrow.apache.org by "klion26 (via GitHub)" <gi...@apache.org> on 2026/09/04 11:02:56 UTC

[I] Align the logic for variant_get with arrow-cast when Variant::Object value inside a list [arrow-rs]

klion26 opened a new issue, #10982:
URL: https://github.com/apache/arrow-rs/issues/10982

   By calling `variant_to_string` recursively we drop the `Variant::Object` values inside a list.
   
   arrow-cast doesn't support Objects -> String, but supports them inside a List [via `ArrayFormatter`](https://github.com/apache/arrow-rs/blob/70219af2ffa16615e2fcde5760b0218f5c986ac6/arrow-cast/src/display.rs#L1244-L1261) 🤷 (separate issue maybe?)
   
   regardless of correctness of the Object support above, variant-cast to String shouldn't lose data.
   
   ```rust
     #[test]
     fn reproduce_list_of_objects_utf8_difference() {
         // Build the Variant value: [{"x": 1}]
         let mut variant_builder = VariantBuilder::new();
         let mut variant_list = variant_builder.new_list();
   
         variant_list
             .new_object()
             .with_field("x", 1_i32)
             .finish();
   
         variant_list.finish();
   
         let (metadata, value) = variant_builder.finish();
         let variant = Variant::new(&metadata, &value);
   
         // Current #10114 result
         let variant_output = variant_to_string(&variant).unwrap();
   
         // Build the equivalent Arrow List<Struct<x: Int32>>
         let fields = vec![Field::new("x", DataType::Int32, true)];
         let struct_builder = StructBuilder::from_fields(fields, 1);
         let mut arrow_list = ListBuilder::new(struct_builder);
   
         let struct_builder = arrow_list.values();
         struct_builder
             .field_builder::<Int32Builder>(0)
             .unwrap()
             .append_value(1);
         struct_builder.append(true);
         arrow_list.append(true);
   
         let arrow_list = arrow_list.finish();
   
         // Arrow List<Struct> → Utf8 result
         let casted = cast(&arrow_list, &DataType::Utf8).unwrap();
         let arrow_output = casted.as_string::<i32>().value(0);
   
         assert_eq!(variant_output, "[]");
         assert_eq!(arrow_output, "[{x: 1}]");
   
         // Fails
         assert_eq!(variant_output, arrow_output);
     }
   ```
   
   _Originally posted by @sdf-jkl in https://github.com/apache/arrow-rs/pull/10114#discussion_r3908535499_
               


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org


Re: [I] Align the logic for variant_get with arrow-cast when Variant::Object value inside a list [arrow-rs]

Posted by "sdf-jkl (via GitHub)" <gi...@apache.org>.
sdf-jkl closed issue #10982: Align the logic for variant_get with arrow-cast when Variant::Object value inside a list
URL: https://github.com/apache/arrow-rs/issues/10982


-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: github-unsubscribe@arrow.apache.org

For queries about this service, please contact Infrastructure at:
users@infra.apache.org