From f36930fcf7c7f1733248ae84f547e1d4cf3e3255 Mon Sep 17 00:00:00 2001 From: taichong Date: Sat, 18 Feb 2023 09:59:38 +0800 Subject: [PATCH] feat(query): support desc table with decimal type and support order by decmail type col --- src/query/expression/src/schema.rs | 6 +++++ src/query/expression/src/types.rs | 9 +++++++ .../11_data_type/11_0006_data_type_decimal | 27 +++++++++++++++++++ 3 files changed, 42 insertions(+) diff --git a/src/query/expression/src/schema.rs b/src/query/expression/src/schema.rs index be12f44b1719f..27974288696e0 100644 --- a/src/query/expression/src/schema.rs +++ b/src/query/expression/src/schema.rs @@ -1320,6 +1320,12 @@ impl From<&DataType> for ArrowDataType { Box::new(ArrowDataType::LargeBinary), None, ), + DataType::Decimal(DecimalDataType::Decimal128(s)) => { + ArrowDataType::Decimal(s.precision as usize, s.scale as usize) + } + DataType::Decimal(DecimalDataType::Decimal256(s)) => { + ArrowDataType::Decimal256(s.precision as usize, s.scale as usize) + } _ => unreachable!(), } diff --git a/src/query/expression/src/types.rs b/src/query/expression/src/types.rs index c2a947b568857..2e96e06d3757f 100755 --- a/src/query/expression/src/types.rs +++ b/src/query/expression/src/types.rs @@ -61,8 +61,10 @@ use crate::deserializations::TimestampDeserializer; use crate::deserializations::TupleDeserializer; use crate::deserializations::VariantDeserializer; use crate::property::Domain; +use crate::types::decimal::DecimalScalar; use crate::values::Column; use crate::values::Scalar; +use crate::with_decimal_type; use crate::ColumnBuilder; use crate::ScalarRef; use crate::TypeDeserializerImpl; @@ -288,6 +290,13 @@ impl DataType { Scalar::Tuple(tys.iter().map(|ty| ty.default_value()).collect()) } DataType::Variant => Scalar::Variant(vec![]), + DataType::Decimal(DecimalDataType::Decimal128(s)) => { + Scalar::Decimal(DecimalScalar::Decimal128(0.into(), *s)) + } + DataType::Decimal(DecimalDataType::Decimal256(s)) => { + Scalar::Decimal(DecimalScalar::Decimal256(0.into(), *s)) + } + _ => unimplemented!(), } } diff --git a/tests/sqllogictests/suites/base/11_data_type/11_0006_data_type_decimal b/tests/sqllogictests/suites/base/11_data_type/11_0006_data_type_decimal index 61348b1714089..d1e7861b46722 100644 --- a/tests/sqllogictests/suites/base/11_data_type/11_0006_data_type_decimal +++ b/tests/sqllogictests/suites/base/11_data_type/11_0006_data_type_decimal @@ -137,3 +137,30 @@ query I SELECT ANY(CAST(2.34 AS DECIMAL(6, 2))) ---- 2.34 + +statement ok +drop table if exists t + +statement ok +drop table if exists t1 + +statement ok +create table t(c1 decimal(38,2)) + +statement ok +create table t1(c0 int, c1 decimal(39,2)) + +statement ok +select * from t order by c1 + +## https://github.com/jorgecarleitao/parquet2/blob/main/src/schema/types/converted_type.rs#L25 +## https://github.com/jorgecarleitao/arrow2/blob/main/src/io/parquet/write/schema.rs#L323 +## the parquet2 and arrow2 not impl decimal256 +statement error 1002 +select * from t1 order by c1 + +statement ok +drop table if exists t + +statement ok +drop table if exists t1