You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@arrow.apache.org by yj...@apache.org on 2023/04/30 15:57:28 UTC

[arrow-datafusion] branch main updated: minor: add decimal roundtrip tests for the row format (#6165)

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

yjshen pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/arrow-datafusion.git


The following commit(s) were added to refs/heads/main by this push:
     new 2f852b30b8 minor: add decimal roundtrip tests for the row format (#6165)
2f852b30b8 is described below

commit 2f852b30b82fdec8709e2cf4c51f88515c5b6a40
Author: Yijie Shen <he...@gmail.com>
AuthorDate: Sun Apr 30 23:57:23 2023 +0800

    minor: add decimal roundtrip tests for the row format (#6165)
    
    * minor: add decimal roundtrip tests for the row format
    
    * more precise buffer size
    
    * fmt
---
 datafusion/row/src/lib.rs | 57 +++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 55 insertions(+), 2 deletions(-)

diff --git a/datafusion/row/src/lib.rs b/datafusion/row/src/lib.rs
index a15806830f..902fa881b1 100644
--- a/datafusion/row/src/lib.rs
+++ b/datafusion/row/src/lib.rs
@@ -99,6 +99,7 @@ fn get_columns(mut arrays: Vec<Box<dyn ArrayBuilder>>) -> Vec<ArrayRef> {
 #[cfg(test)]
 mod tests {
     use super::*;
+    use crate::layout::RowLayout;
     use crate::reader::read_as_batch;
     use crate::writer::write_batch_unchecked;
     use arrow::record_batch::RecordBatch;
@@ -113,9 +114,10 @@ mod tests {
                 #[allow(non_snake_case)]
                 fn [<test _single_ $TYPE>]() -> Result<()> {
                     let schema = Arc::new(Schema::new(vec![Field::new("a", $TYPE, true)]));
+                    let record_width = RowLayout::new(schema.as_ref()).fixed_part_width();
                     let a = $ARRAY::from($VEC);
                     let batch = RecordBatch::try_new(schema.clone(), vec![Arc::new(a)])?;
-                    let mut vector = vec![0; 1024];
+                    let mut vector = vec![0; record_width * batch.num_rows()];
                     let row_offsets =
                         { write_batch_unchecked(&mut vector, 0, &batch, 0, schema.clone()) };
                     let output_batch = { read_as_batch(&vector, schema, &row_offsets)? };
@@ -127,10 +129,11 @@ mod tests {
                 #[allow(non_snake_case)]
                 fn [<test_single_ $TYPE _null_free>]() -> Result<()> {
                     let schema = Arc::new(Schema::new(vec![Field::new("a", $TYPE, false)]));
+                    let record_width = RowLayout::new(schema.as_ref()).fixed_part_width();
                     let v = $VEC.into_iter().filter(|o| o.is_some()).collect::<Vec<_>>();
                     let a = $ARRAY::from(v);
                     let batch = RecordBatch::try_new(schema.clone(), vec![Arc::new(a)])?;
-                    let mut vector = vec![0; 1024];
+                    let mut vector = vec![0; record_width * batch.num_rows()];
                     let row_offsets =
                         { write_batch_unchecked(&mut vector, 0, &batch, 0, schema.clone()) };
                     let output_batch = { read_as_batch(&vector, schema, &row_offsets)? };
@@ -219,6 +222,56 @@ mod tests {
         vec![Some(5), Some(7), None, Some(0), Some(111)]
     );
 
+    #[test]
+    fn test_single_decimal128() -> Result<()> {
+        let v = vec![
+            Some(0),
+            Some(1),
+            None,
+            Some(-1),
+            Some(i128::MIN),
+            Some(i128::MAX),
+        ];
+        let schema =
+            Arc::new(Schema::new(vec![Field::new("a", Decimal128(38, 10), true)]));
+        let record_width = RowLayout::new(schema.as_ref()).fixed_part_width();
+        let a = Decimal128Array::from(v);
+        let batch = RecordBatch::try_new(schema.clone(), vec![Arc::new(a)])?;
+        let mut vector = vec![0; record_width * batch.num_rows()];
+        let row_offsets =
+            { write_batch_unchecked(&mut vector, 0, &batch, 0, schema.clone()) };
+        let output_batch = { read_as_batch(&vector, schema, &row_offsets)? };
+        assert_eq!(batch, output_batch);
+        Ok(())
+    }
+
+    #[test]
+    fn test_single_decimal128_null_free() -> Result<()> {
+        let v = vec![
+            Some(0),
+            Some(1),
+            None,
+            Some(-1),
+            Some(i128::MIN),
+            Some(i128::MAX),
+        ];
+        let schema = Arc::new(Schema::new(vec![Field::new(
+            "a",
+            Decimal128(38, 10),
+            false,
+        )]));
+        let record_width = RowLayout::new(schema.as_ref()).fixed_part_width();
+        let v = v.into_iter().filter(|o| o.is_some()).collect::<Vec<_>>();
+        let a = Decimal128Array::from(v);
+        let batch = RecordBatch::try_new(schema.clone(), vec![Arc::new(a)])?;
+        let mut vector = vec![0; record_width * batch.num_rows()];
+        let row_offsets =
+            { write_batch_unchecked(&mut vector, 0, &batch, 0, schema.clone()) };
+        let output_batch = { read_as_batch(&vector, schema, &row_offsets)? };
+        assert_eq!(batch, output_batch);
+        Ok(())
+    }
+
     #[test]
     #[should_panic(expected = "not supported yet")]
     fn test_unsupported_type() {