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/10/25 07:18:57 UTC
[arrow-rs] branch master updated: feat: support schema change by idx and reverse (#4985)
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 c90aff3cc9 feat: support schema change by idx and reverse (#4985)
c90aff3cc9 is described below
commit c90aff3cc9c7f21dc7dd77000eeea8d2ceb0412d
Author: fan <75...@users.noreply.github.com>
AuthorDate: Wed Oct 25 15:18:52 2023 +0800
feat: support schema change by idx and reverse (#4985)
* feat: support schema change by idx and reverse
Signed-off-by: fan <yf...@gmail.com>
* follow reviews
Signed-off-by: fan <yf...@gmail.com>
---------
Signed-off-by: fan <yf...@gmail.com>
---
arrow-schema/src/schema.rs | 41 +++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/arrow-schema/src/schema.rs b/arrow-schema/src/schema.rs
index 43bbffd065..b05cfbe3d9 100644
--- a/arrow-schema/src/schema.rs
+++ b/arrow-schema/src/schema.rs
@@ -57,6 +57,17 @@ impl SchemaBuilder {
self.fields.remove(idx)
}
+ /// Get mut FieldRef as index `idx`
+ /// if index out of bounds, will panic
+ pub fn field_mut(&mut self, idx: usize) -> &mut FieldRef {
+ &mut self.fields[idx]
+ }
+
+ /// Reverse the fileds
+ pub fn reverse(&mut self) {
+ self.fields.reverse();
+ }
+
/// Appends a [`FieldRef`] to this [`SchemaBuilder`] checking for collision
///
/// If an existing field exists with the same name, calls [`Field::try_merge`]
@@ -837,4 +848,34 @@ mod tests {
"Could not find expected string '{expected}' in '{res}'"
);
}
+
+ #[test]
+ fn test_schemabuilder_change_field() {
+ let mut builder = SchemaBuilder::new();
+ builder.push(Field::new("a", DataType::Int32, false));
+ builder.push(Field::new("b", DataType::Utf8, false));
+ *builder.field_mut(1) = Arc::new(Field::new("c", DataType::Int32, false));
+ assert_eq!(
+ builder.fields,
+ vec![
+ Arc::new(Field::new("a", DataType::Int32, false)),
+ Arc::new(Field::new("c", DataType::Int32, false))
+ ]
+ );
+ }
+
+ #[test]
+ fn test_schemabuilder_reverse() {
+ let mut builder = SchemaBuilder::new();
+ builder.push(Field::new("a", DataType::Int32, false));
+ builder.push(Field::new("b", DataType::Utf8, true));
+ builder.reverse();
+ assert_eq!(
+ builder.fields,
+ vec![
+ Arc::new(Field::new("b", DataType::Utf8, true)),
+ Arc::new(Field::new("a", DataType::Int32, false))
+ ]
+ );
+ }
}