@@ -57,7 +57,7 @@ index bc05c96b4c..b6a3abe0d2 100644
5757 if (es->format == EXPLAIN_FORMAT_TEXT)
5858 appendStringInfoChar(es->str, '\n');
5959diff --git a/src/backend/nodes/copyfuncs.c b/src/backend/nodes/copyfuncs.c
60- index682b28ed72..3a5c615deb 100644
60+ index692b6c1559..580d04d784 100644
6161--- a/src/backend/nodes/copyfuncs.c
6262+++ b/src/backend/nodes/copyfuncs.c
6363@@ -132,6 +132,7 @@ CopyPlanFields(const Plan *from, Plan *newnode)
@@ -69,7 +69,7 @@ index 682b28ed72..3a5c615deb 100644
6969
7070 /*
7171diff --git a/src/backend/nodes/outfuncs.c b/src/backend/nodes/outfuncs.c
72- index7237b52e96..5e2ee2732a 100644
72+ index21ececf0c2..a0e7a7ebca 100644
7373--- a/src/backend/nodes/outfuncs.c
7474+++ b/src/backend/nodes/outfuncs.c
7575@@ -342,6 +342,7 @@ _outPlanInfo(StringInfo str, const Plan *node)
@@ -81,7 +81,7 @@ index 7237b52e96..5e2ee2732a 100644
8181
8282 /*
8383diff --git a/src/backend/nodes/readfuncs.c b/src/backend/nodes/readfuncs.c
84- index62c945b6c5..a39046ca56 100644
84+ index7976b369ba..604314e0b3 100644
8585--- a/src/backend/nodes/readfuncs.c
8686+++ b/src/backend/nodes/readfuncs.c
8787@@ -1580,6 +1580,11 @@ ReadCommonPlan(Plan *local_node)
@@ -394,7 +394,7 @@ index 917713c163..5b7bf1cec6 100644
394394
395395 /*
396396diff --git a/src/backend/optimizer/plan/planner.c b/src/backend/optimizer/plan/planner.c
397- index60e7fda6a9..5732c7a685 100644
397+ index27c665ac12..f599fba755 100644
398398--- a/src/backend/optimizer/plan/planner.c
399399+++ b/src/backend/optimizer/plan/planner.c
400400@@ -145,7 +145,8 @@ static List *extract_rollup_sets(List *groupingSets);
@@ -407,7 +407,7 @@ index 60e7fda6a9..5732c7a685 100644
407407 grouping_sets_data *gd,
408408 List *target_list);
409409 static RelOptInfo *create_grouping_paths(PlannerInfo *root,
410- @@ -3682 ,7 +3683 ,8 @@ standard_qp_callback(PlannerInfo *root, void *extra)
410+ @@ -3686 ,7 +3687 ,8 @@ standard_qp_callback(PlannerInfo *root, void *extra)
411411 */
412412 static double
413413 get_number_of_groups(PlannerInfo *root,
@@ -417,7 +417,7 @@ index 60e7fda6a9..5732c7a685 100644
417417 grouping_sets_data *gd,
418418 List *target_list)
419419 {
420- @@ -3719 ,7 +3721 ,7 @@ get_number_of_groups(PlannerInfo *root,
420+ @@ -3723 ,7 +3725 ,7 @@ get_number_of_groups(PlannerInfo *root,
421421 GroupingSetData *gs = lfirst_node(GroupingSetData, lc2);
422422 doublenumGroups = estimate_num_groups(root,
423423 groupExprs,
@@ -426,7 +426,7 @@ index 60e7fda6a9..5732c7a685 100644
426426 &gset);
427427
428428 gs->numGroups = numGroups;
429- @@ -3744 ,7 +3746 ,7 @@ get_number_of_groups(PlannerInfo *root,
429+ @@ -3748 ,7 +3750 ,7 @@ get_number_of_groups(PlannerInfo *root,
430430 GroupingSetData *gs = lfirst_node(GroupingSetData, lc2);
431431 doublenumGroups = estimate_num_groups(root,
432432 groupExprs,
@@ -435,7 +435,7 @@ index 60e7fda6a9..5732c7a685 100644
435435 &gset);
436436
437437 gs->numGroups = numGroups;
438- @@ -3760 ,8 +3762 ,8 @@ get_number_of_groups(PlannerInfo *root,
438+ @@ -3764 ,8 +3766 ,8 @@ get_number_of_groups(PlannerInfo *root,
439439 groupExprs = get_sortgrouplist_exprs(parse->groupClause,
440440 target_list);
441441
@@ -446,7 +446,7 @@ index 60e7fda6a9..5732c7a685 100644
446446 }
447447 }
448448 else if (parse->groupingSets)
449- @@ -4147 ,7 +4149 ,8 @@ create_ordinary_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
449+ @@ -4151 ,7 +4153 ,8 @@ create_ordinary_grouping_paths(PlannerInfo *root, RelOptInfo *input_rel,
450450 * Estimate number of groups.
451451 */
452452 dNumGroups = get_number_of_groups(root,
@@ -456,7 +456,7 @@ index 60e7fda6a9..5732c7a685 100644
456456 gd,
457457 extra->targetList);
458458
459- @@ -6931 ,13 +6934 ,15 @@ create_partial_grouping_paths(PlannerInfo *root,
459+ @@ -6935 ,13 +6938 ,15 @@ create_partial_grouping_paths(PlannerInfo *root,
460460 if (cheapest_total_path != NULL)
461461 dNumPartialGroups =
462462 get_number_of_groups(root,
@@ -541,7 +541,7 @@ index a203e6f1ff..d31bf5bae6 100644
541541
542542 return ppi;
543543diff --git a/src/backend/utils/adt/selfuncs.c b/src/backend/utils/adt/selfuncs.c
544- index821844ada3..85b2482114 100644
544+ index37458da096..248a1875a1 100644
545545--- a/src/backend/utils/adt/selfuncs.c
546546+++ b/src/backend/utils/adt/selfuncs.c
547547@@ -147,6 +147,7 @@
@@ -635,18 +635,15 @@ index 5ebf070979..5b2acd7de2 100644
635635
636636
637637diff --git a/src/include/nodes/plannodes.h b/src/include/nodes/plannodes.h
638- index 90f02ce6fd..f3e2138ee2 100644
638+ index 90f02ce6fd..88c332164d 100644
639639--- a/src/include/nodes/plannodes.h
640640+++ b/src/include/nodes/plannodes.h
641- @@ -159,6 +159,12 @@ typedef struct Plan
641+ @@ -159,6 +159,9 @@ typedef struct Plan
642642 */
643643 Bitmapset *extParam;
644644 Bitmapset *allParam;
645645+
646- + /*
647- + * Additional fields for an extension purposes.
648- + * TODO: allow to serialize/deserialize this list.
649- + */
646+ + /* Additional field for an extension purposes. */
650647+ List*ext_nodes;
651648 } Plan;
652649