@@ -196,9 +196,7 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
196196RangeTblEntry * rte )
197197{
198198const PartRelationInfo * prel ;
199- RangeTblEntry * * new_rte_array ;
200- RelOptInfo * * new_rel_array ;
201- int len ;
199+ int irange_len ;
202200
203201/* Invoke original hook if needed */
204202if (set_rel_pathlist_hook_next != NULL )
@@ -290,35 +288,34 @@ pathman_rel_pathlist_hook(PlannerInfo *root,
290288}
291289
292290/* Get number of selected partitions */
293- len = irange_list_length (ranges );
291+ irange_len = irange_list_length (ranges );
294292if (prel -> enable_parent )
295- len ++ ;/* add parent too */
293+ irange_len ++ ;/*also add parent */
296294
297295/* Expand simple_rte_array and simple_rel_array */
298- if (len > 0 )
296+ if (irange_len > 0 )
299297{
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 ;
303300
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 * ));
307305
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 * ));
314313
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 * ));
318316
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 ;
322319}
323320
324321/* Parent has already been locked by rewriter */