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