diff --git a/src/backend/distributed/operations/delete_protocol.c b/src/backend/distributed/operations/delete_protocol.c index 24763e73b..b5254b545 100644 --- a/src/backend/distributed/operations/delete_protocol.c +++ b/src/backend/distributed/operations/delete_protocol.c @@ -688,6 +688,8 @@ ShardsMatchingDeleteCriteria(Oid relationId, List *shardIntervalList, Assert(deleteCriteria != NULL); List *deleteCriteriaList = list_make1(deleteCriteria); + + /* walk over shard list and check if shards can be dropped */ ShardInterval *shardInterval = NULL; foreach_ptr(shardInterval, shardIntervalList) @@ -703,9 +705,17 @@ ShardsMatchingDeleteCriteria(Oid relationId, List *shardIntervalList, Expr *lessThanExpr = (Expr *) linitial(andExpr->args); Expr *greaterThanExpr = (Expr *) lsecond(andExpr->args); - RestrictInfo *lessThanRestrictInfo = make_simple_restrictinfo(lessThanExpr); - RestrictInfo *greaterThanRestrictInfo = make_simple_restrictinfo( - greaterThanExpr); + /* + * passing NULL for plannerInfo will be problematic if we have placeholder + * vars. However, it won't be the case here because we are building + * the expression from shard intervals which don't have placeholder vars. + * Note that this is only the case with PG14 as the parameter doesn't exist + * prior to that. + */ + RestrictInfo *lessThanRestrictInfo = make_simple_restrictinfo_compat(NULL, + lessThanExpr); + RestrictInfo *greaterThanRestrictInfo = make_simple_restrictinfo_compat(NULL, + greaterThanExpr); restrictInfoList = lappend(restrictInfoList, lessThanRestrictInfo); restrictInfoList = lappend(restrictInfoList, greaterThanRestrictInfo); diff --git a/src/backend/distributed/planner/insert_select_planner.c b/src/backend/distributed/planner/insert_select_planner.c index e7260946f..55559ce58 100644 --- a/src/backend/distributed/planner/insert_select_planner.c +++ b/src/backend/distributed/planner/insert_select_planner.c @@ -747,7 +747,16 @@ RouterModifyTaskForShardInterval(Query *originalQuery, continue; } - shardRestrictionList = make_simple_restrictinfo((Expr *) shardOpExpressions); + + /* + * passing NULL for plannerInfo will be problematic if we have placeholder + * vars. However, it won't be the case here because we are building + * the expression from shard intervals which don't have placeholder vars. + * Note that this is only the case with PG14 as the parameter doesn't exist + * prior to that. + */ + shardRestrictionList = make_simple_restrictinfo_compat(NULL, + (Expr *) shardOpExpressions); extendedBaseRestrictInfo = lappend(extendedBaseRestrictInfo, shardRestrictionList); diff --git a/src/backend/distributed/planner/relation_restriction_equivalence.c b/src/backend/distributed/planner/relation_restriction_equivalence.c index 5cbd2e53d..1d13102fb 100644 --- a/src/backend/distributed/planner/relation_restriction_equivalence.c +++ b/src/backend/distributed/planner/relation_restriction_equivalence.c @@ -2054,7 +2054,7 @@ GetRestrictInfoListForRelation(RangeTblEntry *rangeTblEntry, * If the restriction involves multiple tables, we cannot add it to * input relation's expression list. */ - Relids varnos = pull_varnos((Node *) restrictionClause); + Relids varnos = pull_varnos_compat(relationRestriction->plannerInfo, (Node *) restrictionClause); if (bms_num_members(varnos) != 1) { continue;