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

viirya 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 f70b240d22 Fix Decimal256 scalar display string (#7404)
f70b240d22 is described below

commit f70b240d22e510732c3a3a6e288b7016a20cb08c
Author: Liang-Chi Hsieh <[email protected]>
AuthorDate: Fri Aug 25 10:41:14 2023 -0700

    Fix Decimal256 scalar display string (#7404)
---
 datafusion/sqllogictest/src/engines/conversion.rs                | 9 ++++++++-
 .../sqllogictest/src/engines/datafusion_engine/normalize.rs      | 4 ++++
 datafusion/sqllogictest/test_files/arrow_typeof.slt              | 2 +-
 3 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/datafusion/sqllogictest/src/engines/conversion.rs 
b/datafusion/sqllogictest/src/engines/conversion.rs
index 5be287ac95..757b9deb8b 100644
--- a/datafusion/sqllogictest/src/engines/conversion.rs
+++ b/datafusion/sqllogictest/src/engines/conversion.rs
@@ -15,7 +15,7 @@
 // specific language governing permissions and limitations
 // under the License.
 
-use arrow::datatypes::{Decimal128Type, DecimalType};
+use arrow::datatypes::{i256, Decimal128Type, Decimal256Type, DecimalType};
 use bigdecimal::BigDecimal;
 use half::f16;
 use rust_decimal::prelude::*;
@@ -82,6 +82,13 @@ pub(crate) fn i128_to_str(value: i128, precision: &u8, 
scale: &i8) -> String {
     )
 }
 
+pub(crate) fn i256_to_str(value: i256, precision: &u8, scale: &i8) -> String {
+    big_decimal_to_str(
+        BigDecimal::from_str(&Decimal256Type::format_decimal(value, 
*precision, *scale))
+            .unwrap(),
+    )
+}
+
 #[cfg(feature = "postgres")]
 pub(crate) fn decimal_to_str(value: Decimal) -> String {
     big_decimal_to_str(BigDecimal::from_str(&value.to_string()).unwrap())
diff --git a/datafusion/sqllogictest/src/engines/datafusion_engine/normalize.rs 
b/datafusion/sqllogictest/src/engines/datafusion_engine/normalize.rs
index f958d4a760..942ba8e05b 100644
--- a/datafusion/sqllogictest/src/engines/datafusion_engine/normalize.rs
+++ b/datafusion/sqllogictest/src/engines/datafusion_engine/normalize.rs
@@ -218,6 +218,10 @@ pub fn cell_to_string(col: &ArrayRef, row: usize) -> 
Result<String> {
                 let value = get_row_value!(array::Decimal128Array, col, row);
                 Ok(i128_to_str(value, precision, scale))
             }
+            DataType::Decimal256(precision, scale) => {
+                let value = get_row_value!(array::Decimal256Array, col, row);
+                Ok(i256_to_str(value, precision, scale))
+            }
             DataType::LargeUtf8 => Ok(varchar_to_str(get_row_value!(
                 array::LargeStringArray,
                 col,
diff --git a/datafusion/sqllogictest/test_files/arrow_typeof.slt 
b/datafusion/sqllogictest/test_files/arrow_typeof.slt
index e3d316a43f..e485251b73 100644
--- a/datafusion/sqllogictest/test_files/arrow_typeof.slt
+++ b/datafusion/sqllogictest/test_files/arrow_typeof.slt
@@ -202,7 +202,7 @@ SELECT
   col_d256
   FROM foo;
 ----
-100 100.00
+100 100
 
 statement ok
 drop table foo

Reply via email to