@@ -7,8 +7,8 @@ use arrow_schema::{DataType, TimeUnit};
77use crate :: liquid_array:: byte_view_array:: ByteViewBuildOptions ;
88use crate :: liquid_array:: raw:: FsstArray ;
99use crate :: liquid_array:: {
10- LiquidArrayRef , LiquidByteViewArray , LiquidFixedLenByteArray , LiquidFloatArray ,
11- LiquidPrimitiveArray ,
10+ LiquidArrayRef , LiquidByteViewArray , LiquidDecimalArray , LiquidFixedLenByteArray ,
11+ LiquidFloatArray , LiquidPrimitiveArray ,
1212} ;
1313
1414use super :: { CacheExpression , utils:: LiquidCompressorStates } ;
@@ -113,38 +113,40 @@ pub fn transcode_liquid_inner_with_hint<'a>(
113113 array. as_primitive :: < Float64Type > ( ) . clone ( ) ,
114114 ) ) ,
115115 DataType :: Decimal128 ( _, _) => {
116+ let decimals = array. as_primitive :: < Decimal128Type > ( ) ;
117+ if LiquidDecimalArray :: fits_u64 ( decimals) {
118+ return Ok ( Arc :: new ( LiquidDecimalArray :: from_decimal_array ( decimals) ) ) ;
119+ }
116120 let liquid_array = with_fsst_compressor_or_train (
117121 state,
118122 |compressor| {
119123 Arc :: new ( LiquidFixedLenByteArray :: from_decimal_array (
120- array. as_primitive :: < Decimal128Type > ( ) ,
121- compressor,
124+ decimals, compressor,
122125 ) )
123126 } ,
124127 || {
125128 let ( compressor, liquid_array) =
126- LiquidFixedLenByteArray :: train_from_decimal_array (
127- array. as_primitive :: < Decimal128Type > ( ) ,
128- ) ;
129+ LiquidFixedLenByteArray :: train_from_decimal_array ( decimals) ;
129130 ( compressor, Arc :: new ( liquid_array) )
130131 } ,
131132 ) ;
132133 return Ok ( liquid_array) ;
133134 }
134135 DataType :: Decimal256 ( _, _) => {
136+ let decimals = array. as_primitive :: < Decimal256Type > ( ) ;
137+ if LiquidDecimalArray :: fits_u64 ( decimals) {
138+ return Ok ( Arc :: new ( LiquidDecimalArray :: from_decimal_array ( decimals) ) ) ;
139+ }
135140 let liquid_array = with_fsst_compressor_or_train (
136141 state,
137142 |compressor| {
138143 Arc :: new ( LiquidFixedLenByteArray :: from_decimal_array (
139- array. as_primitive :: < Decimal256Type > ( ) ,
140- compressor,
144+ decimals, compressor,
141145 ) )
142146 } ,
143147 || {
144148 let ( compressor, liquid_array) =
145- LiquidFixedLenByteArray :: train_from_decimal_array (
146- array. as_primitive :: < Decimal256Type > ( ) ,
147- ) ;
149+ LiquidFixedLenByteArray :: train_from_decimal_array ( decimals) ;
148150 ( compressor, Arc :: new ( liquid_array) )
149151 } ,
150152 ) ;
0 commit comments