@@ -151,7 +151,7 @@ pub fn reverse(rb: &RecordBatch) -> RecordBatch {
151
151
mod tests {
152
152
use std:: sync:: Arc ;
153
153
154
- use arrow_array:: { Array , Int32Array , RecordBatch } ;
154
+ use arrow_array:: { Array , ArrayRef , Int32Array , RecordBatch } ;
155
155
use arrow_schema:: { DataType , Field , Schema } ;
156
156
157
157
use super :: * ;
@@ -213,4 +213,81 @@ mod tests {
213
213
assert_eq ! ( array. len( ) , 0 ) ;
214
214
assert ! ( array. is_empty( ) ) ;
215
215
}
216
+
217
+ #[ test]
218
+ fn test_replace_single_column ( ) {
219
+ let schema = Schema :: new ( vec ! [
220
+ Field :: new( "a" , DataType :: Int32 , false ) ,
221
+ Field :: new( "b" , DataType :: Int32 , false ) ,
222
+ Field :: new( "c" , DataType :: Int32 , false ) ,
223
+ ] ) ;
224
+
225
+ let columns: Vec < ArrayRef > = vec ! [
226
+ Arc :: new( Int32Array :: from( vec![ 1 , 2 , 3 ] ) ) ,
227
+ Arc :: new( Int32Array :: from( vec![ 4 , 5 , 6 ] ) ) ,
228
+ Arc :: new( Int32Array :: from( vec![ 7 , 8 , 9 ] ) ) ,
229
+ ] ;
230
+
231
+ let batch = RecordBatch :: try_new ( Arc :: new ( schema. clone ( ) ) , columns. clone ( ) ) . unwrap ( ) ;
232
+
233
+ let new_b = Arc :: new ( Int32Array :: from ( vec ! [ 10 , 11 , 12 ] ) ) ;
234
+
235
+ let result = replace_columns ( Arc :: new ( schema) , & batch, & [ ( 1 , new_b. clone ( ) ) ] ) ;
236
+
237
+ assert_eq ! ( result. column( 0 ) . as_ref( ) , columns[ 0 ] . as_ref( ) ) ;
238
+ assert_eq ! ( result. column( 1 ) . as_ref( ) , new_b. as_ref( ) ) ;
239
+ assert_eq ! ( result. column( 2 ) . as_ref( ) , columns[ 2 ] . as_ref( ) ) ;
240
+ }
241
+
242
+ #[ test]
243
+ fn replace_multiple_columns ( ) {
244
+ let schema = Schema :: new ( vec ! [
245
+ Field :: new( "a" , DataType :: Int32 , false ) ,
246
+ Field :: new( "b" , DataType :: Int32 , false ) ,
247
+ Field :: new( "c" , DataType :: Int32 , false ) ,
248
+ ] ) ;
249
+
250
+ let columns: Vec < ArrayRef > = vec ! [
251
+ Arc :: new( Int32Array :: from( vec![ 1 , 2 , 3 ] ) ) ,
252
+ Arc :: new( Int32Array :: from( vec![ 4 , 5 , 6 ] ) ) ,
253
+ Arc :: new( Int32Array :: from( vec![ 7 , 8 , 9 ] ) ) ,
254
+ ] ;
255
+
256
+ let batch = RecordBatch :: try_new ( Arc :: new ( schema. clone ( ) ) , columns. clone ( ) ) . unwrap ( ) ;
257
+
258
+ let new_a = Arc :: new ( Int32Array :: from ( vec ! [ 10 , 11 , 12 ] ) ) ;
259
+ let new_c = Arc :: new ( Int32Array :: from ( vec ! [ 13 , 14 , 15 ] ) ) ;
260
+
261
+ let result = replace_columns (
262
+ Arc :: new ( schema) ,
263
+ & batch,
264
+ & [ ( 0 , new_a. clone ( ) ) , ( 2 , new_c. clone ( ) ) ] ,
265
+ ) ;
266
+
267
+ assert_eq ! ( result. column( 0 ) . as_ref( ) , new_a. as_ref( ) ) ;
268
+ assert_eq ! ( result. column( 1 ) . as_ref( ) , columns[ 1 ] . as_ref( ) ) ;
269
+ assert_eq ! ( result. column( 2 ) . as_ref( ) , new_c. as_ref( ) ) ;
270
+ }
271
+
272
+ #[ test]
273
+ #[ should_panic]
274
+ fn replace_column_with_different_length_array ( ) {
275
+ let schema = Schema :: new ( vec ! [
276
+ Field :: new( "a" , DataType :: Int32 , false ) ,
277
+ Field :: new( "b" , DataType :: Int32 , false ) ,
278
+ Field :: new( "c" , DataType :: Int32 , false ) ,
279
+ ] ) ;
280
+
281
+ let columns: Vec < ArrayRef > = vec ! [
282
+ Arc :: new( Int32Array :: from( vec![ 1 , 2 , 3 ] ) ) ,
283
+ Arc :: new( Int32Array :: from( vec![ 4 , 5 , 6 ] ) ) ,
284
+ Arc :: new( Int32Array :: from( vec![ 7 , 8 , 9 ] ) ) ,
285
+ ] ;
286
+
287
+ let batch = RecordBatch :: try_new ( Arc :: new ( schema. clone ( ) ) , columns. clone ( ) ) . unwrap ( ) ;
288
+
289
+ let new_b = Arc :: new ( Int32Array :: from ( vec ! [ 10 , 11 ] ) ) ; // Different length
290
+
291
+ replace_columns ( Arc :: new ( schema) , & batch, & [ ( 1 , new_b. clone ( ) ) ] ) ;
292
+ }
216
293
}
0 commit comments