0011-Use-IS_JOIN_REL-instead-of-RELOPT_JOINREL.patch
application/octet-stream
Filename: 0011-Use-IS_JOIN_REL-instead-of-RELOPT_JOINREL.patch
Type: application/octet-stream
Part: 10
Patch
Format: format-patch
Series: patch 0011
Subject: Use IS_JOIN_REL() instead of RELOPT_JOINREL
| File | + | − |
|---|---|---|
| contrib/postgres_fdw/deparse.c | 5 | 5 |
| contrib/postgres_fdw/postgres_fdw.c | 6 | 4 |
| src/backend/foreign/foreign.c | 3 | 3 |
From 59f12da00e6878169559def32adf896e38a00aa4 Mon Sep 17 00:00:00 2001
From: Ashutosh Bapat <ashutosh.bapat@enterprisedb.com>
Date: Wed, 8 Feb 2017 14:42:15 +0530
Subject: [PATCH 11/11] Use IS_JOIN_REL() instead of RELOPT_JOINREL
FDW code uses RELOPT_JOINREL to check whether a given relation is a join or
not. Partition-wise joins create child-join relations, which are marked as
RELOPT_OTHER_JOINREL. Macro IS_JOIN_REL() returns true for both of those kinds,
replace RELOPT_JOINREL tests with IS_JOIN_REL() test.
Similarly replace RELOPT_OTHER_MEMBER_REL test with IS_OTHER_REL() where we
want to test for child relations of all kinds.
---
contrib/postgres_fdw/deparse.c | 10 +++++-----
contrib/postgres_fdw/postgres_fdw.c | 10 ++++++----
src/backend/foreign/foreign.c | 6 +++---
3 files changed, 14 insertions(+), 12 deletions(-)
diff --git a/contrib/postgres_fdw/deparse.c b/contrib/postgres_fdw/deparse.c
index d2b94aa..a2171d7 100644
--- a/contrib/postgres_fdw/deparse.c
+++ b/contrib/postgres_fdw/deparse.c
@@ -911,7 +911,7 @@ deparseSelectStmtForRel(StringInfo buf, PlannerInfo *root, RelOptInfo *rel,
* We handle relations for foreign tables, joins between those and upper
* relations.
*/
- Assert(rel->reloptkind == RELOPT_JOINREL ||
+ Assert(IS_JOIN_REL(rel) ||
rel->reloptkind == RELOPT_BASEREL ||
rel->reloptkind == RELOPT_OTHER_MEMBER_REL ||
rel->reloptkind == RELOPT_UPPER_REL);
@@ -990,7 +990,7 @@ deparseSelectSql(List *tlist, List **retrieved_attrs, deparse_expr_cxt *context)
*/
appendStringInfoString(buf, "SELECT ");
- if (foreignrel->reloptkind == RELOPT_JOINREL ||
+ if (IS_JOIN_REL(foreignrel) ||
foreignrel->reloptkind == RELOPT_UPPER_REL)
{
/* For a join relation use the input tlist */
@@ -1030,7 +1030,7 @@ deparseFromExpr(List *quals, deparse_expr_cxt *context)
/* For upper relations, scanrel must be either a joinrel or a baserel */
Assert(context->foreignrel->reloptkind != RELOPT_UPPER_REL ||
- scanrel->reloptkind == RELOPT_JOINREL ||
+ IS_JOIN_REL(scanrel) ||
scanrel->reloptkind == RELOPT_BASEREL);
/* Construct FROM clause */
@@ -1178,7 +1178,7 @@ deparseLockingClause(deparse_expr_cxt *context)
appendStringInfoString(buf, " FOR UPDATE");
/* Add the relation alias if we are here for a join relation */
- if (rel->reloptkind == RELOPT_JOINREL)
+ if (IS_JOIN_REL(rel))
appendStringInfo(buf, " OF %s%d", REL_ALIAS_PREFIX, relid);
}
else
@@ -1342,7 +1342,7 @@ deparseFromExprForRel(StringInfo buf, PlannerInfo *root, RelOptInfo *foreignrel,
{
PgFdwRelationInfo *fpinfo = (PgFdwRelationInfo *) foreignrel->fdw_private;
- if (foreignrel->reloptkind == RELOPT_JOINREL)
+ if (IS_JOIN_REL(foreignrel))
{
RelOptInfo *rel_o = fpinfo->outerrel;
RelOptInfo *rel_i = fpinfo->innerrel;
diff --git a/contrib/postgres_fdw/postgres_fdw.c b/contrib/postgres_fdw/postgres_fdw.c
index 5d270b9..2487f26 100644
--- a/contrib/postgres_fdw/postgres_fdw.c
+++ b/contrib/postgres_fdw/postgres_fdw.c
@@ -723,6 +723,8 @@ get_useful_ecs_for_relation(PlannerInfo *root, RelOptInfo *rel)
/* If this is a child rel, we must use the topmost parent rel to search. */
if (rel->reloptkind == RELOPT_OTHER_MEMBER_REL)
relids = find_childrel_top_parent(root, rel)->relids;
+ else if (rel->reloptkind == RELOPT_OTHER_JOINREL)
+ relids = rel->top_parent_relids;
else
relids = rel->relids;
@@ -1181,7 +1183,7 @@ postgresGetForeignPlan(PlannerInfo *root,
local_exprs = lappend(local_exprs, rinfo->clause);
}
- if (foreignrel->reloptkind == RELOPT_JOINREL ||
+ if (IS_JOIN_REL(foreignrel) ||
foreignrel->reloptkind == RELOPT_UPPER_REL)
{
/* For a join relation, get the conditions from fdw_private structure */
@@ -1247,7 +1249,7 @@ postgresGetForeignPlan(PlannerInfo *root,
remote_conds,
retrieved_attrs,
makeInteger(fpinfo->fetch_size));
- if (foreignrel->reloptkind == RELOPT_JOINREL ||
+ if (IS_JOIN_REL(foreignrel) ||
foreignrel->reloptkind == RELOPT_UPPER_REL)
fdw_private = lappend(fdw_private,
makeString(fpinfo->relation_name->data));
@@ -2527,7 +2529,7 @@ estimate_path_cost_size(PlannerInfo *root,
&remote_param_join_conds, &local_param_join_conds);
/* Build the list of columns to be fetched from the foreign server. */
- if (foreignrel->reloptkind == RELOPT_JOINREL ||
+ if (IS_JOIN_REL(foreignrel) ||
foreignrel->reloptkind == RELOPT_UPPER_REL)
fdw_scan_tlist = build_tlist_to_deparse(foreignrel);
else
@@ -2609,7 +2611,7 @@ estimate_path_cost_size(PlannerInfo *root,
startup_cost = fpinfo->rel_startup_cost;
run_cost = fpinfo->rel_total_cost - fpinfo->rel_startup_cost;
}
- else if (foreignrel->reloptkind == RELOPT_JOINREL)
+ else if (IS_JOIN_REL(foreignrel))
{
PgFdwRelationInfo *fpinfo_i;
PgFdwRelationInfo *fpinfo_o;
diff --git a/src/backend/foreign/foreign.c b/src/backend/foreign/foreign.c
index fdb4f71..e8ca7df 100644
--- a/src/backend/foreign/foreign.c
+++ b/src/backend/foreign/foreign.c
@@ -717,7 +717,7 @@ GetExistingLocalJoinPath(RelOptInfo *joinrel)
{
ListCell *lc;
- Assert(joinrel->reloptkind == RELOPT_JOINREL);
+ Assert(IS_JOIN_REL(joinrel));
foreach(lc, joinrel->pathlist)
{
@@ -782,7 +782,7 @@ GetExistingLocalJoinPath(RelOptInfo *joinrel)
ForeignPath *foreign_path;
foreign_path = (ForeignPath *) joinpath->outerjoinpath;
- if (foreign_path->path.parent->reloptkind == RELOPT_JOINREL)
+ if (IS_JOIN_REL(foreign_path->path.parent))
joinpath->outerjoinpath = foreign_path->fdw_outerpath;
}
@@ -791,7 +791,7 @@ GetExistingLocalJoinPath(RelOptInfo *joinrel)
ForeignPath *foreign_path;
foreign_path = (ForeignPath *) joinpath->innerjoinpath;
- if (foreign_path->path.parent->reloptkind == RELOPT_JOINREL)
+ if (IS_JOIN_REL(foreign_path->path.parent))
joinpath->innerjoinpath = foreign_path->fdw_outerpath;
}
--
1.7.9.5