From 9e2e2a7300b8bcd991c50ed29b4c7f6c68ed28b7 Mon Sep 17 00:00:00 2001 From: Onder Kalaci Date: Thu, 25 Oct 2018 21:55:03 +0300 Subject: [PATCH] Make sure to access PARAM_EXTERN accurately in PG 11 PG 11 has change the way that PARAM_EXTERN is processed. This commit ensures that Citus follows the same pattern. For details see the related Postgres commit: https://github.com/postgres/postgres/commit/6719b238e8f0ea83c39d2b1728c7670cdaa34e06 --- .../distributed/planner/distributed_planner.c | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/src/backend/distributed/planner/distributed_planner.c b/src/backend/distributed/planner/distributed_planner.c index 58cb9ca65..1ebe92ddc 100644 --- a/src/backend/distributed/planner/distributed_planner.c +++ b/src/backend/distributed/planner/distributed_planner.c @@ -1563,22 +1563,30 @@ HasUnresolvedExternParamsWalker(Node *expression, ParamListInfo boundParams) /* check whether parameter is available (and valid) */ if (boundParams && paramId > 0 && paramId <= boundParams->numParams) { - ParamExternData *externParam = &boundParams->params[paramId - 1]; - Oid paramType = externParam->ptype; + ParamExternData *externParam = NULL; + Oid paramType = InvalidOid; /* give hook a chance in case parameter is dynamic */ - if (!OidIsValid(paramType) && boundParams->paramFetch != NULL) + if (boundParams->paramFetch != NULL) { #if (PG_VERSION_NUM >= 110000) ParamExternData externParamPlaceholder; externParam = (*boundParams->paramFetch)(boundParams, paramId, false, &externParamPlaceholder); #else - (*boundParams->paramFetch)(boundParams, paramId); + externParam = &boundParams->params[paramId - 1]; + if (!OidIsValid(externParam->ptype)) + { + (*boundParams->paramFetch)(boundParams, paramId); + } #endif - paramType = externParam->ptype; + } + else + { + externParam = &boundParams->params[paramId - 1]; } + paramType = externParam->ptype; if (OidIsValid(paramType)) { return false;