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))
+            ]
+        );
+    }
 }