@@ -1809,7 +1809,8 @@ impl DecimalColumn {
18091809 #[ cfg( debug_assertions) ]
18101810 {
18111811 match ( & arrow_type, self ) {
1812- ( arrow_schema:: DataType :: Decimal128 ( p, s) , DecimalColumn :: Decimal64 ( _, size) )
1812+ ( arrow_schema:: DataType :: Decimal64 ( p, s) , DecimalColumn :: Decimal64 ( _, size) )
1813+ | ( arrow_schema:: DataType :: Decimal128 ( p, s) , DecimalColumn :: Decimal64 ( _, size) )
18131814 | ( arrow_schema:: DataType :: Decimal128 ( p, s) , DecimalColumn :: Decimal128 ( _, size) )
18141815 | ( arrow_schema:: DataType :: Decimal256 ( p, s) , DecimalColumn :: Decimal256 ( _, size) ) => {
18151816 assert_eq ! ( size. precision, * p) ;
@@ -1821,8 +1822,12 @@ impl DecimalColumn {
18211822
18221823 let buffer = match self {
18231824 DecimalColumn :: Decimal64 ( col, _) => {
1824- let builder = Decimal64As128Type :: iter_column ( col) . collect :: < Vec < _ > > ( ) ;
1825- Decimal128Type :: build_column ( builder) . into ( )
1825+ if matches ! ( arrow_type, arrow_schema:: DataType :: Decimal64 ( _, _) ) {
1826+ col. clone ( ) . into ( )
1827+ } else {
1828+ let builder = Decimal64As128Type :: iter_column ( col) . collect :: < Vec < _ > > ( ) ;
1829+ Decimal128Type :: build_column ( builder) . into ( )
1830+ }
18261831 }
18271832 DecimalColumn :: Decimal128 ( col, _) => col. clone ( ) . into ( ) ,
18281833 DecimalColumn :: Decimal256 ( col, _) => {
@@ -1844,6 +1849,13 @@ impl DecimalColumn {
18441849 pub fn try_from_arrow_data ( array : ArrayData ) -> Result < Self > {
18451850 let buffer = array. buffers ( ) [ 0 ] . clone ( ) ;
18461851 match array. data_type ( ) {
1852+ arrow_schema:: DataType :: Decimal64 ( p, s) => {
1853+ let decimal_size = DecimalSize {
1854+ precision : * p,
1855+ scale : * s as u8 ,
1856+ } ;
1857+ Ok ( Self :: Decimal64 ( buffer. into ( ) , decimal_size) . strict_decimal ( ) )
1858+ }
18471859 arrow_schema:: DataType :: Decimal128 ( p, s) => {
18481860 let decimal_size = DecimalSize {
18491861 precision : * p,
0 commit comments