@@ -196,9 +196,7 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
196
196
RangeTblEntry * rte )
197
197
{
198
198
const PartRelationInfo * prel ;
199
- RangeTblEntry * * new_rte_array ;
200
- RelOptInfo * * new_rel_array ;
201
- int len ;
199
+ int irange_len ;
202
200
203
201
/* Invoke original hook if needed */
204
202
if (set_rel_pathlist_hook_next != NULL )
@@ -290,35 +288,34 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
290
288
}
291
289
292
290
/* Get number of selected partitions */
293
- len = irange_list_length (ranges );
291
+ irange_len = irange_list_length (ranges );
294
292
if (prel -> enable_parent )
295
- len ++ ; /* add parent too */
293
+ irange_len ++ ; /* also add parent */
296
294
297
295
/* Expand simple_rte_array and simple_rel_array */
298
- if (len > 0 )
296
+ if (irange_len > 0 )
299
297
{
300
- /* Expand simple_rel_array and simple_rte_array */
301
- new_rel_array = (RelOptInfo * * )
302
- palloc0 ((root -> simple_rel_array_size + len ) * sizeof (RelOptInfo * ));
298
+ int current_len = root -> simple_rel_array_size ,
299
+ new_len = current_len + irange_len ;
303
300
304
- /* simple_rte_array is an array equivalent of the rtable list */
305
- new_rte_array = (RangeTblEntry * * )
306
- palloc0 ((root -> simple_rel_array_size + len ) * sizeof (RangeTblEntry * ));
301
+ /* Expand simple_rel_array */
302
+ root -> simple_rel_array = (RelOptInfo * * )
303
+ repalloc (root -> simple_rel_array ,
304
+ new_len * sizeof (RelOptInfo * ));
307
305
308
- /* Copy relations to the new arrays */
309
- for (i = 0 ; i < root -> simple_rel_array_size ; i ++ )
310
- {
311
- new_rel_array [i ] = root -> simple_rel_array [i ];
312
- new_rte_array [i ] = root -> simple_rte_array [i ];
313
- }
306
+ memset ((void * ) & root -> simple_rel_array [current_len ], 0 ,
307
+ irange_len * sizeof (RelOptInfo * ));
308
+
309
+ /* Expand simple_rte_array */
310
+ root -> simple_rte_array = (RangeTblEntry * * )
311
+ repalloc (root -> simple_rte_array ,
312
+ new_len * sizeof (RangeTblEntry * ));
314
313
315
- /* Free old arrays */
316
- pfree (root -> simple_rel_array );
317
- pfree (root -> simple_rte_array );
314
+ memset ((void * ) & root -> simple_rte_array [current_len ], 0 ,
315
+ irange_len * sizeof (RangeTblEntry * ));
318
316
319
- root -> simple_rel_array_size += len ;
320
- root -> simple_rel_array = new_rel_array ;
321
- root -> simple_rte_array = new_rte_array ;
317
+ /* Don't forget to update array size! */
318
+ root -> simple_rel_array_size = new_len ;
322
319
}
323
320
324
321
/* Parent has already been locked by rewriter */
0 commit comments