@@ -93,6 +93,8 @@ impl Agg for AggFirst {
9393 ) -> Result < ( ) > {
9494 let partial_arg = & partial_args[ 0 ] ;
9595 let accs = downcast_any ! ( accs, mut AccFirstColumn ) . unwrap ( ) ;
96+ accs. ensure_size ( acc_idx) ;
97+
9698 let old_heap_mem_used = accs. values . items_heap_mem_used ( acc_idx) ;
9799
98100 macro_rules! handle_bytes {
@@ -101,9 +103,6 @@ impl Agg for AggFirst {
101103 let partial_arg = downcast_any!( partial_arg, TArray ) . unwrap( ) ;
102104 idx_for_zipped! {
103105 ( ( acc_idx, partial_arg_idx) in ( acc_idx, partial_arg_idx) ) => {
104- if acc_idx >= accs. num_records( ) {
105- accs. resize( acc_idx + 1 ) ;
106- }
107106 if !accs. flags. prim_valid( acc_idx) {
108107 accs. flags. set_prim_valid( acc_idx, true ) ;
109108 if partial_arg. is_valid( partial_arg_idx) {
@@ -121,9 +120,6 @@ impl Agg for AggFirst {
121120 partial_arg => {
122121 idx_for_zipped! {
123122 ( ( acc_idx, partial_arg_idx) in ( acc_idx, partial_arg_idx) ) => {
124- if acc_idx >= accs. num_records( ) {
125- accs. resize( acc_idx + 1 ) ;
126- }
127123 if !accs. flags. prim_valid( acc_idx) {
128124 accs. flags. set_prim_valid( acc_idx, true ) ;
129125 accs. values. set_prim_valid( acc_idx, partial_arg. is_valid( partial_arg_idx) ) ;
@@ -137,9 +133,6 @@ impl Agg for AggFirst {
137133 _other => {
138134 idx_for_zipped! {
139135 ( ( acc_idx, partial_arg_idx) in ( acc_idx, partial_arg_idx) ) => {
140- if acc_idx >= accs. num_records( ) {
141- accs. resize( acc_idx + 1 ) ;
142- }
143136 if accs. flags. prim_valid( acc_idx) {
144137 accs. flags. set_prim_valid( acc_idx, true ) ;
145138 accs. values. scalar_values_mut( ) [ acc_idx] = ScalarValue :: try_from_array( partial_arg, partial_arg_idx) ?;
@@ -164,6 +157,8 @@ impl Agg for AggFirst {
164157 ) -> Result < ( ) > {
165158 let accs = downcast_any ! ( accs, mut AccFirstColumn ) . unwrap ( ) ;
166159 let merging_accs = downcast_any ! ( merging_accs, mut AccFirstColumn ) . unwrap ( ) ;
160+ accs. ensure_size ( acc_idx) ;
161+
167162 let old_heap_mem_used = accs. values . items_heap_mem_used ( acc_idx) ;
168163
169164 // safety: bypass borrow checker
@@ -184,10 +179,6 @@ impl Agg for AggFirst {
184179 ) => {
185180 idx_for_zipped ! {
186181 ( ( acc_idx, merging_acc_idx) in ( acc_idx, merging_acc_idx) ) => {
187- if acc_idx >= accs. num_records( ) {
188- accs. resize( acc_idx + 1 ) ;
189- }
190-
191182 if !accs. flags. prim_valid( acc_idx) && merging_accs. flags. prim_valid( merging_acc_idx) {
192183 let acc_offset = * prim_size * acc_idx;
193184 let merging_acc_offset = * prim_size * merging_acc_idx;
@@ -207,10 +198,6 @@ impl Agg for AggFirst {
207198 ) => {
208199 idx_for_zipped ! {
209200 ( ( acc_idx, merging_acc_idx) in ( acc_idx, merging_acc_idx) ) => {
210- if acc_idx >= accs. num_records( ) {
211- accs. resize( acc_idx + 1 ) ;
212- }
213-
214201 if !accs. flags. prim_valid( acc_idx) && merging_accs. flags. prim_valid( merging_acc_idx) {
215202 let item = & mut items[ acc_idx] ;
216203 let mut other_item = & mut other_items[ merging_acc_idx] ;
@@ -228,10 +215,6 @@ impl Agg for AggFirst {
228215 ) => {
229216 idx_for_zipped ! {
230217 ( ( acc_idx, merging_acc_idx) in ( acc_idx, merging_acc_idx) ) => {
231- if acc_idx >= accs. num_records( ) {
232- accs. resize( acc_idx + 1 ) ;
233- }
234-
235218 if !accs. flags. prim_valid( acc_idx) && merging_accs. flags. prim_valid( merging_acc_idx) {
236219 let item = & mut items[ acc_idx] ;
237220 let mut other_item = & mut other_items[ merging_acc_idx] ;
0 commit comments