Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commitdde5eb2

Browse files
committed
pass correct plan to BeginForeignModify (based on patch#171 by@arssher)
1 parent505fa08 commitdde5eb2

File tree

1 file changed

+25
-13
lines changed

1 file changed

+25
-13
lines changed

‎src/partition_filter.c

Lines changed: 25 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -976,13 +976,18 @@ prepare_rri_fdw_for_insert(ResultRelInfoHolder *rri_holder,
976976
if (fdw_routine->PlanForeignModify)
977977
{
978978
RangeTblEntry*rte;
979-
ModifyTableStatemtstate;
980-
List*fdw_private;
981979
Queryquery;
980+
PlanStatepstate,
981+
*pstate_ptr;
982+
ModifyTableStatemtstate;
982983
PlannedStmt*plan;
984+
985+
/* This is the value we'd like to get */
986+
List*fdw_private;
987+
983988
TupleDesctupdesc;
984-
inti,
985-
target_attr;
989+
inttarget_attr,
990+
i;
986991

987992
/* Fetch RangeTblEntry for partition */
988993
rte=rt_fetch(rri->ri_RangeTableIndex,estate->es_range_table);
@@ -1033,26 +1038,33 @@ prepare_rri_fdw_for_insert(ResultRelInfoHolder *rri_holder,
10331038
target_attr++;
10341039
}
10351040

1036-
/* Create fake ModifyTableState */
1037-
memset((void*)&mtstate,0,sizeof(ModifyTableState));
1041+
/* HACK: plan a fake query for FDW access to be planned as well */
1042+
elog(DEBUG1,"FDW(%u): plan fake query for fdw_private",partid);
1043+
plan=standard_planner(&query,0,NULL);
1044+
1045+
/* HACK: create a fake PlanState */
1046+
memset(&pstate,0,sizeof(PlanState));
1047+
pstate.plan=plan->planTree;
1048+
pstate_ptr=&pstate;
1049+
1050+
/* HACK: create a fake ModifyTableState */
1051+
memset(&mtstate,0,sizeof(ModifyTableState));
10381052
NodeSetTag(&mtstate,T_ModifyTableState);
10391053
mtstate.ps.state=estate;
10401054
mtstate.operation=CMD_INSERT;
1055+
mtstate.mt_plans=&pstate_ptr;
1056+
mtstate.mt_nplans=1;
1057+
mtstate.mt_whichplan=0;
10411058
mtstate.resultRelInfo=rri;
10421059
#ifPG_VERSION_NUM<110000
10431060
mtstate.mt_onconflict=ONCONFLICT_NONE;
10441061
#endif
10451062

1046-
/* Plan fake query in for FDW access to be planned as well */
1047-
elog(DEBUG1,"FDW(%u): plan fake query for fdw_private",partid);
1048-
plan=standard_planner(&query,0,NULL);
1049-
10501063
/* Extract fdw_private from useless plan */
10511064
elog(DEBUG1,"FDW(%u): extract fdw_private",partid);
1052-
fdw_private= (List*)
1053-
linitial(((ModifyTable*)plan->planTree)->fdwPrivLists);
1065+
fdw_private=linitial(((ModifyTable*)plan->planTree)->fdwPrivLists);
10541066

1055-
/* call BeginForeignModify on 'rri' */
1067+
/*HACK:call BeginForeignModify on 'rri' */
10561068
elog(DEBUG1,"FDW(%u): call BeginForeignModify on a fake INSERT node",partid);
10571069
fdw_routine->BeginForeignModify(&mtstate,rri,fdw_private,0,0);
10581070

0 commit comments

Comments
 (0)

[8]ページ先頭

©2009-2025 Movatter.jp