1717
1818//! Just-In-Time(JIT) version for row reader and writers
1919
20- mod reader;
21- mod writer;
20+ pub mod reader;
21+ pub mod writer;
2222
2323#[ macro_export]
2424/// register external functions to the assembler
@@ -46,42 +46,43 @@ mod tests {
4646 use crate :: error:: Result ;
4747 use crate :: row:: jit:: reader:: read_as_batch_jit;
4848 use crate :: row:: jit:: writer:: write_batch_unchecked_jit;
49+ use crate :: row:: layout:: RowType :: { Compact , WordAligned } ;
4950 use arrow:: record_batch:: RecordBatch ;
5051 use arrow:: { array:: * , datatypes:: * } ;
5152 use datafusion_jit:: api:: Assembler ;
5253 use std:: sync:: Arc ;
5354 use DataType :: * ;
5455
5556 macro_rules! fn_test_single_type {
56- ( $ARRAY: ident, $TYPE: expr, $VEC: expr) => {
57+ ( $ARRAY: ident, $TYPE: expr, $VEC: expr, $ROWTYPE : expr ) => {
5758 paste:: item! {
5859 #[ test]
5960 #[ allow( non_snake_case) ]
60- fn [ <test_single_ $TYPE _jit>] ( ) -> Result <( ) > {
61+ fn [ <test_ $ROWTYPE _single_ $TYPE _jit>] ( ) -> Result <( ) > {
6162 let schema = Arc :: new( Schema :: new( vec![ Field :: new( "a" , $TYPE, true ) ] ) ) ;
6263 let a = $ARRAY:: from( $VEC) ;
6364 let batch = RecordBatch :: try_new( schema. clone( ) , vec![ Arc :: new( a) ] ) ?;
6465 let mut vector = vec![ 0 ; 1024 ] ;
6566 let assembler = Assembler :: default ( ) ;
6667 let row_offsets =
67- { write_batch_unchecked_jit( & mut vector, 0 , & batch, 0 , schema. clone( ) , & assembler) ? } ;
68- let output_batch = { read_as_batch_jit( & vector, schema, & row_offsets, & assembler) ? } ;
68+ { write_batch_unchecked_jit( & mut vector, 0 , & batch, 0 , schema. clone( ) , & assembler, $ROWTYPE ) ? } ;
69+ let output_batch = { read_as_batch_jit( & vector, schema, & row_offsets, & assembler, $ROWTYPE ) ? } ;
6970 assert_eq!( batch, output_batch) ;
7071 Ok ( ( ) )
7172 }
7273
7374 #[ test]
7475 #[ allow( non_snake_case) ]
75- fn [ <test_single_ $TYPE _jit_null_free>] ( ) -> Result <( ) > {
76+ fn [ <test_ $ROWTYPE _single_ $TYPE _jit_null_free>] ( ) -> Result <( ) > {
7677 let schema = Arc :: new( Schema :: new( vec![ Field :: new( "a" , $TYPE, false ) ] ) ) ;
7778 let v = $VEC. into_iter( ) . filter( |o| o. is_some( ) ) . collect:: <Vec <_>>( ) ;
7879 let a = $ARRAY:: from( v) ;
7980 let batch = RecordBatch :: try_new( schema. clone( ) , vec![ Arc :: new( a) ] ) ?;
8081 let mut vector = vec![ 0 ; 1024 ] ;
8182 let assembler = Assembler :: default ( ) ;
8283 let row_offsets =
83- { write_batch_unchecked_jit( & mut vector, 0 , & batch, 0 , schema. clone( ) , & assembler) ? } ;
84- let output_batch = { read_as_batch_jit( & vector, schema, & row_offsets, & assembler) ? } ;
84+ { write_batch_unchecked_jit( & mut vector, 0 , & batch, 0 , schema. clone( ) , & assembler, $ROWTYPE ) ? } ;
85+ let output_batch = { read_as_batch_jit( & vector, schema, & row_offsets, & assembler, $ROWTYPE ) ? } ;
8586 assert_eq!( batch, output_batch) ;
8687 Ok ( ( ) )
8788 }
@@ -92,85 +93,190 @@ mod tests {
9293 fn_test_single_type ! (
9394 BooleanArray ,
9495 Boolean ,
95- vec![ Some ( true ) , Some ( false ) , None , Some ( true ) , None ]
96+ vec![ Some ( true ) , Some ( false ) , None , Some ( true ) , None ] ,
97+ Compact
98+ ) ;
99+
100+ fn_test_single_type ! (
101+ BooleanArray ,
102+ Boolean ,
103+ vec![ Some ( true ) , Some ( false ) , None , Some ( true ) , None ] ,
104+ WordAligned
96105 ) ;
97106
98107 fn_test_single_type ! (
99108 Int8Array ,
100109 Int8 ,
101- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
110+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
111+ Compact
112+ ) ;
113+
114+ fn_test_single_type ! (
115+ Int8Array ,
116+ Int8 ,
117+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
118+ WordAligned
119+ ) ;
120+
121+ fn_test_single_type ! (
122+ Int16Array ,
123+ Int16 ,
124+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
125+ Compact
102126 ) ;
103127
104128 fn_test_single_type ! (
105129 Int16Array ,
106130 Int16 ,
107- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
131+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
132+ WordAligned
108133 ) ;
109134
110135 fn_test_single_type ! (
111136 Int32Array ,
112137 Int32 ,
113- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
138+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
139+ Compact
140+ ) ;
141+
142+ fn_test_single_type ! (
143+ Int32Array ,
144+ Int32 ,
145+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
146+ WordAligned
147+ ) ;
148+
149+ fn_test_single_type ! (
150+ Int64Array ,
151+ Int64 ,
152+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
153+ Compact
114154 ) ;
115155
116156 fn_test_single_type ! (
117157 Int64Array ,
118158 Int64 ,
119- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
159+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
160+ WordAligned
120161 ) ;
121162
122163 fn_test_single_type ! (
123164 UInt8Array ,
124165 UInt8 ,
125- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
166+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
167+ Compact
168+ ) ;
169+
170+ fn_test_single_type ! (
171+ UInt8Array ,
172+ UInt8 ,
173+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
174+ WordAligned
126175 ) ;
127176
128177 fn_test_single_type ! (
129178 UInt16Array ,
130179 UInt16 ,
131- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
180+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
181+ Compact
182+ ) ;
183+
184+ fn_test_single_type ! (
185+ UInt16Array ,
186+ UInt16 ,
187+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
188+ WordAligned
189+ ) ;
190+
191+ fn_test_single_type ! (
192+ UInt32Array ,
193+ UInt32 ,
194+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
195+ Compact
132196 ) ;
133197
134198 fn_test_single_type ! (
135199 UInt32Array ,
136200 UInt32 ,
137- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
201+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
202+ WordAligned
203+ ) ;
204+
205+ fn_test_single_type ! (
206+ UInt64Array ,
207+ UInt64 ,
208+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
209+ Compact
138210 ) ;
139211
140212 fn_test_single_type ! (
141213 UInt64Array ,
142214 UInt64 ,
143- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
215+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
216+ WordAligned
217+ ) ;
218+
219+ fn_test_single_type ! (
220+ Float32Array ,
221+ Float32 ,
222+ vec![ Some ( 5.0 ) , Some ( 7.0 ) , None , Some ( 0.0 ) , Some ( 111.0 ) ] ,
223+ Compact
144224 ) ;
145225
146226 fn_test_single_type ! (
147227 Float32Array ,
148228 Float32 ,
149- vec![ Some ( 5.0 ) , Some ( 7.0 ) , None , Some ( 0.0 ) , Some ( 111.0 ) ]
229+ vec![ Some ( 5.0 ) , Some ( 7.0 ) , None , Some ( 0.0 ) , Some ( 111.0 ) ] ,
230+ WordAligned
231+ ) ;
232+
233+ fn_test_single_type ! (
234+ Float64Array ,
235+ Float64 ,
236+ vec![ Some ( 5.0 ) , Some ( 7.0 ) , None , Some ( 0.0 ) , Some ( 111.0 ) ] ,
237+ Compact
150238 ) ;
151239
152240 fn_test_single_type ! (
153241 Float64Array ,
154242 Float64 ,
155- vec![ Some ( 5.0 ) , Some ( 7.0 ) , None , Some ( 0.0 ) , Some ( 111.0 ) ]
243+ vec![ Some ( 5.0 ) , Some ( 7.0 ) , None , Some ( 0.0 ) , Some ( 111.0 ) ] ,
244+ WordAligned
245+ ) ;
246+
247+ fn_test_single_type ! (
248+ Date32Array ,
249+ Date32 ,
250+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
251+ Compact
156252 ) ;
157253
158254 fn_test_single_type ! (
159255 Date32Array ,
160256 Date32 ,
161- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
257+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
258+ WordAligned
259+ ) ;
260+
261+ fn_test_single_type ! (
262+ Date64Array ,
263+ Date64 ,
264+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
265+ Compact
162266 ) ;
163267
164268 fn_test_single_type ! (
165269 Date64Array ,
166270 Date64 ,
167- vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ]
271+ vec![ Some ( 5 ) , Some ( 7 ) , None , Some ( 0 ) , Some ( 111 ) ] ,
272+ WordAligned
168273 ) ;
169274
170275 fn_test_single_type ! (
171276 StringArray ,
172277 Utf8 ,
173- vec![ Some ( "hello" ) , Some ( "world" ) , None , Some ( "" ) , Some ( "" ) ]
278+ vec![ Some ( "hello" ) , Some ( "world" ) , None , Some ( "" ) , Some ( "" ) ] ,
279+ Compact
174280 ) ;
175281
176282 #[ test]
@@ -190,10 +296,11 @@ mod tests {
190296 0 ,
191297 schema. clone ( ) ,
192298 & assembler,
299+ Compact ,
193300 ) ?
194301 } ;
195302 let output_batch =
196- { read_as_batch_jit ( & vector, schema, & row_offsets, & assembler) ? } ;
303+ { read_as_batch_jit ( & vector, schema, & row_offsets, & assembler, Compact ) ? } ;
197304 assert_eq ! ( batch, output_batch) ;
198305 Ok ( ( ) )
199306 }
@@ -214,10 +321,11 @@ mod tests {
214321 0 ,
215322 schema. clone ( ) ,
216323 & assembler,
324+ Compact ,
217325 ) ?
218326 } ;
219327 let output_batch =
220- { read_as_batch_jit ( & vector, schema, & row_offsets, & assembler) ? } ;
328+ { read_as_batch_jit ( & vector, schema, & row_offsets, & assembler, Compact ) ? } ;
221329 assert_eq ! ( batch, output_batch) ;
222330 Ok ( ( ) )
223331 }
0 commit comments