@@ -22,18 +22,21 @@ use databend_common_column::buffer::Buffer;
2222use databend_common_exception:: ErrorCode ;
2323use databend_common_exception:: Result ;
2424
25+ use super :: column_type_error;
26+ use super :: domain_type_error;
27+ use super :: scalar_type_error;
28+ use super :: AccessType ;
2529use super :: AnyType ;
30+ use super :: ArgType ;
31+ use super :: BuilderExt ;
32+ use super :: Column ;
33+ use super :: DataType ;
34+ use super :: GenericMap ;
2635use super :: ReturnType ;
36+ use super :: Scalar ;
37+ use super :: ScalarRef ;
38+ use super :: ValueType ;
2739use crate :: property:: Domain ;
28- use crate :: types:: AccessType ;
29- use crate :: types:: ArgType ;
30- use crate :: types:: BuilderExt ;
31- use crate :: types:: DataType ;
32- use crate :: types:: GenericMap ;
33- use crate :: types:: Scalar ;
34- use crate :: types:: ScalarRef ;
35- use crate :: types:: ValueType ;
36- use crate :: values:: Column ;
3740use crate :: ColumnBuilder ;
3841
3942#[ derive( Debug , Clone , PartialEq , Eq ) ]
@@ -54,22 +57,25 @@ impl<T: AccessType> AccessType for ArrayType<T> {
5457 scalar. clone ( )
5558 }
5659
57- fn try_downcast_scalar < ' a > ( scalar : & ScalarRef < ' a > ) -> Option < Self :: ScalarRef < ' a > > {
60+ fn try_downcast_scalar < ' a > ( scalar : & ScalarRef < ' a > ) -> Result < Self :: ScalarRef < ' a > > {
5861 match scalar {
5962 ScalarRef :: Array ( array) => T :: try_downcast_column ( array) ,
60- _ => None ,
63+ _ => Err ( scalar_type_error :: < Self > ( scalar ) ) ,
6164 }
6265 }
6366
64- fn try_downcast_column ( col : & Column ) -> Option < Self :: Column > {
65- ArrayColumn :: try_downcast ( col. as_array ( ) ?)
67+ fn try_downcast_column ( col : & Column ) -> Result < Self :: Column > {
68+ let array = col
69+ . as_array ( )
70+ . ok_or_else ( || column_type_error :: < Self > ( col) ) ?;
71+ ArrayColumn :: try_downcast ( array)
6672 }
6773
68- fn try_downcast_domain ( domain : & Domain ) -> Option < Self :: Domain > {
74+ fn try_downcast_domain ( domain : & Domain ) -> Result < Self :: Domain > {
6975 match domain {
70- Domain :: Array ( Some ( domain) ) => Some ( Some ( T :: try_downcast_domain ( domain) ?) ) ,
71- Domain :: Array ( None ) => Some ( None ) ,
72- _ => None ,
76+ Domain :: Array ( Some ( domain) ) => Ok ( Some ( T :: try_downcast_domain ( domain) ?) ) ,
77+ Domain :: Array ( None ) => Ok ( None ) ,
78+ _ => Err ( domain_type_error :: < Self > ( domain ) ) ,
7379 }
7480 }
7581
@@ -333,8 +339,8 @@ impl<T: ValueType> ArrayColumn<T> {
333339}
334340
335341impl ArrayColumn < AnyType > {
336- pub fn try_downcast < T : AccessType > ( & self ) -> Option < ArrayColumn < T > > {
337- Some ( ArrayColumn {
342+ pub fn try_downcast < T : AccessType > ( & self ) -> Result < ArrayColumn < T > > {
343+ Ok ( ArrayColumn {
338344 values : T :: try_downcast_column ( & self . values ) ?,
339345 offsets : self . offsets . clone ( ) ,
340346 } )
0 commit comments