14
14
15
15
use std:: sync:: Arc ;
16
16
17
- use common_arrow:: arrow:: array:: PrimitiveArray ;
18
- use common_arrow:: arrow:: array:: Utf8Array ;
19
- use common_arrow:: arrow:: types:: NativeType ;
20
17
use common_datablocks:: DataBlock ;
21
18
use common_datavalues:: ColumnRef ;
19
+ use common_datavalues:: ConstColumn ;
22
20
use common_datavalues:: DataField ;
23
21
use common_datavalues:: DataTypeImpl ;
24
- use common_datavalues:: PrimitiveColumn ;
25
- use common_datavalues:: PrimitiveType ;
26
- use common_datavalues:: StringColumn ;
22
+ use common_datavalues:: Series ;
23
+ use common_datavalues:: SeriesFrom ;
27
24
use common_exception:: ErrorCode ;
28
25
use common_exception:: Result ;
29
26
@@ -34,45 +31,41 @@ pub struct HivePartitionFiller {
34
31
pub partition_fields : Vec < DataField > ,
35
32
}
36
33
34
+ macro_rules! generate_primitive_column {
35
+ ( $T: ty, $num_rows: expr, $value: expr) => { {
36
+ let column = Series :: from_data( vec![ $value. parse:: <$T>( ) . unwrap( ) ] ) ;
37
+ Ok ( Arc :: new( ConstColumn :: new( column, $num_rows) ) )
38
+ } } ;
39
+ }
40
+
41
+ fn generate_string_column ( num_rows : usize , value : String ) -> Result < ColumnRef > {
42
+ let column = Series :: from_data ( vec ! [ value] ) ;
43
+ Ok ( Arc :: new ( ConstColumn :: new ( column, num_rows) ) )
44
+ }
45
+
37
46
impl HivePartitionFiller {
38
47
pub fn create ( partition_fields : Vec < DataField > ) -> Self {
39
48
HivePartitionFiller { partition_fields }
40
49
}
41
50
42
- fn generate_string_column ( & self , num_rows : usize , value : String ) -> Result < ColumnRef > {
43
- let column = vec ! [ Some ( value) ; num_rows] ;
44
- let arrow_array = Utf8Array :: < i32 > :: from_iter ( column) ;
45
- Ok ( Arc :: new ( StringColumn :: from_arrow_array ( & arrow_array) ) as ColumnRef )
46
- }
47
-
48
- fn generate_primitive_column < T > ( & self , num_rows : usize , value : String ) -> Result < ColumnRef >
49
- where
50
- T : NativeType + std:: str:: FromStr + std:: fmt:: Debug + PrimitiveType ,
51
- <T as std:: str:: FromStr >:: Err : std:: fmt:: Debug ,
52
- {
53
- let column = vec ! [ Some ( value. parse:: <T >( ) . unwrap( ) ) ; num_rows] ;
54
- let arrow_array = PrimitiveArray :: < T > :: from_iter ( column) ;
55
- Ok ( Arc :: new ( PrimitiveColumn :: < T > :: from_arrow_array ( & arrow_array) ) as ColumnRef )
56
- }
57
-
58
51
fn generate_column (
59
52
& self ,
60
53
num_rows : usize ,
61
54
value : String ,
62
55
field : & DataField ,
63
56
) -> Result < ColumnRef > {
64
57
match field. data_type ( ) . clone ( ) {
65
- DataTypeImpl :: String ( _) => self . generate_string_column ( num_rows, value) ,
66
- DataTypeImpl :: Int8 ( _) => self . generate_primitive_column :: < i8 > ( num_rows, value) ,
67
- DataTypeImpl :: Int16 ( _) => self . generate_primitive_column :: < i16 > ( num_rows, value) ,
68
- DataTypeImpl :: Int32 ( _) => self . generate_primitive_column :: < i32 > ( num_rows, value) ,
69
- DataTypeImpl :: Int64 ( _) => self . generate_primitive_column :: < i64 > ( num_rows, value) ,
70
- DataTypeImpl :: UInt8 ( _) => self . generate_primitive_column :: < u8 > ( num_rows, value) ,
71
- DataTypeImpl :: UInt16 ( _) => self . generate_primitive_column :: < u16 > ( num_rows, value) ,
72
- DataTypeImpl :: UInt32 ( _) => self . generate_primitive_column :: < u32 > ( num_rows, value) ,
73
- DataTypeImpl :: UInt64 ( _) => self . generate_primitive_column :: < u64 > ( num_rows, value) ,
74
- DataTypeImpl :: Float32 ( _) => self . generate_primitive_column :: < f32 > ( num_rows, value) ,
75
- DataTypeImpl :: Float64 ( _) => self . generate_primitive_column :: < f64 > ( num_rows, value) ,
58
+ DataTypeImpl :: String ( _) => generate_string_column ( num_rows, value) ,
59
+ DataTypeImpl :: Int8 ( _) => generate_primitive_column ! ( i8 , num_rows, value) ,
60
+ DataTypeImpl :: Int16 ( _) => generate_primitive_column ! ( i16 , num_rows, value) ,
61
+ DataTypeImpl :: Int32 ( _) => generate_primitive_column ! ( i32 , num_rows, value) ,
62
+ DataTypeImpl :: Int64 ( _) => generate_primitive_column ! ( i64 , num_rows, value) ,
63
+ DataTypeImpl :: UInt8 ( _) => generate_primitive_column ! ( u8 , num_rows, value) ,
64
+ DataTypeImpl :: UInt16 ( _) => generate_primitive_column ! ( u16 , num_rows, value) ,
65
+ DataTypeImpl :: UInt32 ( _) => generate_primitive_column ! ( u32 , num_rows, value) ,
66
+ DataTypeImpl :: UInt64 ( _) => generate_primitive_column ! ( u64 , num_rows, value) ,
67
+ DataTypeImpl :: Float32 ( _) => generate_primitive_column ! ( f32 , num_rows, value) ,
68
+ DataTypeImpl :: Float64 ( _) => generate_primitive_column ! ( f64 , num_rows, value) ,
76
69
_ => Err ( ErrorCode :: UnImplement ( format ! (
77
70
"generate column failed, {:?}" ,
78
71
field
0 commit comments