@@ -24,6 +24,21 @@ typedef struct
24
24
} PreservedPlanState ;
25
25
26
26
27
+ static void
28
+ free_child_scan_common_array (ChildScanCommon * cur_plans , int n )
29
+ {
30
+ int i ;
31
+
32
+ if (!cur_plans )
33
+ return ;
34
+
35
+ /* We shouldn't free inner objects e.g. Plans here */
36
+ for (i = 0 ; i < n ; i ++ )
37
+ pfree (cur_plans [i ]);
38
+
39
+ pfree (cur_plans );
40
+ }
41
+
27
42
static void
28
43
clear_plan_states (PickyAppendState * scan_state )
29
44
{
@@ -286,8 +301,7 @@ pathman_join_pathlist_hook(PlannerInfo *root,
286
301
IsA (innerrel -> cheapest_total_path , AppendPath ) &&
287
302
(inner_prel = get_pathman_relation_info (inner_entry -> relid , NULL )))
288
303
{
289
- elog (LOG , "adding new path !!!" );
290
- //pprint(innerrel->cheapest_total_path);
304
+ elog (LOG , "adding new nestloop path with pickyappend" );
291
305
}
292
306
else return ;
293
307
@@ -496,12 +510,15 @@ pickyappend_rescan(CustomScanState *node)
496
510
497
511
parts = get_partition_oids (ranges , & nparts , prel );
498
512
513
+ /* Select new plans for this pass */
514
+ free_child_scan_common_array (scan_state -> cur_plans , scan_state -> ncur_plans );
499
515
scan_state -> cur_plans = select_required_plans (scan_state -> children ,
500
516
scan_state -> nchildren ,
501
517
parts , nparts ,
502
518
& scan_state -> ncur_plans );
503
519
pfree (parts );
504
520
521
+ /* Transform selected plans into executable plan states */
505
522
transform_plans_into_states (scan_state ,
506
523
scan_state -> cur_plans ,
507
524
scan_state -> ncur_plans ,
0 commit comments