You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by tu...@apache.org on 2023/01/25 19:40:49 UTC
[arrow-rs] branch master updated: Allow StringArray construction with Vec
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 3f72ebb37 Allow StringArray construction with Vec<Option<String>> (#3602)
3f72ebb37 is described below
commit 3f72ebb3768e566da9e8a47f7b8540b237fcb881
Author: Davis Silverman <da...@davis.tools>
AuthorDate: Wed Jan 25 14:40:42 2023 -0500
Allow StringArray construction with Vec<Option<String>> (#3602)
---
arrow-arith/src/aggregate.rs | 3 ++-
arrow-array/src/array/string_array.rs | 19 +++++++++++++++++--
.../src/builder/generic_bytes_dictionary_builder.rs | 3 ++-
arrow-ord/src/comparison.rs | 3 ++-
arrow/tests/array_transform.rs | 3 ++-
5 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/arrow-arith/src/aggregate.rs b/arrow-arith/src/aggregate.rs
index a1cf8d849..b578dbd4a 100644
--- a/arrow-arith/src/aggregate.rs
+++ b/arrow-arith/src/aggregate.rs
@@ -1072,7 +1072,8 @@ mod tests {
#[test]
fn test_string_min_max_all_nulls() {
- let a = StringArray::from(vec![None, None]);
+ let v: Vec<Option<&str>> = vec![None, None];
+ let a = StringArray::from(v);
assert_eq!(None, min_string(&a));
assert_eq!(None, max_string(&a));
}
diff --git a/arrow-array/src/array/string_array.rs b/arrow-array/src/array/string_array.rs
index 4a4152adc..926bcc7bf 100644
--- a/arrow-array/src/array/string_array.rs
+++ b/arrow-array/src/array/string_array.rs
@@ -249,6 +249,14 @@ impl<OffsetSize: OffsetSizeTrait> From<Vec<&str>> for GenericStringArray<OffsetS
}
}
+impl<OffsetSize: OffsetSizeTrait> From<Vec<Option<String>>>
+ for GenericStringArray<OffsetSize>
+{
+ fn from(v: Vec<Option<String>>) -> Self {
+ v.into_iter().collect()
+ }
+}
+
impl<OffsetSize: OffsetSizeTrait> From<Vec<String>> for GenericStringArray<OffsetSize> {
fn from(v: Vec<String>) -> Self {
Self::from_iter_values(v)
@@ -439,6 +447,13 @@ mod tests {
assert_eq!(array1.value(0), "hello");
assert_eq!(array1.value(1), "hello2");
+
+ // Also works with String types.
+ let data2: Vec<String> = vec!["goodbye".into(), "goodbye2".into()];
+ let array2 = StringArray::from_iter_values(data2.iter());
+
+ assert_eq!(array2.value(0), "goodbye");
+ assert_eq!(array2.value(1), "goodbye2");
}
#[test]
@@ -467,7 +482,7 @@ mod tests {
#[test]
fn test_string_array_all_null() {
- let data = vec![None];
+ let data: Vec<Option<&str>> = vec![None];
let array = StringArray::from(data);
array
.data()
@@ -477,7 +492,7 @@ mod tests {
#[test]
fn test_large_string_array_all_null() {
- let data = vec![None];
+ let data: Vec<Option<&str>> = vec![None];
let array = LargeStringArray::from(data);
array
.data()
diff --git a/arrow-array/src/builder/generic_bytes_dictionary_builder.rs b/arrow-array/src/builder/generic_bytes_dictionary_builder.rs
index 449100da1..5af41a519 100644
--- a/arrow-array/src/builder/generic_bytes_dictionary_builder.rs
+++ b/arrow-array/src/builder/generic_bytes_dictionary_builder.rs
@@ -641,8 +641,9 @@ mod tests {
#[test]
fn test_string_dictionary_builder_with_reserved_null_value() {
+ let v: Vec<Option<&str>> = vec![None];
test_bytes_dictionary_builder_with_reserved_null_value::<GenericStringType<i32>>(
- StringArray::from(vec![None]),
+ StringArray::from(v),
vec!["abc", "def"],
);
}
diff --git a/arrow-ord/src/comparison.rs b/arrow-ord/src/comparison.rs
index 4754aeb1f..b8b510a2e 100644
--- a/arrow-ord/src/comparison.rs
+++ b/arrow-ord/src/comparison.rs
@@ -3712,7 +3712,8 @@ mod tests {
// value_offsets = [0, 3, 6, 6]
let list_array = builder.finish();
- let nulls = StringArray::from(vec![None, None, None, None]);
+ let v: Vec<Option<&str>> = vec![None, None, None, None];
+ let nulls = StringArray::from(v);
let nulls_result = contains_utf8(&nulls, &list_array).unwrap();
assert_eq!(
nulls_result
diff --git a/arrow/tests/array_transform.rs b/arrow/tests/array_transform.rs
index 3c08a592d..34ef6cbae 100644
--- a/arrow/tests/array_transform.rs
+++ b/arrow/tests/array_transform.rs
@@ -433,7 +433,8 @@ fn test_struct_nulls() {
let data = mutable.freeze();
let array = StructArray::from(data);
- let expected_string = Arc::new(StringArray::from(vec![None, None])) as ArrayRef;
+ let v: Vec<Option<&str>> = vec![None, None];
+ let expected_string = Arc::new(StringArray::from(v)) as ArrayRef;
let expected_int = Arc::new(Int32Array::from(vec![Some(2), None])) as ArrayRef;
let expected =