@@ -319,16 +319,23 @@ impl GroupValuesColumn {
319
319
next_group_index = self . group_index_lists [ current_group_index] ;
320
320
}
321
321
}
322
-
323
- self . vectorized_equal_to_results
324
- . resize ( self . vectorized_equal_to_group_indices . len ( ) , true ) ;
325
322
}
326
323
327
324
/// Perform `vectorized_equal_to`
328
325
///
329
- ///
330
326
fn vectorized_equal_to ( & mut self , cols : & [ ArrayRef ] ) {
327
+ debug_assert_eq ! (
328
+ self . vectorized_equal_to_group_indices. len( ) ,
329
+ self . vectorized_equal_to_row_indices. len( )
330
+ ) ;
331
+
332
+ if self . vectorized_equal_to_group_indices . is_empty ( ) {
333
+ return ;
334
+ }
335
+
336
+ // Vectorized equal to `cols` and `group columns`
331
337
let mut equal_to_results = mem:: take ( & mut self . vectorized_equal_to_results ) ;
338
+ equal_to_results. resize ( self . vectorized_equal_to_group_indices . len ( ) , true ) ;
332
339
for ( col_idx, group_col) in self . group_values . iter ( ) . enumerate ( ) {
333
340
group_col. vectorized_equal_to (
334
341
& self . vectorized_equal_to_group_indices ,
@@ -337,8 +344,40 @@ impl GroupValuesColumn {
337
344
& mut equal_to_results,
338
345
) ;
339
346
}
347
+
348
+ let mut current_row_equal_to_result = false ;
349
+ let mut current_row = * self . vectorized_equal_to_row_indices . first ( ) . unwrap ( ) ;
350
+ for ( idx, & row) in self . vectorized_equal_to_row_indices . iter ( ) . enumerate ( ) {
351
+ // If found next row, according to the equal to result of `current_row`
352
+ if current_row != row {
353
+ if !current_row_equal_to_result {
354
+ self . vectorized_append_row_indices . push ( row) ;
355
+ }
356
+ current_row = row;
357
+ current_row_equal_to_result = equal_to_results[ idx] ;
358
+ continue ;
359
+ }
360
+ current_row_equal_to_result |= equal_to_results[ idx] ;
361
+ }
362
+
363
+ if !current_row_equal_to_result {
364
+ self . vectorized_append_row_indices . push ( current_row) ;
365
+ }
366
+
340
367
self . vectorized_equal_to_results = equal_to_results;
341
368
}
369
+
370
+ /// Perform `vectorized_append`
371
+ ///
372
+ /// 1. Vectorized append new values into `group_values`
373
+ /// 2. Update `map` and `group_index_lists`
374
+ fn vectorized_append ( & mut self , cols : & [ ArrayRef ] , batch_hashes : & [ u64 ] ) {
375
+ if self . vectorized_append_row_indices . is_empty ( ) {
376
+ return ;
377
+ }
378
+
379
+ // 1. Vectorized append new values into `group_values`
380
+ }
342
381
}
343
382
344
383
/// instantiates a [`PrimitiveGroupValueBuilder`] and pushes it into $v
0 commit comments